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

📄 tpa.c

📁 另外一个RC531非接触式读卡器的全部源代码
💻 C
字号:
#include <stdio.h>#include <unistd.h>#include "rc531.h"int main(void){ int retv, uid, sector, data; int cmd, value, i;// char keyb[12] = {0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,//                  0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f}; char keyc[12] = {0x5a, 0xf0, 0x5a, 0xe1, 0x5a, 0xd2,                  0x5a, 0xc3, 0x5a, 0xb4, 0x5a, 0xa5}; char cmdbuf[128]; char cbuf[128]; retv = pcd_reset(RESET_TYPEA); retv = pcd_open(); if(retv){     printf("Cannot open rc531!\n");     return retv; } while(1){     printf("-");     fgets(cmdbuf, 128, stdin);     if(cmdbuf[0]=='q')         break;     switch(cmdbuf[0]){     case 'a':         retv = anticolla(&uid);         mferror(retv);         if(retv){             printf("Anticollision error.\n");         }else{             printf("Card return ID: %08x\n", uid);         }         break;     case 's':         retv = selecta(uid, &data);         mferror(retv);         if(retv){             printf("Can't select card.\n");         }else{             printf("Card return SAK: %02x\n", data);         }         break;     case 'r':         retv = reqa(REQA, &data);         mferror(retv);         if(retv){             printf("No card.\n");         }else{             printf("Card return ATQA: %04x\n", data);         }         break;     case 'l':         sector = 0;         retv = sscanf(cmdbuf+1, "%x", &sector);//         retv = sscanf(cmdbuf+1, "%x %2x %2x %2x %2x %2x %2x", &sector,//                &keyc[0], &keyc[1], &keyc[2], &keyc[3], &keyc[4], &keyc[5]);//         if(retv==7){//             for(i=10; i>=0; i-=2){//                 keyc[i+1] = keyc[i>>2]&0x0f;//                 keyc[i] = keyc[i>>2]>>4;//             }             retv = loadkey(keyc);//         }else{//             retv = loadkey(keyb);//         }         retv = authent(uid, sector, AUTH_KEYA);         mferror(retv);         if(retv){             printf("authent error!\n");         }else{             printf("authent OK!\n");         }         break;     case 'e':         sector = 0;         sscanf(cmdbuf+1, "%x", &sector);         retv = mfread(sector, cbuf);         mferror(retv);         if(retv){             printf("read error!\n");         }else{             printf("read OK!\n");             printf("return data: ");             for(i=0; i<16; i++){                 printf("%02x ", cbuf[i]);             }             printf("\n");         }         break;     case 'v':         if(cmdbuf[1] == 'i'){             cmd = 0xc1;         }else if(cmdbuf[1] == 'd'){             cmd = 0xc0;         }else{             break;         }         sector = 1;         value = 1;         sscanf(cmdbuf+2, "%d %d", &sector, &value);         retv = mfvalue(cmd, sector, value);         mferror(retv);         if(retv){             printf("value error!\n");         }else{             printf("value OK!\n");         }         break;     case 't':         sector = 1;         sscanf(cmdbuf+1, "%d", &sector);         retv = mftransfer(0xb0, sector);         mferror(retv);         if(retv){             printf("transfer error!\n");         }else{             printf("transfer OK!\n");         }         break;     case 'o':         sector = 1;         sscanf(cmdbuf+1, "%d", &sector);         retv = mftransfer(0xc2, sector);         mferror(retv);         if(retv){             printf("restore error!\n");         }else{             printf("restore OK!\n");         }         break;     case 'p':         sector = 0;         data = 0x11111111;         sscanf(cmdbuf+1, "%x %d", &sector, &data);         *(int*)&cbuf[0] = data;         *(int*)&cbuf[4] = ~data;         *(int*)&cbuf[8] = data;         cbuf[12]=cbuf[14] = sector;         cbuf[13]=cbuf[15] = ~sector;         retv = mfwrite(sector, cbuf);         mferror(retv);         if(retv){             printf("write error!\n");         }else{             printf("write OK!\n");         }         break;     case 'h':         halta();         break;     case 'w':         retv = reqa(WAKEUPA, &data);         mferror(retv);         if(retv){             printf("No card.\n");         }else{             printf("Card return ATQA: %04x\n", data);         }         break;     case 'z':         while(1){             retv = reqa(WAKEUPA, &data);             if(retv){                 printf("ERROR!\n");             }else{                 printf("OK!\n");             }             retv = anticolla(&uid);             if(retv){                 printf("ERROR!\n");             }else{                 printf("OK!\n");             }             retv = selecta(uid, &data);             if(retv){                 printf("ERROR!\n");             }else{                 printf("OK!\n");             }             halta();             printf("---\n");         }     default:     } }; pcd_close(); return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -