diff --git a/Firmware/Chameleon-Mini/Application/Reader14443A.c b/Firmware/Chameleon-Mini/Application/Reader14443A.c index efbb107..65399bf 100644 --- a/Firmware/Chameleon-Mini/Application/Reader14443A.c +++ b/Firmware/Chameleon-Mini/Application/Reader14443A.c @@ -230,6 +230,7 @@ INLINE uint16_t Reader14443A_Select(uint8_t * Buffer, uint16_t BitCount) { case STATE_IDLE: case STATE_HALT: + Reader_FWT = ISO14443A_RX_PENDING_TIMEOUT; /* Send a REQA */ Buffer[0] = ISO14443A_CMD_WUPA; // whenever REQA works, WUPA also works, so we choose WUPA always ReaderState = STATE_READY; diff --git a/Firmware/Chameleon-Mini/Codec/Codec.c b/Firmware/Chameleon-Mini/Codec/Codec.c index 05f1481..5fbda38 100644 --- a/Firmware/Chameleon-Mini/Codec/Codec.c +++ b/Firmware/Chameleon-Mini/Codec/Codec.c @@ -9,6 +9,8 @@ #include "../System.h" #include "../LEDHook.h" +uint16_t Reader_FWT = ISO14443A_RX_PENDING_TIMEOUT; + #define READER_FIELD_MINIMUM_WAITING_TIME 70 // ms static uint16_t ReaderFieldStartTimestamp = 0; diff --git a/Firmware/Chameleon-Mini/Codec/Codec.h b/Firmware/Chameleon-Mini/Codec/Codec.h index 0070c37..7a49727 100644 --- a/Firmware/Chameleon-Mini/Codec/Codec.h +++ b/Firmware/Chameleon-Mini/Codec/Codec.h @@ -90,6 +90,9 @@ #define CodecPtrRegister2 (*((volatile uint8_t**) &GPIORA)) extern uint16_t ReaderThreshold; +extern uint16_t Reader_FWT; + +#define FWI2FWT(x) ((uint32_t)(256 * 16 * ((uint32_t)1 << (x))) / (CODEC_CARRIER_FREQ / 1000) + 1) typedef enum { CODEC_SUBCARRIERMOD_OFF, diff --git a/Firmware/Chameleon-Mini/Codec/Reader14443-2A.c b/Firmware/Chameleon-Mini/Codec/Reader14443-2A.c index 9d87662..e069b41 100644 --- a/Firmware/Chameleon-Mini/Codec/Reader14443-2A.c +++ b/Firmware/Chameleon-Mini/Codec/Reader14443-2A.c @@ -281,7 +281,7 @@ ISR(CODEC_TIMER_LOADMOD_CCA_VECT) // pause found void Reader14443ACodecTask(void) { - if (Flags.RxPending && SYSTICK_DIFF(RxPendingSince) > ISO14443A_RX_PENDING_TIMEOUT + 1) + if (Flags.RxPending && SYSTICK_DIFF(RxPendingSince) > Reader_FWT + 1) { BitCount = 0; Flags.RxDone = true;