diff --git a/src/main/drivers/transponder_ir.c b/src/main/drivers/transponder_ir.c index e3e499d077..9c4a4fcb3e 100644 --- a/src/main/drivers/transponder_ir.c +++ b/src/main/drivers/transponder_ir.c @@ -167,10 +167,10 @@ bool transponderIrInit(const transponderProvider_e provider) } switch (provider) { - case ARCITIMER: + case TRANSPONDER_ARCITIMER: transponderIrInitArcitimer(&transponder); break; - case ILAP: + case TRANSPONDER_ILAP: transponderIrInitIlap(&transponder); break; case TRANSPONDER_ERLT: diff --git a/src/main/fc/.fc_msp.c.swo b/src/main/fc/.fc_msp.c.swo deleted file mode 100644 index 9e2c6c1d37..0000000000 Binary files a/src/main/fc/.fc_msp.c.swo and /dev/null differ diff --git a/src/main/fc/fc_msp.c b/src/main/fc/fc_msp.c index 49ed2e2503..10ebaaee0a 100644 --- a/src/main/fc/fc_msp.c +++ b/src/main/fc/fc_msp.c @@ -749,25 +749,27 @@ static bool mspCommonProcessOutCommand(uint8_t cmdMSP, sbuf_t *dst, mspPostProce break; case MSP_TRANSPONDER_CONFIG: { -#define TRANSPONDER_SUPPORTED_MASK 0x01 // 00000001 -#define TRANSPONDER_PROVIDER_MASK 0x0E // 00001110 -#define TRANSPONDER_DATA_SIZE_MASK 0xF0 // 11110000 -#define TRANSPONDER_PROVIDER_OFFSET 1 -#define TRANSPONDER_DATA_SIZE_OFFSET 4 - #ifdef TRANSPONDER - uint8_t header = 0; + // Backward compatibility to BFC 3.1.1 is lost for this message type + sbufWriteU8(dst, TRANSPONDER_PROVIDER_COUNT); + for (unsigned int i = 0; i < TRANSPONDER_PROVIDER_COUNT; i++) { + sbufWriteU8(dst, transponderRequirements[i].provider); + sbufWriteU8(dst, transponderRequirements[i].dataLength); + } - header |= 1 & TRANSPONDER_SUPPORTED_MASK; - header |= (transponderConfig()->provider << TRANSPONDER_PROVIDER_OFFSET) & TRANSPONDER_PROVIDER_MASK; - header |= ((sizeof(transponderConfig()->data) << TRANSPONDER_DATA_SIZE_OFFSET) & TRANSPONDER_DATA_SIZE_MASK); + uint8_t provider = transponderConfig()->provider; + sbufWriteU8(dst, provider); - sbufWriteU8(dst, header); - for (unsigned int i = 0; i < sizeof(transponderConfig()->data); i++) { - sbufWriteU8(dst, transponderConfig()->data[i]); + if (provider) { + uint8_t requirementIndex = provider - 1; + uint8_t providerDataLength = transponderRequirements[requirementIndex].dataLength; + + for (unsigned int i = 0; i < providerDataLength; i++) { + sbufWriteU8(dst, transponderConfig()->data[i]); + } } #else - sbufWriteU8(dst, 0 & TRANSPONDER_SUPPORTED_MASK); + sbufWriteU8(dst, 0); // no providers #endif break; } @@ -2000,30 +2002,36 @@ static mspResult_e mspCommonProcessInCommand(uint8_t cmdMSP, sbuf_t *src) switch (cmdMSP) { #ifdef TRANSPONDER - case MSP_SET_TRANSPONDER_CONFIG: - { - uint8_t tmp = sbufReadU8(src); + case MSP_SET_TRANSPONDER_CONFIG: { + // Backward compatibility to BFC 3.1.1 is lost for this message type - uint8_t type; - switch(tmp){ - case 0x02: - type = ILAP; - break; - case 0x04: - type = ARCITIMER; - break; + uint8_t provider = sbufReadU8(src); + uint8_t bytesRemaining = dataSize - 1; + + if (provider > TRANSPONDER_PROVIDER_COUNT) { + return MSP_RESULT_ERROR; } - if(type != transponderConfig()->provider){ + const uint8_t requirementIndex = provider - 1; + const uint8_t transponderDataSize = transponderRequirements[requirementIndex].dataLength; + + transponderConfigMutable()->provider = provider; + + if (provider == TRANSPONDER_NONE) { + break; + } + + if (bytesRemaining != transponderDataSize) { + return MSP_RESULT_ERROR; + } + + if (provider != transponderConfig()->provider) { transponderStopRepeating(); } - transponderConfigMutable()->provider = type; + memset(transponderConfigMutable()->data, 0, sizeof(transponderConfig()->data)); - if (dataSize != sizeof(transponderConfig()->data) + 1) { - return MSP_RESULT_ERROR; - } - for (unsigned int i = 0; i < sizeof(transponderConfig()->data); i++) { + for (unsigned int i = 0; i < transponderDataSize; i++) { transponderConfigMutable()->data[i] = sbufReadU8(src); } transponderUpdateData(); diff --git a/src/test/Makefile b/src/test/Makefile index 15aa9785e5..07dcb1f9f4 100644 --- a/src/test/Makefile +++ b/src/test/Makefile @@ -162,6 +162,11 @@ telemetry_ibus_unittest_SRC := \ $(USER_DIR)/telemetry/ibus.c +transponder_ir_unittest_SRC := \ + $(USER_DIR)/drivers/transponder_ir_ilap.c \ + $(USER_DIR)/drivers/transponder_ir_arcitimer.c + + type_conversion_unittest_SRC := \ $(USER_DIR)/common/typeconversion.c @@ -169,9 +174,6 @@ type_conversion_unittest_SRC := \ ws2811_unittest_SRC := \ $(USER_DIR)/drivers/light_ws2811strip.c - - - # Please tweak the following variable definitions as needed by your # project, except GTEST_HEADERS, which you can use in your own targets # but shouldn't modify. @@ -356,43 +358,6 @@ $(OBJECT_DIR)/$1/$1 : $$($$1_OBJS) \ $(V1) mkdir -p $(dir $$@) $(V1) $(CXX) $(CXX_FLAGS) $(PG_FLAGS) $$^ -o $$@ -$(OBJECT_DIR)/drivers/transponder_ir_arcitimer.o : \ - $(USER_DIR)/drivers/transponder_ir_arcitimer.c \ - $(USER_DIR)/drivers/transponder_ir.h \ - $(USER_DIR)/drivers/transponder_ir_arcitimer.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CC) $(C_FLAGS) $(TEST_CFLAGS) -c $(USER_DIR)/drivers/transponder_ir_arcitimer.c -o $@ - -$(OBJECT_DIR)/drivers/transponder_ir_ilap.o : \ - $(USER_DIR)/drivers/transponder_ir_ilap.c \ - $(USER_DIR)/drivers/transponder_ir.h \ - $(USER_DIR)/drivers/transponder_ir_ilap.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CC) $(C_FLAGS) $(TEST_CFLAGS) -c $(USER_DIR)/drivers/transponder_ir_ilap.c -o $@ - -$(OBJECT_DIR)/transponder_unittest.o : \ - $(TEST_DIR)/transponder_unittest.cc \ - $(USER_DIR)/drivers/transponder_ir.h \ - $(USER_DIR)/drivers/transponder_ir_arcitimer.h \ - $(USER_DIR)/drivers/transponder_ir_ilap.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/transponder_unittest.cc -o $@ - -$(OBJECT_DIR)/transponder_unittest : \ - $(OBJECT_DIR)/drivers/transponder_ir_arcitimer.o \ - $(OBJECT_DIR)/drivers/transponder_ir_ilap.o \ - $(OBJECT_DIR)/transponder_unittest.o \ - $(OBJECT_DIR)/gtest_main.a - - $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ - - test_$1: $(OBJECT_DIR)/$1/$1 $(V1) $$< $$(EXEC_OPTS) "$(STDOUT)" && echo "running $$@: PASS" diff --git a/src/test/unit/transponder_unittest.cc b/src/test/unit/transponder_ir_unittest.cc similarity index 95% rename from src/test/unit/transponder_unittest.cc rename to src/test/unit/transponder_ir_unittest.cc index 769728f5eb..123067243d 100644 --- a/src/test/unit/transponder_unittest.cc +++ b/src/test/unit/transponder_ir_unittest.cc @@ -15,10 +15,10 @@ * along with Cleanflight. If not, see . */ - #include #include #include + extern "C" { #include #include "build/build_config.h" @@ -27,11 +27,16 @@ extern "C" { #include "drivers/transponder_ir_arcitimer.h" #include "drivers/transponder_ir_ilap.h" } + #include "unittest_macros.h" #include "gtest/gtest.h" + extern "C" { STATIC_UNIT_TESTED extern uint16_t dmaBufferOffset; + STATIC_UNIT_TESTED void updateTransponderDMABufferIlap(transponder_t *transponder, const uint8_t* transponderData); + STATIC_UNIT_TESTED void updateTransponderDMABufferArcitimer(transponder_t *transponder, const uint8_t* transponderData); } + TEST(transponderTest, updateTransponderDMABufferArcitimer) { //input uint8_t data[9] = {0x1F, 0xFC, 0x8F, 0x3, 0xF0, 0x1, 0xF8, 0x1F, 0x0}; @@ -63,6 +68,7 @@ TEST(transponderTest, updateTransponderDMABufferArcitimer) { EXPECT_EQ(transponder.transponderIrDMABuffer.arcitimer[i], excepted[i]); } } + TEST(transponderTest, updateTransponderDMABufferIlap) { uint8_t data[9] = {0x1F, 0xFC, 0x8F, 0x3, 0xF0, 0x1, 0x0, 0x0, 0x0}; @@ -97,6 +103,4 @@ TEST(transponderTest, updateTransponderDMABufferIlap) { for(i = 0; i < transponder.dma_buffer_size; i++) { EXPECT_EQ(transponder.transponderIrDMABuffer.ilap[i], excepted[i]); } - - }