NFC_state_t NFCTarget_statemachine(void) { switch (NFC_State) { case POWER_OFF_STATE: Trf797xInitialSettings(); NFC_State = SENSE_STATE; break; case SENSE_STATE: // CLEAR_DEBUG_PIN_1; // CLEAR_DEBUG_PIN_2; NFC_State = SENSE_STATE; u8InterruptFlags = INT_BUSY; do { Radio_Wait_IRQ(); } while (u8InterruptFlags != INT_RX_COMPLETE && NFC_State == SENSE_STATE); if (u8InterruptFlags == INT_RX_COMPLETE) { NFC_State = EMULATION_STATE; } else if (NFC_State != EMULATION_STATE) { break; } c ase EMULATION_STATE: // SET_DEBUG_PIN_1; // Now wait until the part is selected // restart the pointer and wait for a message do { if ((u8InterruptFlags & (INT_RX_COMPLETE | INT_CRITICAL_ERROR | INT_COMM_ERROR)) == INT_RX_COMPLETE) NFC_ProcessReceivedData(&buf;[0]); // Check if the message was a ATR_REQ else if ((u8InterruptFlags & INT_CRITICAL_ERROR)) NFC_State = POWER_OFF_STATE; // Timeout Error do { // Wait for RX Complete interrupt Radio_Wait_IRQ(); } while (u8InterruptFlags != INT_RX_COMPLETE && (NFC_State == EMULATION_STATE )); } while (NFC_State == EMULATION_STATE); __no_operation(); break; } return NFC_State; } ase EMULATION_STATE: // SET_DEBUG_PIN_1; // Now wait until the part is selected // restart the pointer and wait for a message do { if ((u8InterruptFlags & (INT_RX_COMPLETE | INT_CRITICAL_ERROR | INT_COMM_ERROR)) == INT_RX_COMPLETE) NFC_ProcessReceivedData(&buf;[0]); // Check if the message was a ATR_REQ else if ((u8InterruptFlags & INT_CRITICAL_ERROR)) NFC_State = POWER_OFF_STATE; // Timeout Error do { // Wait for RX Complete interrupt Radio_Wait_IRQ(); } while (u8InterruptFlags != INT_RX_COMPLETE && (NFC_State == EMULATION_STATE )); } while (NFC_State == EMULATION_STATE); __no_operation(); break; } return NFC_State; }