⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dataport.cpp

📁 运行环境:DOS, 通过串口升级的下位程序, 需配合上位升级程序FileUpgrade运行, 可用于嵌入式DOS系统中.
💻 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 + -