diff --git a/radio/src/gui/128x64/view_main.cpp b/radio/src/gui/128x64/view_main.cpp index a63ce5746..ee486269b 100644 --- a/radio/src/gui/128x64/view_main.cpp +++ b/radio/src/gui/128x64/view_main.cpp @@ -183,8 +183,13 @@ void displayBattVoltage() lcdDrawSolidFilledRect(VBATT_X - 25, VBATT_Y + 9, 21, 5); lcdDrawSolidVerticalLine(VBATT_X - 4, VBATT_Y + 10, 3); uint8_t count = GET_TXBATT_BARS(20); - for (uint8_t i = 0; i < count; i += 2) + for (uint8_t i = 0; i < count; i += 2) { +#if defined(USB_CHARGER) + if ((i >= count - 2) && usbChargerLed() && BLINK_ON_PHASE) // Blink last segment on charge + continue; +#endif lcdDrawSolidVerticalLine(VBATT_X - 24 + i, VBATT_Y + 10, 3); + } if (!IS_TXBATT_WARNING() || BLINK_ON_PHASE) lcdDrawSolidFilledRect(VBATT_X - 26, VBATT_Y, 24, 15); #else diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simpgmspace.cpp index fa0122175..e2b3b8153 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simpgmspace.cpp @@ -429,6 +429,15 @@ void telemetryPortInit() { } +void usbChargerInit() +{ +} + +bool usbChargerLed() +{ + return false; +} + void sportUpdatePowerOn() { } diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index 506f237cd..a253d0cd1 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -140,6 +140,7 @@ elseif(PCB STREQUAL X7) set(ROTARY_ENCODER YES) set(LUA_EXPORT lua_export_tx12) set(BLUETOOTH NO) + set(USB_CHARGER YES) add_definitions(-DRADIO_TX12) add_definitions(-DEEPROM_VARIANT=0x4002) add_definitions(-DMANUFACTURER_RADIOMASTER) @@ -333,6 +334,10 @@ if(ROTARY_ENCODER) ) endif() +if(USB_CHARGER) + add_definitions(-DUSB_CHARGER) +endif() + if(BLUETOOTH) add_definitions(-DBLUETOOTH) set(TARGET_SRC diff --git a/radio/src/targets/taranis/board.cpp b/radio/src/targets/taranis/board.cpp index b038fc0f7..c43542941 100644 --- a/radio/src/targets/taranis/board.cpp +++ b/radio/src/targets/taranis/board.cpp @@ -41,6 +41,24 @@ void watchdogInit(unsigned int duration) IWDG->KR = 0xCCCC; // start } +#if defined(USB_CHARGER) +void usbChargerInit() +{ + GPIO_InitTypeDef GPIO_InitStructure; + GPIO_InitStructure.GPIO_Pin = USB_CHARGER_GPIO_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + GPIO_Init(USB_CHARGER_GPIO, &GPIO_InitStructure); +} + +bool usbChargerLed() +{ + return (GPIO_ReadInputDataBit(USB_CHARGER_GPIO, USB_CHARGER_GPIO_PIN) == Bit_RESET && usbPlugged()); +} +#endif + #if defined(SPORT_UPDATE_PWR_GPIO) void sportUpdateInit() { @@ -92,7 +110,8 @@ void boardInit() TRAINER_RCC_AHB1Periph | TRAINER_MODULE_RCC_AHB1Periph | BT_RCC_AHB1Periph | - GYRO_RCC_AHB1Periph, + GYRO_RCC_AHB1Periph | + USB_CHARGER_RCC_AHB1Periph, ENABLE); RCC_APB1PeriphClockCmd(ROTARY_ENCODER_RCC_APB1Periph | @@ -193,6 +212,10 @@ void boardInit() toplcdInit(); #endif +#if defined(USB_CHARGER) + usbChargerInit(); +#endif + if (HAS_SPORT_UPDATE_CONNECTOR()) { sportUpdateInit(); } diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h index d9092fcdc..f8c3f8145 100644 --- a/radio/src/targets/taranis/board.h +++ b/radio/src/targets/taranis/board.h @@ -863,6 +863,12 @@ void bluetoothDisable(); #define IS_BLUETOOTH_CHIP_PRESENT() (true) #endif +// USB Charger +#if defined(USB_CHARGER) +void usbChargerInit(); +bool usbChargerLed(); +#endif + // LED driver void ledInit(); void ledOff(); diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h index b7160cbf9..f70e1e690 100644 --- a/radio/src/targets/taranis/hal.h +++ b/radio/src/targets/taranis/hal.h @@ -1424,6 +1424,16 @@ #define PCBREV_RCC_AHB1Periph 0 #endif + +// USB Charger +#if defined(USB_CHARGER) + #define USB_CHARGER_RCC_AHB1Periph RCC_AHB1Periph_GPIOB + #define USB_CHARGER_GPIO GPIOB + #define USB_CHARGER_GPIO_PIN GPIO_Pin_5 // PB.05 +#else + #define USB_CHARGER_RCC_AHB1Periph 0 +#endif + // S.Port update connector #if defined(PCBXLITE) #define SPORT_MAX_BAUDRATE 250000 // not tested @@ -1439,7 +1449,7 @@ #define SPORT_UPDATE_PWR_GPIO_PIN GPIO_Pin_3 // PB.03 #define GPIO_SPORT_UPDATE_PWR_GPIO_ON GPIO_SetBits #define GPIO_SPORT_UPDATE_PWR_GPIO_OFF GPIO_ResetBits -#elif defined(PCBX7) +#elif defined(RADIO_X7) #define SPORT_MAX_BAUDRATE 250000 // < 400000 #define SPORT_UPDATE_RCC_AHB1Periph RCC_AHB1Periph_GPIOB #define SPORT_UPDATE_PWR_GPIO GPIOB