do_card.c
上传用户:shyuanyi
上传日期:2008-05-24
资源大小:69k
文件大小:2k
源码类别:

RFID编程

开发平台:

C/C++

  1. #include  "My_head.h"
  2. #include  "carddef.h"
  3. #include  "rfic.h"
  4. #include  "sendcard.h"
  5. //==============================================
  6. #define   SEND_CARD_LED     P1_1
  7. /***********************************************/
  8. void  Count_Sector_PWD(BYTE  pbuf[],BYTE card_snr[4],BYTE  sector)
  9. {
  10.    memcpy(pbuf,Nkey_a,6);
  11.    pbuf[0] *= card_snr[0]+sector*1;
  12.    pbuf[1] *= card_snr[1]+sector*2;
  13.    pbuf[2] *= card_snr[2]+sector*3;
  14.    pbuf[3] *= card_snr[3]+sector*4;
  15.    pbuf[4] *= pbuf[0]+sector*5;
  16.    pbuf[5] *= pbuf[1]+sector*6;
  17. }
  18. BYTE   GetSEEDCardTest(SeedCard_Info  *card)
  19. {
  20. BYTE  idata  tt[2];
  21. BYTE  idata  card_snr[4];
  22. BYTE  idata  bankdata[16];
  23. BYTE  size,err;
  24. int   i=0;
  25. //Init_Rfic();
  26.     mifs_reset(20);
  27. for(i=45;--i;)
  28.   {
  29.    if(!mifs_request(ALL_CARD,tt))break;
  30.   }
  31. if(!i)return(CARD_NO_FINED);
  32. for(i=45;--i;)
  33.   {
  34.    if((mifs_request(IDLE_CARD,tt))!=MI_OK)continue;
  35.    if((mifs_anticoll(0,card_snr))!=MI_OK)continue;
  36.    if((mifs_select(card_snr,&size))!=MI_OK)continue;
  37.    break;
  38.   }
  39. if(!i)return(CARD_ERR_CODE);//return(40+err);
  40.     Count_Sector_PWD(bankdata,card_snr,SEEDCARD_SECTOR);
  41. err=mifs_load_key(KEYA,SEEDCARD_SECTOR,bankdata);
  42.     //err=mifs_load_key(KEYA,SEEDCARD_SECTOR,Nkey_b);
  43. if(err!=MI_OK)return(50+err);
  44. for(i=15;--i;)
  45.   {
  46.    if((mifs_authentication(KEYA,SEEDCARD_SECTOR))!=MI_OK)continue;
  47.    //if((mifs_authKey(KEYA,SEEDCARD_SECTOR,Nkey_b))!=MI_OK)continue;
  48.    if((mifs_read(SEED_CARD_SECT,bankdata))!=MI_OK)continue;
  49.    break;
  50.   }
  51. if(!i)return(CARD_ERR_CODE);//return(40+err);
  52.     //do_buzzer(1);
  53.     mifs_halt();
  54. //mifs_close();
  55. if(bankdata[CARD_LEVEL_DDR] != SEED_CARD)
  56. {
  57.    return(CARD_NO_SEED);
  58. }
  59.     memcpy(card->unit_code,&bankdata[UNIT_CODE_ADDR],3);
  60.     memcpy(card->unit_password,&bankdata[UNIT_PWD_ADDR],3);
  61. card->fuc_type=bankdata[FUC_TYPE_ADDR];
  62. card->fuc_sector=bankdata[FUC_SECTOR_ADDR];
  63.     card->public_sector=bankdata[PUBLIC_SECTOR_ADDR];
  64.     memcpy(card->date,&bankdata[SEED_DATE_ADDR],3);  //6
  65. return(SUCCESS);
  66. }