From 3c297256721fa540ac6d0e4d600c6bd55d2c37dc Mon Sep 17 00:00:00 2001 From: Hydra Date: Mon, 16 Jan 2017 19:27:20 +0000 Subject: [PATCH] Prevent hard-fault when no IO available for transponder. This cleans up the transponder api too. --- src/main/drivers/transponder_ir.c | 8 ++++++- src/main/drivers/transponder_ir.h | 2 +- src/main/drivers/transponder_ir_stm32f30x.c | 4 ---- src/main/fc/fc_init.c | 1 - src/main/io/transponder_ir.c | 25 +++++++++++---------- src/main/io/transponder_ir.h | 2 -- 6 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/main/drivers/transponder_ir.c b/src/main/drivers/transponder_ir.c index e56a51d61..92c6ebcdc 100644 --- a/src/main/drivers/transponder_ir.c +++ b/src/main/drivers/transponder_ir.c @@ -39,7 +39,7 @@ uint8_t transponderIrDMABuffer[TRANSPONDER_DMA_BUFFER_SIZE]; volatile uint8_t transponderIrDataTransferInProgress = 0; -void transponderIrInit(void) +bool transponderIrInit(void) { memset(&transponderIrDMABuffer, 0, TRANSPONDER_DMA_BUFFER_SIZE); @@ -51,7 +51,13 @@ void transponderIrInit(void) } } + if (!ioTag) { + return false; + } + + transponderIrHardwareInit(ioTag); + return true; } bool isTransponderIrReady(void) diff --git a/src/main/drivers/transponder_ir.h b/src/main/drivers/transponder_ir.h index 253d1d9a5..a3e76d444 100644 --- a/src/main/drivers/transponder_ir.h +++ b/src/main/drivers/transponder_ir.h @@ -30,7 +30,7 @@ #define BIT_TOGGLE_1 78 // (156 / 2) #define BIT_TOGGLE_0 0 -void transponderIrInit(); +bool transponderIrInit(); void transponderIrDisable(void); void transponderIrHardwareInit(ioTag_t ioTag); diff --git a/src/main/drivers/transponder_ir_stm32f30x.c b/src/main/drivers/transponder_ir_stm32f30x.c index 6b2125c7c..807d08016 100644 --- a/src/main/drivers/transponder_ir_stm32f30x.c +++ b/src/main/drivers/transponder_ir_stm32f30x.c @@ -45,10 +45,6 @@ static void TRANSPONDER_DMA_IRQHandler(dmaChannelDescriptor_t* descriptor) void transponderIrHardwareInit(ioTag_t ioTag) { - if (!ioTag) { - return; - } - TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; DMA_InitTypeDef DMA_InitStructure; diff --git a/src/main/fc/fc_init.c b/src/main/fc/fc_init.c index 4c2a7589c..7d0dfbc86 100644 --- a/src/main/fc/fc_init.c +++ b/src/main/fc/fc_init.c @@ -490,7 +490,6 @@ void init(void) #ifdef TRANSPONDER if (feature(FEATURE_TRANSPONDER)) { transponderInit(masterConfig.transponderData); - transponderEnable(); transponderStartRepeating(); systemState |= SYSTEM_STATE_TRANSPONDER_ENABLED; } diff --git a/src/main/io/transponder_ir.c b/src/main/io/transponder_ir.c index f378838b6..a00204971 100644 --- a/src/main/io/transponder_ir.c +++ b/src/main/io/transponder_ir.c @@ -75,21 +75,14 @@ void transponderUpdate(timeUs_t currentTimeUs) void transponderInit(uint8_t* transponderData) { - transponderInitialised = false; - transponderIrInit(); + transponderInitialised = transponderIrInit(); + if (!transponderInitialised) { + return; + } + transponderIrUpdateData(transponderData); } -void transponderEnable(void) -{ - transponderInitialised = true; -} - -void transponderDisable(void) -{ - transponderInitialised = false; -} - void transponderStopRepeating(void) { transponderRepeat = false; @@ -97,11 +90,19 @@ void transponderStopRepeating(void) void transponderStartRepeating(void) { + if (!transponderInitialised) { + return; + } + transponderRepeat = true; } void transponderUpdateData(uint8_t* transponderData) { + if (!transponderInitialised) { + return; + } + transponderIrUpdateData(transponderData); } diff --git a/src/main/io/transponder_ir.h b/src/main/io/transponder_ir.h index 27e48ce8a..166b09b64 100644 --- a/src/main/io/transponder_ir.h +++ b/src/main/io/transponder_ir.h @@ -21,8 +21,6 @@ void transponderInit(uint8_t* transponderCode); -void transponderEnable(void); -void transponderDisable(void); void transponderUpdate(timeUs_t currentTimeUs); void transponderUpdateData(uint8_t* transponderData); void transponderTransmitOnce(void);