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

📄 readcardlg.cpp

📁 我写的一个串口通讯的程序,该程序可以将收到的命令和文本重的程序进行比较,再将数据发回,适合通讯设备和电脑的通讯
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	{0x03,0x7C,0xA3,0x11},
    {0x02,0x7B,0xA3},  
	{0x03,0x7C,0xA0,0x00}, 
	{0x06,0x7C,0xA8,0x35,0x32,0x57,0x37},
	{0x06,0x7C,0xA5,0x04,0x02,0x04,0x04,0x02,0x02},  
    {0x02,0x7B,0xA8},  
    {0x08,0x6A,0x13,0x06,0x32,0x34,0x34,0x32,0x32},
	{0x06,0x7C,0x1a,0x34,0x32,0x34,0x34,0x32,0x32},  
	{0x06,0x7C,0x1b,0x34,0x32,0x34,0x34,0x32,0x32},  
	{0x06,0x7C,0x1c,0x34,0x32,0x34,0x34,0x32,0x32},  
	{0x02,0x7b,0x1a},  
	{0x02,0x7b,0x1b},  
	{0x02,0x7b,0x1c},  
    {0x00},
    {0x03,0x7B,0x90},  
	{0x02,0x7B,0x84}, 
	{0x02,0x7B,0x85},  
    {0x06,0x7B,0x90,0x00,0x00,0x00,0x00,0x00},  
	{0x03,0x7C,0x81,0x08},
	{0x02,0x7C,0x81},
	{0x02,0x7B,0x86},
	{0x02,0x7B,0x89},
	{0x02,0x7B,0x91},
	{0x02,0x7B,0x94},
	{0x02,0x7B,0x97},
	{0x02,0x7B,0x98},
    {12,0x7B,0x88,0x34,0x35,0x32,0x34,0x36,0x34,0x35,0x32,0x34,0x36},  
};
BOOL CReadCARDlg::ComparaCommand(char *data)
{
/*
	if(data[0]!=0x01)
	{
		AddAnswer(&data[1],answer[0]);
		return 65535;
	}
*/
   for(int i=0;i<COMMANDTOTAL;i++)
   {
	   int j=0;
	   if(data[1]-4==requset[i][0])
	   for(j=5;j<=data[1];j++)
	   {
		  if(data[j]!=requset[i][j-4])break;
//		  if(j>8)break;
	   }
	   if(j>data[1])break;
   }
   if(i<COMMANDTOTAL)return i;
   else return 65534;
}

static BYTE highcode=0x92;
static BYTE lowcode=0x50;

BOOL CReadCARDlg::senddata(char *data)
{
	char ch,i;
	BOOL count=ComparaCommand(data);
	char queIM[8]={0x01,0x06,0x68,0x6A,0xF1,0x01,0x01,0x0A};
	char ansIM[13]={0x01,0x01,0x0A,0x48,0x6B,0x10,0x41,0x01,0x80,0x00,0x00,0x00,0xF5};
	if(data[2]==0x68&&data[3]==0x6a)
	{
		ansIM[12]=CheckCalCulation(&ansIM[3],9);
		for(int i=0;i<13;i++)OnTxdata(ansIM[i]);
		return true;
	}
	if(count==65535)return true;
    if(count==65534)return false;
	BaseSendShow(count);
	static int fi=0;
    switch(count)
	{
	case 1:
	case 2:
	case 4:
	case 6:
	case 7:
		OnTxdata(1);
		ChangeCode(data,5,count,1);
		AddAnswer(&data[1],answer[count]);
		break;
	case 3:
		OnTxdata(1);
		if(fi++%2==0)
		{
			highcode=0x00;
			lowcode=0xff;
			answer[count][4]=0xff;
		}
		else
		{
			highcode=0x11;
			lowcode=0x05;
			answer[count][4]=0x25;
		}
		ChangeCode(data,2,count);
		break;
//	case 4:
		OnTxdata(15);
	    for(i=0;i<14;i++)
		{
			OnTxdata(1);
			AddAnswer(&data[1],codestate[i]);
		    if(ReceiveOneByte(ch,1000)&&ch==0x55);
			else return false;
		}
		OnTxdata(1);
		AddAnswer(&data[1],answer[count]);
        break;
	case 12:
		OnTxdata(10);
	    for(i=0;i<10;i++)
		{
			OnTxdata(1);
			AddAnswer(&data[1],fff1[i]);
			if(i==9)break;
		    if(ReceiveOneByte(ch,1000)&&ch==0x55);
			else return false;
		}
		break;
	case 14:
		OnTxdata(0x11);
	    for(i=0;i<11;i++)
		{
//		    if(i!=0)fff3[i][2]=data[8];
			OnTxdata(1);
			AddAnswer(&data[1],fff3[i]);
			if(i==10)
	            break;
		    if(ReceiveOneByte(ch,1000)&&ch==0x55);
			else return false;
		}
		break;
	case 15:
	case 42:
	case 43:
	case 44:
	case 45:
	case 46:
	case 47:
	case 48:
	case 49:
		OnTxdata(10);
	    for(i=0;i<10;i++)
		{
			fff2[i][2]=data[6];
			OnTxdata(1);
			AddAnswer(&data[1],fff2[i]);
			if(i==9)
	            break;
		    if(ReceiveOneByte(ch,1000)&&ch==0x55);
			else return false;
		}
		break;
	case 21:
		OnTxdata(1);
		OnTxdata(6);
	    for(i=0;i<6;i++)AddAnswer(&data[1],chasissinfo[i]);
		break;
	case 28:
	case 31:
	case 34:
	case 38:
	case 41:
	case 22:
		OnTxdata(1);
	    for(i=0;i<1;i++)
		{
			OnTxdata(1);
			AddAnswer(&data[1],data1[i%1]);
			if(i==0)break;
		    if(ReceiveOneByte(ch,1000)&&ch==0x55);
			else return false;
		}
		break;
	case 55:
	case 56:
	case 65:
	case 64:
		OnTxdata(11);
	    for(i=0;i<11;i++)
		{
			OnTxdata(1);
			AddAnswer(&data[1],chassisdata[i%4]);
			if(i==10)break;
		    if(ReceiveOneByte(ch,1000)&&ch==0x55);
			else return false;
		}
		break;
	case 66:
		OnTxdata(11);
	    for(i=0;i<11;i++)
		{
			OnTxdata(1);
			AddAnswer(&data[1],ACdata1[i%3]);
			if(i==10)break;
		    if(ReceiveOneByte(ch,1000)&&ch==0x55);
			else return false;
		}
		break;
	case 57:
		OnTxdata(11);
	    for(i=0;i<11;i++)
		{
			OnTxdata(1);
			AddAnswer(&data[1],SRSdata1[i%3]);
			if(i==10)break;
		    if(ReceiveOneByte(ch,1000)&&ch==0x55);
			else return false;
		}
		break;
	case 58:
		OnTxdata(11);
	    for(i=0;i<11;i++)
		{
			OnTxdata(1);
			AddAnswer(&data[1],SRSdata2[i%3]);
			if(i==10)break;
		    if(ReceiveOneByte(ch,1000)&&ch==0x55);
			else return false;
		}
		break;
	case 59:
	case 60:
		OnTxdata(11);
	    for(i=0;i<11;i++)
		{
			OnTxdata(1);
			AddAnswer(&data[1],SRSdata3[i%2]);
			if(i==10)break;
		    if(ReceiveOneByte(ch,1000)&&ch==0x55);
			else return false;
		}
		break;
	case 61:
	case 68:
		OnTxdata(11);
	    for(i=0;i<11;i++)
		{
			OnTxdata(1);
			AddAnswer(&data[1],ICdata1[i%3]);
			if(i==10)break;
		    if(ReceiveOneByte(ch,1000)&&ch==0x55);
			else return false;
		}
		break;
	case 62:
	case 63:
	case 30:
	case 70:
	case 71:
	case 72:
	case 11:
	case 73:
		OnTxdata(11);
	    for(i=0;i<11;i++)
		{
			OnTxdata(1);
    		AddAnswer(&data[1],answer[count]);
			if(i==10)break;
		    if(ReceiveOneByte(ch,1000)&&ch==0x55);
			else return false;
		}
		break;
	case 69:
	case 67:
		OnTxdata(11);
	    for(i=0;i<11;i++)
		{
			OnTxdata(1);
			AddAnswer(&data[1],Bodydata1[i%3]);
			if(i==10)break;
		    if(ReceiveOneByte(ch,1000)&&ch==0x55);
			else return false;
		}
		break;
	case 94:
		OnTxdata(11);
	    for(i=0;i<11;i++)
		{
			OnTxdata(1);
			AddAnswer(&data[1],radiodata[i%6]);
			if(i==10)break;
		    if(ReceiveOneByte(ch,1000)&&ch==0x55);
			else return false;
		}
		break;
	default:
		Sleep(10);
		OnTxdata(0x01);
		OnTxdata(0x01);
		AddAnswer(&data[1],answer[count]);
		break;
	}
	return true;
}

void CReadCARDlg::MoniData()
{
     int num=0;
	 char buf[2000];
	 memset(buf,0,2000);
	 num=combass.ReadCommBlock(buf,2000,&info);
	 if(num)for(int i=0;i<num;i++)BassSendRec(buf[i]);
}

void CReadCARDlg::OnSetvaule() 
{
}
static tab=0x0;
static commandnum=0;

void CReadCARDlg::OnButton3() 
{
  tab+=3;
  if(ACdata1[commandnum][tab]==0)
      ACdata1[commandnum][tab]=ACdata1[commandnum][tab]++;
  else
      ACdata1[commandnum][tab]=ACdata1[commandnum][tab]*2;
  if(ACdata1[commandnum][tab]==0)
	  ACdata1[commandnum][tab]=0xff;
  CString data;
  data.Format("0x%x",(BYTE)ACdata1[commandnum][tab]);
  m_tab.SetWindowText(data);
  tab-=3;
/*
  lowcode++;
  CString data;
  data.Format("0x%x",(BYTE)lowcode);
  m_tab.SetWindowText(data);
  */
}

BYTE CReadCARDlg::CheckCalCulation(char *Msg,BYTE len)
{
 BYTE CRC;
 BYTE Bit_Cnt,Bit8,Data;
 BYTE i=0;
// Msg[0]=0x41;
// Msg[1]=0x6b;
// Msg[2]=0x56;
// Msg[3]=0x41;
// Msg[4]=0x00;
// len=5;
 CRC=Msg[i]^0xff;
 Msg[len]=0x00;
 while(++i<=len)
 {
	 Data=Msg[i];
	 for(Bit_Cnt=8;Bit_Cnt;Bit_Cnt--)
	 {
		 Bit8=CRC&0x80;
		 if(Data&0x80)CRC=(CRC<<1)|0x01;
		 else CRC=(CRC<<1)&0xFE;
		 if(Bit8)CRC^=0x1d;
		 Data=Data<<0x01;
	 }
 }
 Msg[len]=CRC^0xff;
 return Msg[len];
}


//include this frame long ,no frame number
BOOL CReadCARDlg::AddAnswer(char *data,char *answ)
{
	int len=0;
	char ch=0;
	char buffer[30]={0x03,0x6c,0x10,0xF1};
	len=buffer[0]=buffer[0]+answ[0]+1;//len
	buffer[1]=data[1];
	buffer[2]=data[3];
	buffer[3]=data[2];
	for(int i=1;i<=answ[0];i++)buffer[i+3]=answ[i];
    for(i=0;i<len;i++)OnTxdata(buffer[i]);
	OnTxdata(CheckCalCulation(&buffer[1],len-1));
	return true;
}

void CReadCARDlg::ChangeCode(char *data, char circlenum,char commandcount,BYTE last)
{
	static time=1;
	int count=commandcount;
	OnTxdata(circlenum);
	answer[count][2]=highcode;
	answer[count][3]=lowcode;
	for(int i=0;i<circlenum-(bool)last;i++)
	{
		if((BYTE)++answer[count][3]%16>9)answer[count][3]=(BYTE)answer[count][3]+6;
		if((BYTE)answer[count][3]>0x99)
		{	
		    answer[count][3]=0;
			if(((BYTE)++answer[count][2])%16>9)answer[count][2]=(BYTE)answer[count][2]+6;
		} 
		AddAnswer(&data[1],answer[count]);
	}
    if((time=++time%4)==0)
	   highcode=(BYTE)answer[count][2],lowcode=(BYTE)answer[count][3];
	 answer[count][3]=0,answer[count][2]=0;
}
void CReadCARDlg::OnInout() 
{
      tab=(tab+1)%6;
	  CString data;
	  data.Format("0x%x",(BYTE)tab+7);
	  m_inout.SetWindowText(data);

/*
  highcode++;
  CString data;
  data.Format("0x%x",(BYTE)highcode);
  m_inout.SetWindowText(data);
  */
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -