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

📄 typea.c

📁 另外一个RC531非接触式读卡器的全部源代码
💻 C
字号:
#include <stdio.h>#include <sys/ioctl.h>#include "rc531.h"/* TYPE A function */int reqa(int type, int *atqa){ char sbuf[8], rbuf[8]; struct rc531_cmd cmd; cmd.sendbuf = sbuf; cmd.recvbuf = rbuf; cmd.cmd = 0x1e; cmd.timeout = 0x1a; cmd.bytesent = 1; w531(0x09, 0x00);      //clear crypto1 w531(0x0f, 0x07);      //txbits:7 w531(0x22, 0x03);      //no crc sbuf[0] = type; ioctl(fd531, RC531_CMD, &cmd); w531(0x22, 0x0f);      //have crc if(cmd.status){     return cmd.status; } if(cmd.byterecv!=2){     return E_BYTE; } *atqa = 0; *(short*)atqa = *(short*)rbuf; return E_OK;}int anticolla(int *uid){ int i, j, bcnt, rxalign; int nvb, collpos; char *cuid; char sbuf[8], rbuf[8]; struct rc531_cmd cmd; w531(0x22, 0x03);      //no crc cuid = (char*)uid; bcnt = 0; *uid = 0; rxalign = 0; cmd.cmd = 0x1e; cmd.sendbuf = sbuf; cmd.recvbuf = rbuf; cmd.timeout = 0x1a; while(1){     nvb = 0x20+((bcnt&7)|((bcnt<<1)&0xf0));     w531(0x0f, (bcnt&7)|(rxalign<<4));     sbuf[0] = 0x93;     sbuf[1] = nvb;     for(i=0,j=0; i<bcnt; i+=8,j++){         sbuf[2+j] = cuid[j];     }     cmd.bytesent = j+2;     ioctl(fd531, RC531_CMD, &cmd);     if(cmd.status&0x80){         w531(0x22, 0x0f);      //have crc         return E_TIMEOUT;     }     if(cmd.byterecv==0){         w531(0x22, 0x0f);      //have crc         return E_BYTE;     }     if(cmd.status&1){          //collision occur         i=bcnt;         collpos = r531(0x0b);         rxalign = (rxalign+collpos)&0x07;         bcnt += collpos;         for(collpos=bcnt, j=0; collpos>0; i+=8,collpos-=8,j++){             cuid[i>>3] |= rbuf[j];         }     }else{                     //no collision         if(cmd.status&0x06){             w531(0x22, 0x0f);  //have crc             return cmd.status;         }         for(i=bcnt,j=0; i<32; i+=8,j++){             cuid[i>>3] |= rbuf[j];         }         break;     } } w531(0x22, 0x0f);      //have crc return E_OK;}int selecta(int uid, int *sak){ int i, crc; char *cuid; char sbuf[8]; struct rc531_cmd cmd; *sak = 0; cmd.sendbuf = sbuf; cmd.recvbuf = (char*)sak; cmd.cmd = 0x1e; cmd.timeout = 0x1a; cmd.bytesent = 7; cuid = (char *)&uid; crc = 0; sbuf[0] = 0x93; sbuf[1] = 0x70; for(i=0; i<4; i++){     crc ^= cuid[i];     sbuf[2+i] = cuid[i]; } sbuf[6] = crc; ioctl(fd531, RC531_CMD, &cmd); if(cmd.status){     return cmd.status; } if(cmd.byterecv!=1){     return E_BYTE; } return E_OK;}int halta(void){ char sbuf[8], rbuf[8]; struct rc531_cmd cmd; cmd.sendbuf = sbuf; cmd.recvbuf = rbuf; cmd.cmd = 0x1e; cmd.timeout = 0x1a; cmd.bytesent = 2; sbuf[0] = 0x50;        //halt command sbuf[1] = 0x00; ioctl(fd531, RC531_CMD, &cmd); return E_OK;}

⌨️ 快捷键说明

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