1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- /********************************************************************************
- * File Name: MBCross.c
- * Function Describe: 用于与主板通讯
- * Explain:
- * Writer:SLW
- * Date:
- ********************************************************************************/
- #define THIS_FILE_ID 10
-
- #include "includes.h"
-
- sendTestdat_t sutTestData;
- /****************************************************************************
- DecodecFromMB
- 将主板(RS485)发过来的数据pData解码到pSendTest中
- pData格式:
- 起始码(2Byte)+数据长度(1Byte)+国家(1Byte)+省份(1Byte)+地区(1Byte)+ 船东(1Byte)+GPRS开/关(1Byte)+北斗开/关(1Byte)
- +渔船号码(13Byte)+地址码(1Byte)+类型(1Byte)+状态码(1Byte)+防盗码(5Byte)+预留位(4Byte)+校验码(2Byte)
- 例子:
- AA BB len 01 02 03 04 05 06 01020304050607080900010203070809 xx yy zz 1122334455 66778899 DD 55
- 返回:
- 1-- 解析成功
- 0-- 解析失败
- *****************************************************************************/
- int DecodecFromMB(unsigned char *pData,sendTestdat_t *pSendTest)
- {
- char buf[20];
- int i,j;
- int flag=0;
- int len=pData[2];
- if(len<22)return 0;
- //if(pData[0]!=0xAA || pData[1]!=0xBB || pData[len-2]!=0xDD ||pData[len-1]!=0x55){
- if(pData[len-2]!=0xDD ||pData[len-1]!=0x55){//pData[0] pData[1] 在进入本函数的时候已经检查了
- SlwTrace(DEBUG,"Decodec From MB Error!\r\n");
- return 0;
- }
- SlwTrace(DEBUG,"Decodec From MB OK!\r\n");
- tsk_lock ();//涉及到全局变量在不同任务中共享,就要加任务锁,避免修改全局变量未完成时切换到别的任务去调用全局变量,从而导致数据完整性问题。
- j=0;
- //红外总使能状态
- if(pSendTest->Infrared!=pData[20])flag=1;
- pSendTest->Infrared=pData[20];
- //摄像头总使能状态
- if(pSendTest->Camera!=pData[21])flag=1;
- pSendTest->Camera=pData[21];
- len=len-2;
- if(len>TC_DATA_MAX_LEN)len=TC_DATA_MAX_LEN;
- for(i=22;i<len;i++){
- if(pSendTest->TcData[j]!=pData[i])flag=1;
- pSendTest->TcData[j]=pData[i];
- if(j<(sizeof(pSendTest->TcData)-1))j++;
- else break;
- }
- if(pSendTest->TcLen!=j)flag=1;
- pSendTest->TcLen=j;
- if(flag==1){//发生变化,需要立即更新上传
- pSendTest->TcUpdated=1;
- }
- pSendTest->RecvReady=1;
- pSendTest->OnceRecvFlag=1;
- pSendTest->RecvIdelCt=0;
- tsk_unlock ();
- sprintf(buf,"TcLen=%d\r\n",j);
- SlwTrace(DEBUG,buf);
- return 1;
- }
- /*
- 发送命令给主机
- //0x01表示关闭红外探测器,0x02表示打开红外探测器,0x03表示关闭视频模块,0x04表示打开视频模块,占1个字节,0x05表示软件复位
- */
- void SendCmdToMB(unsigned char Cmd)
- {
- unsigned char data[4];
- data[0]=0xAA;
- data[1]=0xBB;
- data[2]=Cmd;
- data[3]=Cmd;
- Uart1Send((char *)data,4);
- }
|