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

📄 ic_card.c

📁 智能卡的驱动程序,兼容iso-7817标准
💻 C
📖 第 1 页 / 共 3 页
字号:
         }         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 + -