From 45c24c6b28af27addf0cfa647711f8e67941bd00 Mon Sep 17 00:00:00 2001 From: 3djc Date: Thu, 10 Dec 2020 13:08:59 +0100 Subject: [PATCH 1/2] Handles charge indication --- radio/src/gui/128x64/view_main.cpp | 7 ++++++- radio/src/targets/simu/simpgmspace.cpp | 9 +++++++++ radio/src/targets/taranis/CMakeLists.txt | 5 +++++ radio/src/targets/taranis/board.cpp | 25 +++++++++++++++++++++++- radio/src/targets/taranis/board.h | 6 ++++++ radio/src/targets/taranis/hal.h | 12 +++++++++++- 6 files changed, 61 insertions(+), 3 deletions(-) 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 From 726541c79382670648aeacb04338765ae1ccc5a7 Mon Sep 17 00:00:00 2001 From: 3djc Date: Thu, 10 Dec 2020 17:23:54 +0100 Subject: [PATCH 2/2] cosmetics --- radio/src/targets/simu/simpgmspace.cpp | 9 ----- radio/src/targets/taranis/CMakeLists.txt | 1 + radio/src/targets/taranis/board.cpp | 18 --------- radio/src/targets/taranis/board.h | 2 - .../targets/taranis/usb_charger_driver.cpp | 37 +++++++++++++++++++ 5 files changed, 38 insertions(+), 29 deletions(-) create mode 100644 radio/src/targets/taranis/usb_charger_driver.cpp diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simpgmspace.cpp index e2b3b8153..fa0122175 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simpgmspace.cpp @@ -429,15 +429,6 @@ 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 a253d0cd1..a287605df 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -335,6 +335,7 @@ if(ROTARY_ENCODER) endif() if(USB_CHARGER) + set(TARGET_SRC ${TARGET_SRC} usb_charger_driver.cpp) add_definitions(-DUSB_CHARGER) endif() diff --git a/radio/src/targets/taranis/board.cpp b/radio/src/targets/taranis/board.cpp index c43542941..d86a82f2d 100644 --- a/radio/src/targets/taranis/board.cpp +++ b/radio/src/targets/taranis/board.cpp @@ -41,24 +41,6 @@ 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() { diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h index f8c3f8145..6ffff9df9 100644 --- a/radio/src/targets/taranis/board.h +++ b/radio/src/targets/taranis/board.h @@ -864,10 +864,8 @@ void bluetoothDisable(); #endif // USB Charger -#if defined(USB_CHARGER) void usbChargerInit(); bool usbChargerLed(); -#endif // LED driver void ledInit(); diff --git a/radio/src/targets/taranis/usb_charger_driver.cpp b/radio/src/targets/taranis/usb_charger_driver.cpp new file mode 100644 index 000000000..7e92c6dbc --- /dev/null +++ b/radio/src/targets/taranis/usb_charger_driver.cpp @@ -0,0 +1,37 @@ +/* + * Copyright (C) OpenTX + * + * Based on code named + * th9x - http://code.google.com/p/th9x + * er9x - http://code.google.com/p/er9x + * gruvin9x - http://code.google.com/p/gruvin9x + * + * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include "opentx.h" + +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()); +}