📄 dataport.cpp
字号:
#include "DataPort.h"
#include <conio.h>
#include <string.h>
#include "CrcCode.h"
extern CCrcCode gCrcCode;
//Datas格式:Len(2) Status(1) Func(1) Datas(N)
void CDataPort::SendDataPackage(unsigned char *Datas)
{
//发送格式:Pro(4) Sync(2) Len(2) Status(1) Func(1) Datas(N) Crc32(4) Eof(1)
unsigned char Head[6]={0xFF,0xFF,0xFF,0xFF,0xF6,0x28};
unsigned short Len=((Datas[0]<<8)|(Datas[1]&0xFF));
if(Len<6)
{
cprintf("\r\nProgram Error!!!!");
return ;
}
*(unsigned long int *)(Datas+Len-2)=gCrcCode.Crc32Mtt(Datas,Len-2);
Datas[Len+2]=0xFF;
sio_write((char const *)Head,6);
sio_write((char const *)Datas,Len+3);
}
//返回Datas格式:Len(2) Status(1) Func(1) Datas(N)
unsigned char CDataPort::ReceiveDataPackage(unsigned char *Datas)//返回功能码Func,超时5s
{
//接收数据格式:0xFF 0xF6 0x28 Len_H Len_L Status Func Datas(N) Crc32(4)
extern unsigned short int gIntervalTimeout; //每55ms减少1,直到0为止.
extern unsigned char gCharTimeout; //每55ms减少1,直到0为止
signed short ch;
short int Count,PackageLen;
gIntervalTimeout=91;//数据总超时
gCharTimeout=0;
while(gIntervalTimeout)
{
ch=sio_getch();
if(ch>>8) continue;
if(gCharTimeout==0) memset(Datas,0,5);
gCharTimeout=5;
memcpy(Datas,Datas+1,4);
Datas[4]=ch;
if(Datas[0]!=0xFF ||Datas[1]!=0xF6 ||Datas[2]!=0x28) continue;
//接受到数据包头,和长度字节。
Datas[0]=Datas[3];Datas[1]=Datas[4];
PackageLen=((Datas[0]<<8) | Datas[1])+2;
Count=2;
while(gCharTimeout)
{
ch=sio_getch();
if(ch>>8) continue;
gCharTimeout=5;
Datas[Count++]=ch;
if(Count!=PackageLen) continue;
if(*(unsigned long int *)(Datas+Count-4)==gCrcCode.Crc32Mtt(Datas,Count-4))
{
return Datas[3];
}
else cprintf("CRCR Error ");
}
}
// cprintf(" Over Time ");
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -