diff --git a/Firmware/Chameleon-Mini/Application/Sniff14443A.c b/Firmware/Chameleon-Mini/Application/Sniff14443A.c index 5d8b559..b03aaf9 100644 --- a/Firmware/Chameleon-Mini/Application/Sniff14443A.c +++ b/Firmware/Chameleon-Mini/Application/Sniff14443A.c @@ -67,7 +67,7 @@ uint16_t Sniff14443AAppProcess(uint8_t *Buffer, uint16_t BitCount) { case STATE_REQA: LED_PORT.OUTCLR = LED_RED; // If received Reader REQA or WUPA - if (TrafficSource == TRAFFIC_READER && + if (SniffTrafficSource == TRAFFIC_READER && (Buffer[0] == 0x26 || Buffer[0] == 0x52)) { SniffState = STATE_ATQA; } else { @@ -76,7 +76,7 @@ uint16_t Sniff14443AAppProcess(uint8_t *Buffer, uint16_t BitCount) { break; case STATE_ATQA: // ATQA: P RRRR XXXX P XXRX XXXX - if (TrafficSource == TRAFFIC_CARD && + if (SniffTrafficSource == TRAFFIC_CARD && BitCount == 2 * 9 && (Buffer[0] & 0x20) == 0x00 && // Bit6 RFU shall be 0 (Buffer[1] & 0xE0) == 0x00 && // bit13-16 RFU shall be 0 @@ -87,7 +87,7 @@ uint16_t Sniff14443AAppProcess(uint8_t *Buffer, uint16_t BitCount) { } else { // If not ATQA, but REQA, then stay on this state, // Reset to REQA, save the counter and reset the counter - if (TrafficSource == TRAFFIC_READER && + if (SniffTrafficSource == TRAFFIC_READER && (Buffer[0] == 0x26 || Buffer[0] == 0x52)) { } else { // If not ATQA and not REQA then reset to REQA @@ -97,7 +97,7 @@ uint16_t Sniff14443AAppProcess(uint8_t *Buffer, uint16_t BitCount) { break; case STATE_ANTICOLLI: // SEL: 93/95/97 - if (TrafficSource == TRAFFIC_READER && + if (SniffTrafficSource == TRAFFIC_READER && BitCount == 2 * 8 && (Buffer[0] & 0xf0) == 0x90 && (Buffer[0] & 0x09) == 0x01) { @@ -108,7 +108,7 @@ uint16_t Sniff14443AAppProcess(uint8_t *Buffer, uint16_t BitCount) { } break; case STATE_UID: - if (TrafficSource == TRAFFIC_CARD && + if (SniffTrafficSource == TRAFFIC_CARD && BitCount == 5 * 9 && checkParityBits(Buffer, BitCount)) { SniffState = STATE_SELECT; @@ -119,7 +119,7 @@ uint16_t Sniff14443AAppProcess(uint8_t *Buffer, uint16_t BitCount) { case STATE_SELECT: // SELECT: 9 bytes, SEL = 93/95/97, NVB=70 - if (TrafficSource == TRAFFIC_READER && + if (SniffTrafficSource == TRAFFIC_READER && BitCount == 9 * 8 && (Buffer[0] & 0xf0) == 0x90 && (Buffer[0] & 0x09) == 0x01 && @@ -132,7 +132,7 @@ uint16_t Sniff14443AAppProcess(uint8_t *Buffer, uint16_t BitCount) { break; case STATE_SAK: // SAK: 1Byte SAK + CRC - if (TrafficSource == TRAFFIC_CARD && + if (SniffTrafficSource == TRAFFIC_CARD && BitCount == 3 * 9 && checkParityBits(Buffer, BitCount)) { if ((Buffer[0] & 0x04) == 0x00) { diff --git a/Firmware/Chameleon-Mini/Codec/Codec.c b/Firmware/Chameleon-Mini/Codec/Codec.c index 1523cb1..194d90d 100644 --- a/Firmware/Chameleon-Mini/Codec/Codec.c +++ b/Firmware/Chameleon-Mini/Codec/Codec.c @@ -26,6 +26,8 @@ static volatile struct { uint8_t CodecBuffer[CODEC_BUFFER_SIZE]; uint8_t CodecBuffer2[CODEC_BUFFER_SIZE]; +enum RCTraffic SniffTrafficSource; + void (* volatile isr_func_TCD0_CCC_vect)(void) = NULL; void (* volatile isr_func_CODEC_DEMOD_IN_INT0_VECT)(void) = NULL; void (* volatile isr_func_ACA_AC0_vect)(void); diff --git a/Firmware/Chameleon-Mini/Codec/Codec.h b/Firmware/Chameleon-Mini/Codec/Codec.h index 9a5ad38..0005d8c 100644 --- a/Firmware/Chameleon-Mini/Codec/Codec.h +++ b/Firmware/Chameleon-Mini/Codec/Codec.h @@ -119,6 +119,8 @@ typedef enum { extern uint8_t CodecBuffer[CODEC_BUFFER_SIZE]; extern uint8_t CodecBuffer2[CODEC_BUFFER_SIZE]; +extern enum RCTraffic {TRAFFIC_READER, TRAFFIC_CARD} SniffTrafficSource; + /* Shared ISR pointers and handlers */ extern void (* volatile isr_func_TCD0_CCC_vect)(void); void isr_Reader14443_2A_TCD0_CCC_vect(void); diff --git a/Firmware/Chameleon-Mini/Codec/SniffISO14443-2A.c b/Firmware/Chameleon-Mini/Codec/SniffISO14443-2A.c index b6fa1c1..2a3d683 100644 --- a/Firmware/Chameleon-Mini/Codec/SniffISO14443-2A.c +++ b/Firmware/Chameleon-Mini/Codec/SniffISO14443-2A.c @@ -56,8 +56,6 @@ static volatile uint16_t ReaderBitCount; static volatile uint16_t CardBitCount; static volatile uint16_t rawBitCount; -enum RCTraffic TrafficSource; - INLINE void CardSniffInit(void); INLINE void CardSniffDeinit(void); @@ -510,7 +508,7 @@ void Sniff14443ACodecTask(void) { // Let the Application layer know where this data comes from LEDHook(LED_CODEC_RX, LED_PULSE); - TrafficSource = TRAFFIC_READER; + SniffTrafficSource = TRAFFIC_READER; ApplicationProcess(CodecBuffer, ReaderBitCount); } @@ -523,7 +521,7 @@ void Sniff14443ACodecTask(void) { LEDHook(LED_CODEC_RX, LED_PULSE); // Let the Application layer know where this data comes from - TrafficSource = TRAFFIC_CARD; + SniffTrafficSource = TRAFFIC_CARD; ApplicationProcess(CodecBuffer2, CardBitCount); } diff --git a/Firmware/Chameleon-Mini/Codec/SniffISO14443-2A.h b/Firmware/Chameleon-Mini/Codec/SniffISO14443-2A.h index b8616b0..8e9080a 100644 --- a/Firmware/Chameleon-Mini/Codec/SniffISO14443-2A.h +++ b/Firmware/Chameleon-Mini/Codec/SniffISO14443-2A.h @@ -9,7 +9,6 @@ #include "Codec.h" #include "Terminal/CommandLine.h" -extern enum RCTraffic {TRAFFIC_READER, TRAFFIC_CARD} TrafficSource; /* Codec Interface */ void Sniff14443ACodecInit(void); void Sniff14443ACodecDeInit(void); diff --git a/Firmware/Chameleon-Mini/Codec/SniffISO15693.c b/Firmware/Chameleon-Mini/Codec/SniffISO15693.c index b079c11..2962f4e 100644 --- a/Firmware/Chameleon-Mini/Codec/SniffISO15693.c +++ b/Firmware/Chameleon-Mini/Codec/SniffISO15693.c @@ -50,7 +50,6 @@ static volatile uint8_t ShiftRegister; static volatile uint8_t ByteCount; static volatile uint8_t ReaderByteCount; static volatile uint8_t CardByteCount; -static volatile uint16_t DemodByteCount; static volatile uint16_t SampleDataCount; ///////////////////////////////////////////////// @@ -741,11 +740,12 @@ void SniffISO15693CodecTask(void) { if (Flags.ReaderDemodFinished) { Flags.ReaderDemodFinished = 0; - DemodByteCount = ReaderByteCount; - - if (DemodByteCount > 0) { - LogEntry(LOG_INFO_CODEC_SNI_READER_DATA, CodecBuffer, DemodByteCount); + if (ReaderByteCount > 0) { + LogEntry(LOG_INFO_CODEC_SNI_READER_DATA, CodecBuffer, ReaderByteCount); LEDHook(LED_CODEC_RX, LED_PULSE); + + SniffTrafficSource = TRAFFIC_READER; + ApplicationProcess(CodecBuffer, ReaderByteCount); } } @@ -753,12 +753,13 @@ void SniffISO15693CodecTask(void) { if(Flags.CardDemodFinished) { Flags.CardDemodFinished = 0; - DemodByteCount = CardByteCount; - - if (DemodByteCount > 0) { - LogEntry(LOG_INFO_CODEC_SNI_CARD_DATA, CodecBuffer2, DemodByteCount); + if (CardByteCount > 0) { + LogEntry(LOG_INFO_CODEC_SNI_CARD_DATA, CodecBuffer2, CardByteCount); LEDHook(LED_CODEC_RX, LED_PULSE); + SniffTrafficSource = TRAFFIC_CARD; + ApplicationProcess(CodecBuffer2, CardByteCount); + /* Note: the application might want to know if the frame is broken, need to extern bBrokenFrame */ } ReaderSniffInit();