📄 protocol.c.bak
字号:
if(flags != 0x01)
{
if( deviceAddr == pcdata[1] ) //本机地址执行
resp_para_err(); //块号参数超出标签允许值
}
else
{
flags = ISOFlagsSys|0x20; //address_flag
viccdata[0] = 13;
viccdata[1] = flags;
viccdata[2] = Select_cmd;
for(i=3,j=12;i<11;i++,j--) {viccdata[i] = pcdata[j];}
wr_crc_send();
ISOMode = ISOModeSys;
i = sendISOCmd();
CS_RAM_1;
if( deviceAddr == pcdata[1] ) //本机地址执行
{
if(i==0) //标签没有返回
resp_no_trns();
else
{
if(viccdata[1]==0) //成功执行
{
pcdata[0] = 6;
pcdata[1] = deviceAddr;
pcdata[2] = ISO_MANDATORY_CMD;
pcdata[3] = OK;
wr_crc_resp();
}
else //标签返回ISO错误
resp_iso_err();
}
}
}
}
/***************************************************/
void reset_ready_pro(void)
{
uchar flags,len,addr;
uchar i,j;
uchar flag =0;
addr = pcdata[1];
flags = pcdata[4]&0x07;
if((flags==0)||(flags==2)) //不带uid
{
if(flags==0) { flags = ISOFlagsSys&0xcf;}
else { flags = ISOFlagsSys|0x10;} //select_flag
viccdata[0] = 5;
viccdata[1] = flags;
viccdata[2] = Reset_rdy_cmd;
}
else if(flags ==1)
{
flags = ISOFlagsSys|0x20; //address_flag
viccdata[0] = 13;
viccdata[1] = flags;
viccdata[2] = Reset_rdy_cmd;
for(i=3,j=12;i<11;i++,j--) {viccdata[i] = pcdata[j];}
}
else
flag = 1;
if(flag==1)
{
if( deviceAddr == pcdata[1] )//本机地址执行
resp_para_err();
}
else
{
wr_crc_send();
ISOMode = ISOModeSys;
j = sendISOCmd();
CS_RAM_1;
if(deviceAddr == pcdata[1] ) //本机地址执行
{
if(j==0) // 标签没有返回
resp_no_trns();
else if(viccdata[1] == 0) // 正确返回
{
pcdata[0] = 6;
pcdata[1] = deviceAddr;
pcdata[2] = ISO_MANDATORY_CMD;
pcdata[3] = OK;
wr_crc_resp();
}
else // 标签返回ISO错误
resp_iso_err();
}
}
}
/***************************************************/
void wr_AFI_pro(void)
{
uchar flags,addr;
uchar i,j;
uchar flag =0;
addr = pcdata[1];
flags = pcdata[4]&0x07;
if((flags==0)||(flags==2)) //不带uid
{
if(flags==0) { flags = ISOFlagsSys&0xcf;}
else { flags = ISOFlagsSys|0x10;} //select_flag
flags |= 0x40; //option_flag
viccdata[0] = 6;
viccdata[1] = flags;
viccdata[2] = Wr_AFI_cmd;
viccdata[3] = pcdata[5]; //afi
}
else if(flags ==1) //带uid
{
flags = ISOFlagsSys|0x20; // addess_flag
flags |= 0x40; //option_flag=1
viccdata[0] = 14;
viccdata[1] = flags;
viccdata[2] = 0x27;
for(i=3,j=12;i<11;i++,j--) {viccdata[i] = pcdata[j];}
viccdata[11] = pcdata[13];//afi
}
else
flag = 1;
if(flag==1) //mode error
{
if( deviceAddr == pcdata[1] ) //本机地址执行
resp_para_err();
}
else
{
wr_crc_send();
ISOMode = ISOModeSys|0x10; //write
j = sendISOCmd();
CS_RAM_1;
if( deviceAddr == pcdata[1]) //本机地址执行
{
if(j==0) //标签没有返回
resp_no_trns();
else if(viccdata[1] == 0) // 正确返回
{
pcdata[0] = 6;
pcdata[1] = deviceAddr;
pcdata[2] = ISO_MANDATORY_CMD;
pcdata[3] = OK;
wr_crc_resp();
}
else // 标签返回ISO错误
resp_iso_err();
}
}
}
void lock_AFI_pro(void)
{
uchar flags,len,addr;
uchar i,j;
uchar flag =0;
addr = pcdata[1];
flags = pcdata[4]&0x07;
if((flags==0)||(flags==2)) //不带uid
{
if(flags==0) { flags = ISOFlagsSys&0xcf;}
else { flags = ISOFlagsSys|0x10;} //select_flag
flags |= 0x40; //option_flag
viccdata[0] = 5;
viccdata[1] = flags;
viccdata[2] = 0x28;
}
else if(flags ==1) //带uid
{
flags = ISOFlagsSys|0x20; // address
flags |= 0x40; //option_flag
viccdata[0] = 13;
viccdata[1] = flags;
viccdata[2] = 0x28;
for(i=3,j=12;i<11;i++,j--) {viccdata[i] = pcdata[j];}
}
else
flag = 1;
if(flag==1)
{
if( deviceAddr==pcdata[1] ) //本机地址执行
resp_para_err();
}
else
{
wr_crc_send();
ISOMode = ISOModeSys | 0x10; //write
j = sendISOCmd();
CS_RAM_1;
if( deviceAddr==pcdata[1] ) //本机地址执行
{
if(j==0) // 标签没有返回
resp_no_trns();
else if(viccdata[1] == 0) // 正确返回
{
pcdata[0] = 6;
pcdata[1] = deviceAddr;
pcdata[2] = ISO_MANDATORY_CMD;
pcdata[3] = OK;
wr_crc_resp();
}
else // 标签返回ISO错误
resp_iso_err();
}
}
}
/***************************************************/
void wr_DSFID_pro(void)
{
uchar flags,len,addr;
uchar i,j;
uchar flag =0;
addr = pcdata[1];
flags = pcdata[4]&0x07;
if((flags==0)||(flags==2)) //不带uid
{
if(flags==0) { flags = ISOFlagsSys&0xcf;}
else { flags = ISOFlagsSys|0x10;} //select_flag
flags |= 0x40; //option_flag
viccdata[0] = 6;
viccdata[1] = flags;
viccdata[2] = Wr_DSFID_cmd;
viccdata[3] = pcdata[5];
}
else if(flags ==1) //带uid
{
flags = ISOFlagsSys|0x20;
flags |= 0x40; //option_flag
viccdata[0] = 14;
viccdata[1] = flags;
viccdata[2] = Wr_DSFID_cmd;
for(i=3,j=12;i<11;i++,j--) {viccdata[i] = pcdata[j];}
viccdata[11] = pcdata[13];
}
else
{
flag = 1;
}
if(flag==1)
{
if( deviceAddr==pcdata[1] ) //本机地址执行
{
resp_para_err();
}
}
else
{
wr_crc_send();
ISOMode = ISOModeSys | 0x10; //write
j = sendISOCmd();
CS_RAM_1;
if( deviceAddr==pcdata[1] ) //本机地址执行
{
if(j==0) // 标签没有返回
{
resp_no_trns();
}
else if(viccdata[1] == 0) // 正确返回
{
pcdata[0] = 6;
pcdata[1] = deviceAddr;
pcdata[2] = ISO_MANDATORY_CMD;
pcdata[3] = OK;
wr_crc_resp();
}
else //标签返回ISO错误
resp_iso_err();
}
}
}
/***************************************************/
void lock_DSFID_pro(void)
{
uchar flags,len,addr;
uchar i,j;
uchar flag =0;
addr = pcdata[1];
flags = pcdata[4]&0x07;
if((flags==0)||(flags==2)) //不带uid
{
if(flags==0) { flags = ISOFlagsSys&0xcf;}
else { flags = ISOFlagsSys|0x10;} //select_flag
flags |= 0x40; //option_flag
viccdata[0] = 5;
viccdata[1] = flags;
viccdata[2] = 0x2a;
}
else if(flags ==1) //带uid
{
flags = ISOFlagsSys|0x20; //address_flag
flags |= 0x40; //option_flag
viccdata[0] = 13;
viccdata[1] = flags;
viccdata[2] = 0x2a;
for(i=3,j=12;i<11;i++,j--) {viccdata[i] = pcdata[j];}
}
else
flag = 1;
if(flag==1)
{
if( deviceAddr==pcdata[1] ) //本机地址执行
resp_para_err();
}
else
{
wr_crc_send();
ISOMode = ISOModeSys | 0x10; //write
j = sendISOCmd();
CS_RAM_1;
if( deviceAddr==pcdata[1] ) //本机地址执行
{
if(j==0) //标签没有返回
resp_no_trns();
else if(viccdata[1] == 0) // 正确返回
{
pcdata[0] = 6;
pcdata[1] = deviceAddr;
pcdata[2] = ISO_MANDATORY_CMD;
pcdata[3] = OK;
wr_crc_resp();
}
else //标签返回ISO错误
resp_iso_err();
}
}
}
/***************************************************/
void get_info_pro(void)
{
uchar flags,len,addr;
uchar i,j;
uchar flag = 0;
addr = pcdata[1];
flags = pcdata[4]&0x07;
if((flags==0)||(flags==2)) //不带uid
{
if(flags==0) { flags = ISOFlagsSys&0xcf;}
else { flags = ISOFlagsSys|0x10;} //select_flag
viccdata[0] = 5;
viccdata[1] = flags;
viccdata[2] = Get_sysInf_cmd;
}
else if(flags ==1) //带uid
{
flags = ISOFlagsSys|0x20; // address_flag
viccdata[0] = 13;
viccdata[1] = flags;
viccdata[2] = Get_sysInf_cmd;
for(i=3,j=12;i<11;i++,j--) {viccdata[i] = pcdata[j];}
}
else
flag = 1;
if(flag==1)
{
if( deviceAddr==pcdata[1]) //本机地址执行
resp_para_err(); //块号参数超出标签允许值
}
else
{
wr_crc_send();
ISOMode = ISOModeSys; //read
i = sendISOCmd();
CS_RAM_1;
if(i==0) { resp_no_trns(); }
else
{
if(viccdata[1]==0)
{
pcdata[0] = 19;
pcdata[1] = deviceAddr;
pcdata[2] = ISO_MANDATORY_CMD;
pcdata[3] = OK;
pcdata[4] = viccdata[11]; //DSFID*/
for(i=5,j=10;i<13;i++,j--) {pcdata[i] = viccdata[j];}
pcdata[13] = viccdata[12]; //AFI
pcdata[14] = viccdata[13] ++; //block size
pcdata[15] = viccdata[14] ++; //num block
pcdata[16] = viccdata[15]; //ic_ref
wr_crc_resp();
}
else { resp_iso_err(); }
}
}
}
/***************************************************/
void get_mul_sec_pro(void)
{
uchar flags,len,n_b,addr;
uchar i,j;
uchar flag =0;
addr = pcdata[1];
flags = pcdata[4]&0x07;
if( (flags==0)||(flags==2) ) //不带uid
{
if(pcdata[5] >63) { flag = 1;}
if(pcdata[6] >32) { flag = 1;} //最多一次读取32个块
if(flag == 0)
{
if(flags==0) { flags = ISOFlagsSys&0xcf;}
else { flags = ISOFlagsSys|0x10;} //select_flag
n_b = pcdata[6] ; //040311
viccdata[0] = 7;
viccdata[1] = flags;
viccdata[2] = Get_mulBSS_cmd;
viccdata[3] = pcdata[5] ;
viccdata[4] = pcdata[6] ;
}
}
else if(flags==1) //带uid
{
if(pcdata[13] >63) { flag = 1;}
if(pcdata[14] >32) { flag = 1;} //最多一次读取32个块
if(flag==0)
{
n_b = pcdata[14] ; //040311
flags = ISOFlagsSys | 0x20; //address_flag
viccdata[0] = 15;
viccdata[1] = flags;
viccdata[2] = Get_mulBSS_cmd;
for(i=3,j=12;i<11;i++,j--) {viccdata[i] = pcdata[j];}
viccdata[11] = pcdata[13];
viccdata[12] = pcdata[14];
}
}
else { flag = 1;}
if( deviceAddr == pcdata[1] ) //本机地址执行
{
if(flag == 1) //块号参数超出标签允许值
resp_para_err(); //块号参数超出标签允许值
else
{
wr_crc_send();
ISOMode = ISOModeSys;
i = sendISOCmd();
CS_RAM_1;
if(i==0) { resp_no_trns(); }
else
{
if(viccdata[1]==0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -