int main(int argc, char **argv) { MFRC522_Status_t ret; //Recognized card ID uint8_t CardID[5] = { 0x00, }; static char command_buffer[1024]; ret = MFRC522_Init('A'); if (ret < 0) { perror("Failed to initialize"); exit(-1); } printf("User Space RC522 Application\r\n"); while (1) { /*Main Loop Start*/ DISP_COMMANDLINE(); scanf("%s", command_buffer); if (strcmp(command_buffer, "scan") == 0) { puts("Scanning"); while (1) { ret = MFRC522_Check(CardID); if (ret != MI_OK) { printf("."); fflush(stdout); continue; } ret |= tag_select(CardID); if (ret == MI_OK) { ret = scan_loop(CardID); if (ret < 0) { goto END_SCAN; } else if (ret == 1) { goto HALT; } } } END_SCAN: printf("Card error..."); HALT: puts("Halt"); } else if (strcmp(command_buffer, "quit") == 0 || strcmp(command_buffer, "exit") == 0) { return 0; } else { puts("Unknown command"); puts("scan:scan card and dump"); puts("quit:exit program"); } /*Main Loop End*/ } }
void main() { char UID[6]; unsigned char TagType; char size; // char i; UART_init(); //Inicializa Soft SPI SPI_init(0); //inicializa o modulo RFID MFRC522_Init(); TRIS_LED1 = 0; TRIS_BUTTON = 1; TRIS_OUTPUT1 = 0; for(int i=0;i<10;i++) { LED1 = 1; __delay_ms(250); LED1 = 0; __delay_ms(250); } while(1) { if(BUTTON == 0) { num++; } if(num==8) { clear_list_cards(); printf("Lista apagada\n\r"); num=0; LED1 = 1; for(char i=0;i<10;i++)__delay_ms(100); LED1 = 0; } //Letura if( MFRC522_isCard( &TagType ) ) { //Exibe o tipo do cartão na serial printf("Tipo de Tag: %u\n\r",TagType); //Faz a leitura do numero de serie if( MFRC522_ReadCardSerial( UID ) ) { //Só mostra que um cartão foi lido LED1 = 1; printf("Codigo: "); for(int i=0; i < 5; i++) { printf("%X ",UID[i]); } printf("\n\r"); //Gravação if(BUTTON == 0) { record_card(UID); num = 0; printf("Cartão cadastrado\n\r"); LED1=1; __delay_ms(250); LED1=0; } //Comparação if(compare_card(UID)) { OUTPUT1=1; printf("Cartão reconhecido!\n\r"); for(char i=0;i<8;i++)__delay_ms(250);//2 segundos OUTPUT1=0; } else { printf("Cadastre o cartão\n\r"); } // size = MFRC522_SelectTag( UID ); } //Estado de hibernação //MFRC522_Halt(); } LED1 = 0; __delay_ms(250); } }
void main(void) { unsigned char i=0; unsigned char status; unsigned char str[MAX_LEN]; unsigned char RC_size; unsigned char blockAddr; unsigned char mynum[20]; unsigned char serNum[7]; uint8_t RCV; int resulta=0; int fd; int a=0; fd=Init_SPI("/dev/spidev0.0"); setup_io(); SET_INPUT(25); SET_OUTPUT(25); ApiInit(fd); MFRC522_Init(); a=Read_MFRC522(VersionReg); printf("MFRC Version Read %02X \r\n",a); // for(a=0;a<10;a++) // { // RCV=Read_MFRC522(VersionReg); // //RCV=SPI_transfer(fd,a); // printf("RCV %02X \r\n",RCV); // SET_BIT(25); // sleep(1); // CLR_BIT(25); // sleep(1); // } while(1) { status = MFRC522_Request(PICC_REQIDL, str); if(resulta==status){ }else{ resulta=status; } if (status == MI_OK) { mifare_tag_type(str); //usleep(1000); } status = MFRC522_Anticoll(str); memcpy(serNum, str,5); if (status == MI_OK) { printf("UID :"); for(i=0;i<5;i++) { printf("["); printf("%02X",serNum[i]); printf("]"); } printf("\n"); //usleep(1000); } RC_size=MFRC522_SelectTag(serNum); if(RC_size !=0) { printf("Select_OK Size %02d \n",RC_size); puts(""); puts(""); } } close(fd); }
static int rc522_open(struct inode *inode, struct file *file) { uint8_t str[MAX_LEN]; uint8_t writeData[16]={1, 2, 3, 4, 0}; uint8_t i; uint8_t status; uint8_t size; uint8_t blockAddr; //选择操作的块地址0~63 //扇区A密码,16个扇区,每个扇区密码6Byte uint8_t sectorKeyA[16][16] = {{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},}; printk("rc522_open\r\n"); SPI_Init(); MFRC522_Init(); while (1) { //寻卡,返回卡类型 status = MFRC522_Request(PICC_REQIDL, str); if (status == MI_OK) { printk("%d \r\n", str[0]); printk("%d \r\n", str[1]); } //防冲撞,返回卡的序列号 4字节 status = MFRC522_Anticoll(str); memcpy(serNum, str, 5); if (status == MI_OK) { printk("%d \r\n", serNum[0]); printk("%d \r\n", serNum[1]); printk("%d \r\n", serNum[2]); printk("%d \r\n", serNum[3]); printk("%d \r\n", serNum[4]); } //选卡,返回卡容量 size = MFRC522_SelectTag(serNum); if (size != 0) { printk("size is %d", size); } //写 blockAddr = 1; //数据块 status = MFRC522_Auth(PICC_AUTHENT1A, blockAddr, sectorKeyA[blockAddr/4], serNum); //认证 if (status == MI_OK) { //写数据 status = MFRC522_Write(blockAddr, writeData); } //读 blockAddr = 1; //数据块 status = MFRC522_Auth(PICC_AUTHENT1A, blockAddr, sectorKeyA[blockAddr/4], serNum); //认证 if (status == MI_OK) { //读数据 status = MFRC522_Read(blockAddr, str); if (status == MI_OK) { for (i=0; i<16; i++) { printk("%d ", str[i]); } } } MFRC522_Halt(); //命令卡片进入休眠状态*/ } }