From 151827ada5501a1f66697f49dd93db5bb1e1accd Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 26 Jul 2019 19:18:29 +0200 Subject: [PATCH] Bsongis/x9d+ 2019 (#6588) X9D+ 2019 added --- .../src/firmwares/opentx/opentxeeprom.cpp | 18 +- radio/src/CMakeLists.txt | 2 +- radio/src/bluetooth.cpp | 10 +- radio/src/cli.cpp | 3 + radio/src/datastructs.h | 18 +- radio/src/gui/128x64/model_setup.cpp | 23 +- radio/src/gui/128x64/view_main.cpp | 8 +- radio/src/gui/212x64/lcd.cpp | 7 +- radio/src/gui/212x64/model_setup.cpp | 120 +++++++-- radio/src/gui/212x64/radio_hardware.cpp | 0 radio/src/gui/212x64/view_main.cpp | 7 +- radio/src/opentx.cpp | 13 +- radio/src/opentx.h | 10 + radio/src/pulses/pulses.cpp | 2 +- radio/src/pulses/pxx.h | 10 - radio/src/pulses/pxx2.h | 10 +- radio/src/stamp.cpp | 15 +- .../conversions/conversions_218_219.cpp | 91 +++++-- .../src/storage/conversions/datastructs_218.h | 146 +++++------ .../arm/stm32/bootloader/CMakeLists.txt | 9 +- radio/src/targets/horus/hal.h | 2 +- radio/src/targets/taranis/CMakeLists.txt | 37 ++- radio/src/targets/taranis/board.cpp | 17 +- radio/src/targets/taranis/board.h | 55 +++-- .../targets/taranis/bootloader/boot_menu.cpp | 17 +- radio/src/targets/taranis/hal.h | 231 +++++++++++++++--- radio/src/targets/taranis/haptic_driver.cpp | 9 +- radio/src/targets/taranis/keys_driver.cpp | 41 ++-- radio/src/targets/taranis/lcd_driver_spi.cpp | 11 +- radio/src/telemetry/frsky_pxx2.cpp | 12 +- radio/src/tests/conversions.cpp | 1 + radio/src/tests/eeprom_22_x7.bin | Bin 32768 -> 32768 bytes radio/src/translations/de.h.txt | 6 +- radio/src/translations/en.h.txt | 6 +- radio/src/translations/es.h.txt | 6 +- radio/src/translations/fi.h.txt | 6 +- radio/src/translations/fr.h.txt | 4 +- radio/src/translations/it.h.txt | 6 +- radio/src/translations/nl.h.txt | 6 +- radio/src/translations/pl.h.txt | 6 +- radio/src/translations/pt.h.txt | 6 +- radio/src/translations/se.h.txt | 6 +- radio/src/translations/untranslated.h | 3 + tools/build-frsky.py | 9 + 44 files changed, 704 insertions(+), 321 deletions(-) create mode 100644 radio/src/gui/212x64/radio_hardware.cpp diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index 33d5d92e7..ef926f666 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -18,12 +18,13 @@ * GNU General Public License for more details. */ +#include +#include #include "boards.h" #include "helpers.h" #include "opentxeeprom.h" #include "customdebug.h" -#include -#include +#include "opentxinterface.h" using namespace Board; @@ -31,8 +32,17 @@ using namespace Board; #define MAX_SLIDERS(board) (IS_HORUS_X10(board) ? 4 : (Boards::getCapability(board, Board::Sliders))) //TODO need to be remove when x10 eeprom gets fixed #define MAX_MOUSE_ANALOGS(board) (IS_HORUS_X10(board) ? 2 : (Boards::getCapability(board, Board::MouseAnalogs))) //TODO need to be remove when x10 eeprom gets fixed #define MAX_GYRO_ANALOGS(board, version) (version >= 219 ? Boards::getCapability(board, Board::GyroAnalogs) : 0) -#define MAX_SWITCHES(board, version) (version <= 218 && IS_TARANIS_X7(board) ? 6 : Boards::getCapability(board, Board::Switches)) -#define MAX_SWITCH_SLOTS(board, version) (IS_TARANIS_X9E(board) ? 32 : 8) // bitsize of swconfig_t / 2 (see radio/src/datastructs.h) + +inline int MAX_SWITCHES(Board::Type board, int version) +{ + if (version <= 218 && IS_TARANIS_X7(board)) + return 6; + if (version <= 218 && IS_TARANIS_X9D(board)) + return 8; + return Boards::getCapability(board, Board::Switches); +} + +#define MAX_SWITCH_SLOTS(board, version) (IS_TARANIS_X9E(board) ? 32 : (version >= 219 ? 16 : 8)) // bitsize of swconfig_t / 2 (see radio/src/datastructs.h) #define MAX_SWITCHES_POSITION(board, version) (Boards::getCapability(board, Board::SwitchPositions)) #define MAX_ROTARY_ENCODERS(board) (IS_SKY9X(board) ? 1 : 0) #define MAX_FLIGHT_MODES(board, version) 9 diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index 2cae9c198..615a7de16 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -16,7 +16,7 @@ set_property(CACHE PPM_UNIT PROPERTY STRINGS US PERCENT_PREC1 PERCENT_PREC0) set(DEFAULT_MODE "" CACHE STRING "Default sticks mode") set(FONT "STD" CACHE STRING "Choose font : STD or SQT5") set_property(CACHE FONT PROPERTY STRINGS SQT5) -set(POPUP_LEVEL 2 CACHE INT "Popup level") +set(POPUP_LEVEL 2 CACHE STRING "Popup level") option(HELI "Heli menu" ON) option(FLIGHT_MODES "Flight Modes" ON) diff --git a/radio/src/bluetooth.cpp b/radio/src/bluetooth.cpp index b21909ceb..7a9b52f04 100644 --- a/radio/src/bluetooth.cpp +++ b/radio/src/bluetooth.cpp @@ -21,14 +21,14 @@ #include "opentx.h" #include "io/frsky_firmware_update.h" -#if defined(PCBHORUS) || defined(PCBX7) || defined(PCBXLITE) -#define BLUETOOTH_COMMAND_NAME "AT+NAME" -#define BLUETOOTH_ANSWER_NAME "OK+" -#define BLUETOOTH_COMMAND_BAUD_115200 "AT+BAUD115200" -#else +#if defined(PCBX9E) #define BLUETOOTH_COMMAND_NAME "TTM:REN-" #define BLUETOOTH_ANSWER_NAME "TTM:REN" #define BLUETOOTH_COMMAND_BAUD_115200 "TTM:BPS-115200" +#else +#define BLUETOOTH_COMMAND_NAME "AT+NAME" +#define BLUETOOTH_ANSWER_NAME "OK+" +#define BLUETOOTH_COMMAND_BAUD_115200 "AT+BAUD115200" #endif #if defined(_MSC_VER) diff --git a/radio/src/cli.cpp b/radio/src/cli.cpp index 6bb489b96..7aa071190 100644 --- a/radio/src/cli.cpp +++ b/radio/src/cli.cpp @@ -1016,6 +1016,9 @@ int cliDisplay(const char ** argv) case 2: tim = TIM2; break; + case 8: + tim = TIM8; + break; case 13: tim = TIM13; break; diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h index 0fcfdbb20..2aba8fc3f 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -498,16 +498,20 @@ PACK(struct ModelHeader { }); #if defined(COLORLCD) -typedef uint16_t swconfig_t; +typedef uint32_t swconfig_t; typedef uint32_t swarnstate_t; #elif defined(PCBX9E) typedef uint64_t swconfig_t; typedef uint64_t swarnstate_t; typedef uint32_t swarnenable_t; +#elif defined(PCBX9D) || defined(PCBX9DP) +typedef uint32_t swconfig_t; +typedef uint32_t swarnstate_t; +typedef uint16_t swarnenable_t; // TODO remove it in 2.4 #elif defined(PCBTARANIS) typedef uint16_t swconfig_t; typedef uint16_t swarnstate_t; -typedef uint8_t swarnenable_t; +typedef uint8_t swarnenable_t; // TODO remove it in 2.4 #else typedef uint8_t swarnstate_t; typedef uint8_t swarnenable_t; @@ -519,7 +523,7 @@ typedef uint8_t swarnenable_t; #else #define SWITCHES_WARNING_DATA \ swarnstate_t switchWarningState; \ - swarnenable_t switchWarningEnable; + swarnenable_t switchWarningEnable; // TODO remove it in 2.4 #endif #if defined(PCBHORUS) @@ -663,7 +667,7 @@ PACK(struct TrainerData { #if defined(PCBHORUS) #define EXTRA_GENERAL_FIELDS \ NOBACKUP(uint8_t auxSerialMode); \ - uint32_t switchConfig; \ + swconfig_t switchConfig; \ uint16_t potsConfig; /* two bits per pot */ \ uint8_t slidersConfig; /* 1 bit per slider */ \ NOBACKUP(char switchNames[STORAGE_NUM_SWITCHES][LEN_SWITCH_NAME]); \ @@ -673,7 +677,7 @@ PACK(struct TrainerData { NOBACKUP(uint8_t blOffBright:7); \ NOBACKUP(char bluetoothName[LEN_BLUETOOTH_NAME]); #elif defined(PCBTARANIS) - #if defined(BLUETOOTH) + #if defined(STORAGE_BLUETOOTH) #define BLUETOOTH_FIELDS \ uint8_t spare; \ char bluetoothName[LEN_BLUETOOTH_NAME]; @@ -919,8 +923,8 @@ static inline void check_struct() CHKSIZE(RadioData, 960); CHKSIZE(ModelData, 6614); #elif defined(PCBX9D) || defined(PCBX9DP) - CHKSIZE(RadioData, 880); - CHKSIZE(ModelData, 6601); + CHKSIZE(RadioData, 898); + CHKSIZE(ModelData, 6604); #elif defined(PCBSKY9X) CHKSIZE(RadioData, 735); CHKSIZE(ModelData, 5301); diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index 291003575..501d40473 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -203,37 +203,30 @@ enum MenuModelSetupItems { #define EXTRA_MODULE_ROWS #endif +#define TRAINER_CHANNELS_ROW (IS_SLAVE_TRAINER() ? (IS_BLUETOOTH_TRAINER() ? (uint8_t)0 : (uint8_t)1) : HIDDEN_ROW) +#define TRAINER_PPM_PARAMS_ROW (g_model.trainerData.mode == TRAINER_MODE_SLAVE ? (uint8_t)2 : HIDDEN_ROW) +#define TRAINER_BLUETOOTH_M_ROW ((bluetooth.distantAddr[0] == '\0' || bluetooth.state == BLUETOOTH_STATE_CONNECTED) ? (uint8_t)0 : (uint8_t)1) +#define TRAINER_BLUETOOTH_S_ROW (bluetooth.distantAddr[0] == '\0' ? HIDDEN_ROW : LABEL()) +#define IF_BT_TRAINER_ON(x) (g_eeGeneral.bluetoothMode == BLUETOOTH_TRAINER ? (uint8_t)(x) : HIDDEN_ROW) + #if defined(PCBX7) || defined(PCBX9LITE) #define ANTENNA_ROW #if defined(BLUETOOTH) - #define TRAINER_BLUETOOTH_M_ROW ((bluetooth.distantAddr[0] == '\0' || bluetooth.state == BLUETOOTH_STATE_CONNECTED) ? (uint8_t)0 : (uint8_t)1) - #define TRAINER_BLUETOOTH_S_ROW (bluetooth.distantAddr[0] == '\0' ? HIDDEN_ROW : LABEL()) #define TRAINER_BLUETOOTH_ROW (g_model.trainerData.mode == TRAINER_MODE_MASTER_BLUETOOTH ? TRAINER_BLUETOOTH_M_ROW : (g_model.trainerData.mode == TRAINER_MODE_SLAVE_BLUETOOTH ? TRAINER_BLUETOOTH_S_ROW : HIDDEN_ROW)), - #define TRAINER_CHANNELS_ROW (g_model.trainerData.mode == TRAINER_MODE_SLAVE ? (uint8_t)1 : (g_model.trainerData.mode == TRAINER_MODE_SLAVE_BLUETOOTH ? (uint8_t)0 : HIDDEN_ROW)) #else #define TRAINER_BLUETOOTH_ROW - #define TRAINER_CHANNELS_ROW (g_model.trainerData.mode == TRAINER_MODE_SLAVE ? (uint8_t)1 : HIDDEN_ROW) #endif #define TRAINER_PPM_PARAMS_ROW (g_model.trainerData.mode == TRAINER_MODE_SLAVE ? (uint8_t)2 : HIDDEN_ROW) #define TRAINER_ROWS LABEL(Trainer), 0, TRAINER_BLUETOOTH_ROW TRAINER_CHANNELS_ROW, TRAINER_PPM_PARAMS_ROW #elif defined(PCBXLITES) #define ANTENNA_ROW IF_NOT_PXX2_MODULE(INTERNAL_MODULE, IF_INTERNAL_MODULE_ON(0)), - #define IF_BT_TRAINER_ON(x) (g_eeGeneral.bluetoothMode == BLUETOOTH_TRAINER ? (uint8_t)(x) : HIDDEN_ROW) - #define TRAINER_BLUETOOTH_M_ROW ((bluetooth.distantAddr[0] == '\0' || bluetooth.state == BLUETOOTH_STATE_CONNECTED) ? (uint8_t)0 : (uint8_t)1) - #define TRAINER_BLUETOOTH_S_ROW (bluetooth.distantAddr[0] == '\0' ? HIDDEN_ROW : LABEL()) #define TRAINER_BLUETOOTH_ROW (g_model.trainerData.mode == TRAINER_MODE_MASTER_BLUETOOTH ? TRAINER_BLUETOOTH_M_ROW : (g_model.trainerData.mode == TRAINER_MODE_SLAVE_BLUETOOTH ? TRAINER_BLUETOOTH_S_ROW : HIDDEN_ROW)) - #define TRAINER_CHANNELS_ROW (g_model.trainerData.mode == TRAINER_MODE_SLAVE ? (uint8_t)1 : (g_model.trainerData.mode == TRAINER_MODE_SLAVE_BLUETOOTH ? (uint8_t)0 : HIDDEN_ROW)) #define TRAINER_PPM_PARAMS_ROW (g_model.trainerData.mode == TRAINER_MODE_SLAVE ? (uint8_t)2 : HIDDEN_ROW) #define TRAINER_ROWS LABEL(Trainer), 0, IF_BT_TRAINER_ON(TRAINER_BLUETOOTH_ROW), TRAINER_CHANNELS_ROW, TRAINER_PPM_PARAMS_ROW #elif defined(PCBXLITE) #define ANTENNA_ROW IF_NOT_PXX2_MODULE(INTERNAL_MODULE, IF_INTERNAL_MODULE_ON(0)), - #define IF_BT_TRAINER_ON(x) (g_eeGeneral.bluetoothMode == BLUETOOTH_TRAINER ? (uint8_t)(x) : HIDDEN_ROW) - #define TRAINER_BLUETOOTH_M_ROW ((bluetooth.distantAddr[0] == '\0' || bluetooth.state == BLUETOOTH_STATE_CONNECTED) ? (uint8_t)0 : (uint8_t)1) - #define TRAINER_BLUETOOTH_S_ROW (bluetooth.distantAddr[0] == '\0' ? HIDDEN_ROW : LABEL()) #define TRAINER_BLUETOOTH_ROW (g_model.trainerData.mode == TRAINER_MODE_MASTER_BLUETOOTH ? TRAINER_BLUETOOTH_M_ROW : (g_model.trainerData.mode == TRAINER_MODE_SLAVE_BLUETOOTH ? TRAINER_BLUETOOTH_S_ROW : HIDDEN_ROW)) - #define TRAINER_CHANNELS_ROW (IS_SLAVE_TRAINER() ? (uint8_t)1 : HIDDEN_ROW) - #define TRAINER_PPM_PARAMS_ROW (HIDDEN_ROW) // xlite has only BT trainer, so never PPM - #define TRAINER_ROWS IF_BT_TRAINER_ON(LABEL(Trainer)), IF_BT_TRAINER_ON(0), IF_BT_TRAINER_ON(TRAINER_BLUETOOTH_ROW), IF_BT_TRAINER_ON(TRAINER_CHANNELS_ROW), TRAINER_PPM_PARAMS_ROW + #define TRAINER_ROWS IF_BT_TRAINER_ON(LABEL(Trainer)), IF_BT_TRAINER_ON(0), IF_BT_TRAINER_ON(TRAINER_BLUETOOTH_ROW), IF_BT_TRAINER_ON(TRAINER_CHANNELS_ROW), HIDDEN_ROW /* xlite has only BT trainer, so never PPM */ #else #define TRAINER_ROWS #endif @@ -981,7 +974,7 @@ void menuModelSetup(event_t event) #if defined(BLUETOOTH) if (checkIncDec_Ret) { bluetooth.state = BLUETOOTH_STATE_OFF; - bluetooth.distantAddr[0] = 0; + bluetooth.distantAddr[0] = '\0'; } #endif } diff --git a/radio/src/gui/128x64/view_main.cpp b/radio/src/gui/128x64/view_main.cpp index 50db7f60e..469dcdc97 100644 --- a/radio/src/gui/128x64/view_main.cpp +++ b/radio/src/gui/128x64/view_main.cpp @@ -548,13 +548,9 @@ void menuMainView(event_t event) } // And ! in case of unexpected shutdown -#if defined(LOG_TELEMETRY) || defined(WATCHDOG_DISABLED) || defined(DEBUG_LATENCY) - lcdDrawChar(REBOOT_X, 0*FH, '!', INVERS); -#else - if (unexpectedShutdown) { - lcdDrawChar(REBOOT_X, 0*FH, '!', INVERS); + if (isAsteriskDisplayed()) { + lcdDrawChar(REBOOT_X, 0 * FH, '!', INVERS); } -#endif #if defined(GVARS) if (gvarDisplayTimer > 0) { diff --git a/radio/src/gui/212x64/lcd.cpp b/radio/src/gui/212x64/lcd.cpp index 39ce8243a..e71fda26b 100644 --- a/radio/src/gui/212x64/lcd.cpp +++ b/radio/src/gui/212x64/lcd.cpp @@ -632,13 +632,14 @@ void drawSource(coord_t x, coord_t y, uint32_t idx, LcdFlags att) lcdDrawTextAtIndex(x, y, STR_VSRCRAW, idx+1, att); } else if (idx >= MIXSRC_FIRST_SWITCH && idx <= MIXSRC_LAST_SWITCH) { - idx = idx-MIXSRC_FIRST_SWITCH; + idx = idx - MIXSRC_FIRST_SWITCH; if (ZEXIST(g_eeGeneral.switchNames[idx])) { lcdDrawChar(x, y, '\312', att); //switch symbol lcdDrawSizedText(lcdNextPos, y, g_eeGeneral.switchNames[idx], LEN_SWITCH_NAME, ZCHAR|att); } - else - lcdDrawTextAtIndex(x, y, STR_VSRCRAW, idx+MIXSRC_FIRST_SWITCH-MIXSRC_Rud+1, att); + else { + lcdDrawTextAtIndex(x, y, STR_VSRCRAW, idx + MIXSRC_FIRST_SWITCH - MIXSRC_Rud + 1, att); + } } else if (idx < MIXSRC_SW1) lcdDrawTextAtIndex(x, y, STR_VSRCRAW, idx-MIXSRC_Rud+1, att); diff --git a/radio/src/gui/212x64/model_setup.cpp b/radio/src/gui/212x64/model_setup.cpp index 23f4127be..eac5df5ca 100644 --- a/radio/src/gui/212x64/model_setup.cpp +++ b/radio/src/gui/212x64/model_setup.cpp @@ -118,8 +118,11 @@ enum MenuModelSetupItems { ITEM_MODEL_SETUP_TRAINER_LABEL, ITEM_MODEL_SETUP_TRAINER_MODE, - ITEM_MODEL_SETUP_TRAINER_LINE1, - ITEM_MODEL_SETUP_TRAINER_LINE2, +#if defined(BLUETOOTH) + ITEM_MODEL_SETUP_TRAINER_BLUETOOTH, +#endif + ITEM_MODEL_SETUP_TRAINER_CHANNELS, + ITEM_MODEL_SETUP_TRAINER_PPM_PARAMS, ITEM_MODEL_SETUP_LINES_COUNT }; @@ -229,8 +232,17 @@ void editTimerCountdown(int timerIdx, coord_t y, LcdFlags attr, event_t event) #define PORT_CHANNELS_ROWS(x) (x==INTERNAL_MODULE ? INTERNAL_MODULE_CHANNELS_ROWS : (x==EXTERNAL_MODULE ? EXTERNAL_MODULE_CHANNELS_ROWS : 1)) -#define TRAINER_LINE1_ROWS (g_model.trainerData.mode == TRAINER_MODE_SLAVE ? (uint8_t)1 : HIDDEN_ROW) -#define TRAINER_LINE2_ROWS (g_model.trainerData.mode == TRAINER_MODE_SLAVE ? (uint8_t)2 : HIDDEN_ROW) +#define TRAINER_CHANNELS_ROW (IS_SLAVE_TRAINER() ? (uint8_t)1 : HIDDEN_ROW) +#define TRAINER_PPM_PARAMS_ROW (g_model.trainerData.mode == TRAINER_MODE_SLAVE ? (uint8_t)2 : HIDDEN_ROW) +#define TRAINER_BLUETOOTH_M_ROW ((bluetooth.distantAddr[0] == '\0' || bluetooth.state == BLUETOOTH_STATE_CONNECTED) ? (uint8_t)0 : (uint8_t)1) +#define TRAINER_BLUETOOTH_S_ROW (bluetooth.distantAddr[0] == '\0' ? HIDDEN_ROW : LABEL()) +#define IF_BT_TRAINER_ON(x) (g_eeGeneral.bluetoothMode == BLUETOOTH_TRAINER ? (uint8_t)(x) : HIDDEN_ROW) +#define TRAINER_BLUETOOTH_ROW (g_model.trainerData.mode == TRAINER_MODE_MASTER_BLUETOOTH ? TRAINER_BLUETOOTH_M_ROW : (g_model.trainerData.mode == TRAINER_MODE_SLAVE_BLUETOOTH ? TRAINER_BLUETOOTH_S_ROW : HIDDEN_ROW)) +#if defined(BLUETOOTH) +#define TRAINER_ROWS LABEL(Trainer), 0, IF_BT_TRAINER_ON(TRAINER_BLUETOOTH_ROW), TRAINER_CHANNELS_ROW, TRAINER_PPM_PARAMS_ROW +#else +#define TRAINER_ROWS LABEL(Trainer), 0, TRAINER_CHANNELS_ROW, TRAINER_PPM_PARAMS_ROW +#endif #define TIMER_ROWS(x) 2|NAVIGATION_LINE_BY_LINE, 0, 0, 0, g_model.timers[x].countdownBeep != COUNTDOWN_SILENT ? (uint8_t) 1 : (uint8_t)0 @@ -275,6 +287,21 @@ inline uint8_t EXTERNAL_MODULE_MODE_ROWS() { #define CURRENT_MODULE_EDITED(k) (k >= ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL ? EXTERNAL_MODULE : INTERNAL_MODULE) #define CURRENT_RECEIVER_EDITED(k) (k - (k >= ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL ? ITEM_MODEL_SETUP_EXTERNAL_MODULE_PXX2_RECEIVER_1 : ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_RECEIVER_1)) +#if defined(BLUETOOTH) +void onBluetoothConnectMenu(const char * result) +{ + if (result != STR_EXIT) { + uint8_t index = (result - reusableBuffer.moduleSetup.bt.devices[0]) / sizeof(reusableBuffer.moduleSetup.bt.devices[0]); + strncpy(bluetooth.distantAddr, reusableBuffer.moduleSetup.bt.devices[index], LEN_BLUETOOTH_ADDR); + bluetooth.state = BLUETOOTH_STATE_BIND_REQUESTED; + } + else { + reusableBuffer.moduleSetup.bt.devicesCount = 0; + bluetooth.state = BLUETOOTH_STATE_DISCOVER_END; + } +} +#endif + #include "common/stdlcd/model_setup_pxx1.cpp" #if defined(PXX2) @@ -348,10 +375,7 @@ void menuModelSetup(event_t event) IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), // Receiver 2 IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), // Receiver 3 - LABEL(Trainer), - 0, - TRAINER_LINE1_ROWS, - TRAINER_LINE2_ROWS + TRAINER_ROWS }); MENU_CHECK(menuTabModel, MENU_MODEL_SETUP, ITEM_MODEL_SETUP_LINES_COUNT); @@ -775,14 +799,6 @@ void menuModelSetup(event_t event) break; } - case ITEM_MODEL_SETUP_TRAINER_MODE: - lcdDrawTextAlignedLeft(y, INDENT TR_MODE); - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_VTRAINERMODES, g_model.trainerData.mode, attr); - if (attr) { - g_model.trainerData.mode = checkIncDec(event, g_model.trainerData.mode, 0, TRAINER_MODE_MAX(), EE_MODEL, isTrainerModeAvailable); - } - break; - case ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL: lcdDrawTextAlignedLeft(y, STR_EXTERNALRF); break; @@ -918,7 +934,71 @@ void menuModelSetup(event_t event) lcdDrawTextAlignedLeft(y, STR_TRAINER); break; - case ITEM_MODEL_SETUP_TRAINER_LINE1: + case ITEM_MODEL_SETUP_TRAINER_MODE: + lcdDrawTextAlignedLeft(y, INDENT TR_MODE); + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_VTRAINERMODES, g_model.trainerData.mode, attr); + if (attr) { + g_model.trainerData.mode = checkIncDec(event, g_model.trainerData.mode, 0, TRAINER_MODE_MAX(), EE_MODEL, isTrainerModeAvailable); +#if defined(BLUETOOTH) + if (checkIncDec_Ret) { + bluetooth.state = BLUETOOTH_STATE_OFF; + bluetooth.distantAddr[0] = '\0'; + } +#endif + } + break; + +#if defined(BLUETOOTH) + case ITEM_MODEL_SETUP_TRAINER_BLUETOOTH: + if (g_model.trainerData.mode == TRAINER_MODE_MASTER_BLUETOOTH) { + if (attr) { + s_editMode = 0; + } + if (bluetooth.distantAddr[0]) { + lcdDrawText(INDENT_WIDTH, y+1, bluetooth.distantAddr, TINSIZE); + lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, BUTTON(TR_CLEAR), attr); + if (attr && event == EVT_KEY_BREAK(KEY_ENTER)) { + bluetooth.state = BLUETOOTH_STATE_CLEAR_REQUESTED; + memclear(bluetooth.distantAddr, sizeof(bluetooth.distantAddr)); + } + } + else { + lcdDrawText(INDENT_WIDTH, y, "---"); + if (bluetooth.state < BLUETOOTH_STATE_IDLE) + lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_BUTTON_INIT, attr); + else + lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, BUTTON(TR_DISCOVER), attr); + if (attr && event == EVT_KEY_BREAK(KEY_ENTER)) { + if (bluetooth.state < BLUETOOTH_STATE_IDLE) { + bluetooth.state = BLUETOOTH_STATE_OFF; + } + else { + reusableBuffer.moduleSetup.bt.devicesCount = 0; + bluetooth.state = BLUETOOTH_STATE_DISCOVER_REQUESTED; + } + } + + if (bluetooth.state == BLUETOOTH_STATE_DISCOVER_START && reusableBuffer.moduleSetup.bt.devicesCount > 0) { + popupMenuItemsCount = min(reusableBuffer.moduleSetup.bt.devicesCount, 6); + for (uint8_t i=0; i(maxModuleChannels_M8(moduleIdx), 32-8-moduleData.channelsStart)); #if defined(INTERNAL_MODULE_PPM) - if ((k == ITEM_MODEL_SETUP_EXTERNAL_MODULE_CHANNELS && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM) || (k == ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS && g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_PPM) || (k == ITEM_MODEL_SETUP_TRAINER_LINE1)) { + if ((k == ITEM_MODEL_SETUP_EXTERNAL_MODULE_CHANNELS && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM) || (k == ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS && g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_PPM) || (k == ITEM_MODEL_SETUP_TRAINER_CHANNELS)) { SET_DEFAULT_PPM_FRAME_LENGTH(moduleIdx); } #else - if ((k == ITEM_MODEL_SETUP_EXTERNAL_MODULE_CHANNELS && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM) || (k == ITEM_MODEL_SETUP_TRAINER_LINE1)) { + if ((k == ITEM_MODEL_SETUP_EXTERNAL_MODULE_CHANNELS && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM) || (k == ITEM_MODEL_SETUP_TRAINER_CHANNELS)) { SET_DEFAULT_PPM_FRAME_LENGTH(moduleIdx); } #endif @@ -973,7 +1053,7 @@ void menuModelSetup(event_t event) break; } - case ITEM_MODEL_SETUP_TRAINER_LINE2: + case ITEM_MODEL_SETUP_TRAINER_PPM_PARAMS: lcdDrawTextAlignedLeft(y, STR_PPMFRAME); lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, (int16_t)g_model.trainerData.frameLength*5 + 225, (menuHorizontalPosition<=0 ? attr : 0) | PREC1|LEFT); lcdDrawText(lcdLastRightPos, y, STR_MS); diff --git a/radio/src/gui/212x64/radio_hardware.cpp b/radio/src/gui/212x64/radio_hardware.cpp new file mode 100644 index 000000000..e69de29bb diff --git a/radio/src/gui/212x64/view_main.cpp b/radio/src/gui/212x64/view_main.cpp index aed354a10..062a3cf5d 100644 --- a/radio/src/gui/212x64/view_main.cpp +++ b/radio/src/gui/212x64/view_main.cpp @@ -249,15 +249,10 @@ void displayTopBar() /* Notifs icons */ coord_t x = BAR_NOTIFS_X; -#if defined(LOG_TELEMETRY) || defined(WATCHDOG_DISABLED) - LCD_NOTIF_ICON(x, ICON_REBOOT); - x -= 12; -#else - if (unexpectedShutdown) { + if (isAsteriskDisplayed()) { LCD_NOTIF_ICON(x, ICON_REBOOT); x -= 12; } -#endif if (usbPlugged()) { LCD_NOTIF_ICON(x, ICON_USB); diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index cb184e2f6..4e9419e51 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -257,6 +257,15 @@ void memswap(void * a, void * b, uint8_t size) } } +#if defined(PXX2) +void setDefaultOwnerId() +{ + for (uint8_t i = 0; i < PXX2_LEN_REGISTRATION_ID; i++) { + g_eeGeneral.ownerRegistrationID[i] = (cpu_uid[1 + i] & 0x3f) - 26; + } +} +#endif + void generalDefault() { memclear(&g_eeGeneral, sizeof(g_eeGeneral)); @@ -326,9 +335,7 @@ void generalDefault() #endif #if defined(PXX2) - for (uint8_t i=0; i { protected: diff --git a/radio/src/pulses/pxx2.h b/radio/src/pulses/pxx2.h index 068eb4df3..7ce8454e7 100644 --- a/radio/src/pulses/pxx2.h +++ b/radio/src/pulses/pxx2.h @@ -67,7 +67,9 @@ enum PXX2ModuleModelID { PXX2_MODULE_R9M, PXX2_MODULE_R9M_LITE, PXX2_MODULE_R9M_LITE_PRO, - PXX2_MODULE_ISRM_N + PXX2_MODULE_ISRM_N, + PXX2_MODULE_ISRM_S_X9, + PXX2_MODULE_ISRM_S_X10 }; static const char * const PXX2ModulesNames[] = { @@ -79,7 +81,9 @@ static const char * const PXX2ModulesNames[] = { "R9M", "R9MLite", "R9MLite-PRO", - "ISRM-N" + "ISRM-N", + "ISRM-S-X9", + "ISRM-S-X10", }; inline const char * getPXX2ModuleName(uint8_t modelId) @@ -117,6 +121,8 @@ static const uint8_t PXX2ModuleOptions[] = { 0b11110010, // R9MLite 0b11110110, // R9MLite-PRO 0b11110100, // ISRM-N + 0b11110100, // ISRM-S-X9 + 0b11110100, // ISRM-S-X10 }; inline uint8_t getPXX2ModuleOptions(uint8_t modelId) diff --git a/radio/src/stamp.cpp b/radio/src/stamp.cpp index 98fbdb213..f112a97dc 100644 --- a/radio/src/stamp.cpp +++ b/radio/src/stamp.cpp @@ -56,23 +56,24 @@ __SECTION_USED(".bootversiondata") const char boot_version[] = "opentx-" FLA * Tries to find opentx version in the first 1024 byte of either firmware/bootloader (the one not running) or the buffer * @param buffer If non-null find the firmware version in the buffer instead */ -const char* getOtherVersion(char* buffer) +const char * getOtherVersion(char* buffer) { #if defined(BOOT) - const char* startother = (char*)(FIRMWARE_ADDRESS+BOOTLOADER_SIZE); + const char * startother = (char*)(FIRMWARE_ADDRESS+BOOTLOADER_SIZE); #else - const char* startother = (char*)(FIRMWARE_ADDRESS); + const char * startother = (char*)(FIRMWARE_ADDRESS); #endif if (buffer != nullptr) - startother=buffer; + startother = buffer; - const char* other_str = nullptr; - for (int i=0; i< 1024;i++) { - if (memcmp(startother+i, "opentx-", 7)==0) { + const char * other_str = nullptr; + for (int i=0; i<1024;i++) { + if (memcmp(startother+i, "opentx-", 7) == 0) { other_str = startother + i; break; } } + if (other_str != nullptr) return other_str; else diff --git a/radio/src/storage/conversions/conversions_218_219.cpp b/radio/src/storage/conversions/conversions_218_219.cpp index 528938038..0afb24a8f 100644 --- a/radio/src/storage/conversions/conversions_218_219.cpp +++ b/radio/src/storage/conversions/conversions_218_219.cpp @@ -35,12 +35,18 @@ typedef ModelData ModelData_v219; int convertSource_218_to_219(int source) { // on X7: 2 additional switches + // on X9D / X9D+: 1 additional switch #if defined(PCBX7) if (source >= MIXSRC_SI) source += 2; #endif +#if defined(PCBX9D) || defined(PCBX9DP) + if (source >= MIXSRC_SI) + source += 1; +#endif + #if defined(PCBHORUS) if (source >= MIXSRC_GMBL) source += 2; @@ -52,8 +58,9 @@ int convertSource_218_to_219(int source) int convertSwitch_218_to_219(int swtch) { // on X7: 2 additional switches + // on X9D / X9D+: 1 additional switch -#if defined(PCBX7) || defined(PCBHORUS) +#if defined(PCBX7) || defined(PCBHORUS) || defined(PCBX9D) || defined(PCBX9DP) if (swtch < 0) return -convertSwitch_218_to_219(-swtch); #endif @@ -63,6 +70,11 @@ int convertSwitch_218_to_219(int swtch) swtch += 2 * 3; #endif +#if defined(PCBX9D) || defined(PCBX9DP) + if (swtch >= SWSRC_SI0) + swtch += 3; +#endif + #if defined(PCBHORUS) if (swtch >= SWSRC_GMBL0) swtch += 2 * 3; @@ -184,6 +196,15 @@ void convertModelData_218_to_219(ModelData &model) newModel.moduleData[i].type += 1; if (newModel.moduleData[i].type >= MODULE_TYPE_R9M_PXX2) newModel.moduleData[i].type += 4; + if (newModel.moduleData[i].type == MODULE_TYPE_XJT_PXX1) { + newModel.moduleData[i].subType = newModel.moduleData[i].rfProtocol; +#if defined(PCBX9DP) && PCBREV >= 2019 + if (i == INTERNAL_MODULE) { + newModel.moduleData[i].type = MODULE_TYPE_ISRM_PXX2; + newModel.moduleData[i].subType = MODULE_SUBTYPE_ISRM_PXX2_ACCST_D16; + } +#endif + } } #if defined(RADIO_T12) @@ -250,21 +271,18 @@ void convertModelData_218_to_219(ModelData &model) #else newModel.screensType = oldModel.frsky.screensType; memmove(&newModel.screens, &oldModel.frsky.screens, sizeof(newModel.screens)); -#endif - -#if defined(PCBX7) for (int i=0; i> (2*i)) & 0x03; if (screenType == TELEMETRY_SCREEN_TYPE_VALUES) { for (int j = 0; j < 4; j++) { for (int k = 0; k < NUM_LINE_ITEMS; k++) { - newModel.screens[i].lines[j].sources[k] = convertSource_218_to_219(newModel.screens[i].lines[j].sources[k]); + newModel.screens[i].lines[j].sources[k] = convertSource_218_to_219(oldModel.frsky.screens[i].lines[j].sources[k]); } } } else if (screenType == TELEMETRY_SCREEN_TYPE_GAUGES) { for (int j = 0; j < 4; j++) { - newModel.screens[i].bars[j].source = convertSource_218_to_219(newModel.screens[i].bars[j].source); + newModel.screens[i].bars[j].source = convertSource_218_to_219(oldModel.frsky.screens[i].bars[j].source); } } } @@ -280,30 +298,67 @@ void convertRadioData_218_to_219(RadioData & settings) settings.version = 219; settings.variant = EEPROM_VARIANT; -#if defined(PCBHORUS) - RadioData_v218 settings_v218 = (RadioData_v218 &)settings; +#if defined(STM32) + RadioData_v218 * oldSettingsAllocated = (RadioData_v218 *)malloc(sizeof(RadioData_v218)); + RadioData_v218 & oldSettings = *oldSettingsAllocated; + memcpy(&oldSettings, &settings, sizeof(RadioData_v218)); +#endif - memcpy(&settings.chkSum, &settings_v218.chkSum, offsetof(RadioData, auxSerialMode) - offsetof(RadioData, chkSum)); - memcpy(&settings.calib[NUM_STICKS + 5], &settings_v218.calib[NUM_STICKS + 3], sizeof(CalibData) * (STORAGE_NUM_SLIDERS + STORAGE_NUM_MOUSE_ANALOGS)); +#if defined(PCBX9D) || defined(PCBX9DP) || defined(PCBX7) + for (uint8_t i=0; i= 2019 + settings.switchConfig |= SWITCH_TOGGLE << 16; +#endif + memcpy(&settings.switchNames[0], &oldSettings.switchNames[0], 8 * LEN_SWITCH_NAME); + memclear(&settings.switchNames[8], LEN_SWITCH_NAME); + memcpy(&settings.anaNames[0], &oldSettings.anaNames[0], (NUM_STICKS+NUM_POTS+NUM_SLIDERS) * LEN_ANA_NAME); +#endif + +#if defined(PCBHORUS) + memcpy(&settings.chkSum, &oldSettings.chkSum, offsetof(RadioData, auxSerialMode) - offsetof(RadioData, chkSum)); + memcpy(&settings.calib[NUM_STICKS + 5], &oldSettings.calib[NUM_STICKS + 3], sizeof(CalibData) * (STORAGE_NUM_SLIDERS + STORAGE_NUM_MOUSE_ANALOGS)); memclear(&settings.calib[NUM_STICKS + 3], sizeof(CalibData) * 2); - settings.auxSerialMode = settings_v218.auxSerialMode; - settings.switchConfig = settings_v218.switchConfig; - settings.potsConfig = settings_v218.potsConfig; - settings.slidersConfig = settings_v218.slidersConfig; + settings.auxSerialMode = oldSettings.auxSerialMode; + settings.switchConfig = oldSettings.switchConfig; + settings.potsConfig = oldSettings.potsConfig; + settings.slidersConfig = oldSettings.slidersConfig; - memcpy(&settings.switchNames[0], &settings_v218.switchNames[0], 8 * LEN_SWITCH_NAME); + memcpy(&settings.switchNames[0], &oldSettings.switchNames[0], 8 * LEN_SWITCH_NAME); memclear(&settings.switchNames[8], 2 * LEN_SWITCH_NAME); - memcpy(&settings.anaNames[0], &settings_v218.anaNames[0], (NUM_STICKS + 3) * LEN_ANA_NAME); + memcpy(&settings.anaNames[0], &oldSettings.anaNames[0], (NUM_STICKS + 3) * LEN_ANA_NAME); memclear(&settings.anaNames[NUM_STICKS + 3], 2 * LEN_SWITCH_NAME); - memcpy(&settings.anaNames[NUM_STICKS + 5], &settings_v218.anaNames[NUM_STICKS + 3], STORAGE_NUM_SLIDERS * LEN_ANA_NAME); + memcpy(&settings.anaNames[NUM_STICKS + 5], &oldSettings.anaNames[NUM_STICKS + 3], STORAGE_NUM_SLIDERS * LEN_ANA_NAME); - memcpy(&settings.currModelFilename[0], &settings_v218.currModelFilename[0], sizeof(RadioData_v218) - offsetof(RadioData_v218, currModelFilename[0])); + memcpy(&settings.currModelFilename[0], &oldSettings.currModelFilename[0], sizeof(RadioData_v218) - offsetof(RadioData_v218, currModelFilename[0])); #endif #if defined(RADIO_T12) g_eeGeneral.switchConfig = bfSet(g_eeGeneral.switchConfig, SWITCH_2POS, 10, 2); // T12 comes with wrongly defined pot2 g_eeGeneral.potsConfig = bfSet(g_eeGeneral.potsConfig, POT_WITHOUT_DETENT, 2, 2); // T12 comes with wrongly defined pot2 #endif + +#if defined(PCBX9DP) && PCBREV >= 2019 + // force re-calibration + settings.chkSum = 0xFFFF; + setDefaultOwnerId(); +#endif + +#if defined(STM32) + free(oldSettingsAllocated); +#endif } diff --git a/radio/src/storage/conversions/datastructs_218.h b/radio/src/storage/conversions/datastructs_218.h index ce0725471..2a34b3255 100644 --- a/radio/src/storage/conversions/datastructs_218.h +++ b/radio/src/storage/conversions/datastructs_218.h @@ -24,12 +24,6 @@ #define MAX_TIMERS_218 3 #define MAX_GVARS_218 9 -#if defined(BUZZER) -#define BUZZER_FIELD_218 int8_t buzzerMode:2; // -2=quiet, -1=only alarms, 0=no keys, 1=all (only used on AVR radios without audio hardware) -#else -#define BUZZER_FIELD_218 int8_t spareRadio:2; -#endif - #if defined(PCBHORUS) #define NUM_SWITCHES_218 8 #elif defined(PCBXLITE) @@ -130,6 +124,21 @@ #define MAX_TELEMETRY_SENSORS_218 32 #endif +#if defined(COLORLCD) +typedef uint32_t swarnstate218_t; +#elif defined(PCBX9E) +typedef uint64_t swconfig218_t; +typedef uint64_t swarnstate218_t; +typedef uint32_t swarnenable218_t; +#elif defined(PCBTARANIS) +typedef uint16_t swconfig218_t; +typedef uint16_t swarnstate218_t; +typedef uint8_t swarnenable218_t; +#else +typedef uint8_t swarnstate218_t; +typedef uint8_t swarnenable218_t; +#endif + PACK(typedef struct { uint8_t type:4; int8_t rfProtocol:4; @@ -416,7 +425,7 @@ PACK(struct ModelHeader_v218 { #if defined(COLORLCD) #define SWITCH_WARNING_DATA_218 #else -#define SWITCH_WARNING_DATA_218 swarnenable_t switchWarningEnable; +#define SWITCH_WARNING_DATA_218 swarnenable218_t switchWarningEnable; #endif PACK(struct ModelData_v218 { @@ -448,7 +457,7 @@ PACK(struct ModelData_v218 { uint8_t thrTraceSrc; - swarnstate_t switchWarningState; + swarnstate218_t switchWarningState; SWITCH_WARNING_DATA_218 @@ -467,45 +476,8 @@ PACK(struct ModelData_v218 { VIEW_DATA }); -#include "chksize.h" - -#define CHKSIZE(x, y) check_size() - -static inline void check_struct_218() -{ -#if defined(PCBHORUS) - CHKSIZE(ModelData_v218, 9380); -#elif defined(PCBX9E) - CHKSIZE(ModelData_v218, 6520); -#endif -} - -#undef CHKSIZE - -#define EXTRA_GENERAL_FIELDS_GENERAL_218 \ - uint8_t backlightBright; \ - uint32_t globalTimer; \ - uint8_t bluetoothBaudrate:4; \ - uint8_t bluetoothMode:4; \ - uint8_t countryCode; \ - uint8_t imperial:1; \ - uint8_t jitterFilter:1; /* 0 - active */\ - uint8_t disableRssiPoweroffAlarm:1; \ - uint8_t USBMode:2; \ - uint8_t spareExtraArm:3; \ - char ttsLanguage[2]; \ - int8_t beepVolume:4; \ - int8_t wavVolume:4; \ - int8_t varioVolume:4; \ - int8_t backgroundVolume:4; \ - int8_t varioPitch; \ - int8_t varioRange; \ - int8_t varioRepeat; \ - CustomFunctionData_v218 customFn[MAX_SPECIAL_FUNCTIONS_218]; - #if defined(PCBHORUS) #define EXTRA_GENERAL_FIELDS_218 \ - EXTRA_GENERAL_FIELDS_GENERAL_218 \ uint8_t auxSerialMode:4; \ uint8_t slidersConfig:4; \ uint32_t switchConfig; \ @@ -517,27 +489,25 @@ static inline void check_struct_218() uint8_t blOffBright:7; \ char bluetoothName[LEN_BLUETOOTH_NAME_218]; #elif defined(PCBTARANIS) -#if defined(BLUETOOTH) -#define BLUETOOTH_FIELDS_218 \ + #if defined(STORAGE_BLUETOOTH) && !defined(PCBX9D) && !defined(PCBX9DP) + #define BLUETOOTH_FIELDS_218 \ uint8_t spare; \ char bluetoothName[LEN_BLUETOOTH_NAME_218]; -#else -#define BLUETOOTH_FIELDS -#endif -#define EXTRA_GENERAL_FIELDS_218 \ - EXTRA_GENERAL_FIELDS_GENERAL_218 \ + #else + #define BLUETOOTH_FIELDS_218 + #endif + #define EXTRA_GENERAL_FIELDS_218 \ uint8_t auxSerialMode:4; \ uint8_t slidersConfig:4; \ uint8_t potsConfig; /* two bits per pot */\ uint8_t backlightColor; \ - swarnstate_t switchUnlockStates; \ - swconfig_t switchConfig; \ + swarnstate218_t switchUnlockStates; \ + swconfig218_t switchConfig; \ char switchNames[NUM_SWITCHES_218][LEN_SWITCH_NAME_218]; \ char anaNames[NUM_STICKS+NUM_POTS+NUM_SLIDERS][LEN_ANA_NAME_218]; \ - BLUETOOTH_FIELDS + BLUETOOTH_FIELDS_218 #elif defined(PCBSKY9X) -#define EXTRA_GENERAL_FIELDS_218 \ - EXTRA_GENERAL_FIELDS_GENERAL_218 \ + #define EXTRA_GENERAL_FIELDS_218 \ int8_t txCurrentCalibration; \ int8_t temperatureWarn; \ uint8_t mAhWarn; \ @@ -548,16 +518,8 @@ static inline void check_struct_218() uint8_t rotarySteps; \ char switchNames[NUM_SWITCHES_218][LEN_SWITCH_NAME_218]; \ char anaNames[NUM_STICKS+NUM_POTS+NUM_SLIDERS][LEN_ANA_NAME_218]; -#else - #define EXTRA_GENERAL_FIELDS_218 EXTRA_GENERAL_FIELDS_GENERAL_218 -#endif - -#if defined(PCBHORUS) -#define SPLASH_MODE_218 uint8_t splashSpares:3 -#elif defined(FSPLASH) -#define SPLASH_MODE_218 uint8_t splashMode:3 -#else -#define SPLASH_MODE_218 int8_t splashMode:3 + #else + #define EXTRA_GENERAL_FIELDS_218 EXTRA_GENERAL_FIELDS_GENERAL_218 #endif #if defined(COLORLCD) @@ -570,7 +532,7 @@ static inline void check_struct_218() #define THEME_DATA #endif -PACK(typedef struct { +PACK(struct RadioData_v218 { uint8_t version; uint16_t variant; CalibData calib[NUM_STICKS+STORAGE_NUM_POTS+STORAGE_NUM_SLIDERS+STORAGE_NUM_MOUSE_ANALOGS]; @@ -582,7 +544,7 @@ PACK(typedef struct { int8_t backlightMode; TrainerData_v218 trainer; uint8_t view; // index of view in main screen - BUZZER_FIELD_218 + int8_t buzzerMode:2; uint8_t fai:1; int8_t beepMode:2; // -2=quiet, -1=only alarms, 0=no keys, 1=all uint8_t alarmsFlash:1; @@ -592,8 +554,10 @@ PACK(typedef struct { int8_t timezone:5; uint8_t adjustRTC:1; uint8_t inactivityTimer; - SPLASH_MODE_218; /* 3bits */ - int8_t hapticMode:2; // -2=quiet, -1=only alarms, 0=no keys, 1=all + int8_t splashMode:3; + int8_t hapticMode:2; + int8_t spare2:3; + int8_t switchesDelay; uint8_t lightAutoOff; uint8_t templateSetup; // RETA order for receiver channels int8_t PPM_Multiplier; @@ -609,9 +573,47 @@ PACK(typedef struct { int8_t vBatMin; int8_t vBatMax; + uint8_t backlightBright; + uint32_t globalTimer; + uint8_t bluetoothBaudrate:4; + uint8_t bluetoothMode:4; + uint8_t countryCode; + uint8_t imperial:1; + uint8_t jitterFilter:1; /* 0 - active */ + uint8_t disableRssiPoweroffAlarm:1; + uint8_t USBMode:2; + uint8_t spareExtraArm:3; + char ttsLanguage[2]; + int8_t beepVolume:4; + int8_t wavVolume:4; + int8_t varioVolume:4; + int8_t backgroundVolume:4; + int8_t varioPitch; + int8_t varioRange; + int8_t varioRepeat; + CustomFunctionData_v218 customFn[MAX_SPECIAL_FUNCTIONS_218]; + EXTRA_GENERAL_FIELDS_218 THEME_DATA -}) RadioData_v218; +}); + +#include "chksize.h" + +#define CHKSIZE(x, y) check_size() + +static inline void check_struct_218() +{ +#if defined(PCBHORUS) + CHKSIZE(ModelData_v218, 9380); +#elif defined(PCBX9E) + CHKSIZE(ModelData_v218, 6520); +#elif defined(PCBX9D) + CHKSIZE(RadioData_v218, 872); +#endif +} + + +#undef CHKSIZE #endif //OPENTX_DATASTRUCTS_218_H diff --git a/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt b/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt index 68002e0d0..4141a766e 100644 --- a/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt +++ b/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt @@ -2,7 +2,7 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) -if(PCB STREQUAL X12S OR PCB STREQUAL X10) +if(CPU_TYPE_FULL STREQUAL STM32F429xI) set(BOOTLOADER_SRC ${BOOTLOADER_SRC} ../f4/system_stm32f4xx.c @@ -19,7 +19,7 @@ if(PCB STREQUAL X12S OR PCB STREQUAL X10) ../../../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_sdio.c ../../../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/misc.c ) -elseif(PCB STREQUAL X9E) +elseif(CPU_TYPE_FULL STREQUAL STM32F407xE) set(BOOTLOADER_SRC ${BOOTLOADER_SRC} ../f4/system_stm32f4xx.c @@ -85,7 +85,7 @@ set(BOOTLOADER_SRC bin_files.cpp ) -if(PCB STREQUAL X12S OR PCB STREQUAL X10 OR PCB STREQUAL X9E OR (PCB STREQUAL X7 AND NOT (PCBREV STREQUAL T12)) OR PCB STREQUAL X9LITE) +if(PCB STREQUAL X12S OR PCB STREQUAL X10 OR PCB STREQUAL X9E OR (PCB STREQUAL X9D+ AND PCBREV STREQUAL 2019) OR (PCB STREQUAL X7 AND NOT (PCBREV STREQUAL T12)) OR PCB STREQUAL X9LITE) set(BOOTLOADER_SRC ${BOOTLOADER_SRC} ../../../../../targets/common/arm/stm32/rotary_encoder_driver.cpp @@ -97,9 +97,7 @@ if(NOT (PCB STREQUAL X10 OR PCB STREQUAL X12S)) ${BOOTLOADER_SRC} ../../../../../targets/${TARGET_DIR}/i2c_driver.cpp ) - remove_definitions(-DDEBUG) - else() set(BOOTLOADER_SRC ${BOOTLOADER_SRC} @@ -131,7 +129,6 @@ set(CMAKE_EXE_LINKER_FLAGS "-mcpu=${MCU} -mthumb -nostartfiles -lm -T${RADIO_SRC # use smaller nano libc set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --specs=nano.specs") - add_executable(bootloader ${BOOTLOADER_SRC}) add_dependencies(bootloader ${BITMAPS_TARGET} firmware_translations) diff --git a/radio/src/targets/horus/hal.h b/radio/src/targets/horus/hal.h index 885ad1980..3bc7abad3 100644 --- a/radio/src/targets/horus/hal.h +++ b/radio/src/targets/horus/hal.h @@ -591,7 +591,6 @@ #endif // External Module -#define EXTMODULE_PULSES #define EXTMODULE_PWR_GPIO GPIOB #define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_3 // PB.03 #if defined(PCBX10) || PCBREV >= 13 @@ -679,6 +678,7 @@ #define TIMER_2MHz_TIMER TIM7 // Bluetooth +#define STORAGE_BLUETOOTH #define BT_RCC_APB2Periph RCC_APB2Periph_USART6 #define BT_USART USART6 #define BT_GPIO_AF GPIO_AF_USART6 diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index 3837c3d1f..f2ce5289a 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -12,10 +12,11 @@ if(PCB STREQUAL X9E) set(CPU_TYPE STM32F4) set(CPU_TYPE_FULL STM32F407xE) # for size report set(LINKER_SCRIPT targets/taranis/stm32f4_flash.ld) + add_definitions(-DSTM32F40_41xxx) set(HAPTIC YES) set(LUA_EXPORT lua_export_x9e) set(FLAVOUR x9e) - add_definitions(-DSTM32F40_41xxx -DPCBX9E -DPCBX9) + add_definitions(-DPCBX9E -DPCBX9) add_definitions(-DEEPROM_VARIANT=0x8000) add_definitions(-DPWR_BUTTON_${PWR_BUTTON}) set(FIRMWARE_TARGET_SRC @@ -35,9 +36,6 @@ if(PCB STREQUAL X9E) set(GVAR_SCREEN model_gvars.cpp) set(STATUS_LEDS NO) elseif(PCB STREQUAL X9D+) - set(CPU_TYPE STM32F2) - set(CPU_TYPE_FULL STM32F205xE) # for size report - set(LINKER_SCRIPT targets/taranis/stm32f2_flash.ld) set(HAPTIC YES) set(LUA_EXPORT lua_export_x9d) set(FLAVOUR x9d+) @@ -48,9 +46,30 @@ elseif(PCB STREQUAL X9D+) set(BITMAPS_TARGET taranis_bitmaps) set(FONTS_TARGET taranis_fonts) set(LCD_DRIVER lcd_driver_spi.cpp) - set(AUX_SERIAL_DRIVER ../common/arm/stm32/aux_serial_driver.cpp) set(GVAR_SCREEN model_gvars.cpp) - set(STATUS_LEDS NO) + set(PCBREV 2014 CACHE STRING "PCB Revision") + add_definitions(-DPCBREV=${PCBREV}) + if (${PCBREV} STREQUAL 2019) + set(PWR_BUTTON "PRESS" CACHE STRING "Pwr button type (PRESS/SWITCH)") + set(CPU_TYPE STM32F4) + set(CPU_TYPE_FULL STM32F407xE) # for size report + set(FIRMWARE_TARGET_SRC + ${FIRMWARE_TARGET_SRC} + startup_stm32f40_41xxx.s + ) + set(LINKER_SCRIPT targets/taranis/stm32f4_flash.ld) + add_definitions(-DSTM32F40_41xxx) + add_definitions(-DSOFTWARE_VOLUME -DPWR_BUTTON_${PWR_BUTTON} -DHARDWARE_POWER_MANAGEMENT_UNIT) + set(STATUS_LEDS YES) + set(PXX2 ON) + set(PXX_FREQUENCY "HIGH") + else() + set(CPU_TYPE STM32F2) + set(CPU_TYPE_FULL STM32F205xE) # for size report + set(LINKER_SCRIPT targets/taranis/stm32f2_flash.ld) + set(AUX_SERIAL_DRIVER ../common/arm/stm32/aux_serial_driver.cpp) + set(STATUS_LEDS NO) + endif() elseif(PCB STREQUAL X9D) set(CPU_TYPE STM32F2) set(CPU_TYPE_FULL STM32F205xE) # for size report @@ -169,7 +188,7 @@ if(PCB STREQUAL XLITES) ) endif() -if(PCB STREQUAL XLITE OR PCB STREQUAL XLITES OR PCB STREQUAL X9LITE) +if(PCB STREQUAL XLITE OR PCB STREQUAL XLITES OR PCB STREQUAL X9LITE OR (PCB STREQUAL X9D+ AND PCBREV STREQUAL 2019)) add_definitions(-DINTERNAL_MODULE_SERIAL) if(PXX_FREQUENCY STREQUAL HIGH) add_definitions(-DPXX_FREQUENCY_HIGH) @@ -185,14 +204,14 @@ elseif(NOT (PCB STREQUAL X7 AND PCBREV STREQUAL T12)) ) endif() -if(PCB STREQUAL X9E OR (PCB STREQUAL X7 AND NOT (PCBREV STREQUAL T12)) OR PCB STREQUAL X9LITE) +if(PCB STREQUAL X9E OR (PCB STREQUAL X9D+ AND PCBREV STREQUAL 2019) OR (PCB STREQUAL X7 AND NOT (PCBREV STREQUAL T12)) OR PCB STREQUAL X9LITE) set(TARGET_SRC ${TARGET_SRC} ../common/arm/stm32/rotary_encoder_driver.cpp ) endif() -if(PCB STREQUAL X9E OR PCB STREQUAL X7 OR PCB STREQUAL XLITE OR PCB STREQUAL XLITES) +if(PCB STREQUAL X9E OR PCB STREQUAL X7 OR PCB STREQUAL XLITE OR PCB STREQUAL XLITES OR (PCB STREQUAL X9D+ AND PCBREV STREQUAL 2019)) add_definitions(-DBLUETOOTH) set(TARGET_SRC ${TARGET_SRC} diff --git a/radio/src/targets/taranis/board.cpp b/radio/src/targets/taranis/board.cpp index 4fc9fd34d..6740b51d9 100644 --- a/radio/src/targets/taranis/board.cpp +++ b/radio/src/targets/taranis/board.cpp @@ -44,15 +44,16 @@ void watchdogInit(unsigned int duration) #if defined(PWR_BUTTON_PRESS) #define PWR_PRESS_DURATION_MIN 100 // 1s #define PWR_PRESS_DURATION_MAX 500 // 5s -#endif -#if (defined(PCBX9E) && !defined(SIMU)) -const unsigned char bmp_startup[] = { - #include "startup.lbm" -}; -const unsigned char bmp_lock[] = { - #include "lock.lbm" -}; + #if LCD_DEPTH > 1 + const unsigned char bmp_startup[] = { + #include "startup.lbm" + }; + + const unsigned char bmp_lock[] = { + #include "lock.lbm" + }; + #endif #endif #if defined(SPORT_UPDATE_PWR_GPIO) diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h index 07c128124..7a62dd138 100644 --- a/radio/src/targets/taranis/board.h +++ b/radio/src/targets/taranis/board.h @@ -133,11 +133,12 @@ void extmoduleSendNextFrame(); // Trainer driver #define SLAVE_MODE() (g_model.trainerData.mode == TRAINER_MODE_SLAVE) -#if defined(PCBX9E) - #define TRAINER_CONNECTED() (true) -#elif defined(PCBX7) || defined(PCBX9LITE) - #define TRAINER_CONNECTED() (GPIO_ReadInputDataBit(TRAINER_DETECT_GPIO, TRAINER_DETECT_GPIO_PIN) == Bit_SET) + +#if defined(PCBX9D) || (defined(PCBX9DP) && PCBREV < 2019) + // Trainer detect is a switch on the jack + #define TRAINER_CONNECTED() (GPIO_ReadInputDataBit(TRAINER_DETECT_GPIO, TRAINER_DETECT_GPIO_PIN) == Bit_RESET) #elif defined(PCBXLITES) + // Trainer is on the same connector than Headphones enum JackState { SPEAKER_ACTIVE, @@ -147,10 +148,13 @@ void extmoduleSendNextFrame(); extern uint8_t jackState; #define TRAINER_CONNECTED() (jackState == TRAINER_ACTIVE) #elif defined(PCBXLITE) - #define TRAINER_CONNECTED() false // there is no Trainer jack on Taranis X-Lite + // No Tainer jack on Taranis X-Lite + #define TRAINER_CONNECTED() false #else - #define TRAINER_CONNECTED() (GPIO_ReadInputDataBit(TRAINER_DETECT_GPIO, TRAINER_DETECT_GPIO_PIN) == Bit_RESET) + // Trainer detect catches PPM, detection would use more CPU + #define TRAINER_CONNECTED() true #endif + #if defined(TRAINER_GPIO) void init_trainer_ppm(); void stop_trainer_ppm(); @@ -323,6 +327,11 @@ enum EnumSwitchesPositions SW_SH1, SW_SH2, #endif +#if defined(PCBX9DP) && PCBREV >= 2019 + SW_SI0, + SW_SI1, + SW_SI2, +#endif #if defined(PCBX7) SW_SI0, SW_SI1, @@ -397,9 +406,15 @@ enum EnumSwitchesPositions #define DEFAULT_SWITCH_CONFIG (SWITCH_TOGGLE << 14) + (SWITCH_3POS << 12) + (SWITCH_2POS << 10) + (SWITCH_3POS << 8) + (SWITCH_3POS << 6) + (SWITCH_3POS << 4) + (SWITCH_3POS << 2) + (SWITCH_3POS << 0) #define DEFAULT_POTS_CONFIG (POT_WITH_DETENT << 0) + (POT_WITH_DETENT << 2); // S1 = pot without detent, S2 = pot with detent #define DEFAULT_SLIDERS_CONFIG (SLIDER_WITH_DETENT << 1) + (SLIDER_WITH_DETENT << 0) -#else - #define NUM_SWITCHES 8 +#elif defined(PCBX9DP) && PCBREV >= 2019 + #define NUM_SWITCHES 9 #define STORAGE_NUM_SWITCHES NUM_SWITCHES + #define DEFAULT_SWITCH_CONFIG (SWITCH_TOGGLE << 16) + (SWITCH_TOGGLE << 14) + (SWITCH_3POS << 12) + (SWITCH_2POS << 10) + (SWITCH_3POS << 8) + (SWITCH_3POS << 6) + (SWITCH_3POS << 4) + (SWITCH_3POS << 2) + (SWITCH_3POS << 0); + #define DEFAULT_POTS_CONFIG (POT_WITH_DETENT << 0) + (POT_WITH_DETENT << 2); // S1 = pot without detent, S2 = pot with detent + #define DEFAULT_SLIDERS_CONFIG (SLIDER_WITH_DETENT << 1) + (SLIDER_WITH_DETENT << 0) +#elif defined(PCBX9D) || defined(PCBX9DP) + #define NUM_SWITCHES 8 + #define STORAGE_NUM_SWITCHES 9 #define DEFAULT_SWITCH_CONFIG (SWITCH_TOGGLE << 14) + (SWITCH_3POS << 12) + (SWITCH_2POS << 10) + (SWITCH_3POS << 8) + (SWITCH_3POS << 6) + (SWITCH_3POS << 4) + (SWITCH_3POS << 2) + (SWITCH_3POS << 0) #define DEFAULT_POTS_CONFIG (POT_WITH_DETENT << 0) + (POT_WITH_DETENT << 2); // S1 = pot without detent, S2 = pot with detent #define DEFAULT_SLIDERS_CONFIG (SLIDER_WITH_DETENT << 1) + (SLIDER_WITH_DETENT << 0) @@ -407,10 +422,10 @@ enum EnumSwitchesPositions #define STORAGE_NUM_SWITCHES_POSITIONS (STORAGE_NUM_SWITCHES * 3) -void keysInit(void); +void keysInit(); uint32_t switchState(uint8_t index); -uint32_t readKeys(void); -uint32_t readTrims(void); +uint32_t readKeys(); +uint32_t readTrims(); #define TRIMS_PRESSED() (readTrims()) #define KEYS_PRESSED() (readKeys()) @@ -484,8 +499,6 @@ enum Analogs { #define STORAGE_NUM_SLIDERS 2 #endif -#define NUM_XPOTS NUM_POTS - #define NUM_XPOTS NUM_POTS #define NUM_TRIMS 4 #define NUM_MOUSE_ANALOGS 0 @@ -575,6 +588,8 @@ extern uint16_t adcValues[NUM_ANALOGS]; #define BATT_SCALE 123 #elif defined(PCBX9LITE) #define BATT_SCALE 117 +#elif defined(PCBX9DP) && PCBREV >= 2019 + #define BATT_SCALE 117 #else #define BATT_SCALE 150 #endif @@ -649,11 +664,11 @@ void telemetryClearFifo(); extern uint32_t telemetryErrors; // PCBREV driver -#if defined(PCBXLITE) || defined(PCBX9LITE) - #define HAS_SPORT_UPDATE_CONNECTOR() true -#elif defined(PCBX7) +#if defined(PCBX7) #define IS_PCBREV_40() (GPIO_ReadInputDataBit(PCBREV_GPIO, PCBREV_GPIO_PIN) == Bit_SET) #define HAS_SPORT_UPDATE_CONNECTOR() IS_PCBREV_40() +#elif defined(SPORT_UPDATE_PWR_GPIO) + #define HAS_SPORT_UPDATE_CONNECTOR() true #else #define HAS_SPORT_UPDATE_CONNECTOR() false #endif @@ -766,7 +781,6 @@ void ledBlue(void); #define LCD_W 212 #define LCD_H 64 #define LCD_DEPTH 4 -#define IS_LCD_RESET_NEEDED() (!WAS_RESET_BY_WATCHDOG_OR_SOFTWARE()) #define LCD_CONTRAST_MIN 0 #define LCD_CONTRAST_MAX 45 #define LCD_CONTRAST_DEFAULT 25 @@ -779,6 +793,13 @@ void ledBlue(void); #define LCD_CONTRAST_MAX 30 #define LCD_CONTRAST_DEFAULT 20 #endif + +#if defined(PCBX9D) || defined(PCBX9E) || (defined(PCBX9DP) && PCBREV < 2019) +#define IS_LCD_RESET_NEEDED() (!WAS_RESET_BY_WATCHDOG_OR_SOFTWARE()) +#else +#define IS_LCD_RESET_NEEDED() true +#endif + void lcdInit(void); void lcdInitFinish(void); void lcdOff(void); diff --git a/radio/src/targets/taranis/bootloader/boot_menu.cpp b/radio/src/targets/taranis/bootloader/boot_menu.cpp index 09261ab7d..4a2eb1497 100644 --- a/radio/src/targets/taranis/bootloader/boot_menu.cpp +++ b/radio/src/targets/taranis/bootloader/boot_menu.cpp @@ -25,8 +25,8 @@ void bootloaderDrawScreen(BootloaderState st, int opt, const char *str) if (st == ST_START) { lcdDrawTextAlignedLeft(2*FH, "\010Write Firmware"); - lcdDrawTextAlignedLeft(3 * FH, "\010Restore EEPROM"); - lcdDrawTextAlignedLeft(4 * FH, "\010Exit"); + lcdDrawTextAlignedLeft(3*FH, "\010Restore EEPROM"); + lcdDrawTextAlignedLeft(4*FH, "\010Exit"); #if LCD_W >= 212 lcdDrawTextAlignedLeft(6*FH, "\001Curr FW:"); @@ -58,20 +58,21 @@ void bootloaderDrawScreen(BootloaderState st, int opt, const char *str) } else if (st == ST_FLASH_CHECK) { if (opt == FC_ERROR) { - if (memoryType == MEM_FLASH) bootloaderDrawMsg(0, STR_INVALID_FIRMWARE, 2, false); else bootloaderDrawMsg(0, STR_INVALID_EEPROM, 2, false); } else if (opt == FC_OK) { - const char *vers = getOtherVersion((char *) Block_buffer); + if (memoryType == MEM_FLASH) { + const char * vers = getOtherVersion((char *) Block_buffer); #if LCD_W < 212 - // Remove opentx- from string - if (strstr(vers, "opentx-")) - vers = vers + 7; + // Remove opentx- from string + if (strstr(vers, "opentx-")) + vers = vers + 7; #endif - bootloaderDrawMsg(INDENT_WIDTH, vers, 0, false); + bootloaderDrawMsg(INDENT_WIDTH, vers, 0, false); + } bootloaderDrawMsg(0, STR_HOLD_ENTER_TO_START, 2, false); } } diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h index 9ad0c9cd6..17400df49 100644 --- a/radio/src/targets/taranis/hal.h +++ b/radio/src/targets/taranis/hal.h @@ -77,6 +77,15 @@ #define KEYS_GPIO_PIN_EXIT GPIO_Pin_9 // PE.09 #define KEYS_GPIO_REG_ENTER GPIOE->IDR #define KEYS_GPIO_PIN_ENTER GPIO_Pin_11 // PE.11 +#elif defined(PCBX9DP) && PCBREV >= 2019 + #define KEYS_GPIO_REG_MENU GPIOD->IDR + #define KEYS_GPIO_PIN_MENU GPIO_Pin_2 // PD.02 + #define KEYS_GPIO_REG_EXIT GPIOD->IDR + #define KEYS_GPIO_PIN_EXIT GPIO_Pin_7 // PD.07 + #define KEYS_GPIO_REG_PAGE GPIOD->IDR + #define KEYS_GPIO_PIN_PAGE GPIO_Pin_3 // PD.03 + #define KEYS_GPIO_REG_ENTER GPIOE->IDR + #define KEYS_GPIO_PIN_ENTER GPIO_Pin_12 // PE.12 #else #define KEYS_GPIO_REG_MENU GPIOD->IDR #define KEYS_GPIO_PIN_MENU GPIO_Pin_7 // PD.07 @@ -106,6 +115,19 @@ #define ROTARY_ENCODER_EXTI_PortSource EXTI_PortSourceGPIOD #define ROTARY_ENCODER_EXTI_PinSource1 EXTI_PinSource12 #define ROTARY_ENCODER_EXTI_PinSource2 EXTI_PinSource13 +#elif defined(PCBX9DP) && PCBREV >= 2019 + #define ROTARY_ENCODER_NAVIGATION + #define ROTARY_ENCODER_GPIO GPIOE + #define ROTARY_ENCODER_GPIO_PIN_A GPIO_Pin_10 // PE.10 + #define ROTARY_ENCODER_GPIO_PIN_B GPIO_Pin_11 // PE.11 + #define ROTARY_ENCODER_POSITION() (((ROTARY_ENCODER_GPIO->IDR >> 9) & 0x02) + ((ROTARY_ENCODER_GPIO->IDR >> 11) & 0x01)) + #define ROTARY_ENCODER_EXTI_LINE1 EXTI_Line10 + #define ROTARY_ENCODER_EXTI_LINE2 EXTI_Line11 + #define ROTARY_ENCODER_EXTI_IRQn1 EXTI15_10_IRQn + #define ROTARY_ENCODER_EXTI_IRQHandler1 EXTI15_10_IRQHandler + #define ROTARY_ENCODER_EXTI_PortSource EXTI_PortSourceGPIOE + #define ROTARY_ENCODER_EXTI_PinSource1 EXTI_PinSource10 + #define ROTARY_ENCODER_EXTI_PinSource2 EXTI_PinSource11 #elif defined(RADIO_X7) #define ROTARY_ENCODER_NAVIGATION #define ROTARY_ENCODER_GPIO GPIOE @@ -205,6 +227,23 @@ #define TRIMS_GPIO_PIN_RVD GPIO_Pin_14 // PE.14 #define TRIMS_GPIO_REG_RHL GPIOD->IDR #define TRIMS_GPIO_PIN_RHL GPIO_Pin_9 // PD.09 +#elif defined(PCBX9DP) && PCBREV >= 2019 + #define TRIMS_GPIO_REG_LHL GPIOE->IDR + #define TRIMS_GPIO_PIN_LHL GPIO_Pin_3 // PE.03 + #define TRIMS_GPIO_REG_LHR GPIOE->IDR + #define TRIMS_GPIO_PIN_LHR GPIO_Pin_4 // PE.04 + #define TRIMS_GPIO_REG_LVD GPIOE->IDR + #define TRIMS_GPIO_PIN_LVD GPIO_Pin_6 // PE.06 + #define TRIMS_GPIO_REG_LVU GPIOE->IDR + #define TRIMS_GPIO_PIN_LVU GPIO_Pin_5 // PE.05 + #define TRIMS_GPIO_REG_RVD GPIOC->IDR + #define TRIMS_GPIO_PIN_RVD GPIO_Pin_3 // PC.03 + #define TRIMS_GPIO_REG_RVU GPIOC->IDR + #define TRIMS_GPIO_PIN_RVU GPIO_Pin_2 // PC.02 + #define TRIMS_GPIO_REG_RHL GPIOC->IDR + #define TRIMS_GPIO_PIN_RHL GPIO_Pin_13 // PC.13 + #define TRIMS_GPIO_REG_RHR GPIOC->IDR + #define TRIMS_GPIO_PIN_RHR GPIO_Pin_1 // PC.01 #else #define TRIMS_GPIO_REG_LHL GPIOE->IDR #define TRIMS_GPIO_PIN_LHL GPIO_Pin_4 // PE.04 @@ -465,6 +504,15 @@ #define SWITCHES_GPIO_PIN_H GPIO_Pin_13 // PE.13 #endif +#if defined(PCBX9DP) && PCBREV >= 2019 + #define STORAGE_SWITCH_I + #define HARDWARE_SWITCH_I + #define SWITCHES_GPIO_REG_I GPIOD->IDR + #define SWITCHES_GPIO_PIN_I GPIO_Pin_10 // PD.10 +#elif defined(PCBX9D) || defined(PCBX9DP) + #define STORAGE_SWITCH_I +#endif + // X7 P400 P401 headers additionnal momentary switches #if defined(PCBX7) #define STORAGE_SWITCH_I @@ -549,6 +597,13 @@ #define KEYS_GPIOE_PINS (TRIMS_GPIO_PIN_LVU | TRIMS_GPIO_PIN_LVD | SWITCHES_GPIO_PIN_D_H | SWITCHES_GPIO_PIN_D_L| SWITCHES_GPIO_PIN_E_H | SWITCHES_GPIO_PIN_E_L | SWITCHES_GPIO_PIN_F | SWITCHES_GPIO_PIN_I_L | SWITCHES_GPIO_PIN_L_H | SWITCHES_GPIO_PIN_L_L | SWITCHES_GPIO_PIN_M_H | SWITCHES_GPIO_PIN_O_L | SWITCHES_GPIO_PIN_R_L) #define KEYS_GPIOF_PINS (KEYS_GPIO_PIN_ENTER | SWITCHES_GPIO_PIN_C_H | SWITCHES_GPIO_PIN_C_L | SWITCHES_GPIO_PIN_G_H | SWITCHES_GPIO_PIN_G_L | SWITCHES_GPIO_PIN_H | SWITCHES_GPIO_PIN_I_H | SWITCHES_GPIO_PIN_O_H | SWITCHES_GPIO_PIN_P_H | SWITCHES_GPIO_PIN_P_L | SWITCHES_GPIO_PIN_Q_H | SWITCHES_GPIO_PIN_Q_L) #define KEYS_GPIOG_PINS (TRIMS_GPIO_PIN_LHL | TRIMS_GPIO_PIN_LHR| SWITCHES_GPIO_PIN_B_H | SWITCHES_GPIO_PIN_B_L | SWITCHES_GPIO_PIN_J_H | SWITCHES_GPIO_PIN_J_L | SWITCHES_GPIO_PIN_K_H | SWITCHES_GPIO_PIN_K_L) +#elif defined(PCBX9DP) && PCBREV >= 2019 + #define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE) + #define KEYS_GPIOA_PINS (GPIO_Pin_5) + #define KEYS_GPIOB_PINS (GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5) + #define KEYS_GPIOC_PINS (GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_13) + #define KEYS_GPIOD_PINS (GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_7 | GPIO_Pin_10 | GPIO_Pin_14) + #define KEYS_GPIOE_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15) #elif defined(PCBX9DP) #define KEYS_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOE) #define KEYS_GPIOA_PINS (SWITCHES_GPIO_PIN_C_L) @@ -666,20 +721,26 @@ #define ADC_CHANNEL_STICK_LV ADC_Channel_3 // ADC1_IN3 #define ADC_GPIO_PIN_POT1 GPIO_Pin_6 // PA.06 #define ADC_GPIO_PIN_POT2 GPIO_Pin_0 // PB.00 - #define ADC_GPIO_PIN_POT3 GPIO_Pin_1 // PB.01 + #if PCBREV < 2019 + #define ADC_GPIO_PIN_POT3 GPIO_Pin_1 // PB.01 + #define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_POT3) + #define ADC_CHANNEL_POT3 ADC_Channel_9 + #define ADC_VREF_PREC2 330 + #else + #define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT2) + #define ADC_CHANNEL_POT3 0 + #define ADC_VREF_PREC2 300 + #endif #define ADC_GPIO_PIN_SLIDER1 GPIO_Pin_4 // PC.04 #define ADC_GPIO_PIN_SLIDER2 GPIO_Pin_5 // PC.05 #define ADC_GPIO_PIN_BATT GPIO_Pin_0 // PC.00 #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_POT1) - #define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_POT3) #define ADC_GPIOC_PINS (ADC_GPIO_PIN_SLIDER1 | ADC_GPIO_PIN_SLIDER2 | ADC_GPIO_PIN_BATT) #define ADC_CHANNEL_POT1 ADC_Channel_6 #define ADC_CHANNEL_POT2 ADC_Channel_8 - #define ADC_CHANNEL_POT3 ADC_Channel_9 #define ADC_CHANNEL_SLIDER1 ADC_Channel_14 #define ADC_CHANNEL_SLIDER2 ADC_Channel_15 #define ADC_CHANNEL_BATT ADC_Channel_10 - #define ADC_VREF_PREC2 330 #elif defined(PCBXLITE) #define HARDWARE_POT1 #define HARDWARE_POT2 @@ -804,7 +865,13 @@ #define PWR_ON_GPIO_PIN GPIO_Pin_0 // PD.00 #endif -#if defined(PCBXLITE) +#if defined(PCBX9DP) && PCBREV >= 2019 + #define STATUS_LEDS + #define GPIO_LED_GPIO_ON GPIO_SetBits + #define GPIO_LED_GPIO_OFF GPIO_ResetBits + #define LED_GREEN_GPIO GPIOA + #define LED_GREEN_GPIO_PIN GPIO_Pin_13 // PA.13 +#elif defined(PCBXLITE) #define STATUS_LEDS #define GPIO_LED_GPIO_ON GPIO_ResetBits #define GPIO_LED_GPIO_OFF GPIO_SetBits @@ -840,9 +907,10 @@ #if !defined(RADIO_T12) #define HARDWARE_INTERNAL_MODULE #endif -#if !defined(PCBXLITES) && !defined(PCBX9LITE) +#if !defined(PCBXLITES) && !defined(PCBX9LITE) && !(defined(PCBX9DP) && PCBREV >= 2019) #define INTERNAL_MODULE_PXX1 #endif +#define INTMODULE_FLASH_BAUDRATE 57600 #if defined(PCBXLITE) || defined(PCBX9LITE) #define INTMODULE_RCC_APB1Periph 0 #define INTMODULE_RCC_APB2Periph RCC_APB2Periph_USART1 @@ -873,7 +941,26 @@ #define INTMODULE_BOOTCMD_GPIO GPIOC #define INTMODULE_BOOTCMD_GPIO_PIN GPIO_Pin_8 // PC.08 #endif -#define INTMODULE_FLASH_BAUDRATE 57600 +#elif defined(PCBX9DP) && PCBREV >= 2019 + #define INTMODULE_RCC_APB1Periph 0 + #define INTMODULE_RCC_APB2Periph RCC_APB2Periph_USART1 + #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA2) + #define INTMODULE_PWR_GPIO GPIOA + #define INTMODULE_PWR_GPIO_PIN GPIO_Pin_7 // PA.07 + #define INTMODULE_GPIO GPIOB + #define INTMODULE_TX_GPIO_PIN GPIO_Pin_6 // PB.06 + #define INTMODULE_RX_GPIO_PIN GPIO_Pin_7 // PB.07 + #define INTMODULE_GPIO_PinSource_TX GPIO_PinSource6 + #define INTMODULE_GPIO_PinSource_RX GPIO_PinSource7 + #define INTMODULE_USART USART1 + #define INTMODULE_GPIO_AF GPIO_AF_USART1 + #define INTMODULE_USART_IRQHandler USART1_IRQHandler + #define INTMODULE_USART_IRQn USART1_IRQn + #define INTMODULE_DMA_STREAM DMA2_Stream7 + #define INTMODULE_DMA_STREAM_IRQ DMA2_Stream7_IRQn + #define INTMODULE_DMA_STREAM_IRQHandler DMA2_Stream7_IRQHandler + #define INTMODULE_DMA_FLAG_TC DMA_IT_TCIF7 + #define INTMODULE_DMA_CHANNEL DMA_Channel_4 #elif defined(PCBX9E) || defined(PCBX9DP) || defined(RADIO_X7) #define INTMODULE_PULSES #define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA2) @@ -938,16 +1025,19 @@ #endif // External Module -#define EXTMODULE_PULSES - -#if defined(PCBXLITE) || defined(PCBX9LITE) - #define HARDWARE_EXTERNAL_MODULE_SIZE_SML +#if defined(PCBXLITE) || defined(PCBX9LITE) || (defined(PCBX9DP) && PCBREV >= 2019) #define EXTMODULE_RCC_APB2Periph (RCC_APB2Periph_TIM8 | RCC_APB2Periph_USART6) - #if defined(PCBX9LITE) + #if defined(PCBX9DP) && PCBREV >= 2019 + #define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2) + #define EXTMODULE_PWR_GPIO GPIOD + #define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_8 // PD.08 + #elif defined(PCBX9LITE) + #define HARDWARE_EXTERNAL_MODULE_SIZE_SML #define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA2) #define EXTMODULE_PWR_GPIO GPIOA #define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_8 // PA.08 #else + #define HARDWARE_EXTERNAL_MODULE_SIZE_SML #define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2) #define EXTMODULE_PWR_GPIO GPIOD #define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_11 // PD.11 @@ -1005,8 +1095,30 @@ #define EXTMODULE_TIMER_OUTPUT_ENABLE TIM_CCER_CC1NE #define EXTMODULE_TIMER_OUTPUT_POLARITY TIM_CCER_CC1NP #define EXTMODULE_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2) +#elif defined(PCBX9DP) && PCBREV >= 2019 + #define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2) + #define EXTMODULE_RCC_APB2Periph (RCC_APB2Periph_TIM8 | RCC_APB2Periph_USART6) + #define EXTMODULE_PWR_GPIO GPIOD + #define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_8 // PD.08 + #define EXTERNAL_MODULE_PWR_ON() GPIO_SetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) + #define EXTERNAL_MODULE_PWR_OFF() GPIO_ResetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) + #define IS_EXTERNAL_MODULE_ON() (GPIO_ReadInputDataBit(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) == Bit_SET) + #define EXTMODULE_TX_GPIO GPIOC + #define EXTMODULE_TX_GPIO_PIN GPIO_Pin_7 // PC.07 + #define EXTMODULE_TX_GPIO_PinSource GPIO_PinSource7 + #define EXTMODULE_TIMER TIM8 + #define EXTMODULE_TIMER_TX_GPIO_AF GPIO_AF_TIM8 // TIM8_CH2 + #define EXTMODULE_TIMER_CC_IRQn TIM8_CC_IRQn + #define EXTMODULE_TIMER_CC_IRQHandler TIM8_CC_IRQHandler + #define EXTMODULE_TIMER_DMA_CHANNEL DMA_Channel_7 // TIM8_UP + #define EXTMODULE_TIMER_DMA_STREAM DMA2_Stream1 // TIM8_UP + #define EXTMODULE_TIMER_DMA_STREAM_IRQn DMA2_Stream1_IRQn + #define EXTMODULE_TIMER_DMA_STREAM_IRQHandler DMA2_Stream1_IRQHandler + #define EXTMODULE_TIMER_DMA_FLAG_TC DMA_IT_TCIF1 + #define EXTMODULE_TIMER_OUTPUT_ENABLE TIM_CCER_CC2E + #define EXTMODULE_TIMER_OUTPUT_POLARITY TIM_CCER_CC2NP + #define EXTMODULE_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2) #else - #define EXTMODULE_PULSES #define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2) #define EXTMODULE_RCC_APB2Periph RCC_APB2Periph_TIM8 #define EXTMODULE_PWR_GPIO GPIOD @@ -1021,8 +1133,8 @@ #define EXTMODULE_TIMER_TX_GPIO_AF GPIO_AF_TIM8 // TIM8_CH1N #define EXTMODULE_TIMER_CC_IRQn TIM8_CC_IRQn #define EXTMODULE_TIMER_CC_IRQHandler TIM8_CC_IRQHandler - #define EXTMODULE_TIMER_DMA_CHANNEL DMA_Channel_7 - #define EXTMODULE_TIMER_DMA_STREAM DMA2_Stream1 + #define EXTMODULE_TIMER_DMA_CHANNEL DMA_Channel_7 // TIM8_UP + #define EXTMODULE_TIMER_DMA_STREAM DMA2_Stream1 // TIM8_UP #define EXTMODULE_TIMER_DMA_STREAM_IRQn DMA2_Stream1_IRQn #define EXTMODULE_TIMER_DMA_STREAM_IRQHandler DMA2_Stream1_IRQHandler #define EXTMODULE_TIMER_DMA_FLAG_TC DMA_IT_TCIF1 @@ -1105,7 +1217,7 @@ #endif // Serial Port -#if defined(PCBX7) || defined(PCBXLITE) || defined(PCBX9LITE) +#if defined(PCBX7) || defined(PCBXLITE) || defined(PCBX9LITE) || (defined(PCBX9DP) && PCBREV >= 2019) #define AUX_SERIAL_RCC_AHB1Periph 0 #define AUX_SERIAL_RCC_APB1Periph 0 #else @@ -1130,7 +1242,7 @@ #define TELEMETRY_RCC_APB1Periph RCC_APB1Periph_USART2 #define TELEMETRY_DIR_GPIO GPIOD #define TELEMETRY_DIR_GPIO_PIN GPIO_Pin_4 // PD.04 -#if defined(PCBXLITE) || defined(PCBX9LITE) +#if defined(PCBXLITE) || defined(PCBX9LITE) || (defined(PCBX9DP) && PCBREV >= 2019) #define TELEMETRY_DIR_OUTPUT() TELEMETRY_DIR_GPIO->BSRRH = TELEMETRY_DIR_GPIO_PIN #define TELEMETRY_DIR_INPUT() TELEMETRY_DIR_GPIO->BSRRL = TELEMETRY_DIR_GPIO_PIN #else @@ -1183,6 +1295,13 @@ #define SPORT_UPDATE_PWR_GPIO_PIN GPIO_Pin_15 // PE.15 #define GPIO_SPORT_UPDATE_PWR_GPIO_ON GPIO_SetBits #define GPIO_SPORT_UPDATE_PWR_GPIO_OFF GPIO_ResetBits +#elif defined(PCBX9DP) && PCBREV >= 2019 + #define SPORT_MAX_BAUDRATE 400000 + #define SPORT_UPDATE_RCC_AHB1Periph RCC_AHB1Periph_GPIOA + #define SPORT_UPDATE_PWR_GPIO GPIOA + #define SPORT_UPDATE_PWR_GPIO_PIN GPIO_Pin_14 // PA.14 + #define GPIO_SPORT_UPDATE_PWR_GPIO_ON GPIO_SetBits + #define GPIO_SPORT_UPDATE_PWR_GPIO_OFF GPIO_ResetBits #else #define SPORT_MAX_BAUDRATE 400000 #define SPORT_UPDATE_RCC_AHB1Periph 0 @@ -1202,14 +1321,14 @@ #define INTMODULE_HEARTBEAT_EXTI_IRQHandler EXTI15_10_IRQHandler #elif defined(PCBX9LITE) // #define INTMODULE_HEARTBEAT - #define INTMODULE_HEARTBEAT_RCC_AHB1Periph RCC_AHB1Periph_GPIOC - // #define INTMODULE_HEARTBEAT_GPIO GPIOC - // #define INTMODULE_HEARTBEAT_GPIO_PIN GPIO_Pin_9 - #define INTMODULE_HEARTBEAT_EXTI_PortSource EXTI_PortSourceGPIOC - #define INTMODULE_HEARTBEAT_EXTI_PinSource GPIO_PinSource9 - #define INTMODULE_HEARTBEAT_EXTI_LINE EXTI_Line9 - #define INTMODULE_HEARTBEAT_EXTI_IRQn EXTI9_5_IRQn - #define INTMODULE_HEARTBEAT_EXTI_IRQHandler EXTI9_5_IRQHandler + #define INTMODULE_HEARTBEAT_RCC_AHB1Periph 0 // RCC_AHB1Periph_GPIOC + // #define INTMODULE_HEARTBEAT_GPIO GPIOC + // #define INTMODULE_HEARTBEAT_GPIO_PIN GPIO_Pin_9 + // #define INTMODULE_HEARTBEAT_EXTI_PortSource EXTI_PortSourceGPIOC + // #define INTMODULE_HEARTBEAT_EXTI_PinSource GPIO_PinSource9 + // #define INTMODULE_HEARTBEAT_EXTI_LINE EXTI_Line9 + // #define INTMODULE_HEARTBEAT_EXTI_IRQn EXTI9_5_IRQn + // #define INTMODULE_HEARTBEAT_EXTI_IRQHandler EXTI9_5_IRQHandler #elif defined(RADIO_X7) #define INTMODULE_HEARTBEAT #define INTMODULE_HEARTBEAT_REUSE_INTERRUPT_ROTARY_ENCODER @@ -1220,6 +1339,16 @@ #define INTMODULE_HEARTBEAT_EXTI_PinSource GPIO_PinSource7 #define INTMODULE_HEARTBEAT_EXTI_LINE EXTI_Line7 #define INTMODULE_HEARTBEAT_EXTI_IRQn EXTI9_5_IRQn +#elif defined(PCBX9DP) && PCBREV >= 2019 + #define INTMODULE_HEARTBEAT + #define INTMODULE_HEARTBEAT_RCC_AHB1Periph RCC_AHB1Periph_GPIOB + #define INTMODULE_HEARTBEAT_GPIO GPIOB + #define INTMODULE_HEARTBEAT_GPIO_PIN GPIO_Pin_1 // PB.01 + #define INTMODULE_HEARTBEAT_EXTI_PortSource EXTI_PortSourceGPIOB + #define INTMODULE_HEARTBEAT_EXTI_PinSource GPIO_PinSource1 + #define INTMODULE_HEARTBEAT_EXTI_LINE EXTI_Line1 + #define INTMODULE_HEARTBEAT_EXTI_IRQn EXTI1_IRQn + #define INTMODULE_HEARTBEAT_EXTI_IRQHandler EXTI1_IRQHandler #else #define INTMODULE_HEARTBEAT #define INTMODULE_HEARTBEAT_RCC_AHB1Periph RCC_AHB1Periph_GPIOC @@ -1474,6 +1603,15 @@ #define I2C_WP_GPIO_PIN GPIO_Pin_7 // PD.07 #define I2C_SCL_GPIO_PinSource GPIO_PinSource8 #define I2C_SDA_GPIO_PinSource GPIO_PinSource9 +#elif defined(PCBX9DP) && PCBREV >= 2019 + #define I2C_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOF) + #define I2C_SPI_GPIO GPIOB + #define I2C_SDA_GPIO_PIN GPIO_Pin_9 // PB.09 + #define I2C_SCL_GPIO_PIN GPIO_Pin_8 // PB.08 + #define I2C_WP_GPIO GPIOF + #define I2C_WP_GPIO_PIN GPIO_Pin_0 // PF.00 + #define I2C_SCL_GPIO_PinSource GPIO_PinSource8 + #define I2C_SDA_GPIO_PinSource GPIO_PinSource9 #else #define I2C_RCC_AHB1Periph RCC_AHB1Periph_GPIOB #define I2C_SPI_GPIO GPIOB @@ -1483,10 +1621,10 @@ #define I2C_WP_GPIO_PIN GPIO_Pin_9 // PB.09 #define I2C_SCL_GPIO_PinSource GPIO_PinSource6 #define I2C_SDA_GPIO_PinSource GPIO_PinSource7 + #define I2C_ADDRESS_VOLUME 0x5C #endif #define I2C_SPEED 400000 #define I2C_ADDRESS_EEPROM 0xA2 -#define I2C_ADDRESS_VOLUME 0x5C #define I2C_FLASH_PAGESIZE 64 // Second I2C Bus: IMU @@ -1578,6 +1716,20 @@ #define HAPTIC_CCMR1 TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2 #define HAPTIC_CCER TIM_CCER_CC2E #define BACKLIGHT_BDTR TIM_BDTR_MOE +#elif defined(PCBX9DP) && PCBREV >= 2019 + #define HAPTIC_PWM + #define HAPTIC_RCC_AHB1Periph RCC_AHB1Periph_GPIOA + #define HAPTIC_RCC_APB2Periph RCC_APB2Periph_TIM1 + #define HAPTIC_RCC_APB1Periph 0 + #define HAPTIC_GPIO_PinSource GPIO_PinSource10 + #define HAPTIC_GPIO GPIOA + #define HAPTIC_GPIO_PIN GPIO_Pin_10 // PA.10 + #define HAPTIC_GPIO_AF GPIO_AF_TIM1 + #define HAPTIC_TIMER TIM1 // Timer1 Channel3 + #define HAPTIC_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2) + #define HAPTIC_COUNTER_REGISTER HAPTIC_TIMER->CCR3 + #define HAPTIC_CCMR2 TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_2 + #define HAPTIC_CCER TIM_CCER_CC3E #elif defined(PCBX9E) || defined(PCBX9DP) || defined(PCBX7) #define HAPTIC_PWM #define HAPTIC_RCC_AHB1Periph RCC_AHB1Periph_GPIOB @@ -1613,6 +1765,7 @@ // Bluetooth #if defined(PCBX9E) + #define STORAGE_BLUETOOTH #define BT_USART USART6 #define BT_GPIO_AF GPIO_AF_USART6 #define BT_USART_IRQn USART6_IRQn @@ -1631,14 +1784,21 @@ #define BT_TX_GPIO_PinSource GPIO_PinSource14 #define BT_RX_GPIO_PinSource GPIO_PinSource9 #define BT_USART_IRQHandler USART6_IRQHandler -#elif defined(PCBX7) || defined(PCBXLITE) - #define BT_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOE) // RCC_AHB1Periph_DMA1 +#elif defined(PCBX7) || defined(PCBXLITE) || (defined(PCBX9DP) && PCBREV >= 2019) + #define STORAGE_BLUETOOTH #define BT_RCC_APB1Periph RCC_APB1Periph_USART3 #define BT_RCC_APB2Periph 0 - #define BT_EN_GPIO GPIOE - #if defined(PCBXLITE) + #if defined(PCBX9DP) + #define BT_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB) // RCC_AHB1Periph_DMA1 + #define BT_EN_GPIO GPIOB + #define BT_EN_GPIO_PIN GPIO_Pin_2 // PB.02 + #elif defined(PCBXLITE) + #define BT_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOE) // RCC_AHB1Periph_DMA1 + #define BT_EN_GPIO GPIOE #define BT_EN_GPIO_PIN GPIO_Pin_15 // PE.15 #else + #define BT_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOE) // RCC_AHB1Periph_DMA1 + #define BT_EN_GPIO GPIOE #define BT_EN_GPIO_PIN GPIO_Pin_12 // PE.12 #endif #define BT_USART_GPIO GPIOB @@ -1652,10 +1812,15 @@ #define BT_USART_IRQn USART3_IRQn // #define BT_DMA_Stream_RX DMA1_Stream1 // #define BT_DMA_Channel_RX DMA_Channel_4 +#elif defined(PCBX9D) || defined(PCBX9DP) + #define STORAGE_BLUETOOTH + #define BT_RCC_AHB1Periph 0 + #define BT_RCC_APB1Periph 0 + #define BT_RCC_APB2Periph 0 #else - #define BT_RCC_AHB1Periph 0 - #define BT_RCC_APB1Periph 0 - #define BT_RCC_APB2Periph 0 + #define BT_RCC_AHB1Periph 0 + #define BT_RCC_APB1Periph 0 + #define BT_RCC_APB2Periph 0 #endif // Xms Interrupt diff --git a/radio/src/targets/taranis/haptic_driver.cpp b/radio/src/targets/taranis/haptic_driver.cpp index ea1e6ca9a..c1be2940a 100644 --- a/radio/src/targets/taranis/haptic_driver.cpp +++ b/radio/src/targets/taranis/haptic_driver.cpp @@ -22,7 +22,7 @@ #if defined(HAPTIC_PWM) // TODO test Haptic on X7 (I added PWM support) -void hapticOff(void) +void hapticOff() { HAPTIC_COUNTER_REGISTER = 0; } @@ -35,7 +35,7 @@ void hapticOn(uint32_t pwmPercent) HAPTIC_COUNTER_REGISTER = pwmPercent; } -void hapticInit(void) +void hapticInit() { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = HAPTIC_GPIO_PIN; @@ -55,6 +55,7 @@ void hapticInit(void) HAPTIC_TIMER->CCMR2 = HAPTIC_CCMR2; // PWM #endif HAPTIC_TIMER->CCER = HAPTIC_CCER; + HAPTIC_TIMER->BDTR = TIM_BDTR_MOE; // Enable output HAPTIC_COUNTER_REGISTER = 0; HAPTIC_TIMER->EGR = 0; HAPTIC_TIMER->CR1 = TIM_CR1_CEN; // Counter enable @@ -63,7 +64,7 @@ void hapticInit(void) #else // No PWM before X9D+ -void hapticInit(void) +void hapticInit() { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = HAPTIC_GPIO_PIN; @@ -74,7 +75,7 @@ void hapticInit(void) GPIO_Init(HAPTIC_GPIO, &GPIO_InitStructure); } -void hapticOff(void) +void hapticOff() { GPIO_ResetBits(HAPTIC_GPIO, HAPTIC_GPIO_PIN); } diff --git a/radio/src/targets/taranis/keys_driver.cpp b/radio/src/targets/taranis/keys_driver.cpp index 8f947764f..144d7e97e 100644 --- a/radio/src/targets/taranis/keys_driver.cpp +++ b/radio/src/targets/taranis/keys_driver.cpp @@ -141,7 +141,7 @@ void readKeysAndTrims() break; \ case SW_S ## x ## 0: \ xxx = ~SWITCHES_GPIO_REG_ ## x & SWITCHES_GPIO_PIN_ ## x ; \ - break; + break #else #define ADD_2POS_CASE(x) \ case SW_S ## x ## 0: \ @@ -149,24 +149,25 @@ void readKeysAndTrims() break; \ case SW_S ## x ## 2: \ xxx = ~SWITCHES_GPIO_REG_ ## x & SWITCHES_GPIO_PIN_ ## x ; \ - break; -#endif - #define ADD_3POS_CASE(x, i) \ - case SW_S ## x ## 0: \ - xxx = (SWITCHES_GPIO_REG_ ## x ## _H & SWITCHES_GPIO_PIN_ ## x ## _H); \ - if (IS_CONFIG_3POS(i)) { \ - xxx = xxx && (~SWITCHES_GPIO_REG_ ## x ## _L & SWITCHES_GPIO_PIN_ ## x ## _L); \ - } \ - break; \ - case SW_S ## x ## 1: \ - xxx = (SWITCHES_GPIO_REG_ ## x ## _H & SWITCHES_GPIO_PIN_ ## x ## _H) && (SWITCHES_GPIO_REG_ ## x ## _L & SWITCHES_GPIO_PIN_ ## x ## _L); \ - break; \ - case SW_S ## x ## 2: \ - xxx = (~SWITCHES_GPIO_REG_ ## x ## _H & SWITCHES_GPIO_PIN_ ## x ## _H); \ - if (IS_CONFIG_3POS(i)) { \ - xxx = xxx && (SWITCHES_GPIO_REG_ ## x ## _L & SWITCHES_GPIO_PIN_ ## x ## _L); \ - } \ break +#endif + +#define ADD_3POS_CASE(x, i) \ + case SW_S ## x ## 0: \ + xxx = (SWITCHES_GPIO_REG_ ## x ## _H & SWITCHES_GPIO_PIN_ ## x ## _H); \ + if (IS_CONFIG_3POS(i)) { \ + xxx = xxx && (~SWITCHES_GPIO_REG_ ## x ## _L & SWITCHES_GPIO_PIN_ ## x ## _L); \ + } \ + break; \ + case SW_S ## x ## 1: \ + xxx = (SWITCHES_GPIO_REG_ ## x ## _H & SWITCHES_GPIO_PIN_ ## x ## _H) && (SWITCHES_GPIO_REG_ ## x ## _L & SWITCHES_GPIO_PIN_ ## x ## _L); \ + break; \ + case SW_S ## x ## 2: \ + xxx = (~SWITCHES_GPIO_REG_ ## x ## _H & SWITCHES_GPIO_PIN_ ## x ## _H); \ + if (IS_CONFIG_3POS(i)) { \ + xxx = xxx && (SWITCHES_GPIO_REG_ ## x ## _L & SWITCHES_GPIO_PIN_ ## x ## _L); \ + } \ + break #if !defined(BOOT) uint32_t switchState(uint8_t index) @@ -201,6 +202,10 @@ uint32_t switchState(uint8_t index) ADD_2POS_CASE(H); #endif +#if defined(PCBX9DP) && PCBREV >= 2019 + ADD_2POS_CASE(I); +#endif + #if defined(PCBX9E) ADD_3POS_CASE(I, 8); ADD_3POS_CASE(J, 9); diff --git a/radio/src/targets/taranis/lcd_driver_spi.cpp b/radio/src/targets/taranis/lcd_driver_spi.cpp index d4ad857cd..50eb13982 100644 --- a/radio/src/targets/taranis/lcd_driver_spi.cpp +++ b/radio/src/targets/taranis/lcd_driver_spi.cpp @@ -310,6 +310,13 @@ void lcdInit() Finishes LCD initialization. It is called auto-magically when first LCD command is issued by the other parts of the code. */ + +#if defined(PCBX9DP) && PCBREV >= 2019 + #define LCD_DELAY_NEEDED() true +#else + #define LCD_DELAY_NEEDED() (!WAS_RESET_BY_WATCHDOG_OR_SOFTWARE()) +#endif + void lcdInitFinish() { lcdInitFinished = true; @@ -331,9 +338,9 @@ void lcdInitFinish() initialization (without reset) is also recommended by the data sheet. */ - if (!WAS_RESET_BY_WATCHDOG_OR_SOFTWARE()) { + if (LCD_DELAY_NEEDED()) { #if !defined(BOOT) - while (g_tmr10ms < (RESET_WAIT_DELAY_MS/10)); // wait measured from the power-on + while (g_tmr10ms < (RESET_WAIT_DELAY_MS / 10)); // wait measured from the power-on #else delay_ms(RESET_WAIT_DELAY_MS); #endif diff --git a/radio/src/telemetry/frsky_pxx2.cpp b/radio/src/telemetry/frsky_pxx2.cpp index 2d3d515ff..a5fd3c568 100644 --- a/radio/src/telemetry/frsky_pxx2.cpp +++ b/radio/src/telemetry/frsky_pxx2.cpp @@ -224,20 +224,20 @@ void processSpectrumAnalyserFrame(uint8_t module, uint8_t * frame) return; } - uint32_t * frequency = (uint32_t *)&frame[4]; - int8_t * power = (int8_t *)&frame[8]; + uint32_t frequency = *((uint32_t *)&frame[4]); + int8_t power = *((int8_t *)&frame[8]); // center = 2440000000; // 2440MHz // span = 40000000; // 40MHz // left = 2440000000 - 20000000 // step = 10000 - // TRACE("Fq=%u, Pw=%d, X=%d, Y=%d", *frequency, int32_t(*power), D * 128 / 40000000, int32_t(127 + *power)); + int32_t offset = frequency - (reusableBuffer.spectrumAnalyser.freq - reusableBuffer.spectrumAnalyser.span / 2); + TRACE("Fq=%u => %d, Pw=%d", frequency, offset, int32_t(power)); - int32_t position = *frequency - (reusableBuffer.spectrumAnalyser.freq - reusableBuffer.spectrumAnalyser.span / 2); - uint32_t x = (position * LCD_W / 8) / (reusableBuffer.spectrumAnalyser.span / 8); + uint32_t x = offset / reusableBuffer.spectrumAnalyser.step; if (x < LCD_W) { - reusableBuffer.spectrumAnalyser.bars[x] = 0x80 + *power; + reusableBuffer.spectrumAnalyser.bars[x] = 0x80 + power; } } diff --git a/radio/src/tests/conversions.cpp b/radio/src/tests/conversions.cpp index a413feaa8..5a5ef9e51 100644 --- a/radio/src/tests/conversions.cpp +++ b/radio/src/tests/conversions.cpp @@ -89,6 +89,7 @@ TEST(Conversions, ConversionX7From22) EXPECT_EQ(TELEMETRY_SCREEN_TYPE_VALUES, g_model.screensType & 0x03); EXPECT_EQ(MIXSRC_FIRST_TRAINER, g_model.screens[0].lines[0].sources[0]); + EXPECT_EQ(MIXSRC_TIMER3, g_model.screens[0].lines[0].sources[1]); } #endif diff --git a/radio/src/tests/eeprom_22_x7.bin b/radio/src/tests/eeprom_22_x7.bin index f740311eddaffa1a8e2e04a13a2398bde9b1fd54..aa0bc87c7550bb4e3d83291b4d5a227b5e18bf30 100644 GIT binary patch delta 115 zcmZo@U}|V!5@2OuWM*(+U|?df6kud1SDYyLnvH>j!CHWGvLmDYBu0nL4U8#_la&}H zC;w$ip8SAOfsto2Ba=NN?_@_Ndr^J{7Dg~UEb{wp9TVgHi4W`3CJV4=GYU+0WU*&u RV5qN8oG56$`2dSUH2|Z38|VN4 delta 115 zcmWm1u?Ye}5Czcxzq6>IxCbU;AO>P$19HKxohaCX(J4$~0mqbb4cLs4O{gz>?s8X7 z;1m@gj#;>E`{t7{L7Stpauj44oLBN5Z*_dcSsTp|EA8W;Wir|vvDWUt@o%&R;;Ggy P0ODkYxo^twvf6zC?~4{n diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index b2498def7..e371a3754 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -863,7 +863,7 @@ #define TR_BLUETOOTH_INIT "Init" #define TR_BLUETOOTH_DIST_ADDR INDENT "Dist addr" #define TR_BLUETOOTH_LOCAL_ADDR INDENT "Local addr" -#define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code") +#define TR_BLUETOOTH_PIN_CODE "PIN code" #define TR_BAUDRATE "BT Baudrate" #define LEN_BLUETOOTH_MODES "\011" #if defined(PCBX9E) @@ -893,7 +893,7 @@ #define TR_FLASH_EXTERNAL_DEVICE TR("Flash ext. Gerät","Flash externes Gerät") #define TR_FLASH_RECEIVER_OTA "Flash receiver OTA" #define TR_FLASH_BLUETOOTH_MODULE TR("Flash BT module", "Flash Bluetooth module") -#define TR_FLASH_POWER_MANAGEMENT_UNIT TR("Flash pwr mngt unit", "Flash power management unit") +#define TR_FLASH_POWER_MANAGEMENT_UNIT "Flash pwr mngt unit" #define TR_CURRENT_VERSION TR("Current vers. ", "Current version: ") #define TR_FLASH_INTERNAL_MODULE TR("Flash int. XJT","Flash internes XJT-Modul") #define TR_FLASH_EXTERNAL_MODULE TR("Flash ext. mod","Flash extern module") @@ -911,7 +911,7 @@ #define TR_EXTERNALRF "Externes HF-Modul" #define TR_FAILSAFE TR(INDENT "Failsafe", INDENT "Failsafe Mode") #define TR_FAILSAFESET "Failsafe setzen" -#define TR_REG_ID TR("Reg. ID", "Registration ID") +#define TR_REG_ID "Reg. ID" #define TR_OWNER_ID "Owner ID" #define TR_PINMAPSET "PINMAP" #define TR_HOLD "Hold" diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index 8e0321d94..cbeb7737d 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -854,7 +854,7 @@ #define TR_BLUETOOTH_INIT "Init" #define TR_BLUETOOTH_DIST_ADDR INDENT "Dist addr" #define TR_BLUETOOTH_LOCAL_ADDR INDENT "Local addr" -#define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code") +#define TR_BLUETOOTH_PIN_CODE "PIN code" #define TR_BAUDRATE "BT Baudrate" #define LEN_BLUETOOTH_MODES "\011" #if defined(PCBX9E) @@ -884,7 +884,7 @@ #define TR_FLASH_EXTERNAL_DEVICE TR("Flash S.Port", "Flash S.Port device") #define TR_FLASH_RECEIVER_OTA "Flash receiver OTA" #define TR_FLASH_BLUETOOTH_MODULE TR("Flash BT module", "Flash Bluetooth module") -#define TR_FLASH_POWER_MANAGEMENT_UNIT TR("Flash pwr mngt unit", "Flash power management unit") +#define TR_FLASH_POWER_MANAGEMENT_UNIT "Flash pwr mngt unit" #define TR_CURRENT_VERSION TR("Curr Vers: ", "Current version: ") #define TR_FLASH_INTERNAL_MODULE TR("Flash int. module", "Flash internal module") #define TR_FLASH_EXTERNAL_MODULE TR("Flash ext. module", "Flash external module") @@ -902,7 +902,7 @@ #define TR_EXTERNALRF "External RF" #define TR_FAILSAFE TR(INDENT "Failsafe", INDENT "Failsafe mode") #define TR_FAILSAFESET "FAILSAFE SETTINGS" -#define TR_REG_ID TR("Reg. ID", "Registration ID") +#define TR_REG_ID "Reg. ID" #define TR_OWNER_ID "Owner ID" #define TR_PINMAPSET "PINMAP" #define TR_HOLD "Hold" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index 9a51253b9..9fb7c76d1 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -878,7 +878,7 @@ #define TR_BLUETOOTH_INIT "Init" #define TR_BLUETOOTH_DIST_ADDR INDENT "Dist addr" #define TR_BLUETOOTH_LOCAL_ADDR INDENT "Local addr" -#define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code") +#define TR_BLUETOOTH_PIN_CODE "PIN code" #define TR_BAUDRATE "BT Baudrate" #define LEN_BLUETOOTH_MODES "\011" #if defined(PCBX9E) @@ -908,7 +908,7 @@ #define TR_FLASH_EXTERNAL_DEVICE "Flash External Device" #define TR_FLASH_RECEIVER_OTA "Flash receiver OTA" #define TR_FLASH_BLUETOOTH_MODULE TR("Flash BT module", "Flash Bluetooth module") -#define TR_FLASH_POWER_MANAGEMENT_UNIT TR("Flash pwr mngt unit", "Flash power management unit") +#define TR_FLASH_POWER_MANAGEMENT_UNIT "Flash pwr mngt unit" #define TR_CURRENT_VERSION TR("Current vers. ", "Current version: ") #define TR_FLASH_INTERNAL_MODULE "Flash Internal Module" #define TR_FLASH_EXTERNAL_MODULE "Flash external module" @@ -926,7 +926,7 @@ #define TR_EXTERNALRF "Externa RF" #define TR_FAILSAFE INDENT"Modo sgdad." #define TR_FAILSAFESET "AJUSTES SGDAD." -#define TR_REG_ID TR("Reg. ID", "Registration ID") +#define TR_REG_ID "Reg. ID" #define TR_OWNER_ID "Owner ID" #define TR_PINMAPSET "PINMAP" #define TR_HOLD "Hold" diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index bb7ec0280..ebca41dbb 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -871,7 +871,7 @@ #define TR_BLUETOOTH_INIT "Init" #define TR_BLUETOOTH_DIST_ADDR INDENT "Dist addr" #define TR_BLUETOOTH_LOCAL_ADDR INDENT "Local addr" -#define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code") +#define TR_BLUETOOTH_PIN_CODE "PIN code" #define TR_BAUDRATE "BT Baudrate" #define LEN_BLUETOOTH_MODES "\011" #if defined(PCBX9E) @@ -901,7 +901,7 @@ #define TR_FLASH_EXTERNAL_DEVICE "Flash External Device" #define TR_FLASH_RECEIVER_OTA "Flash receiver OTA" #define TR_FLASH_BLUETOOTH_MODULE TR("Flash BT module", "Flash Bluetooth module") -#define TR_FLASH_POWER_MANAGEMENT_UNIT TR("Flash pwr mngt unit", "Flash power management unit") +#define TR_FLASH_POWER_MANAGEMENT_UNIT "Flash pwr mngt unit" #define TR_CURRENT_VERSION TR("Current vers. ", "Current version: ") #define TR_FLASH_INTERNAL_MODULE "Flash Internal Module" #define TR_FLASH_EXTERNAL_MODULE "Flash external module" @@ -919,7 +919,7 @@ #define TR_EXTERNALRF "External RF" #define TR_FAILSAFE INDENT "Failsafe mode" #define TR_FAILSAFESET "FAILSAFE SETTINGS" -#define TR_REG_ID TR("Reg. ID", "Registration ID") +#define TR_REG_ID "Reg. ID" #define TR_OWNER_ID "Owner ID" #define TR_PINMAPSET "PINMAP" #define TR_HOLD "Hold" diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index 7f950f7be..ea1495400 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -873,7 +873,7 @@ #define TR_BLUETOOTH_INIT "Init" #define TR_BLUETOOTH_DIST_ADDR INDENT "Dist addr" #define TR_BLUETOOTH_LOCAL_ADDR INDENT "Local addr" -#define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code") +#define TR_BLUETOOTH_PIN_CODE "PIN code" #define TR_BAUDRATE "Baudrate BT" #define LEN_BLUETOOTH_MODES "\012" #if defined(PCBX9E) @@ -903,7 +903,7 @@ #define TR_FLASH_EXTERNAL_DEVICE TR("Flasher S.Port", "Flasher S.Port externe") #define TR_FLASH_RECEIVER_OTA "Flash receiver OTA" #define TR_FLASH_BLUETOOTH_MODULE TR("Flash BT module", "Flash Bluetooth module") -#define TR_FLASH_POWER_MANAGEMENT_UNIT TR("Flash pwr mngt unit", "Flash power management unit") +#define TR_FLASH_POWER_MANAGEMENT_UNIT "Flash pwr mngt unit" #define TR_CURRENT_VERSION "Version courante :" #define TR_FLASH_INTERNAL_MODULE TR("Flasher module int.", "Flasher module interne") #define TR_FLASH_EXTERNAL_MODULE TR("Flasher module ext.", "Flasher module externe") diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index 89ab7ecd5..3aa9e1a6c 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -872,7 +872,7 @@ #define TR_BLUETOOTH_INIT "Init" #define TR_BLUETOOTH_DIST_ADDR INDENT "Dist addr" #define TR_BLUETOOTH_LOCAL_ADDR INDENT "Local addr" -#define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code") +#define TR_BLUETOOTH_PIN_CODE "PIN code" #define TR_BAUDRATE "BT Baudrate" #define LEN_BLUETOOTH_MODES "\011" #if defined(PCBX9E) @@ -902,7 +902,7 @@ #define TR_FLASH_EXTERNAL_DEVICE "Progr. Dispositivo Esterno" #define TR_FLASH_RECEIVER_OTA "Flash receiver OTA" #define TR_FLASH_BLUETOOTH_MODULE TR("Flash BT module", "Flash Bluetooth module") -#define TR_FLASH_POWER_MANAGEMENT_UNIT TR("Flash pwr mngt unit", "Flash power management unit") +#define TR_FLASH_POWER_MANAGEMENT_UNIT "Flash pwr mngt unit" #define TR_CURRENT_VERSION TR("Current vers. ", "Current version: ") #define TR_FLASH_INTERNAL_MODULE "Progr. Modulo Interno" #define TR_FLASH_EXTERNAL_MODULE "Flash external module" @@ -920,7 +920,7 @@ #define TR_EXTERNALRF "Modulo esterno" #define TR_FAILSAFE "Modo failsafe" #define TR_FAILSAFESET TR("FAILSAFE","IMPOSTAZIONI FAILSAFE") -#define TR_REG_ID TR("Reg. ID", "Registration ID") +#define TR_REG_ID "Reg. ID" #define TR_OWNER_ID "Owner ID" #define TR_PINMAPSET "PINMAP" #define TR_HOLD "Hold" diff --git a/radio/src/translations/nl.h.txt b/radio/src/translations/nl.h.txt index b988afcb0..e35eb3175 100644 --- a/radio/src/translations/nl.h.txt +++ b/radio/src/translations/nl.h.txt @@ -861,7 +861,7 @@ TR_GYR_VSRCRAW #define TR_BLUETOOTH_INIT "Init" #define TR_BLUETOOTH_DIST_ADDR INDENT "Dist addr" #define TR_BLUETOOTH_LOCAL_ADDR INDENT "Local addr" -#define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code") +#define TR_BLUETOOTH_PIN_CODE "PIN code" #define TR_BAUDRATE "BT Baudrate" #define LEN_BLUETOOTH_MODES "\011" #if defined(PCBX9E) @@ -891,7 +891,7 @@ TR_GYR_VSRCRAW #define TR_FLASH_EXTERNAL_DEVICE "Flash extern Apparaat" #define TR_FLASH_RECEIVER_OTA "Flash receiver OTA" #define TR_FLASH_BLUETOOTH_MODULE TR("Flash BT module", "Flash Bluetooth module") -#define TR_FLASH_POWER_MANAGEMENT_UNIT TR("Flash pwr mngt unit", "Flash power management unit") +#define TR_FLASH_POWER_MANAGEMENT_UNIT "Flash pwr mngt unit" #define TR_CURRENT_VERSION TR("Current vers. ", "Current version: ") #define TR_FLASH_INTERNAL_MODULE "Flash interne XJT-Module" #define TR_FLASH_EXTERNAL_MODULE "Flash external module" @@ -909,7 +909,7 @@ TR_GYR_VSRCRAW #define TR_EXTERNALRF "Externe RF" #define TR_FAILSAFE TR(INDENT "Failsafe", INDENT "Failsafe Modus") #define TR_FAILSAFESET "Failsafe instellen" -#define TR_REG_ID TR("Reg. ID", "Registration ID") +#define TR_REG_ID "Reg. ID" #define TR_OWNER_ID "Owner ID" #define TR_PINMAPSET "PINMAP" #define TR_HOLD "Hold" diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index ab26d8a06..66ba2ea8e 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -872,7 +872,7 @@ #define TR_BLUETOOTH_INIT "Init" #define TR_BLUETOOTH_DIST_ADDR INDENT "Dist addr" #define TR_BLUETOOTH_LOCAL_ADDR INDENT "Local addr" -#define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code") +#define TR_BLUETOOTH_PIN_CODE "PIN code" #define TR_BAUDRATE "Prędkość BT" #define LEN_BLUETOOTH_MODES "\011" #if defined(PCBX9E) @@ -902,7 +902,7 @@ #define TR_FLASH_EXTERNAL_DEVICE "Sflashuj Moduł Zewnętrzny" #define TR_FLASH_RECEIVER_OTA "Flash receiver OTA" #define TR_FLASH_BLUETOOTH_MODULE TR("Flash BT module", "Flash Bluetooth module") -#define TR_FLASH_POWER_MANAGEMENT_UNIT TR("Flash pwr mngt unit", "Flash power management unit") +#define TR_FLASH_POWER_MANAGEMENT_UNIT "Flash pwr mngt unit" #define TR_CURRENT_VERSION TR("Current vers. ", "Current version: ") #define TR_FLASH_INTERNAL_MODULE "Sflashuj Moduł Wewnętrzny" #define TR_FLASH_EXTERNAL_MODULE "Flash external module" @@ -920,7 +920,7 @@ #define TR_EXTERNALRF "Zewn.Moduł RF" #define TR_FAILSAFE TR(INDENT"Failsafe",INDENT"Tryb Failsafe") #define TR_FAILSAFESET "USTAWIENIE FAILSAFE" -#define TR_REG_ID TR("Reg. ID", "Registration ID") +#define TR_REG_ID "Reg. ID" #define TR_OWNER_ID "Owner ID" #define TR_PINMAPSET "PINMAP" #define TR_HOLD "Hold" diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index bd911902e..79226ec3f 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -862,7 +862,7 @@ #define TR_BLUETOOTH_INIT "Init" #define TR_BLUETOOTH_DIST_ADDR INDENT "Dist addr" #define TR_BLUETOOTH_LOCAL_ADDR INDENT "Local addr" -#define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code") +#define TR_BLUETOOTH_PIN_CODE "PIN code" #define TR_BAUDRATE "BT Baudrate" #define LEN_BLUETOOTH_MODES "\011" #if defined(PCBX9E) @@ -892,7 +892,7 @@ #define TR_FLASH_EXTERNAL_DEVICE "Flash External Device" #define TR_FLASH_RECEIVER_OTA "Flash receiver OTA" #define TR_FLASH_BLUETOOTH_MODULE TR("Flash BT module", "Flash Bluetooth module") -#define TR_FLASH_POWER_MANAGEMENT_UNIT TR("Flash pwr mngt unit", "Flash power management unit") +#define TR_FLASH_POWER_MANAGEMENT_UNIT "Flash pwr mngt unit" #define TR_CURRENT_VERSION TR("Current vers. ", "Current version: ") #define TR_FLASH_INTERNAL_MODULE "Flash Internal Module" #define TR_FLASH_EXTERNAL_MODULE "Flash external module" @@ -910,7 +910,7 @@ #define TR_EXTERNALRF "External RF" #define TR_FAILSAFE "Failsafe mode" #define TR_FAILSAFESET "FAILSAFE SETTINGS" -#define TR_REG_ID TR("Reg. ID", "Registration ID") +#define TR_REG_ID "Reg. ID" #define TR_OWNER_ID "Owner ID" #define TR_PINMAPSET "PINMAP" #define TR_HOLD "Hold" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index f8dc9697c..b6aa76072 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -872,7 +872,7 @@ #define TR_BLUETOOTH_INIT "Init" #define TR_BLUETOOTH_DIST_ADDR INDENT "Dist addr" #define TR_BLUETOOTH_LOCAL_ADDR INDENT "Local addr" -#define TR_BLUETOOTH_PIN_CODE TR(INDENT "PIN code", "PIN code") +#define TR_BLUETOOTH_PIN_CODE "PIN code" #define TR_BAUDRATE "BT Baudrate" #define LEN_BLUETOOTH_MODES "\011" #if defined(PCBX9E) @@ -902,7 +902,7 @@ #define TR_FLASH_EXTERNAL_DEVICE "Flash External Device" #define TR_FLASH_RECEIVER_OTA "Flash receiver OTA" #define TR_FLASH_BLUETOOTH_MODULE TR("Flash BT module", "Flash Bluetooth module") -#define TR_FLASH_POWER_MANAGEMENT_UNIT TR("Flash pwr mngt unit", "Flash power management unit") +#define TR_FLASH_POWER_MANAGEMENT_UNIT "Flash pwr mngt unit" #define TR_CURRENT_VERSION TR("Current vers. ", "Current version: ") #define TR_FLASH_INTERNAL_MODULE "Flash Internal Module" #define TR_FLASH_EXTERNAL_MODULE "Flash external module" @@ -920,7 +920,7 @@ #define TR_EXTERNALRF "Extern Radiomodul" #define TR_FAILSAFE TR(INDENT "Failsafe", INDENT "Failsafeläge") #define TR_FAILSAFESET "FailsafeInställning" -#define TR_REG_ID TR("Reg. ID", "Registration ID") +#define TR_REG_ID "Reg. ID" #define TR_OWNER_ID "Owner ID" #define TR_PINMAPSET "PINMAP" #define TR_HOLD "Hold" diff --git a/radio/src/translations/untranslated.h b/radio/src/translations/untranslated.h index d3b44ddeb..d1a39e12e 100644 --- a/radio/src/translations/untranslated.h +++ b/radio/src/translations/untranslated.h @@ -53,6 +53,9 @@ #elif defined(PCBX9LITE) #define TR_POTS_VSRCRAW "\310S1\0" #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0" +#elif defined(PCBX9DP) && PCBREV >= 2019 + #define TR_POTS_VSRCRAW "\310S1\0""\310S2\0""\310S3\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0""\312SI\0" #elif defined(PCBTARANIS) #define TR_POTS_VSRCRAW "\310S1\0""\310S2\0""\310S3\0""\311LS\0""\311RS\0" #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" diff --git a/tools/build-frsky.py b/tools/build-frsky.py index 40defde8e..f30d68cf5 100755 --- a/tools/build-frsky.py +++ b/tools/build-frsky.py @@ -33,6 +33,15 @@ options = { "CROSSFIRE": "NO", "SBUS": "NO", "DEFAULT_MODE": "2", + }, + "X9D+": { + "PCBREV": "2019", + "LUA": "NO_MODEL_SCRIPTS", + "GVARS": "YES", + "AUTOUPDATE": "YES", + "PXX1": "YES", + "CROSSFIRE": "NO", + "DEFAULT_MODE": "2", } }