From f680d860341c29f1b57cca74fdcacd218dfc8a2e Mon Sep 17 00:00:00 2001 From: 3djc Date: Wed, 11 Sep 2024 10:50:16 +0200 Subject: [PATCH] feat: use (only) dedicated charge led on compatible Jumper handsets (#5512) --- radio/src/targets/horus/CMakeLists.txt | 5 ++++ radio/src/targets/horus/board.cpp | 36 ++---------------------- radio/src/targets/taranis/CMakeLists.txt | 7 +++++ radio/src/targets/taranis/board.cpp | 18 ++++++++++-- 4 files changed, 31 insertions(+), 35 deletions(-) diff --git a/radio/src/targets/horus/CMakeLists.txt b/radio/src/targets/horus/CMakeLists.txt index feda578f4..981bea6be 100644 --- a/radio/src/targets/horus/CMakeLists.txt +++ b/radio/src/targets/horus/CMakeLists.txt @@ -75,6 +75,7 @@ if (PCB STREQUAL X10) endif() # Aux2 is reserved for serial gimbal on this radio set(AUX2_SERIAL OFF) + set(USB_CHARGE_LED YES) add_definitions(-DMANUFACTURER_JUMPER) set(LCD_DRIVER lcd_st7796s_driver.cpp) elseif (PCBREV STREQUAL T16) @@ -341,6 +342,10 @@ if(SWSERIALPOWER) add_definitions(-DSWSERIALPOWER) endif() +if(USB_CHARGE_LED) + add_definitions(-DUSB_CHARGE_LED) +endif() + if(USB_CHARGER) add_definitions(-DUSB_CHARGER) target_sources(board PRIVATE ${TARGET_SRC_DIR}/usb_charger_driver.cpp) diff --git a/radio/src/targets/horus/board.cpp b/radio/src/targets/horus/board.cpp index 0d1506d4e..838a19159 100644 --- a/radio/src/targets/horus/board.cpp +++ b/radio/src/targets/horus/board.cpp @@ -127,46 +127,14 @@ void boardInit() board_set_bor_level(); #endif - pwrInit(); - -#if defined(FUNCTION_SWITCHES) && !defined(DEBUG_SEGGER_RTT) -#if defined(RADIO_T15) -#define LEDCHARGEON(x) fsLedOff(x) -#define LEDCHARGEOFF(x) fsLedOn(x) -#else -#define LEDCHARGEON(x) fsLedOn(x) -#define LEDCHARGEOFF(x) fsLedOff(x) -#endif +#if defined(FUNCTION_SWITCHES) && !defined(DEBUG_DISABLE_USB) // This is needed to prevent radio from starting when usb is plugged to charge usbInit(); - ledInit(); // prime debounce state... usbPlugged(); if (usbPlugged()) { delaysInit(); - adcInit(&_adc_driver); - getADC(); - pwrOn(); // required to get bat adc reads - INTERNAL_MODULE_OFF(); - EXTERNAL_MODULE_OFF(); - for (uint8_t i=0; i < NUM_FUNCTIONS_SWITCHES; i++) - LEDCHARGEOFF(i); while (usbPlugged()) { - // Let it charge ... - getADC(); // Warning: the value read does not include VBAT calibration - // Also, MCU is running which create a drop vs off - if (getBatteryVoltage() >= 660) - LEDCHARGEON(0); - if (getBatteryVoltage() >= 700) - LEDCHARGEON(1); - if (getBatteryVoltage() >= 740) - LEDCHARGEON(2); - if (getBatteryVoltage() >= 780) - LEDCHARGEON(3); - if (getBatteryVoltage() >= 810) - LEDCHARGEON(4); - if (getBatteryVoltage() >= 820) - LEDCHARGEON(5); delay_ms(1000); } while(1) // Wait power to drain @@ -174,6 +142,8 @@ void boardInit() } #endif + pwrInit(); + boardInitModulePorts(); #if defined(INTMODULE_HEARTBEAT) && \ diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index 2515cdacb..cec14f4cc 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -145,6 +145,7 @@ elseif(PCB STREQUAL X7) set(NAVIGATION_TYPE x7) set(CPU_TYPE_FULL STM32F407xG) set(ROTARY_ENCODER YES) + set(USB_CHARGE_LED YES) add_definitions(-DRADIO_TPROS) add_definitions(-DMANUFACTURER_JUMPER) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") @@ -156,6 +157,7 @@ elseif(PCB STREQUAL X7) set(ROTARY_ENCODER YES) set(CPU_TYPE_FULL STM32F407xG) set(PXX2 ON) + set(USB_CHARGE_LED YES) add_definitions(-DRADIO_T14) add_definitions(-DMANUFACTURER_JUMPER) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") @@ -166,6 +168,7 @@ elseif(PCB STREQUAL X7) set(FLAVOUR t12max) set(NAVIGATION_TYPE x7) set(ROTARY_ENCODER YES) + set(USB_CHARGE_LED YES) set(CPU_TYPE_FULL STM32F407xG) add_definitions(-DRADIO_T12MAX) add_definitions(-DMANUFACTURER_JUMPER) @@ -609,6 +612,10 @@ if(BIND_KEY) target_sources(board PRIVATE ${TARGET_SRC_DIR}/bind_button_driver.cpp) endif() +if(USB_CHARGE_LED) + add_definitions(-DUSB_CHARGE_LED) +endif() + if(USB_CHARGER) add_definitions(-DUSB_CHARGER) target_sources(board PRIVATE ${TARGET_SRC_DIR}/usb_charger_driver.cpp) diff --git a/radio/src/targets/taranis/board.cpp b/radio/src/targets/taranis/board.cpp index fa36f2b40..8d9d37ea1 100644 --- a/radio/src/targets/taranis/board.cpp +++ b/radio/src/targets/taranis/board.cpp @@ -114,6 +114,20 @@ void boardInit() LL_APB1_GRP1_EnableClock(AUDIO_RCC_APB1Periph); LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SYSCFG); +#if defined(USB_CHARGE_LED) && !defined(DEBUG_DISABLE_USB) + usbInit(); + // prime debounce state... + usbPlugged(); + + if (usbPlugged()) { + delaysInit(); + while (usbPlugged()) { + delay_ms(1000); + } + pwrOff(); + } +#endif + #if defined(BLUETOOTH) && !defined(PCBX9E) bluetoothInit(BLUETOOTH_DEFAULT_BAUDRATE, true); #endif @@ -158,7 +172,7 @@ void boardInit() // TODO: needs refactoring if any other manufacturer implements either of the following: // - function switches and the radio supports charging // - single USB for data + charge which powers on radio -#if defined(MANUFACTURER_JUMPER) +#if defined(MANUFACTURER_JUMPER) && !defined(USB_CHARGE_LED) // This is needed to prevent radio from starting when usb is plugged to charge usbInit(); // prime debounce state... @@ -166,13 +180,13 @@ void boardInit() if (usbPlugged()) { delaysInit(); + __enable_irq(); adcInit(&_adc_driver); getADC(); pwrOn(); // required to get bat adc reads INTERNAL_MODULE_OFF(); EXTERNAL_MODULE_OFF(); delay_ms(2000); // let this stabilize - while (usbPlugged()) { // // Let it charge ... getADC(); // Warning: the value read does not include VBAT calibration