|

楼主 |
发表于 2020-5-7 15:29:41
|
显示全部楼层
【开源】AIoT LCM平台开发自已的OS内核《三》
本帖最后由 lionel1203 于 2020-5-25 09:22 编辑
接上:
六、参考代码分析
3、paint.c
- /***************************************************************************************
- 版权所有 (C), 2020, 北京迪文科技有限公司
- ***************************************************************************************
- 文 件 名 : paint.c
- 版 本 号 :
- 作 者 :
- 生成日期 : 2020年4月23日
- 功能描述 : 通过GUI核实现图形界面输出;
- 修改历史 :
- 1.日 期 :
- 作 者 :
- 修改内容 :
- ****************************************************************************************/
- #include <stdio.h>
- #include <string.h>
- #include "paint.h"
- static u8 dr_ForeColor[4];
- static u8 dr_BkgColor[4];
- static u8 dr_LineWidth;
- static u8 dr_FontId;//0(12X12),1(16x16),2(24x24),3(32X32);
- static u8 dr_Mode;
- extern u8 xdata send_buffer[260];
- /*********************************************************************************************************
- 初始化绘图相关的参数,前景与背景颜色,线宽,字体,显示模式等参数初始化;
- **********************************************************************************************************/
- void initDraw(void)
- {
- memset(dr_ForeColor,0,4);
- memset(dr_BkgColor,0,4);
- dr_ForeColor[0] = 0xFF;
- dr_BkgColor[2] = 0xFF;
- dr_LineWidth = 0x02;
- dr_FontId = 0x02;
- dr_Mode = 0x00;
- }
- void check800CmdFinished(void)
- {
- u8 ckbuf[4];
- do{
- read_dgus_vp(0x1000,&ckbuf[0],1);
- }while(ckbuf[0] != 0x00 );
- }
- /*********************************************************************************************************
- 通过GUI核绘制文本到指定位置,使用当前字体,前景色和背景色;
- x:位置
- y:位置;
- text:将显示的文字;
- **********************************************************************************************************/
- void drawText(int x,int y,char * text)
- {
- int len;
- len = strlen(text) + 4;
- send_buffer[0] = 0x5A;
- send_buffer[1] = (u8)(len >> 8);
- send_buffer[2] = (u8)len & 0xFF;
-
- switch(dr_FontId){
- case 0:
- send_buffer[3] = 0x6E;
- break;
- case 1:
- send_buffer[3] = 0x54;
- break;
- case 2:
- send_buffer[3] = 0x6F;
- break;
- case 3:
- send_buffer[3] = 0x55;
- break;
- default:
- return;
- }
- send_buffer[4] = (u8)((x >> 8) & 0xFF);
- send_buffer[5] = (u8)(x & 0xFF);
- send_buffer[6] = (u8)((y >> 8) & 0xFF);
- send_buffer[7] = (u8)(y & 0xFF);
- memcpy(&send_buffer[8],text,len - 4);
- len = (len + 5)/2;
-
- check800CmdFinished();
- write_dgus_vp(0x1000,send_buffer,len);
-
- }
- /*********************************************************************************************************
- 通过GUI核显示图片,图片预处理成ICM文件,并存放在指定位置;
- x:位置
- y:位置;
- libid:文件存放的指定位置,通过文件名数字决定;
- picid:文件中的图标ID;
- **********************************************************************************************************/
- void drawPicture(int x,int y,int libid,int picid)
- {
- send_buffer[0] = 0x5A;
- send_buffer[1] = 0x00;
- send_buffer[2] = 0x08;
- send_buffer[3] = 0x97;
- send_buffer[4] = (u8)(x >> 8)& 0xFF;
- send_buffer[5] = (u8)x & 0xFF;
- send_buffer[6] = (u8)( y >> 8 )& 0xFF;
- send_buffer[7] = (u8)y & 0xFF;
- send_buffer[8] = (u8)libid;
-
- if(dr_Mode == 0x00){
- send_buffer[9] = (u8)0x00;
- }
- else
- send_buffer[9] = (u8)0x01;
-
- send_buffer[10] = ( picid >> 8 )& 0xFF;
- send_buffer[11] = picid & 0xFF;
-
- check800CmdFinished();
- write_dgus_vp(0x1000,send_buffer,6);
- }
- /**/
- void switchPage(int id)
- {
- send_buffer[0] = 0x5A;
- send_buffer[1] = 0x00;
- send_buffer[2] = 0x02;
- send_buffer[3] = 0x70;
- send_buffer[4] = 0x00;
- send_buffer[5] = (unsigned char)id;
- check800CmdFinished();
- write_dgus_vp(0x1000,send_buffer,3);
- }
- /*********************************************************************************************************
- 通过GUI核显示局部图片,图片预处理成ICM文件,并存放在指定位置,一般用于背景刷新;
- sx,sy:在源图片中的起点位置
- sw,sh:在源图片中要显示的区域高度和宽度;
- dx,dy:显示在屏幕上的位置,左上角为(0,0);
- picid:文件ID;
- **********************************************************************************************************/
- void drawPartBKGPicture(int sx,int sy,int sw,int sh,int dx,int dy,int picid)
- {
- sw += (sx - 1);
- sh += (sy - 1);
-
- send_buffer[0] = 0x5A;
- send_buffer[1] = 0x00;
- send_buffer[2] = 0x0D;
- send_buffer[3] = 0x71;
- send_buffer[4] = (u8)picid;
- send_buffer[5] = (u8)(sx >> 8)& 0xFF;
- send_buffer[6] = (u8)sx & 0xFF;
- send_buffer[7] = (u8)( sy >> 8 )& 0xFF;
- send_buffer[8] = (u8)sy & 0xFF;
-
- send_buffer[9] = (u8)(sw >> 8)& 0xFF;
- send_buffer[10] = (u8)sw & 0xFF;
- send_buffer[11] = (u8)( sh >> 8 )& 0xFF;
- send_buffer[12] = (u8)sh & 0xFF;
-
- send_buffer[13] = (u8)(dx >> 8)& 0xFF;
- send_buffer[14] = (u8)dx & 0xFF;
- send_buffer[15] = (u8)( dy >> 8 )& 0xFF;
- send_buffer[16] = (u8)dy & 0xFF;
- check800CmdFinished();
- write_dgus_vp(0x1000,send_buffer,9);
- }
- /*********************************************************************************************************
- 通过GUI核绘制矩形,使用当前线宽,前景色与背景色;
- x,y:起点位置
- w,h:矩形的区域高度和宽度;
- **********************************************************************************************************/
- void drawRectangle(int x,int y,int w,int h)
- {
- }
- /*********************************************************************************************************
- 通过GUI核绘制圆,使用当前线宽,前景色与背景色;
- cx,cy:中心位置
- radius:半径;
- **********************************************************************************************************/
- void drawCircle(int cx,int cy,int radius)
- {
- }
- /*********************************************************************************************************
- 通过GUI核设置前景色;
- r,g,b:颜色分量;
- **********************************************************************************************************/
- void setForeground(u8 r,u8 g,u8 b)
- {
- dr_ForeColor[0] = r;
- dr_ForeColor[1] = g;
- dr_ForeColor[2] = b;
- write_dgus_vp(0x0044,dr_ForeColor,2);
- }
- /*********************************************************************************************************
- 通过GUI核设置背景色;
- r,g,b:颜色分量;
- **********************************************************************************************************/
- void setBackground(u8 r,u8 g,u8 b)
- {
- dr_BkgColor[0] = r;
- dr_BkgColor[1] = g;
- dr_BkgColor[2] = b;
- write_dgus_vp(0x0046,dr_BkgColor,2);
- }
- /*********************************************************************************************************
- 通过GUI核设置线宽;
- width:线的宽度;
- **********************************************************************************************************/
- void setLineWidth(int width)
- {
- dr_LineWidth = width;
- }
- /*********************************************************************************************************
- 通过GUI核设置字体;
- fontid:指定的字体;;
- **********************************************************************************************************/
- void setFont(int fontid)
- {
- dr_FontId = fontid;
- }
- /*********************************************************************************************************
- 通过GUI核显示模式;
- mode:指定的显示模式;
- **********************************************************************************************************/
- void setDrawMode(int mode)
- {
- dr_Mode = (u8)mode;
- }
复制代码
4、cmd.c- /***************************************************************************************
- 版权所有 (C), 2020, 北京迪文科技有限公司
- ***************************************************************************************
- 文 件 名 : cmd.c
- 版 本 号 :
- 作 者 :
- 生成日期 : 2020年4月23日
- 功能描述 : 串口2指令解析及执行;
- 修改历史 :
- 1.日 期 :
- 作 者 :
- 修改内容 :
- ****************************************************************************************/
- #include <stdio.h>
- #include <string.h>
- #include "sys.h"
- #include "uart.h"
- #include "cmd.h"
- #include "player.h"
- /* Table of CRC values for high-order byte */
- static const u8 code table_crc_hi[256] = {
- 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
- 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
- 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
- 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
- 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
- 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
- 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
- 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
- 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
- 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
- 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
- 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
- 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
- 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
- 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
- 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
- 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
- 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
- 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
- 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
- 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
- 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
- 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
- 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
- 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
- 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40
- };
- /* Table of CRC values for low-order byte */
- static const u8 code table_crc_lo[256] = {
- 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,
- 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,
- 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
- 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,
- 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,
- 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
- 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,
- 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,
- 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
- 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29,
- 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,
- 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
- 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,
- 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,
- 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
- 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,
- 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,
- 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
- 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,
- 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,
- 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
- 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,
- 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,
- 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
- 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,
- 0x43, 0x83, 0x41, 0x81, 0x80, 0x40
- };
- //发送命令用缓冲区;
- u8 xdata send_buffer[260];
- //系统配置信息;
- static u8 sys_setting;
- unsigned short getUShortFromBuf(u8 * buf);
- /************************************************************************************************
- 初始化,读取命令执行中需要的系统配置信息;
- *************************************************************************************************/
- void initCMD(void)
- {
- u8 buf[12];
- read_dgus_vp(0x0002,buf,6);
- sys_setting = buf[1];
- printf("initCMD>>>sys_setting=\n");
- UART2_SendBuffer(buf,12);
- }
- /*************************************************************************************************
- 添加帧尾到发送命令缓冲区;
- cmdlen:放入到发送缓冲区中的开始偏移;
- 返回:添加完后,发送缓冲区大小;
- **************************************************************************************************/
- int addTail(int cmdlen)
- {
- send_buffer[cmdlen++] = 0xCC;
- send_buffer[cmdlen++] = 0x33;
- send_buffer[cmdlen++] = 0xC3;
- send_buffer[cmdlen++] = 0x3C;
- return cmdlen;
- }
- /*************************************************************************************************
- 添加长整型到发送命令缓冲区;
- cmdlen:放入到发送缓冲区中的开始偏移;
- 返回:添加完后,发送缓冲区大小;
- **************************************************************************************************/
- int addLong(int cmdlen,long value)
- {
- u8 * cvp = (u8*)&value;
- send_buffer[cmdlen++] = cvp[0];
- send_buffer[cmdlen++] = cvp[1];
- send_buffer[cmdlen++] = cvp[2];
- send_buffer[cmdlen++] = cvp[3];
- return cmdlen;
- }
- /*************************************************************************************************
- 添加2字节短整型到发送命令缓冲区;
- cmdlen:放入到发送缓冲区中的开始偏移;
- 返回:添加完后,发送缓冲区大小;
- **************************************************************************************************/
- int addShort(int cmdlen,short value)
- {
- u8 * cvp = (u8*)&value;
- send_buffer[cmdlen++] = cvp[0];
- send_buffer[cmdlen++] = cvp[1];
- return cmdlen;
- }
- /*************************************************************************************************
- 添加字符串到发送命令缓冲区;
- cmdlen:放入到发送缓冲区中的开始偏移;
- 返回:添加完后,发送缓冲区大小;
- **************************************************************************************************/
- int addString(int cmdlen,const char * s)
- {
- while(*s != 0){
- send_buffer[cmdlen++] = *s++;
- if(cmdlen > 251 )
- break;
- }
- return cmdlen;
- }
- /*************************************************************************************************
- 添加缓冲区到发送命令缓冲区;
- cmdlen:放入到发送缓冲区中的开始偏移;
- 返回:添加完后,发送缓冲区大小;
- **************************************************************************************************/
- int addBuffer(int cmdlen,u8 * buff,int len)
- {
- memcpy(&send_buffer[cmdlen],buff,len);
- return cmdlen+len;
- }
- /*************************************************************************************************
- 添加CRC校验数据到发送命令缓冲区;
- cmdlen:放入到发送缓冲区中的开始偏移;
- 返回:添加完后,发送缓冲区大小;
- **************************************************************************************************/
- int addCRC(int cmdlen)
- {
- if( sys_setting & 0x80 ){
- unsigned char tmp;
- int i = 0;
- u8 crc_hi = 0xFF;
- u8 crc_lo = 0xFF;
- while( i < cmdlen ){
- tmp = crc_hi ^ send_buffer[i];
- crc_hi = crc_lo ^ table_crc_hi[tmp];
- crc_lo = table_crc_lo[tmp];
- i++;
- }
- send_buffer[cmdlen++] = crc_hi;
- send_buffer[cmdlen++] = crc_lo;
- return cmdlen;
- }
- return cmdlen;
- }
- /*************************************************************************************************
- 对缓冲区中数据进行CRC校验;
- buf:需校验的数据首地址;
- len:需校验的数据长度;
- 返回:大于0校验成功;等于0没有校验;小于零校验失败;
- **************************************************************************************************/
- int checkCRC(u8 * buf,int len)
- {
- if( sys_setting & 0x80 ){
- unsigned char tmp;
- int i = 0;
- u8 crc_hi = 0xFF;
- u8 crc_lo = 0xFF;
-
- if(len <= 6 )
- return -1;
-
- while( i < len - 6 ){
- tmp = crc_hi ^ send_buffer[i];
- crc_hi = crc_lo ^ table_crc_hi[tmp];
- crc_lo = table_crc_lo[tmp];
- i++;
- }
-
- if(crc_hi != buf[i++] ||
- crc_lo != buf[i] )
- return -1;
- return 1;
- }
- return 0;
- }
- /*************************************************************************************************
- 响应用户的握手请求,发送握手回应给用户;
- **************************************************************************************************/
- void responseUserShakehand(void)
- {
- int cmdlen;
- u8 buf[8];
- send_buffer[0] = 0xAA;
- send_buffer[1] = 0x00;
- cmdlen = addString(2,"OK_V1.0");
- send_buffer[cmdlen++] = 0x00;
- send_buffer[cmdlen++] = 0x00;
-
- read_dgus_vp(0x0002,buf,4);
- cmdlen = addBuffer(cmdlen,&buf[1],5);
- read_dgus_vp(0x0040,buf,2);
- cmdlen = addBuffer(cmdlen,&buf[0],4);
- cmdlen = addCRC(cmdlen);
- cmdlen = addTail(cmdlen);
- UART2_SendBuffer(send_buffer,cmdlen);
- }
- /*************************************************************************************************
- 处理调色板设置命令,根据接收到的数据,自动处理16BIT和24BIT数据;如果是16BIT还需要进行565转24位色;
- buf:包括命令字的命令缓冲区首地址;
- len:命令缓冲区中的数据长度,包含了帧尾;
- **************************************************************************************************/
- void processPaletteSetting(u8 * buf,int len)
- {
- u8 tb[8];
- if( sys_setting & 0x80)
- len -= 6;
- else
- len -= 4;
-
- if(len > 6){
- tb[3] = 0x00;
- memcpy(tb,&buf[1],3);
- write_dgus_vp(0x0044,tb,2);
- memcpy(tb,&buf[4],3);
- write_dgus_vp(0x0046,tb,2);
- }
- else{
- unsigned short c = getUShortFromBuf(&buf[1]);
- tb[3] = 0x00;
- tb[0] = (c & 0xf800) >> 8;
- tb[1] = (c & 0x07e0) >> 3;
- tb[2] = (c & 0x001f) << 3;
-
- write_dgus_vp(0x0044,tb,2);
- c = getUShortFromBuf(&buf[3]);
- tb[0] = (c & 0xf800) >> 8;
- tb[1] = (c & 0x07e0) >> 3;
- tb[2] = (c & 0x001f) << 3;
- write_dgus_vp(0x0046,tb,2);
- }
- }
- /*************************************************************************************************
- 处理显示间隔设置;
- buf:包括命令字的命令缓冲区首地址;
- len:命令缓冲区中的数据长度,包含了帧尾;
- **************************************************************************************************/
- void processDisplayGap(u8 * buf,int len)
- {
- u8 tb[8];
- if(len < 3)
- return;
-
- read_dgus_vp(0x00042,tb,2);
- tb[1] = buf[1];
- tb[2] = buf[2];
- write_dgus_vp(0x0042,tb,2);
- }
- /*************************************************************************************************
- 从缓冲区中获取短整型;
- buf:缓冲区首地址;
- 返回:获取到的短整型数值;
- **************************************************************************************************/
- unsigned short getUShortFromBuf(u8 * buf)
- {
- unsigned short ret = buf[0];
- ret <<= 8;
- ret |= buf[1];
- return ret;
- }
- /*************************************************************************************************
- 回应给用户CRC校验错误;
- **************************************************************************************************/
- void responseCRCError(void)
- {
- int cmdlen;
- send_buffer[0] = 0xAA;
- send_buffer[1] = 0xFF;
- send_buffer[2] = 0x01;
- cmdlen = addCRC(3);
- cmdlen = addTail(cmdlen);
- UART2_SendBuffer(send_buffer,cmdlen);
- }
- /*************************************************************************************************
- 处理GUI内存直接写命令;
- buf:包括命令字的命令缓冲区首地址;
- len:命令缓冲区中的数据长度,包含了帧尾;
- **************************************************************************************************/
- void directWriteGUIMem(u8 * buf,int len)
- {
- int dlen;
- unsigned short addr = 2 * getUShortFromBuf(buf+1);
- if( sys_setting & 0x80 )
- dlen = len - 6;//with crc;
- else
- dlen = len - 4;
-
- dlen = (dlen - 3)/2;
- write_dgus_vp(addr,&buf[3],dlen);
- }
- /*************************************************************************************************
- 处理GUI内存直接读取命令;
- buf:包括命令字的命令缓冲区首地址;
- 返回:获取到的数据直接通过串口发送给用户;
- **************************************************************************************************/
- void directReadGUIMem(u8 * buf)
- {
- int len;
- unsigned short addr = 2 * getUShortFromBuf(buf+1);
- len = getUShortFromBuf(buf+3);
-
- send_buffer[0] = 0xAA;
- send_buffer[1] = 0xC2;
- send_buffer[2] = buf[1];
- send_buffer[3] = buf[2];
-
- read_dgus_vp(addr,&send_buffer[4],len * 2);
- len = len * 4 + 4;
- len = addCRC(len);
- len = addTail(len);
-
- UART2_SendBuffer(send_buffer,len);
- }
- /*************************************************************************************************
- 处理默认的其它命令,直接把这些命令发送给GUI去处理;
- buf:包括命令字的命令缓冲区首地址;
- len:命令缓冲区中的数据长度,包含了帧尾;
- **************************************************************************************************/
- int route2GUIMemDefault(u8 * buf,int len)
- {
- int dlen;
-
- if( sys_setting & 0x80 )//delete the tail and CRC,only send the datas and cmd;
- len -= 6;
- else
- len -= 4;
-
- dlen = len - 1;
- send_buffer[0] = 0x5A;
- send_buffer[1] = (u8)(dlen >> 8);
- send_buffer[2] = (u8)dlen & 0xFF;
- memcpy(&send_buffer[3],buf,len);
- if(len%2)
- dlen = (len + 3)/2;
- else
- dlen = (len + 4)/2;
-
- write_dgus_vp(0x1000,send_buffer,dlen);
- return dlen;
- }
- /*************************************************************************************************
- 检查并发送触摸数据给串口用户;
- **************************************************************************************************/
- void checkAndSendTP2Uart(void)
- {
- u8 buf[8];
- read_dgus_vp(0x0048,buf,4);
-
- if(buf[0] == 0x5A){//the tp is triggered;
-
- processInput(&buf[3]);
- send_buffer[0] = 0x00;
- send_buffer[1] = 0x00;
- write_dgus_vp(0x0048,send_buffer,1);
-
- if(sys_setting & 0x20){
- int len;
- u8 cmd = buf[3];
- //filter by the sys_setting;
- if(sys_setting & 0x40){//on
- if(cmd != 0x78 && cmd != 0x79)
- return;
- }
- else{
- if( cmd != 0x72 && cmd != 0x73)
- return;
- }
-
- if(sys_setting & 0x08){//not send 73/79;
- if( cmd == 0x73 || cmd == 0x79)
- return;
- }
-
- send_buffer[0] = 0xAA;
- send_buffer[1] = cmd;
- memcpy(&send_buffer[2],&buf[4],4);
- len = 2 + buf[1];
- len = addCRC(len);
- len = addTail(len);
- UART2_SendBuffer(send_buffer,len);
- }
- return;
- }
- }
复制代码
|
|