📄 ic_card.c
字号:
} printf("\nREAD File:\n"); for(i=0;i<(len+3);i++) printf("%x ",apdu.DATA_READ[i]);}void Tid_Card_Collect(BYTE ic_unit,BYTE *data){ BYTE return_value,count = 0,i=0,waiting =1,code; _Set_Reg_Value((ic_unit ? IC1_TXDB_REG:IC0_TXDB_REG),0xC0); //Write command type to IC card return_value = IC_StrReg_Srv_Fun(); _Set_Reg_Value((ic_unit ? IC1_TXDB_REG:IC0_TXDB_REG),0xE6); //Write instruction to IC card return_value = IC_StrReg_Srv_Fun(); _Set_Reg_Value((ic_unit ? IC1_TXDB_REG:IC0_TXDB_REG),0x00); //Write parameter p1 to IC card return_value = IC_StrReg_Srv_Fun(); _Set_Reg_Value((ic_unit ? IC1_TXDB_REG:IC0_TXDB_REG),0x00); //Write parameter p2 to IC card return_value = IC_StrReg_Srv_Fun(); _Set_Reg_Value((ic_unit ? IC1_TXDB_REG:IC0_TXDB_REG),0xDC); //Write the lengh of data you hope to receive from IC card return_value = IC_StrReg_Srv_Fun(); while(waiting) //When You select file. you must waiting code //and before you send file name you must waiting for 16 ETU { if(ic_RF_flag) { code = (ic_unit ? IC1_RXDB_REG:IC0_RXDB_REG); waiting = 0; ic_RF_flag = 0; } } printf("\ncode = %x",code); for(i=0;i<0xDC;i++) { _Set_Reg_Value((ic_unit ? IC1_TXDB_REG:IC0_TXDB_REG),data[i]); //Write the lengh of data you hope to receive from IC card return_value = IC_StrReg_Srv_Fun(); } while(count<0x2) //Receive data from IC Card { if(ic_RF_flag) { apdu.DATA_READ[count++] = (ic_unit ? IC1_RXDB_REG:IC0_RXDB_REG); ic_RF_flag = 0; } } printf("\nData collect:"); for(i=0;i<0x2;i++) printf("%x ",apdu.DATA_READ[i]); }void get_card_no(BYTE ic_unit){ BYTE return_value,count = 0,i=0; _Set_Reg_Value((ic_unit ? IC1_TXDB_REG:IC0_TXDB_REG),0x80); //Write command type to IC card return_value = IC_StrReg_Srv_Fun(); _Set_Reg_Value((ic_unit ? IC1_TXDB_REG:IC0_TXDB_REG),0xca); //Write instruction to IC card return_value = IC_StrReg_Srv_Fun(); _Set_Reg_Value((ic_unit ? IC1_TXDB_REG:IC0_TXDB_REG),0x00); //Write parameter p1 to IC card return_value = IC_StrReg_Srv_Fun(); _Set_Reg_Value((ic_unit ? IC1_TXDB_REG:IC0_TXDB_REG),0x01); //Write parameter p2 to IC card return_value = IC_StrReg_Srv_Fun(); _Set_Reg_Value((ic_unit ? IC1_TXDB_REG:IC0_TXDB_REG),0x08); //Write the lengh of data you hope to receive from IC card return_value = IC_StrReg_Srv_Fun(); while(count<8) //Receive data from IC Card { if(ic_RF_flag) { apdu.DATA_READ[count++] =(ic_unit ? IC1_RXDB_REG:IC0_RXDB_REG) ; ic_RF_flag = 0; } } printf("\nCard Num :"); for(i=0;i<8;i++) printf("%x ",apdu.DATA_READ[i]); }void get_radom(BYTE ic_unit){ BYTE return_value,count = 0,i=0; _Set_Reg_Value((ic_unit ? IC1_TXDB_REG:IC0_TXDB_REG),0x00); //Write command type to IC card return_value = IC_StrReg_Srv_Fun(); _Set_Reg_Value((ic_unit ? IC1_TXDB_REG:IC0_TXDB_REG),0x84); //Write instruction to IC card return_value = IC_StrReg_Srv_Fun(); _Set_Reg_Value((ic_unit ? IC1_TXDB_REG:IC0_TXDB_REG),0x00); //Write parameter p1 to IC card return_value = IC_StrReg_Srv_Fun(); _Set_Reg_Value((ic_unit ? IC1_TXDB_REG:IC0_TXDB_REG),0x00); //Write parameter p2 to IC card return_value = IC_StrReg_Srv_Fun(); _Set_Reg_Value((ic_unit ? IC1_TXDB_REG:IC0_TXDB_REG),0x08); //Write the lengh of data you hope to receive from IC card return_value = IC_StrReg_Srv_Fun(); while(count<11) //Receive data from IC Card { if(ic_RF_flag) { apdu.DATA_READ[count++] = (ic_unit ? IC1_RXDB_REG:IC0_RXDB_REG); ic_RF_flag = 0; } } printf("\nRandom :"); for(i=0;i<11;i++) printf("%x ",apdu.DATA_READ[i]);}void buy_invoice(BYTE ic_unit){ BYTE data[0x14]={0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1F,0x00,0x04}; BYTE i=0,return_value,temp=true,temp_code; _Set_Reg_Value((ic_unit ? IC1_TXDB_REG:IC0_TXDB_REG),0x00); //Write command type to IC card return_value = IC_StrReg_Srv_Fun(); _Set_Reg_Value((ic_unit ? IC1_TXDB_REG:IC0_TXDB_REG),0xdc); //Write instruction to IC card return_value = IC_StrReg_Srv_Fun(); _Set_Reg_Value((ic_unit ? IC1_TXDB_REG:IC0_TXDB_REG),0x01); //Write parameter p1 to IC card return_value = IC_StrReg_Srv_Fun(); _Set_Reg_Value((ic_unit ? IC1_TXDB_REG:IC0_TXDB_REG),0x04); //Write parameter p2 to IC card return_value = IC_StrReg_Srv_Fun(); _Set_Reg_Value((ic_unit ? IC1_TXDB_REG:IC0_TXDB_REG),0x14); //Write the lengh of data you hope to receive from IC card return_value = IC_StrReg_Srv_Fun(); while(temp) { if(ic_RF_flag) { temp_code = IC1_RXDB_REG; ic_RF_flag = 0; temp =false; } } printf("\nbuy code :%x \n",temp_code); Delay(600); for(i=0;i<0x14;i++) { _Set_Reg_Value((ic_unit ? IC1_TXDB_REG:IC0_TXDB_REG),data[i]); //Write the lengh of data you hope to receive from IC card return_value = IC_StrReg_Srv_Fun(); } i=0; while(i<2) { if(ic_RF_flag) { apdu.DATA_READ[i++] = IC1_RXDB_REG; ic_RF_flag = 0; } } printf("\nbuy invoice :"); for(i=0;i<2;i++) printf("%x ",apdu.DATA_READ[i]); }/**c0 e9 00 00 16**/void DISTRIBUTE_INVOICE_NB(BYTE ic_unit){ BYTE return_value,count = 0,i=0; BYTE temp=true,temp_code; _Set_Reg_Value((ic_unit ? IC1_TXDB_REG:IC0_TXDB_REG),0xc0); //Write command type to IC card return_value = IC_StrReg_Srv_Fun(); _Set_Reg_Value((ic_unit ? IC1_TXDB_REG:IC0_TXDB_REG),0xe9); //Write instruction to IC card return_value = IC_StrReg_Srv_Fun(); _Set_Reg_Value((ic_unit ? IC1_TXDB_REG:IC0_TXDB_REG),0x00); //Write parameter p1 to IC card return_value = IC_StrReg_Srv_Fun(); _Set_Reg_Value((ic_unit ? IC1_TXDB_REG:IC0_TXDB_REG),0x00); //Write parameter p2 to IC card return_value = IC_StrReg_Srv_Fun(); _Set_Reg_Value((ic_unit ? IC1_TXDB_REG:IC0_TXDB_REG),0x16); //Write the lengh of data you hope to receive from IC card return_value = IC_StrReg_Srv_Fun(); while(count<0x2) //Receive data from IC Card { if(ic_RF_flag) { apdu.DATA_READ[count++] = IC1_RXDB_REG; ic_RF_flag = 0; } } printf("\nDISTRIBUTE :"); for(i=0;i<2;i++) printf("%2x ",apdu.DATA_READ[i]); }void read_ef05(BYTE ic_unit){ BYTE temp_data2[2]={0x2f,0x02}; BYTE temp_data1[2]={0xef,0x05}; select_file(ic_unit,0x00,0x00,(BYTE *)temp_data2); select_file(ic_unit,0x02,0x00,(BYTE *)temp_data1); read_file(ic_unit,0xb0,0x82,0x0,0x14) ; printf("\nread ic card %d ef05 over!\n",ic_unit); }void read_ef06(BYTE ic_unit){ BYTE temp_data2[2]={0x2f,0x02}; BYTE temp_data1[2]={0xef,0x06}; IC_Reset_Fun(ic_unit); select_file(ic_unit,0x00,0x00,(BYTE *)temp_data2); select_file(ic_unit,0x02,0x00,(BYTE *)temp_data1); read_file(ic_unit,0xb0,0x82,0x0,21) ; printf("\nread ic card %d ef06 over!\n",ic_unit); }void read_ef07(BYTE ic_unit){ BYTE temp_data2[2]={0x2f,0x02}; BYTE temp_data1[2]={0xef,0x07}; IC_Reset_Fun(ic_unit); select_file(ic_unit,0x00,0x00,(BYTE *)temp_data2); select_file(ic_unit,0x02,0x00,(BYTE *)temp_data1); read_file(ic_unit,0xb0,0x82,0x0,25) ; printf("\nread ic card %d ef07 over!\n",ic_unit);}void read_ef04(BYTE ic_unit){ BYTE temp_data2[2]={0x2f,0x02}; BYTE temp_data1[2]={0xef,0x04}; IC_Reset_Fun(ic_unit); select_file(ic_unit,0x00,0x00,(BYTE *)temp_data2); select_file(ic_unit,0x02,0x00,(BYTE *)temp_data1); read_file(ic_unit,0xb0,0x82,0x0,25) ; printf("\nread ic card %d ef04 over!\n",ic_unit);}void read_ef03(BYTE ic_unit){ BYTE temp_data2[2]={0x2f,0x02}; BYTE temp_data1[2]={0xef,0x03}; IC_Reset_Fun(ic_unit); select_file(ic_unit,0x00,0x00,(BYTE *)temp_data2); select_file(ic_unit,0x02,0x00,(BYTE *)temp_data1); read_file(ic_unit,0xb0,0x82,0x0,47) ; printf("\nread ic card %d ef03 over!\n",ic_unit);}void read_ef02(BYTE ic_unit){ BYTE temp_data2[2]={0x2f,0x02}; BYTE temp_data1[2]={0xef,0x02}; IC_Reset_Fun(ic_unit); select_file(ic_unit,0x00,0x00,(BYTE *)temp_data2); select_file(ic_unit,0x02,0x00,(BYTE *)temp_data1); read_file(ic_unit,0xb0,0x82,0x0,61) ; printf("\nread ic card %d ef02 over!\n",ic_unit);}void read_ef01(BYTE ic_unit){ BYTE temp_data2[2]={0x2f,0x02}; BYTE temp_data1[2]={0xef,0x01}; IC_Reset_Fun(ic_unit); select_file(ic_unit,0x00,0x00,(BYTE *)temp_data2); select_file(ic_unit,0x02,0x00,(BYTE *)temp_data1); read_file(ic_unit,0xb0,0x82,0x0,37) ; printf("\nread ic card %d ef01 over!\n",ic_unit);} void read_2f02(BYTE ic_unit){ BYTE temp_data2[2]={0x2f,0x02}; IC_Reset_Fun(ic_unit); select_file(ic_unit,0x00,0x00,(BYTE *)temp_data2); read_file(ic_unit,0xb0,0x82,0x0,0x3d); printf("\nread ic card %d 2f02 over!\n",ic_unit);} BYTE read_ic_card_info(BYTE ic_unit){ BYTE temp_rece_cont=0, i=0,count; BYTE temp_data2[2]={0x2f,0x02}; BYTE temp_data1[2]={0xef,0x04}; BYTE _FiscalPin[8]={0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38}; BYTE temp_gpio,return_val; IC_Reset_Fun(ic_unit); get_radom(ic_unit); get_card_no(ic_unit); read_2f02(ic_unit); /*read_ef01(ic_unit); read_ef02(ic_unit); read_ef03(ic_unit); read_ef04(ic_unit); read_ef05(ic_unit); read_ef06(ic_unit); read_ef07(ic_unit);*/ card_release(ic_unit); printf("\nRead IC card %x finish!\n",ic_unit); return OK;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -