mirror of
https://github.com/opentx/opentx.git
synced 2025-07-17 05:15:18 +03:00
parent
37e1e0ef33
commit
151827ada5
44 changed files with 704 additions and 321 deletions
|
@ -18,12 +18,13 @@
|
|||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#include "boards.h"
|
||||
#include "helpers.h"
|
||||
#include "opentxeeprom.h"
|
||||
#include "customdebug.h"
|
||||
#include <stdlib.h>
|
||||
#include <algorithm>
|
||||
#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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -1016,6 +1016,9 @@ int cliDisplay(const char ** argv)
|
|||
case 2:
|
||||
tim = TIM2;
|
||||
break;
|
||||
case 8:
|
||||
tim = TIM8;
|
||||
break;
|
||||
case 13:
|
||||
tim = TIM13;
|
||||
break;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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<uint8_t>(reusableBuffer.moduleSetup.bt.devicesCount, 6);
|
||||
for (uint8_t i=0; i<popupMenuItemsCount; i++) {
|
||||
popupMenuItems[i] = reusableBuffer.moduleSetup.bt.devices[i];
|
||||
}
|
||||
popupMenuTitle = STR_BT_SELECT_DEVICE;
|
||||
POPUP_MENU_START(onBluetoothConnectMenu);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (bluetooth.distantAddr[0])
|
||||
lcdDrawText(INDENT_WIDTH, y+1, bluetooth.distantAddr, TINSIZE);
|
||||
else
|
||||
lcdDrawText(INDENT_WIDTH, y, "---");
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, bluetooth.state == BLUETOOTH_STATE_CONNECTED ? STR_CONNECTED : STR_NOT_CONNECTED);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
case ITEM_MODEL_SETUP_TRAINER_CHANNELS:
|
||||
lcdDrawTextAlignedLeft(y, STR_CHANNELRANGE);
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_CH, menuHorizontalPosition==0 ? attr : 0);
|
||||
lcdDrawNumber(lcdLastRightPos, y, g_model.trainerData.channelsStart+1, LEFT | (menuHorizontalPosition==0 ? attr : 0));
|
||||
|
@ -958,11 +1038,11 @@ void menuModelSetup(event_t event)
|
|||
case 1:
|
||||
CHECK_INCDEC_MODELVAR(event, moduleData.channelsCount, -4, min<int8_t>(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);
|
||||
|
|
0
radio/src/gui/212x64/radio_hardware.cpp
Normal file
0
radio/src/gui/212x64/radio_hardware.cpp
Normal file
|
@ -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);
|
||||
|
|
|
@ -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<PXX2_LEN_REGISTRATION_ID; i++) {
|
||||
g_eeGeneral.ownerRegistrationID[i] = (cpu_uid[1 + i] & 0x3f) - 26;
|
||||
}
|
||||
setDefaultOwnerId();
|
||||
#endif
|
||||
|
||||
g_eeGeneral.chkSum = 0xFFFF;
|
||||
|
|
|
@ -660,6 +660,7 @@ inline void resumeMixerCalculations()
|
|||
}
|
||||
#endif
|
||||
|
||||
void setDefaultOwnerId();
|
||||
void generalDefault();
|
||||
void modelDefault(uint8_t id);
|
||||
|
||||
|
@ -1372,4 +1373,13 @@ inline bool isSimu()
|
|||
extern uint8_t latencyToggleSwitch;
|
||||
#endif
|
||||
|
||||
inline bool isAsteriskDisplayed()
|
||||
{
|
||||
#if defined(LOG_TELEMETRY) || defined(WATCHDOG_DISABLED) || defined(DEBUG_LATENCY)
|
||||
return true;
|
||||
#endif
|
||||
|
||||
return unexpectedShutdown;
|
||||
}
|
||||
|
||||
#endif // _OPENTX_H_
|
||||
|
|
|
@ -169,7 +169,7 @@ void enablePulsesExternalModule(uint8_t protocol)
|
|||
break;
|
||||
#endif
|
||||
|
||||
#if defined(PXX2)
|
||||
#if defined(PXX2) && defined(HARDWARE_EXTERNAL_MODULE_SIZE_SML)
|
||||
case PROTOCOL_CHANNELS_PXX2_HIGHSPEED:
|
||||
extmoduleInvertedSerialStart(PXX2_HIGHSPEED_BAUDRATE);
|
||||
break;
|
||||
|
|
|
@ -45,16 +45,6 @@
|
|||
#define INTMODULE_PXX1_SERIAL_PERIOD 9/*ms*/
|
||||
#endif
|
||||
|
||||
#if defined(PXX_FREQUENCY_HIGH) && (!defined(INTMODULE_USART) || !defined(EXTMODULE_USART))
|
||||
/* PXX uses 20 bytes (as of Rev 1.1 document) with 8 changes per byte + stop bit ~= 162 max pulses */
|
||||
/* DSM2 uses 2 header + 12 channel bytes, with max 10 changes (8n2) per byte + 16 bits trailer ~= 156 max pulses */
|
||||
/* Multimodule uses 3 bytes header + 22 channel bytes with max 11 changes per byte (8e2) + 16 bits trailer ~= 291 max pulses */
|
||||
/* Multimodule reuses some of the DSM2 function and structs since the protocols are similar enough */
|
||||
/* sbus is 1 byte header, 22 channel bytes (11bit * 16ch) + 1 byte flags */
|
||||
|
||||
#error "Pulses array needs to be increased (PXX_FREQUENCY=HIGH)"
|
||||
#endif
|
||||
|
||||
// Used by the Sky9x family boards
|
||||
class SerialPxxBitTransport: public DataBuffer<uint8_t, 64> {
|
||||
protected:
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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<MAX_TELEMETRY_SCREENS; i++) {
|
||||
uint8_t screenType = (newModel.screensType >> (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<MAX_SPECIAL_FUNCTIONS_218; i++) {
|
||||
CustomFunctionData & cf = settings.customFn[i];
|
||||
cf.swtch = convertSwitch_218_to_219(cf.swtch);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(PCBX9D) || defined(PCBX9DP)
|
||||
// no bluetooth before PCBREV 2019
|
||||
settings.auxSerialMode = oldSettings.auxSerialMode;
|
||||
settings.slidersConfig = oldSettings.slidersConfig;
|
||||
settings.potsConfig = oldSettings.potsConfig;
|
||||
settings.backlightColor = oldSettings.backlightColor;
|
||||
settings.switchUnlockStates = oldSettings.switchUnlockStates;
|
||||
settings.switchConfig = oldSettings.switchConfig;
|
||||
#if defined(PCBX9DP) && PCBREV >= 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<uint32_t>(g_eeGeneral.switchConfig, SWITCH_2POS, 10, 2); // T12 comes with wrongly defined pot2
|
||||
g_eeGeneral.potsConfig = bfSet<uint32_t>(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
|
||||
}
|
||||
|
|
|
@ -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<struct x, y>()
|
||||
|
||||
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,18 +518,10 @@ 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
|
||||
#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
|
||||
#endif
|
||||
|
||||
#if defined(COLORLCD)
|
||||
#include "gui/480x272/theme.h"
|
||||
#define THEME_NAME_LEN 8
|
||||
|
@ -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<struct x, y>()
|
||||
|
||||
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
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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(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}
|
||||
|
|
|
@ -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[] = {
|
||||
#if LCD_DEPTH > 1
|
||||
const unsigned char bmp_startup[] = {
|
||||
#include "startup.lbm"
|
||||
};
|
||||
const unsigned char bmp_lock[] = {
|
||||
};
|
||||
|
||||
const unsigned char bmp_lock[] = {
|
||||
#include "lock.lbm"
|
||||
};
|
||||
};
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(SPORT_UPDATE_PWR_GPIO)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
#endif
|
||||
bootloaderDrawMsg(INDENT_WIDTH, vers, 0, false);
|
||||
}
|
||||
bootloaderDrawMsg(0, STR_HOLD_ENTER_TO_START, 2, false);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
#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_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
|
||||
// #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
|
||||
#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
|
||||
#if defined(PCBXLITE)
|
||||
#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,6 +1812,11 @@
|
|||
#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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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,9 +149,10 @@ void readKeysAndTrims()
|
|||
break; \
|
||||
case SW_S ## x ## 2: \
|
||||
xxx = ~SWITCHES_GPIO_REG_ ## x & SWITCHES_GPIO_PIN_ ## x ; \
|
||||
break;
|
||||
break
|
||||
#endif
|
||||
#define ADD_3POS_CASE(x, i) \
|
||||
|
||||
#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)) { \
|
||||
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Binary file not shown.
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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",
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue