From f100e4375a67ad487ca70438769b985ccd3bd7fd Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 10 Mar 2020 17:48:58 +0100 Subject: [PATCH] Bsongis/sport power line on off (#7435) SmartPort Power --- radio/src/datastructs.h | 4 ++-- radio/src/gui/480x272/radio_hardware.cpp | 20 +++++++++++++++++++ .../src/gui/common/stdlcd/radio_hardware.cpp | 19 +++++++++++++++++- radio/src/io/frsky_firmware_update.cpp | 10 ++++++++++ radio/src/io/multi_firmware_update.cpp | 5 +++++ radio/src/opentx.cpp | 4 ++++ radio/src/targets/horus/board.cpp | 8 ++++++++ radio/src/targets/horus/board.h | 5 +++++ radio/src/targets/simu/simpgmspace.cpp | 4 ++++ radio/src/targets/taranis/board.cpp | 8 ++++++++ radio/src/targets/taranis/board.h | 5 +++++ radio/src/translations.cpp | 2 ++ radio/src/translations.h | 2 ++ radio/src/translations/cz.h.txt | 3 +++ radio/src/translations/de.h.txt | 3 +++ radio/src/translations/en.h.txt | 3 +++ radio/src/translations/es.h.txt | 3 +++ radio/src/translations/fi.h.txt | 3 +++ radio/src/translations/fr.h.txt | 3 +++ radio/src/translations/it.h.txt | 3 +++ radio/src/translations/nl.h.txt | 3 +++ radio/src/translations/pl.h.txt | 3 +++ radio/src/translations/pt.h.txt | 3 +++ radio/src/translations/se.h.txt | 3 +++ 24 files changed, 126 insertions(+), 3 deletions(-) diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h index 9c5e1b652..7a2454034 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -783,7 +783,7 @@ PACK(struct RadioData { NOBACKUP(uint8_t disableRssiPoweroffAlarm:1); NOBACKUP(uint8_t USBMode:2); NOBACKUP(uint8_t jackMode:2); - NOBACKUP(uint8_t spare3:1); + NOBACKUP(uint8_t sportUpdatePower:1); NOBACKUP(char ttsLanguage[2]); NOBACKUP(int8_t beepVolume:4); NOBACKUP(int8_t wavVolume:4); @@ -941,4 +941,4 @@ static inline void check_struct() #undef CHKSIZE } -#endif /* BACKUP */ +#endif /* BACKUP */ \ No newline at end of file diff --git a/radio/src/gui/480x272/radio_hardware.cpp b/radio/src/gui/480x272/radio_hardware.cpp index 96f29cfbb..41f93259b 100644 --- a/radio/src/gui/480x272/radio_hardware.cpp +++ b/radio/src/gui/480x272/radio_hardware.cpp @@ -72,6 +72,9 @@ enum MenuRadioHardwareItems { #endif ITEM_RADIO_HARDWARE_JITTER_FILTER, +#if defined(SPORT_UPDATE_PWR_GPIO) + ITEM_RADIO_HARDWARE_SPORT_UPDATE_POWER, +#endif ITEM_RADIO_HARDWARE_DEBUG, ITEM_RADIO_HARDWARE_MAX }; @@ -119,6 +122,12 @@ void onHardwareAntennaSwitchConfirm(const char * result) #define MAX_BAUDRATE_ROW HIDDEN_ROW #endif +#if defined(SPORT_UPDATE_PWR_GPIO) + #define SPORT_POWER_ROWS 0, +#else + #define SPORT_POWER_ROWS +#endif + bool menuRadioHardware(event_t event) { MENU(STR_HARDWARE, RADIO_ICONS, menuTabGeneral, MENU_RADIO_HARDWARE, ITEM_RADIO_HARDWARE_MAX, { @@ -148,6 +157,7 @@ bool menuRadioHardware(event_t event) AUX_SERIAL_ROW /* aux serial mode */ 0, /* ADC filter */ + SPORT_POWER_ROWS 1, /* Debug */ }); @@ -365,6 +375,16 @@ bool menuRadioHardware(event_t event) break; } +#if defined(SPORT_UPDATE_PWR_GPIO) + case ITEM_RADIO_HARDWARE_SPORT_UPDATE_POWER: + lcdDrawText(MENUS_MARGIN_LEFT, y, STR_SPORT_UPDATE_POWER_MODE); + g_eeGeneral.sportUpdatePower = editChoice(HW_SETTINGS_COLUMN + 50, y, STR_SPORT_UPDATE_POWER_MODES, g_eeGeneral.sportUpdatePower, 0, 1, attr, event); + if (attr && checkIncDec_Ret) { + SPORT_UPDATE_POWER_INIT(); + } + break; +#endif + case ITEM_RADIO_HARDWARE_DEBUG: lcdDrawText(MENUS_MARGIN_LEFT, y, STR_DEBUG); lcdDrawText(HW_SETTINGS_COLUMN + 50, y, STR_ANALOGS_BTN, menuHorizontalPosition == 0 ? attr : 0); diff --git a/radio/src/gui/common/stdlcd/radio_hardware.cpp b/radio/src/gui/common/stdlcd/radio_hardware.cpp index a64489528..e450e1624 100644 --- a/radio/src/gui/common/stdlcd/radio_hardware.cpp +++ b/radio/src/gui/common/stdlcd/radio_hardware.cpp @@ -184,6 +184,9 @@ enum { ITEM_RADIO_HARDWARE_JITTER_FILTER, ITEM_RADIO_HARDWARE_RAS, +#if defined(SPORT_UPDATE_PWR_GPIO) + ITEM_RADIO_HARDWARE_SPORT_UPDATE_POWER, +#endif ITEM_RADIO_HARDWARE_DEBUG, #if defined(EEPROM_RLC) ITEM_RADIO_BACKUP_EEPROM, @@ -295,6 +298,12 @@ void onHardwareAntennaSwitchConfirm(const char * result) #define HW_SETTINGS_COLUMN2 (HW_SETTINGS_COLUMN1 + 5*FW) #endif +#if defined(SPORT_UPDATE_PWR_GPIO) + #define SPORT_POWER_ROWS 0, +#else + #define SPORT_POWER_ROWS +#endif + #if defined(EEPROM_RLC) void onFactoryResetConfirm(const char * result) { @@ -334,7 +343,7 @@ void menuRadioHardware(event_t event) 0 /* ADC filter */, READONLY_ROW /* RAS */, - + SPORT_POWER_ROWS 1 /* debugs */, 0, @@ -631,6 +640,14 @@ void menuRadioHardware(event_t event) else lcdDrawText(lcdNextPos, y, "---"); break; +#if defined(SPORT_UPDATE_PWR_GPIO) + case ITEM_RADIO_HARDWARE_SPORT_UPDATE_POWER: + g_eeGeneral.sportUpdatePower = editChoice(HW_SETTINGS_COLUMN2, y, STR_SPORT_UPDATE_POWER_MODE, STR_SPORT_UPDATE_POWER_MODES, g_eeGeneral.sportUpdatePower, 0, 1, attr, event); + if (attr && checkIncDec_Ret) { + SPORT_UPDATE_POWER_INIT(); + } + break; +#endif case ITEM_RADIO_HARDWARE_DEBUG: lcdDrawTextAlignedLeft(y, STR_DEBUG); diff --git a/radio/src/io/frsky_firmware_update.cpp b/radio/src/io/frsky_firmware_update.cpp index 1dca3b5a2..7cc7135b4 100644 --- a/radio/src/io/frsky_firmware_update.cpp +++ b/radio/src/io/frsky_firmware_update.cpp @@ -487,6 +487,7 @@ const char * FrskyDeviceFirmwareUpdate::flashFirmware(const char * filename) uint8_t extPwr = IS_EXTERNAL_MODULE_ON(); EXTERNAL_MODULE_OFF(); + uint8_t spuPwr = IS_SPORT_UPDATE_POWER_ON(); SPORT_UPDATE_POWER_OFF(); drawProgressScreen(getBasename(filename), STR_DEVICE_RESET, 0, 0); @@ -531,6 +532,10 @@ const char * FrskyDeviceFirmwareUpdate::flashFirmware(const char * filename) setupPulsesExternalModule(); } + if (spuPwr) { + SPORT_UPDATE_POWER_ON(); + } + state = SPORT_IDLE; resumePulses(); @@ -752,6 +757,7 @@ const char * FrskyChipFirmwareUpdate::flashFirmware(const char * filename, bool uint8_t extPwr = IS_EXTERNAL_MODULE_ON(); EXTERNAL_MODULE_OFF(); + uint8_t spuPwr = IS_SPORT_UPDATE_POWER_ON(); SPORT_UPDATE_POWER_OFF(); if (wait) { @@ -791,6 +797,10 @@ const char * FrskyChipFirmwareUpdate::flashFirmware(const char * filename, bool setupPulsesExternalModule(); } + if (spuPwr) { + SPORT_UPDATE_POWER_ON(); + } + resumePulses(); return result; diff --git a/radio/src/io/multi_firmware_update.cpp b/radio/src/io/multi_firmware_update.cpp index f7d8d238e..82ad5d81c 100644 --- a/radio/src/io/multi_firmware_update.cpp +++ b/radio/src/io/multi_firmware_update.cpp @@ -528,6 +528,7 @@ bool multiFlashFirmware(uint8_t moduleIdx, const char * filename) uint8_t extPwr = IS_EXTERNAL_MODULE_ON(); EXTERNAL_MODULE_OFF(); + uint8_t spuPwr = IS_SPORT_UPDATE_POWER_ON(); SPORT_UPDATE_POWER_OFF(); drawProgressScreen(getBasename(filename), STR_DEVICE_RESET, 0, 0); @@ -575,6 +576,10 @@ bool multiFlashFirmware(uint8_t moduleIdx, const char * filename) setupPulsesExternalModule(); } + if (spuPwr) { + SPORT_UPDATE_POWER_ON(); + } + resumePulses(); return result == nullptr; diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 258eb74f8..e6a20db0b 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -1966,6 +1966,10 @@ void opentxInit() btInit(); #endif +#if defined(SPORT_UPDATE_PWR_GPIO) + SPORT_UPDATE_POWER_INIT(); +#endif + #if defined(COLORLCD) loadTheme(); loadFontCache(); diff --git a/radio/src/targets/horus/board.cpp b/radio/src/targets/horus/board.cpp index 3e8ad4752..61a429a70 100644 --- a/radio/src/targets/horus/board.cpp +++ b/radio/src/targets/horus/board.cpp @@ -74,6 +74,14 @@ void sportUpdatePowerOff() { GPIO_ResetBits(SPORT_UPDATE_PWR_GPIO, SPORT_UPDATE_PWR_GPIO_PIN); } + +void sportUpdatePowerInit() +{ + if (g_eeGeneral.sportUpdatePower == 1) + sportUpdatePowerOn(); + else + sportUpdatePowerOff(); +} #endif void boardInit() diff --git a/radio/src/targets/horus/board.h b/radio/src/targets/horus/board.h index 09554c063..cdc8fb084 100644 --- a/radio/src/targets/horus/board.h +++ b/radio/src/targets/horus/board.h @@ -599,11 +599,16 @@ void telemetryPortInvertedInit(uint32_t baudrate); #if HAS_SPORT_UPDATE_CONNECTOR() void sportUpdatePowerOn(); void sportUpdatePowerOff(); +void sportUpdatePowerInit(); #define SPORT_UPDATE_POWER_ON() sportUpdatePowerOn() #define SPORT_UPDATE_POWER_OFF() sportUpdatePowerOff() +#define SPORT_UPDATE_POWER_INIT() sportUpdatePowerInit() +#define IS_SPORT_UPDATE_POWER_ON() (GPIO_ReadInputDataBit(SPORT_UPDATE_PWR_GPIO, SPORT_UPDATE_PWR_GPIO_PIN) == Bit_SET) #else #define SPORT_UPDATE_POWER_ON() #define SPORT_UPDATE_POWER_OFF() +#define SPORT_UPDATE_POWER_INIT() +#define IS_SPORT_UPDATE_POWER_ON() (false) #endif // Second serial port driver diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simpgmspace.cpp index 4e1cdf535..ee4bcdb23 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simpgmspace.cpp @@ -437,6 +437,10 @@ void sportUpdatePowerOff() { } +void sportUpdatePowerInit() +{ +} + void boardInit() { } diff --git a/radio/src/targets/taranis/board.cpp b/radio/src/targets/taranis/board.cpp index 3cd6742f3..521ab1d9b 100644 --- a/radio/src/targets/taranis/board.cpp +++ b/radio/src/targets/taranis/board.cpp @@ -62,6 +62,14 @@ void sportUpdatePowerOff() { GPIO_SPORT_UPDATE_PWR_GPIO_OFF(SPORT_UPDATE_PWR_GPIO, SPORT_UPDATE_PWR_GPIO_PIN); } + +void sportUpdatePowerInit() +{ + if (g_eeGeneral.sportUpdatePower == 1) + sportUpdatePowerOn(); + else + sportUpdatePowerOff(); +} #endif void boardInit() diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h index e978d8277..e735c8d33 100644 --- a/radio/src/targets/taranis/board.h +++ b/radio/src/targets/taranis/board.h @@ -720,12 +720,17 @@ void telemetryPortInvertedInit(uint32_t baudrate); void sportUpdateInit(); void sportUpdatePowerOn(); void sportUpdatePowerOff(); +void sportUpdatePowerInit(); #define SPORT_UPDATE_POWER_ON() sportUpdatePowerOn() #define SPORT_UPDATE_POWER_OFF() sportUpdatePowerOff() +#define SPORT_UPDATE_POWER_INIT() sportUpdatePowerInit() +#define IS_SPORT_UPDATE_POWER_ON() (GPIO_ReadInputDataBit(SPORT_UPDATE_PWR_GPIO, SPORT_UPDATE_PWR_GPIO_PIN) == Bit_SET) #else #define sportUpdateInit() #define SPORT_UPDATE_POWER_ON() #define SPORT_UPDATE_POWER_OFF() +#define SPORT_UPDATE_POWER_INIT() +#define IS_SPORT_UPDATE_POWER_ON() (false) #endif // Audio driver diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 1dfb9a692..1cd1c98a8 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -78,6 +78,7 @@ ISTR(SWTYPES); ISTR(POTTYPES); ISTR(SLIDERTYPES); ISTR(ANTENNA_MODES); +ISTR(SPORT_UPDATE_POWER_MODES); #if defined(PCBSKY9X) && defined(REVX) ISTR(VOUTPUT_TYPE); @@ -580,6 +581,7 @@ const char STR_RTC_CHECK[] = TR_RTC_CHECK; const char STR_EXIT[] = TR_EXIT; const char STR_MODULE_RANGE[] = TR_MODULE_RANGE; const char STR_RECEIVER_OPTIONS[] = TR_RECEIVER_OPTIONS; +const char STR_SPORT_UPDATE_POWER_MODE[] = TR_SPORT_UPDATE_POWER_MODE; #if defined(PCBHORUS) const char STR_ASSIGN_SPLASH[] = TR_ASSIGN_SPLASH; diff --git a/radio/src/translations.h b/radio/src/translations.h index df0cfd67d..e11ad3197 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -863,6 +863,8 @@ extern const char STR_MENU_OTHER[]; extern const char STR_MENU_INVERT[]; extern const char STR_JITTER_FILTER[]; extern const char STR_RTC_CHECK[]; +extern const char STR_SPORT_UPDATE_POWER_MODE[]; +extern const char STR_SPORT_UPDATE_POWER_MODES[]; #if MENUS_LOCK == 1 extern const char STR_UNLOCKED[]; diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index cdcf5ae13..e0f453bb8 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -980,6 +980,9 @@ #define STR_FACTORYRESET "Tovární reset" #define TR_CONFIRMRESET TR("Smazat vše ?", "Smazat modely a nastavení?") #define TR_TOO_MANY_LUA_SCRIPTS "Příliš mnoho skriptů!" +#define TR_SPORT_UPDATE_POWER_MODE "SP Power" +#define LEN_SPORT_UPDATE_POWER_MODES "\004" +#define TR_SPORT_UPDATE_POWER_MODES "AUTO""ON\0 " // Horus and Taranis column headers #define TR_PHASES_HEADERS_NAME "Název" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index 24c37b13e..ae3f50756 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -986,6 +986,9 @@ #define STR_FACTORYRESET TR("Werksreset", "Auf Werkseinstellungen") #define TR_CONFIRMRESET TR("Alles löschen? ","ALLE Modelle+Einst. löschen?") #define TR_TOO_MANY_LUA_SCRIPTS "Zu viele Skripte!" +#define TR_SPORT_UPDATE_POWER_MODE "SP Power" +#define LEN_SPORT_UPDATE_POWER_MODES "\004" +#define TR_SPORT_UPDATE_POWER_MODES "AUTO""ON\0 " // Horus and Taranis specific column headers #define TR_PHASES_HEADERS_NAME "Name " diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index f37006215..d50b5a2cd 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -985,6 +985,9 @@ #define STR_FACTORYRESET "Factory reset" #define TR_CONFIRMRESET TR("Erase ALL", "Erase ALL models and settings?") #define TR_TOO_MANY_LUA_SCRIPTS "Too many Lua scripts!" +#define TR_SPORT_UPDATE_POWER_MODE "SP Power" +#define LEN_SPORT_UPDATE_POWER_MODES "\004" +#define TR_SPORT_UPDATE_POWER_MODES "AUTO""ON\0 " // Horus and Taranis column headers #define TR_PHASES_HEADERS_NAME "Name" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index c1ae1f49c..ab7c4b98c 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -1005,6 +1005,9 @@ #define STR_FACTORYRESET "Factory reset" #define TR_CONFIRMRESET "Erase ALL models and settings?" #define TR_TOO_MANY_LUA_SCRIPTS "Too many Lua scripts!" +#define TR_SPORT_UPDATE_POWER_MODE "SP Power" +#define LEN_SPORT_UPDATE_POWER_MODES "\004" +#define TR_SPORT_UPDATE_POWER_MODES "AUTO""ON\0 " // Horus and Taranis column headers diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index 839269089..19f24ff02 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -999,6 +999,9 @@ #define STR_FACTORYRESET "Factory reset" #define TR_CONFIRMRESET "Erase ALL models and settings?" #define TR_TOO_MANY_LUA_SCRIPTS "Too many Lua scripts!" +#define TR_SPORT_UPDATE_POWER_MODE "SP Power" +#define LEN_SPORT_UPDATE_POWER_MODES "\004" +#define TR_SPORT_UPDATE_POWER_MODES "AUTO""ON\0 " // Horus and Taranis column headers diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index 2e6eb35df..3dcde7dcd 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -1009,6 +1009,9 @@ #endif #define TR_CONFIRMRESET TR("Effacer TOUT?","Effacer TOUS modèles/réglages?") #define TR_TOO_MANY_LUA_SCRIPTS "Trop de scripts lua!" +#define TR_SPORT_UPDATE_POWER_MODE "SP Power" +#define LEN_SPORT_UPDATE_POWER_MODES "\004" +#define TR_SPORT_UPDATE_POWER_MODES "AUTO""ON\0 " // Horus and Taranis column headers #define TR_PHASES_HEADERS_NAME "Nom" diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index 2125f0189..4644bf056 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -1001,6 +1001,9 @@ #define STR_FACTORYRESET "Inizializza dati" #define TR_CONFIRMRESET "Resettare TUTTI i dati?" #define TR_TOO_MANY_LUA_SCRIPTS "Troppi Scripts Lua!" +#define TR_SPORT_UPDATE_POWER_MODE "SP Power" +#define LEN_SPORT_UPDATE_POWER_MODES "\004" +#define TR_SPORT_UPDATE_POWER_MODES "AUTO""ON\0 " // Horus and Taranis column headers diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index 6e3388f4c..50d624d2c 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -993,6 +993,9 @@ #endif #define TR_CONFIRMRESET TR("Wis Alles?", "Wis ALLE modellen en instellingen?") #define TR_TOO_MANY_LUA_SCRIPTS "Te veel Lua scripts!" +#define TR_SPORT_UPDATE_POWER_MODE "SP Power" +#define LEN_SPORT_UPDATE_POWER_MODES "\004" +#define TR_SPORT_UPDATE_POWER_MODES "AUTO""ON\0 " // Horus and Taranis column headers diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index 2fe3c84a3..1034c98d9 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -1000,6 +1000,9 @@ #define STR_FACTORYRESET "Ustaw.Fabrycz" #define TR_CONFIRMRESET "WYkasować wszytkie modele? " #define TR_TOO_MANY_LUA_SCRIPTS "Za dużo skryptów Lua!" +#define TR_SPORT_UPDATE_POWER_MODE "SP Power" +#define LEN_SPORT_UPDATE_POWER_MODES "\004" +#define TR_SPORT_UPDATE_POWER_MODES "AUTO""ON\0 " // Horus and Taranis column headers diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 33b3568e2..6b3aaaf0e 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -990,6 +990,9 @@ #define STR_FACTORYRESET "Factory reset" #define TR_CONFIRMRESET "Erase ALL models and settings?" #define TR_TOO_MANY_LUA_SCRIPTS "Too many Lua scripts!" +#define TR_SPORT_UPDATE_POWER_MODE "SP Power" +#define LEN_SPORT_UPDATE_POWER_MODES "\004" +#define TR_SPORT_UPDATE_POWER_MODES "AUTO""ON\0 " // Horus and Taranis column headers diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index 8bbb15270..663d90be3 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -1000,6 +1000,9 @@ #define STR_FACTORYRESET "Factory reset" #define TR_CONFIRMRESET "Erase ALL models and settings?" #define TR_TOO_MANY_LUA_SCRIPTS "För många Lua-scripts!" +#define TR_SPORT_UPDATE_POWER_MODE "SP Power" +#define LEN_SPORT_UPDATE_POWER_MODES "\004" +#define TR_SPORT_UPDATE_POWER_MODES "AUTO""ON\0 " // Horus and Taranis column headers