📄 readcardlg.cpp
字号:
{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 + -