diff --git a/Firmware/Chameleon-Mini/Application/Vicinity.h b/Firmware/Chameleon-Mini/Application/Vicinity.h index 797ff01..7f19a91 100644 --- a/Firmware/Chameleon-Mini/Application/Vicinity.h +++ b/Firmware/Chameleon-Mini/Application/Vicinity.h @@ -11,9 +11,6 @@ #include "Application.h" #include "ISO15693-A.h" -#define ISO15693_GENERIC_UID_SIZE 8 //ISO15693_UID_SIZE -#define ISO15693_GENERIC_MEM_SIZE 8192 //ISO15693_MAX_MEM_SIZE - void VicinityAppInit(void); void VicinityAppReset(void); void VicinityAppTask(void); diff --git a/Firmware/Chameleon-Mini/Codec/ISO15693.c b/Firmware/Chameleon-Mini/Codec/ISO15693.c index bab785d..8679dc2 100644 --- a/Firmware/Chameleon-Mini/Codec/ISO15693.c +++ b/Firmware/Chameleon-Mini/Codec/ISO15693.c @@ -94,13 +94,13 @@ void isr_ISO15693_CODEC_DEMOD_IN_INT0_VECT(void) INLINE void ISO15693_EOC(void) { - BitRate1 = 256 * 4; + BitRate1 = 256 * 4; // 256 * 4 - 1 if (CodecBuffer[0] & ISO15693_REQ_DATARATE_HIGH) BitRate1 = 256; if (CodecBuffer[0] & ISO15693_REQ_SUBCARRIER_DUAL) { - BitRate2 = 252 * 4; + BitRate2 = 252 * 4; // 252 * 4 - 3 if (CodecBuffer[0] & ISO15693_REQ_DATARATE_HIGH) BitRate2 = 252; } else { @@ -254,10 +254,10 @@ void isr_ISO15693_CODEC_TIMER_LOADMOD_CCB_VECT(void) } LOADMOD_START_SINGLE_LABEL: - CodecStartSubcarrier(); + /* Application produced data. With this interrupt we are aligned to the bit-grid. */ ShiftRegister = SOF_PATTERN; BitSent = 0; - // fallthrough + /* Fallthrough */ LOADMOD_SOF_SINGLE_LABEL: if (ShiftRegister & 0x80) { CodecSetLoadmodState(true); @@ -265,6 +265,8 @@ void isr_ISO15693_CODEC_TIMER_LOADMOD_CCB_VECT(void) CodecSetLoadmodState(false); } + CodecStartSubcarrier(); + ShiftRegister <<= 1; BitSent++; @@ -335,10 +337,10 @@ void isr_ISO15693_CODEC_TIMER_LOADMOD_CCB_VECT(void) // ------------------------------------------------------------- LOADMOD_START_DUAL_LABEL: - CodecStartSubcarrier(); ShiftRegister = SOF_PATTERN; BitSent = 0; CodecSetLoadmodState(true); + CodecStartSubcarrier(); // fallthrough LOADMOD_SOF_DUAL_LABEL: if (ShiftRegister & 0x80) { @@ -433,7 +435,7 @@ void isr_ISO15693_CODEC_TIMER_LOADMOD_CCB_VECT(void) #endif /* CONFIG_VICINITY_SUPPORT */ void StartISO15693Demod(void) { - + CodecBufferPtr = CodecBuffer; Flags.DemodFinished = 0; Flags.LoadmodFinished = 0; @@ -445,7 +447,8 @@ void StartISO15693Demod(void) { ModulationPauseCount = 0; ByteCount = 0; ShiftRegister = 0; - + + /* Activate Power for demodulator */ CodecSetDemodPower(true); /* Configure sampling-timer free running and sync to first modulation-pause. */ @@ -521,39 +524,38 @@ void ISO15693CodecTask(void) if (DemodByteCount > 0) { + LogEntry(LOG_INFO_CODEC_RX_DATA, CodecBuffer, DemodByteCount); + LEDHook(LED_CODEC_RX, LED_PULSE); + if (CodecBuffer[0] & ISO15693_REQ_SUBCARRIER_DUAL) { bDualSubcarrier = true; } - LogEntry(LOG_INFO_CODEC_RX_DATA, CodecBuffer, DemodByteCount); AppReceivedByteCount = ApplicationProcess(CodecBuffer, DemodByteCount); - - } else { - ApplicationReset(); } - //This is only reached when we've received a valid frame - if (AppReceivedByteCount > 0) { + /* This is only reached when we've received a valid frame */ + if (AppReceivedByteCount != ISO15693_APP_NO_RESPONSE) { LogEntry(LOG_INFO_CODEC_TX_DATA, CodecBuffer, AppReceivedByteCount); - CodecBufferPtr = CodecBuffer; - ByteCount = AppReceivedByteCount; + LEDHook(LED_CODEC_TX, LED_PULSE); - CodecStartSubcarrier(); + ByteCount = AppReceivedByteCount; + CodecBufferPtr = CodecBuffer; /* Start loadmodulating */ if (bDualSubcarrier) { - StateRegister = LOADMOD_START_DUAL; CodecSetSubcarrier(CODEC_SUBCARRIERMOD_OOK, SUBCARRIER_2); + StateRegister = LOADMOD_START_DUAL; } else { - StateRegister = LOADMOD_START_SINGLE; CodecSetSubcarrier(CODEC_SUBCARRIERMOD_OOK, SUBCARRIER_1); + StateRegister = LOADMOD_START_SINGLE; } } else { - /* No data to be processed. Disable T1 waiting and - * start listening again */ + /* No data to be processed. Disable T1 waiting and start listening again */ CODEC_TIMER_LOADMOD.CTRLA = TC_CLKSEL_OFF_gc; - CODEC_TIMER_LOADMOD.INTCTRLB = TC_CCBINTLVL_OFF_gc; + CODEC_TIMER_LOADMOD.INTCTRLB = 0; + StartISO15693Demod(); } } diff --git a/Firmware/Chameleon-Mini/Codec/ISO15693.h b/Firmware/Chameleon-Mini/Codec/ISO15693.h index 93162d7..6c2e01b 100644 --- a/Firmware/Chameleon-Mini/Codec/ISO15693.h +++ b/Firmware/Chameleon-Mini/Codec/ISO15693.h @@ -12,11 +12,6 @@ #define ISO15693_APP_NO_RESPONSE 0x0000 -/* VERY OUTDATED */ -#define TIMER_SAMPLING TCC0 -#define TIMER_T1_BITRATE TCD1 -#define TIMER_SUBCARRIER TCD0 - #define SUBCARRIER_1 32 #define SUBCARRIER_2 28 #define SUBCARRIER_OFF 0