From f6631f55740e3e7d27c2586fd3359018aeb5ec62 Mon Sep 17 00:00:00 2001 From: helloradiosky <157123396+helloradiosky@users.noreply.github.com> Date: Mon, 12 May 2025 12:11:06 +0800 Subject: [PATCH] fix(v14): incorrect switch definition and add v12/v14 battery voltage sensing (#6155) Co-authored-by: Richard Li --- .../targets/common/arm/stm32/CMakeLists.txt | 9 +++++ .../arm/stm32}/csd203_sensor.cpp | 20 +++++++++-- .../arm/stm32}/csd203_sensor.h | 1 + radio/src/targets/horus/CMakeLists.txt | 6 +--- radio/src/targets/taranis/CMakeLists.txt | 2 ++ radio/src/targets/taranis/board.cpp | 9 +++++ radio/src/targets/taranis/hal.h | 36 ++++++++++--------- radio/util/hw_defs/switch_config.py | 2 +- 8 files changed, 60 insertions(+), 25 deletions(-) rename radio/src/targets/{horus => common/arm/stm32}/csd203_sensor.cpp (96%) rename radio/src/targets/{horus => common/arm/stm32}/csd203_sensor.h (96%) diff --git a/radio/src/targets/common/arm/stm32/CMakeLists.txt b/radio/src/targets/common/arm/stm32/CMakeLists.txt index a5a82a032..2697b4e77 100644 --- a/radio/src/targets/common/arm/stm32/CMakeLists.txt +++ b/radio/src/targets/common/arm/stm32/CMakeLists.txt @@ -158,6 +158,15 @@ if(FLYSKY_GIMBAL) add_definitions(-DFLYSKY_GIMBAL) endif() +if(CSD203_SENSOR) + set(FIRMWARE_SRC ${FIRMWARE_SRC} + targets/common/arm/stm32/csd203_sensor.cpp + ) + add_definitions(-DCSD203_SENSOR) + message("-- Adding support for Current sensor") +endif() + + if(DEBUG OR CLI OR USB_SERIAL) add_definitions(-DUSB_SERIAL) message("-- Adding support for USB serial") diff --git a/radio/src/targets/horus/csd203_sensor.cpp b/radio/src/targets/common/arm/stm32/csd203_sensor.cpp similarity index 96% rename from radio/src/targets/horus/csd203_sensor.cpp rename to radio/src/targets/common/arm/stm32/csd203_sensor.cpp index 6804d6d5c..66fbb2ffa 100644 --- a/radio/src/targets/horus/csd203_sensor.cpp +++ b/radio/src/targets/common/arm/stm32/csd203_sensor.cpp @@ -34,6 +34,7 @@ #include "stm32_hal.h" #include "stm32_hal_ll.h" #include "stm32_i2c_driver.h" +#include "hal/i2c_driver.h" // clang-format off /* CSD203 Regsistor map */ @@ -203,7 +204,7 @@ bool I2C_CSD203_WriteRegister(uint8_t I2C_ADDR, uint8_t reg, uint8_t *buf, } } - if (stm32_i2c_master_tx(TOUCH_I2C_BUS, I2C_ADDR, uAddrAndBuf, len + 1, 100) < + if (stm32_i2c_master_tx(I2C_Bus_1, I2C_ADDR, uAddrAndBuf, len + 1, 100) < 0) { TRACE("I2C B1 ERROR: WriteRegister failed"); return false; @@ -218,12 +219,12 @@ bool I2C_CSD203_ReadRegister(uint8_t I2C_ADDR, uint8_t reg, uint8_t *buf, // uRegAddr[0] = (uint8_t)((reg & 0xFF00) >> 8); uRegAddr[0] = (uint8_t)(reg & 0x00FF); - if (stm32_i2c_master_tx(TOUCH_I2C_BUS, I2C_ADDR, uRegAddr, 1, 100) < 0) { + if (stm32_i2c_master_tx(I2C_Bus_1, I2C_ADDR, uRegAddr, 1, 100) < 0) { TRACE("I2C B1 ERROR: ReadRegister write reg address failed"); return false; } - if (stm32_i2c_master_rx(TOUCH_I2C_BUS, I2C_ADDR, buf, len, 100) < 0) { + if (stm32_i2c_master_rx(I2C_Bus_1, I2C_ADDR, buf, len, 100) < 0) { TRACE("I2C B1 ERROR: ReadRegister read reg address failed"); return false; } @@ -317,6 +318,19 @@ uint16_t CSD203_ReadManufacturerID(CSD_CONFIG *CSD203_CFG) return Data; } +void IICcsd203init(void) +{ + if (i2c_init(I2C_Bus_1) < 0) { + return; //err + } +} +void ReIICcsd203init(void) +{ + if (i2c_init(I2C_Bus_1) < 0) { + return; //err + } +} + void initCSD203(void) { CSD203MainInitFlag = false; diff --git a/radio/src/targets/horus/csd203_sensor.h b/radio/src/targets/common/arm/stm32/csd203_sensor.h similarity index 96% rename from radio/src/targets/horus/csd203_sensor.h rename to radio/src/targets/common/arm/stm32/csd203_sensor.h index 4bbe3a888..023ce01ee 100644 --- a/radio/src/targets/horus/csd203_sensor.h +++ b/radio/src/targets/common/arm/stm32/csd203_sensor.h @@ -21,5 +21,6 @@ #pragma once +void IICcsd203init(void); void initCSD203(void); void readCSD203(void); diff --git a/radio/src/targets/horus/CMakeLists.txt b/radio/src/targets/horus/CMakeLists.txt index 3ce49285a..80895a3ba 100644 --- a/radio/src/targets/horus/CMakeLists.txt +++ b/radio/src/targets/horus/CMakeLists.txt @@ -132,7 +132,7 @@ if (PCB STREQUAL X10) set(INTERNAL_GPS_BAUDRATE "9600" CACHE STRING "Baud rate for internal GPS") set(FLEXSW "2" CACHE STRING "Max flex inputs usable as switches") set(AUX2_SERIAL OFF) - set(HAS_CSD203_SENSOR ON) + set(CSD203_SENSOR ON) set(FLYSKY_GIMBAL ON) if (BLUETOOTH) set(AUX_SERIAL OFF) @@ -357,10 +357,6 @@ if(USB_CHARGER) target_sources(board PRIVATE ${TARGET_SRC_DIR}/usb_charger_driver.cpp) endif() -if(HAS_CSD203_SENSOR) - set(FIRMWARE_TARGET_SRC ${FIRMWARE_TARGET_SRC} csd203_sensor.cpp) - add_definitions(-DCSD203_SENSOR) -endif() set(FIRMWARE_SRC ${FIRMWARE_SRC} targets/common/arm/loadboot.cpp diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index 96c0c24f3..5367348bd 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -406,6 +406,7 @@ elseif(PCB STREQUAL X7) add_definitions(-DSTM32_SUPPORT_32BIT_TIMERS) set(PXX2 ON) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") + set(CSD203_SENSOR ON) if (NOT BLUETOOTH) set(AUX_SERIAL ON) endif() @@ -421,6 +422,7 @@ elseif(PCB STREQUAL X7) add_definitions(-DSTM32_SUPPORT_32BIT_TIMERS) set(PXX2 ON) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") + set(CSD203_SENSOR ON) set(FLYSKY_GIMBAL ON) if (NOT BLUETOOTH) set(AUX_SERIAL ON) diff --git a/radio/src/targets/taranis/board.cpp b/radio/src/targets/taranis/board.cpp index b25be8032..184454da7 100644 --- a/radio/src/targets/taranis/board.cpp +++ b/radio/src/targets/taranis/board.cpp @@ -60,6 +60,10 @@ #include "bluetooth_driver.h" #endif +#if defined(CSD203_SENSOR) + #include "csd203_sensor.h" +#endif + HardwareOptions hardwareOptions; #if !defined(BOOT) @@ -154,6 +158,11 @@ void boardInit() #endif #endif +#if defined(CSD203_SENSOR) + IICcsd203init(); + initCSD203(); +#endif + // If the radio was powered on by dual use USB, halt the boot process, let battery charge // TODO: needs refactoring if any other manufacturer implements either of the following: // - function switches and the radio supports charging diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h index f7b0c2735..1053e8477 100644 --- a/radio/src/targets/taranis/hal.h +++ b/radio/src/targets/taranis/hal.h @@ -674,7 +674,10 @@ #define SWITCHES_GPIO_REG_A GPIOD #define SWITCHES_GPIO_PIN_A LL_GPIO_PIN_0 // PD.00 #elif defined(RADIO_V14) || defined(RADIO_V12) - // ADC based switch + #define STORAGE_SWITCH_A + #define HARDWARE_SWITCH_A + #define SWITCHES_GPIO_REG_A GPIOC + #define SWITCHES_GPIO_PIN_A LL_GPIO_PIN_13 // PC.13 #elif defined(PCBX7) #define SWITCHES_GPIO_REG_A_L GPIOE #define SWITCHES_GPIO_PIN_A_L LL_GPIO_PIN_7 // PE.07 @@ -890,7 +893,10 @@ #elif defined(RADIO_GX12) #define SWITCHES_D_2POS #elif defined(RADIO_V14) || defined(RADIO_V12) -// ADC based switch + #define STORAGE_SWITCH_D + #define HARDWARE_SWITCH_D + #define SWITCHES_GPIO_REG_D GPIOE + #define SWITCHES_GPIO_PIN_D LL_GPIO_PIN_8 // PE.08 #elif defined(PCBX7) && !defined(RADIO_COMMANDO8) #define SWITCHES_GPIO_REG_D_L GPIOE #define SWITCHES_GPIO_PIN_D_L LL_GPIO_PIN_1 // PE.01 @@ -963,8 +969,7 @@ #elif defined(RADIO_GX12) #define SWITCHES_E_3POS #elif defined(RADIO_V14) || defined(RADIO_V12) - #define SWITCHES_GPIO_REG_E GPIOC - #define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_13 // PC.13 + // ADC based switch #elif defined(PCBX7) // no SWE #else @@ -1027,8 +1032,7 @@ #elif defined(RADIO_GX12) #define SWITCHES_F_3POS #elif defined(RADIO_V14) || defined(RADIO_V12) - #define SWITCHES_GPIO_REG_F GPIOE - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_8 // PE.08 + // ADC based switch #elif defined(PCBX7) #define SWITCHES_GPIO_REG_F GPIOE #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_14 // PE.14 @@ -1700,17 +1704,17 @@ #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_8 // ADC12_IN8 -> ADC1_IN8 #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_6 // ADC12_IN6 -> ADC1_IN6 #define ADC_CHANNEL_POT3 LL_ADC_CHANNEL_12 // ADC123_IN12 -> ADC1_IN12 - #define ADC_GPIO_PIN_SWA LL_GPIO_PIN_7 // PA.07 + #define ADC_GPIO_PIN_SWE LL_GPIO_PIN_7 // PA.07 #define ADC_GPIO_PIN_SWB LL_GPIO_PIN_5 // PA.05 #define ADC_GPIO_PIN_SWC LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIO_PIN_SWD LL_GPIO_PIN_5 // PC.05 - #define ADC_CHANNEL_SWA LL_ADC_CHANNEL_7 // ADC12_IN7 -> ADC1_IN7 + #define ADC_GPIO_PIN_SWF LL_GPIO_PIN_5 // PC.05 + #define ADC_CHANNEL_SWE LL_ADC_CHANNEL_7 // ADC12_IN7 -> ADC1_IN7 #define ADC_CHANNEL_SWB LL_ADC_CHANNEL_5 // ADC12_IN5 -> ADC1_IN5 #define ADC_CHANNEL_SWC LL_ADC_CHANNEL_10 // ADC123_IN10 -> ADC1_IN10 - #define ADC_CHANNEL_SWD LL_ADC_CHANNEL_15 // ADC12_IN15 -> ADC1_IN15 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_SWA | ADC_GPIO_PIN_SWB) + #define ADC_CHANNEL_SWF LL_ADC_CHANNEL_15 // ADC12_IN15 -> ADC1_IN15 + #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_SWE | ADC_GPIO_PIN_SWB) #define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT1) - #define ADC_GPIOC_PINS (ADC_GPIO_PIN_POT3 | ADC_GPIO_PIN_SWC | ADC_GPIO_PIN_SWD) + #define ADC_GPIOC_PINS (ADC_GPIO_PIN_POT3 | ADC_GPIO_PIN_SWC | ADC_GPIO_PIN_SWF) #define ADC_VREF_PREC2 330 #elif defined(PCBX7) #define HARDWARE_POT1 @@ -2546,14 +2550,14 @@ #endif // LCD driver -#if defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_ZORRO) || defined(RADIO_POCKET) || defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_T8) || defined(RADIO_COMMANDO8) || defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_TPROS) || defined(RADIO_FAMILY_T20) || defined(RADIO_MT12) || defined(RADIO_T12MAX) || defined(RADIO_V14) || defined(RADIO_V12) || defined(RADIO_BUMBLEBEE) +#if defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_ZORRO) || defined(RADIO_POCKET) || defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_T8) || defined(RADIO_COMMANDO8) || defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_TPROS) || defined(RADIO_FAMILY_T20) || defined(RADIO_MT12) || defined(RADIO_T12MAX) || defined(RADIO_V12) || defined(RADIO_BUMBLEBEE) #define LCD_VERTICAL_INVERT #endif -#if defined(RADIO_LR3PRO) || defined(RADIO_TPROV2) || defined(RADIO_TPROS) || defined(RADIO_FAMILY_T20) || defined(RADIO_T14) || defined(RADIO_BUMBLEBEE) || defined(RADIO_GX12) +#if defined(RADIO_LR3PRO) || defined(RADIO_TPROV2) || defined(RADIO_TPROS) || defined(RADIO_FAMILY_T20) || defined(RADIO_T14) || defined(RADIO_BUMBLEBEE) || defined(RADIO_GX12) || defined(RADIO_V14) #define LCD_HORIZONTAL_INVERT #define OLED_SCREEN #endif -#if defined(RADIO_T14) || defined(RADIO_GX12) +#if defined(RADIO_T14) || defined(RADIO_GX12) || defined(RADIO_V14) #define SSD1309_LCD #endif #if defined(PCBX9E) @@ -2625,7 +2629,7 @@ #if defined(PCBXLITE) || defined(PCBX9LITE) || defined(PCBX7ACCESS) || \ defined(RADIO_ZORRO) || defined(RADIO_POCKET) || defined(RADIO_X9DP2019) || \ - defined(RADIO_GX12) + defined(RADIO_GX12) || defined(RADIO_V12) || defined(RADIO_V14) #define I2C_B1_SCL_GPIO GPIO_PIN(GPIOB, 8) // PB.08 #define I2C_B1_SDA_GPIO GPIO_PIN(GPIOB, 9) // PB.09 #else diff --git a/radio/util/hw_defs/switch_config.py b/radio/util/hw_defs/switch_config.py index 58fd17940..b39616f09 100644 --- a/radio/util/hw_defs/switch_config.py +++ b/radio/util/hw_defs/switch_config.py @@ -116,7 +116,7 @@ SWITCH_CONFIG = { "SE": {"default": "2POS", "display": [0, 2]}, # right side "SC": {"default": "2POS", "display": [1, 0]}, - "SD": {"default": "3POS", "display": [1, 1]}, + "SD": {"default": "2POS", "display": [1, 1]}, "SF": {"default": "TOGGLE", "display": [1, 2]}, }, "v16": {