static void prvRfidTask(void * parameters) { RfidMessage rfidMessage; MFRC522_PCD_Init(); for (;;) { // Look for new cards, and select one if present if (MFRC522_PICC_IsNewCardPresent() && MFRC522_PICC_ReadCardSerial()) { uint32_t i; rfidMessage.size = uid.size; for(i = 0; i < 10; i++) { rfidMessage.uidByte[i] = uid.uidByte[i]; } xQueueSendToBack(rfidEventQueue, &rfidMessage, 10); for (i = 0; i < uid.size; i++) { UARTprintf("%x", uid.uidByte[i]); } UARTprintf("\n"); MFRC522_PICC_HaltA(); } delay(50); } }
static void RfidTask(void *pvParameters) { MFRC522_StatusCode status; uint8_t last_uidBytes[MFRC522_UID_MAX_NOF_BYTES]; int i; bool newCardDetected = FALSE; (void)pvParameters; /* not used */ init_uid_bytes(last_uidBytes); RFID_uid = NULL; vTaskDelay(pdMS_TO_TICKS(1000)); /* give hardware some time to power-up */ MFRC522_PCD_Init(); //MFRC522_SetAntennaGain(MFRC522_RxGain_max); for(;;) { newCardDetected = FALSE; RFID_GetLock(); if (RFID_DoSelfTest) { if (!MFRC522_PCD_PerformSelfTest()) { CLS1_SendStr("Selftest failed()!\r\n", CLS1_GetStdio()->stdErr); } } if (MFRC522_PICC_IsNewCardPresent()) { /* check if a card responds to PICC_CMD_REQA */ //CLS1_SendStr("Card detected...\r\n", CLS1_GetStdio()->stdOut); if (MFRC522_PICC_ReadCardSerial()) { //CLS1_SendStr("Read card serial...\r\n", CLS1_GetStdio()->stdOut); RFID_uid = MFRC522_GetUid(); newCardDetected = TRUE; if (RFID_dumpNewCardInformation) { MFRC522_PICC_DumpToSerial(RFID_uid); } else if (RFID_changeUID) { /* only works with Chinese cards which have the UID writeable! */ if (!MFRC522_MIFARE_SetUid(RFID_newUID4, sizeof(RFID_newUID4), TRUE)) { CLS1_SendStr("Setting new uid failed!\r\n", CLS1_GetStdio()->stdOut); } else { CLS1_SendStr("Set New ID to card!\r\n", CLS1_GetStdio()->stdOut); } } else if (RFID_authUID) { /* only for NTAG216! */ AuthNTag216(RFID_uid); } else if (RFID_WriteUltraLight) { WriteUltraLight(RFID_uid); } else if (RFID_WriteMifare) { WriteMifare(RFID_uid); } else if (RFID_TryKnownKeys) { TryKnownKeys(); } else if (!same_uid_bytes(last_uidBytes, &RFID_uid->uidByte[0], RFID_uid->size)) { CLS1_SendStr("\r\nCard UID:", CLS1_GetStdio()->stdOut); dump_byte_array(RFID_uid->uidByte, RFID_uid->size, TRUE); CLS1_SendStr("\r\n", CLS1_GetStdio()->stdOut); init_uid_bytes(last_uidBytes); set_uid_bytes(last_uidBytes, &RFID_uid->uidByte[0], RFID_uid->size); CLS1_SendStr("PICC type: ", CLS1_GetStdio()->stdOut); PICC_Type piccType = MFRC522_PICC_GetType(RFID_uid->sak); CLS1_SendStr(MFRC522_PICC_GetTypeName(piccType), CLS1_GetStdio()->stdOut); CLS1_SendStr("\r\n", CLS1_GetStdio()->stdOut); } else { /* same card again */ CLS1_SendStr(".", CLS1_GetStdio()->stdOut); } } MFRC522_PICC_HaltA(); /* Halt PICC */ MFRC522_PCD_StopCrypto1(); /* Stop encryption on PCD */ } /* new card present */ RFID_ReleaseLock(); if (!newCardDetected) { vTaskDelay(pdMS_TO_TICKS(500)); } else { vTaskDelay(pdMS_TO_TICKS(2000)); } } }