📄 typea.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 + -