1
0
Fork 0
mirror of https://github.com/EdgeTX/edgetx.git synced 2025-07-23 08:15:13 +03:00

Bsongis/accst support over pxx2 (#6455)

ACCST support over PXX2
This commit is contained in:
Bertrand Songis 2019-05-27 17:23:17 +02:00 committed by GitHub
parent bca162f4a5
commit 4d07faa8e0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
46 changed files with 669 additions and 697 deletions

View file

@ -56,53 +56,53 @@ enum PulsesProtocol {
};
enum MultiModuleRFProtocols {
MM_RF_PROTO_FLYSKY=0,
MM_RF_PROTO_FIRST=MM_RF_PROTO_FLYSKY,
MM_RF_PROTO_HUBSAN,
MM_RF_PROTO_FRSKY,
MM_RF_PROTO_HISKY,
MM_RF_PROTO_V2X2,
MM_RF_PROTO_DSM2,
MM_RF_PROTO_DEVO,
MM_RF_PROTO_YD717,
MM_RF_PROTO_KN,
MM_RF_PROTO_SYMAX,
MM_RF_PROTO_SLT,
MM_RF_PROTO_CX10,
MM_RF_PROTO_CG023,
MM_RF_PROTO_BAYANG,
MM_RF_PROTO_ESky,
MM_RF_PROTO_MT99XX,
MM_RF_PROTO_MJXQ,
MM_RF_PROTO_SHENQI,
MM_RF_PROTO_FY326,
MM_RF_PROTO_SFHSS,
MM_RF_PROTO_J6PRO,
MM_RF_PROTO_FQ777,
MM_RF_PROTO_ASSAN,
MM_RF_PROTO_HONTAI,
MM_RF_PROTO_OLRS,
MM_RF_PROTO_FS_AFHDS2A,
MM_RF_PROTO_Q2X2,
MM_RF_PROTO_WK_2X01,
MM_RF_PROTO_Q303,
MM_RF_PROTO_GW008,
MM_RF_PROTO_DM002,
MM_RF_PROTO_CABELL,
MM_RF_PROTO_ESKY150,
MM_RF_PROTO_H83D,
MM_RF_PROTO_CORONA,
MM_RF_PROTO_CFLIE,
MM_RF_PROTO_HITEC,
MM_RF_PROTO_WFLY,
MM_RF_PROTO_BUGS,
MM_RF_PROTO_BUGS_MINI,
MM_RF_PROTO_TRAXXAS,
MM_RF_PROTO_NCC1701,
MM_RF_PROTO_E01X,
MM_RF_PROTO_V911S,
MM_RF_PROTO_GD00X,
MM_RF_PROTO_LAST = MM_RF_PROTO_GD00X
MODULE_SUBTYPE_MULTI_FLYSKY=0,
MODULE_SUBTYPE_MULTI_FIRST=MODULE_SUBTYPE_MULTI_FLYSKY,
MODULE_SUBTYPE_MULTI_HUBSAN,
MODULE_SUBTYPE_MULTI_FRSKY,
MODULE_SUBTYPE_MULTI_HISKY,
MODULE_SUBTYPE_MULTI_V2X2,
MODULE_SUBTYPE_MULTI_DSM2,
MODULE_SUBTYPE_MULTI_DEVO,
MODULE_SUBTYPE_MULTI_YD717,
MODULE_SUBTYPE_MULTI_KN,
MODULE_SUBTYPE_MULTI_SYMAX,
MODULE_SUBTYPE_MULTI_SLT,
MODULE_SUBTYPE_MULTI_CX10,
MODULE_SUBTYPE_MULTI_CG023,
MODULE_SUBTYPE_MULTI_BAYANG,
MODULE_SUBTYPE_MULTI_ESky,
MODULE_SUBTYPE_MULTI_MT99XX,
MODULE_SUBTYPE_MULTI_MJXQ,
MODULE_SUBTYPE_MULTI_SHENQI,
MODULE_SUBTYPE_MULTI_FY326,
MODULE_SUBTYPE_MULTI_SFHSS,
MODULE_SUBTYPE_MULTI_J6PRO,
MODULE_SUBTYPE_MULTI_FQ777,
MODULE_SUBTYPE_MULTI_ASSAN,
MODULE_SUBTYPE_MULTI_HONTAI,
MODULE_SUBTYPE_MULTI_OLRS,
MODULE_SUBTYPE_MULTI_FS_AFHDS2A,
MODULE_SUBTYPE_MULTI_Q2X2,
MODULE_SUBTYPE_MULTI_WK_2X01,
MODULE_SUBTYPE_MULTI_Q303,
MODULE_SUBTYPE_MULTI_GW008,
MODULE_SUBTYPE_MULTI_DM002,
MODULE_SUBTYPE_MULTI_CABELL,
MODULE_SUBTYPE_MULTI_ESKY150,
MODULE_SUBTYPE_MULTI_H83D,
MODULE_SUBTYPE_MULTI_CORONA,
MODULE_SUBTYPE_MULTI_CFLIE,
MODULE_SUBTYPE_MULTI_HITEC,
MODULE_SUBTYPE_MULTI_WFLY,
MODULE_SUBTYPE_MULTI_BUGS,
MODULE_SUBTYPE_MULTI_BUGS_MINI,
MODULE_SUBTYPE_MULTI_TRAXXAS,
MODULE_SUBTYPE_MULTI_NCC1701,
MODULE_SUBTYPE_MULTI_E01X,
MODULE_SUBTYPE_MULTI_V911S,
MODULE_SUBTYPE_MULTI_GD00X,
MODULE_SUBTYPE_MULTI_LAST = MODULE_SUBTYPE_MULTI_GD00X
};
enum TrainerProtocol {
@ -113,7 +113,7 @@ enum TrainerProtocol {
TRAINER_MASTER_SBUS_BATT_COMPARTMENT
};
enum R9MSubTypes {
enum ModuleSubtypeR9M {
MODULE_SUBTYPE_R9M_FCC,
MODULE_SUBTYPE_R9M_EU,
MODULE_SUBTYPE_R9M_EUPLUS,

View file

@ -69,34 +69,34 @@ static const QStringList NO_SUBTYPE {STR_MULTI_DEFAULT};
// Table is designed to be shared with gui_common_arm.cpp
const Multiprotocols multiProtocols {
{MM_RF_PROTO_FLYSKY, 4, false, STR_SUBTYPE_FLYSKY, nullptr},
{MM_RF_PROTO_HUBSAN, 2, false, STR_SUBTYPE_HUBSAN, STR_MULTI_VIDFREQ},
{MM_RF_PROTO_FRSKY, 5, false, STR_SUBTYPE_FRSKY, STR_MULTI_RFTUNE},
{MM_RF_PROTO_HISKY, 1, false, STR_SUBTYPE_HISKY, nullptr},
{MM_RF_PROTO_V2X2, 1, false, STR_SUBTYPE_V2X2, nullptr},
{MM_RF_PROTO_DSM2, 3, false, STR_SUBTYPE_DSM, nullptr},
{MM_RF_PROTO_YD717, 4, false, STR_SUBTYPE_YD717, nullptr},
{MM_RF_PROTO_KN, 1, false, STR_SUBTYPE_KN, nullptr},
{MM_RF_PROTO_SYMAX, 1, false, STR_SUBTYPE_SYMAX, nullptr},
{MM_RF_PROTO_SLT, 4, false, STR_SUBTYPE_SLT, nullptr},
{MM_RF_PROTO_CX10, 6, false, STR_SUBTYPE_CX10, nullptr},
{MM_RF_PROTO_CG023, 1, false, STR_SUBTYPE_CG023, nullptr},
{MM_RF_PROTO_BAYANG, 3, false, STR_SUBTYPE_BAYANG, STR_MULTI_TELEMETRY},
{MM_RF_PROTO_MT99XX, 4, false, STR_SUBTYPE_MT99, nullptr},
{MM_RF_PROTO_MJXQ, 5, false, STR_SUBTYPE_MJXQ, nullptr},
{MM_RF_PROTO_FY326, 1, false, STR_SUBTYPE_FY326, nullptr},
{MM_RF_PROTO_SFHSS, 0, true, NO_SUBTYPE, STR_MULTI_RFTUNE},
{MM_RF_PROTO_HONTAI, 3, false, STR_SUBTYPE_HONTAI, nullptr},
{MM_RF_PROTO_OLRS, 0, false, NO_SUBTYPE, STR_MULTI_RFPOWER},
{MM_RF_PROTO_FS_AFHDS2A, 3, true, STR_SUBTYPE_AFHDS2A, STR_MULTI_SERVOFREQ},
{MM_RF_PROTO_Q2X2, 2, false, STR_SUBTYPE_Q2X2, nullptr},
{MM_RF_PROTO_WK_2X01, 5, false, STR_SUBTYPE_WK2x01, nullptr},
{MM_RF_PROTO_Q303, 3, false, STR_SUBTYPE_Q303, nullptr},
{MM_RF_PROTO_CABELL, 7, false, STR_SUBTYPE_CABELL, STR_MULTI_OPTION},
{MM_RF_PROTO_H83D, 3, false, STR_SUBTYPE_H83D, nullptr},
{MM_RF_PROTO_CORONA, 2, false, STR_SUBTYPE_CORONA, STR_MULTI_RFTUNE},
{MM_RF_PROTO_HITEC, 2, false, STR_SUBTYPE_HITEC, STR_MULTI_RFTUNE},
{MM_RF_PROTO_E01X, 1, false, STR_SUBTYPE_E01X, nullptr},
{MODULE_SUBTYPE_MULTI_FLYSKY, 4, false, STR_SUBTYPE_FLYSKY, nullptr},
{MODULE_SUBTYPE_MULTI_HUBSAN, 2, false, STR_SUBTYPE_HUBSAN, STR_MULTI_VIDFREQ},
{MODULE_SUBTYPE_MULTI_FRSKY, 5, false, STR_SUBTYPE_FRSKY, STR_MULTI_RFTUNE},
{MODULE_SUBTYPE_MULTI_HISKY, 1, false, STR_SUBTYPE_HISKY, nullptr},
{MODULE_SUBTYPE_MULTI_V2X2, 1, false, STR_SUBTYPE_V2X2, nullptr},
{MODULE_SUBTYPE_MULTI_DSM2, 3, false, STR_SUBTYPE_DSM, nullptr},
{MODULE_SUBTYPE_MULTI_YD717, 4, false, STR_SUBTYPE_YD717, nullptr},
{MODULE_SUBTYPE_MULTI_KN, 1, false, STR_SUBTYPE_KN, nullptr},
{MODULE_SUBTYPE_MULTI_SYMAX, 1, false, STR_SUBTYPE_SYMAX, nullptr},
{MODULE_SUBTYPE_MULTI_SLT, 4, false, STR_SUBTYPE_SLT, nullptr},
{MODULE_SUBTYPE_MULTI_CX10, 6, false, STR_SUBTYPE_CX10, nullptr},
{MODULE_SUBTYPE_MULTI_CG023, 1, false, STR_SUBTYPE_CG023, nullptr},
{MODULE_SUBTYPE_MULTI_BAYANG, 3, false, STR_SUBTYPE_BAYANG, STR_MULTI_TELEMETRY},
{MODULE_SUBTYPE_MULTI_MT99XX, 4, false, STR_SUBTYPE_MT99, nullptr},
{MODULE_SUBTYPE_MULTI_MJXQ, 5, false, STR_SUBTYPE_MJXQ, nullptr},
{MODULE_SUBTYPE_MULTI_FY326, 1, false, STR_SUBTYPE_FY326, nullptr},
{MODULE_SUBTYPE_MULTI_SFHSS, 0, true, NO_SUBTYPE, STR_MULTI_RFTUNE},
{MODULE_SUBTYPE_MULTI_HONTAI, 3, false, STR_SUBTYPE_HONTAI, nullptr},
{MODULE_SUBTYPE_MULTI_OLRS, 0, false, NO_SUBTYPE, STR_MULTI_RFPOWER},
{MODULE_SUBTYPE_MULTI_FS_AFHDS2A, 3, true, STR_SUBTYPE_AFHDS2A, STR_MULTI_SERVOFREQ},
{MODULE_SUBTYPE_MULTI_Q2X2, 2, false, STR_SUBTYPE_Q2X2, nullptr},
{MODULE_SUBTYPE_MULTI_WK_2X01, 5, false, STR_SUBTYPE_WK2x01, nullptr},
{MODULE_SUBTYPE_MULTI_Q303, 3, false, STR_SUBTYPE_Q303, nullptr},
{MODULE_SUBTYPE_MULTI_CABELL, 7, false, STR_SUBTYPE_CABELL, STR_MULTI_OPTION},
{MODULE_SUBTYPE_MULTI_H83D, 3, false, STR_SUBTYPE_H83D, nullptr},
{MODULE_SUBTYPE_MULTI_CORONA, 2, false, STR_SUBTYPE_CORONA, STR_MULTI_RFTUNE},
{MODULE_SUBTYPE_MULTI_HITEC, 2, false, STR_SUBTYPE_HITEC, STR_MULTI_RFTUNE},
{MODULE_SUBTYPE_MULTI_E01X, 1, false, STR_SUBTYPE_E01X, nullptr},
{MM_RF_CUSTOM_SELECTED, 7, true, STR_SUBTYPE_CUSTOM, STR_MULTI_OPTION},
// Sentinel and default for protocols not listed above (MM_RF_CUSTOM is 0xff)

View file

@ -224,7 +224,7 @@ ModulePanel::ModulePanel(QWidget * parent, ModelData & model, ModuleData & modul
ui->protocol->setCurrentIndex(ui->protocol->count()-1);
}
}
for (int i=0; i<=MM_RF_PROTO_LAST; i++) {
for (int i=0; i<=MODULE_SUBTYPE_MULTI_LAST; i++) {
ui->multiProtocol->addItem(Multiprotocols::protocolToString(i), i);
}
@ -398,7 +398,7 @@ void ModulePanel::update()
case PULSES_MULTIMODULE:
mask |= MASK_CHANNELS_RANGE | MASK_RX_NUMBER | MASK_MULTIMODULE | MASK_SUBTYPES;
max_rx_num = 15;
if (module.multi.rfProtocol == MM_RF_PROTO_DSM2)
if (module.multi.rfProtocol == MODULE_SUBTYPE_MULTI_DSM2)
mask |= MASK_CHANNELS_COUNT;
else
module.channelsCount = 16;

View file

@ -46,7 +46,7 @@ option(TRACE_LUA_INTERNALS "Turn on traces for Lua internals" OFF)
option(FRSKY_STICKS "Reverse sticks for FrSky sticks" OFF)
option(NANO "Use nano newlib and binalloc")
option(NIGHTLY_BUILD_WARNING "Warn this is a nightly build" OFF)
option(MODULE_R9M_FLEX_FW "Add R9M options for non certified firmwwares" OFF)
option(MODULE_R9M_FLEX "Add R9M options for non certified firmwwares" OFF)
option(FRSKY_RELEASE "Used to build FrSky released firmware" OFF)
# since we reset all default CMAKE compiler flags for firmware builds, provide an alternate way for user to specify additional flags.
@ -308,8 +308,8 @@ if(NIGHTLY_BUILD_WARNING)
add_definitions(-DNIGHTLY_BUILD_WARNING)
endif()
if(MODULE_R9M_FLEX_FW)
add_definitions(-DMODULE_R9M_FLEX_FW)
if(MODULE_R9M_FLEX)
add_definitions(-DMODULE_R9M_FLEX)
endif()
if(FRSKY_RELEASE)

View file

@ -18,7 +18,7 @@
* GNU General Public License for more details.
*/
#include <opentx.h>
#include "opentx.h"
// TODO find why we need this (for REGISTER at least)
#if defined(PCBXLITE)
@ -32,7 +32,7 @@ uint8_t g_moduleIdx;
#if defined(PCBTARANIS)
uint8_t getSwitchWarningsCount()
{
int count = 0;
uint8_t count = 0;
for (int i=0; i<NUM_SWITCHES; ++i) {
if (SWITCH_WARNING_ALLOWED(i)) {
++count;
@ -69,19 +69,21 @@ enum MenuModelSetupItems {
ITEM_MODEL_SETUP_PREFLIGHT_LABEL,
ITEM_MODEL_SETUP_CHECKLIST_DISPLAY,
ITEM_MODEL_SETUP_THROTTLE_WARNING,
ITEM_MODEL_SETUP_SWITCHES_WARNING,
ITEM_MODEL_SETUP_SWITCHES_WARNING1,
#if defined(PCBTARANIS)
ITEM_MODEL_SETUP_SWITCHES_WARNING2,
ITEM_MODEL_SETUP_POTS_WARNING,
#endif
ITEM_MODEL_SETUP_BEEP_CENTER,
ITEM_MODEL_SETUP_USE_GLOBAL_FUNCTIONS,
#if defined(PXX2)
ITEM_MODEL_SETUP_REGISTRATION_ID,
#endif
#if defined(HARDWARE_INTERNAL_MODULE)
ITEM_MODEL_SETUP_INTERNAL_MODULE_LABEL,
ITEM_MODEL_SETUP_INTERNAL_MODULE_MODE,
ITEM_MODEL_SETUP_INTERNAL_MODULE_TYPE,
ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS,
ITEM_MODEL_SETUP_INTERNAL_MODULE_NPXX2_BIND,
ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_BIND,
ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_MODEL_NUM,
#if defined(EXTERNAL_ANTENNA)
ITEM_MODEL_SETUP_INTERNAL_MODULE_ANTENNA,
@ -94,14 +96,14 @@ enum MenuModelSetupItems {
ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_RECEIVER_3,
#endif
ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL,
ITEM_MODEL_SETUP_EXTERNAL_MODULE_MODE,
ITEM_MODEL_SETUP_EXTERNAL_MODULE_TYPE,
#if defined(MULTIMODULE)
ITEM_MODEL_SETUP_EXTERNAL_MODULE_SUBTYPE,
ITEM_MODEL_SETUP_EXTERNAL_MODULE_STATUS,
ITEM_MODEL_SETUP_EXTERNAL_MODULE_SYNCSTATUS,
#endif
ITEM_MODEL_SETUP_EXTERNAL_MODULE_CHANNELS,
ITEM_MODEL_SETUP_EXTERNAL_MODULE_NPXX2_BIND,
ITEM_MODEL_SETUP_EXTERNAL_MODULE_NOT_ACCESS_BIND,
ITEM_MODEL_SETUP_EXTERNAL_MODULE_PXX2_MODEL_NUM,
#if defined(PCBSKY9X) && defined(REVX)
ITEM_MODEL_SETUP_EXTERNAL_MODULE_OUTPUT_TYPE,
@ -153,6 +155,14 @@ enum MenuModelSetupItems {
#define IF_PXX2_MODULE(module, xxx) (isModulePXX2(module) ? (uint8_t)(xxx) : HIDDEN_ROW)
#define IF_NOT_PXX2_MODULE(module, xxx) (isModulePXX2(module) ? HIDDEN_ROW : (uint8_t)(xxx))
#define IF_ACCESS_MODULE_RF(module, xxx) (isModuleRFAccess(module) ? (uint8_t)(xxx) : HIDDEN_ROW)
#define IF_NOT_ACCESS_MODULE_RF(module, xxx) (isModuleRFAccess(module) ? HIDDEN_ROW : (uint8_t)(xxx))
#if defined(PXX2)
#define REGISTRATION_ID_ROWS uint8_t((isDefaultModelRegistrationID() || (warningText && popupFunc == runPopupRegister)) ? HIDDEN_ROW : READONLY_ROW),
#else
#define REGISTRATION_ID_ROWS
#endif
#if defined(HARDWARE_INTERNAL_MODULE)
#define CURRENT_MODULE_EDITED(k) (k >= ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL ? EXTERNAL_MODULE : INTERNAL_MODULE)
@ -170,10 +180,10 @@ enum MenuModelSetupItems {
#define SW_WARN_ROWS uint8_t(NAVIGATION_LINE_BY_LINE|(getSwitchWarningsCount()-1)), uint8_t(getSwitchWarningsCount() > 5 ? TITLE_ROW : HIDDEN_ROW)
#endif
#define INTERNAL_MODULE_MODE_ROWS ((isModuleXJT(INTERNAL_MODULE) || isModulePXX2(INTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0) // Module type + RF protocols
#define INTERNAL_MODULE_TYPE_ROWS ((isModuleXJT(INTERNAL_MODULE) || isModulePXX2(INTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0) // Module type + RF protocols
#define IF_INTERNAL_MODULE_ON(x) (IS_INTERNAL_MODULE_ENABLED()? (uint8_t)(x) : HIDDEN_ROW)
#define IF_EXTERNAL_MODULE_ON(x) (IS_EXTERNAL_MODULE_ENABLED()? (uint8_t)(x) : HIDDEN_ROW)
#define EXTERNAL_MODULE_BIND_ROWS() ((isModuleXJT(EXTERNAL_MODULE) && IS_D8_RX(EXTERNAL_MODULE)) || isModuleSBUS(EXTERNAL_MODULE)) ? (uint8_t)1 : (isModulePPM(EXTERNAL_MODULE) || isModulePXX(EXTERNAL_MODULE) || isModuleDSM2(EXTERNAL_MODULE) || isModuleMultimodule(EXTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW
#define EXTERNAL_MODULE_BIND_ROWS() ((isModuleXJT(EXTERNAL_MODULE) && IS_D8_RX(EXTERNAL_MODULE)) || isModuleSBUS(EXTERNAL_MODULE)) ? (uint8_t)1 : (isModulePPM(EXTERNAL_MODULE) || isModulePXX(EXTERNAL_MODULE) || isModulePXX2(EXTERNAL_MODULE) || isModuleDSM2(EXTERNAL_MODULE) || isModuleMultimodule(EXTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW
#if defined(PCBSKY9X) && defined(REVX)
#define OUTPUT_TYPE_ROWS() (isModulePPM(EXTERNAL_MODULE) ? (uint8_t)0 : HIDDEN_ROW) ,
@ -182,7 +192,7 @@ enum MenuModelSetupItems {
#endif
#define PORT_CHANNELS_ROWS(x) (x==EXTERNAL_MODULE ? EXTERNAL_MODULE_CHANNELS_ROWS : 0)
#define EXTERNAL_MODULE_MODE_ROWS (isModuleXJT(EXTERNAL_MODULE) || isModuleR9M(EXTERNAL_MODULE) || isModuleDSM2(EXTERNAL_MODULE) || isModuleMultimodule(EXTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0
#define EXTERNAL_MODULE_TYPE_ROWS (isModulePXX(EXTERNAL_MODULE) || isModulePXX2(EXTERNAL_MODULE) || isModuleDSM2(EXTERNAL_MODULE) || isModuleMultimodule(EXTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0
#define POT_WARN_ITEMS() ((g_model.potsWarnMode) ? (uint8_t)(NUM_POTS+NUM_SLIDERS) : (uint8_t)0)
#define TIMER_ROWS 2, 0, 0, 0, 0
@ -515,17 +525,17 @@ void onBluetoothConnectMenu(const char * result)
#if defined(HARDWARE_INTERNAL_MODULE)
#define INTERNAL_MODULE_ROWS \
LABEL(InternalModule), \
INTERNAL_MODULE_MODE_ROWS, \
INTERNAL_MODULE_TYPE_ROWS, \
INTERNAL_MODULE_CHANNELS_ROWS, \
IF_NOT_PXX2_MODULE(INTERNAL_MODULE, IF_INTERNAL_MODULE_ON(HAS_RF_PROTOCOL_MODELINDEX(g_model.moduleData[INTERNAL_MODULE].rfProtocol) ? (uint8_t)2 : (uint8_t)1)), \
IF_PXX2_MODULE(INTERNAL_MODULE, 0), \
IF_NOT_ACCESS_MODULE_RF(INTERNAL_MODULE, IF_INTERNAL_MODULE_ON(HAS_RF_PROTOCOL_MODELINDEX(g_model.moduleData[INTERNAL_MODULE].rfProtocol) ? (uint8_t)2 : (uint8_t)1)), \
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), \
ANTENNA_ROW \
IF_INTERNAL_MODULE_ON(FAILSAFE_ROWS(INTERNAL_MODULE)), \
IF_PXX2_MODULE(INTERNAL_MODULE, 1), \
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 1), \
IF_PXX2_MODULE(INTERNAL_MODULE, 0), \
IF_PXX2_MODULE(INTERNAL_MODULE, 0), \
IF_PXX2_MODULE(INTERNAL_MODULE, 0), \
IF_PXX2_MODULE(INTERNAL_MODULE, 0),
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), \
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), \
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0),
#else
#define INTERNAL_MODULE_ROWS
#endif
@ -566,32 +576,33 @@ void menuModelSetup(event_t event)
NUM_STICKS + NUM_POTS + NUM_SLIDERS - 1, // Center beeps
0, // Global functions
uint8_t((isDefaultModelRegistrationID() || (warningText && popupFunc == runPopupRegister)) ? HIDDEN_ROW : READONLY_ROW), // Registration ID
REGISTRATION_ID_ROWS
INTERNAL_MODULE_ROWS
LABEL(ExternalModule),
EXTERNAL_MODULE_MODE_ROWS,
EXTERNAL_MODULE_TYPE_ROWS,
MULTIMODULE_SUBTYPE_ROWS(EXTERNAL_MODULE)
MULTIMODULE_STATUS_ROWS
EXTERNAL_MODULE_CHANNELS_ROWS,
IF_NOT_PXX2_MODULE(EXTERNAL_MODULE, EXTERNAL_MODULE_BIND_ROWS()), // line reused for PPM: PPM settings
IF_PXX2_MODULE(EXTERNAL_MODULE, 0), // RxNum
IF_NOT_ACCESS_MODULE_RF(EXTERNAL_MODULE, EXTERNAL_MODULE_BIND_ROWS()), // line reused for PPM: PPM settings
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), // RxNum
IF_NOT_PXX2_MODULE(EXTERNAL_MODULE, EXTERNAL_MODULE_OPTION_ROW),
MULTIMODULE_MODULE_ROWS
EXTERNAL_MODULE_POWER_ROW,
FAILSAFE_ROWS(EXTERNAL_MODULE),
IF_PXX2_MODULE(EXTERNAL_MODULE, 1), // Range check and Register buttons
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 1), // Range check and Register buttons
IF_PXX2_MODULE(EXTERNAL_MODULE, 0), // Module options
IF_PXX2_MODULE(EXTERNAL_MODULE, 0), // Receiver 1
IF_PXX2_MODULE(EXTERNAL_MODULE, 0), // Receiver 2
IF_PXX2_MODULE(EXTERNAL_MODULE, 0), // Receiver 3
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), // Receiver 1
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), // Receiver 2
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), // Receiver 3
TRAINER_ROWS
});
#else
MENU_TAB({ HEADER_LINE_COLUMNS 0, TIMER_ROWS, TIMER_ROWS, TIMER_ROWS, 0, 1, 0, 0, 0, 0, 0, LABEL(PreflightCheck), 0, 0, NUM_SWITCHES-1, NUM_STICKS+NUM_POTS+NUM_SLIDERS-1, 0,
LABEL(ExternalModule),
EXTERNAL_MODULE_MODE_ROWS,
EXTERNAL_MODULE_TYPE_ROWS,
MULTIMODULE_SUBTYPE_ROWS(EXTERNAL_MODULE)
MULTIMODULE_STATUS_ROWS
EXTERNAL_MODULE_CHANNELS_ROWS,
@ -800,7 +811,7 @@ void menuModelSetup(event_t event)
break;
#endif
case ITEM_MODEL_SETUP_SWITCHES_WARNING:
case ITEM_MODEL_SETUP_SWITCHES_WARNING1:
#if defined(PCBTARANIS)
{
#define FIRSTSW_STR STR_VSRCRAW+(MIXSRC_FIRST_SWITCH-MIXSRC_Rud+1)*length
@ -1008,13 +1019,14 @@ void menuModelSetup(event_t event)
lcdDrawTextAlignedLeft(y, TR_INTERNALRF);
break;
case ITEM_MODEL_SETUP_INTERNAL_MODULE_MODE:
case ITEM_MODEL_SETUP_INTERNAL_MODULE_TYPE: {
lcdDrawTextAlignedLeft(y, STR_MODE);
#if defined(PXX1)
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_MODULE_PROTOCOLS, g_model.moduleData[INTERNAL_MODULE].type, menuHorizontalPosition==0 ? attr : 0);
if (isModuleXJT(INTERNAL_MODULE))
lcdDrawTextAtIndex(lcdNextPos + FW, y, STR_ACCST_RF_PROTOCOLS, 1+g_model.moduleData[INTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
else if (isModulePXX2(INTERNAL_MODULE))
lcdDrawTextAtIndex(lcdNextPos + FW, y, STR_ACCESS_RF_PROTOCOLS, g_model.moduleData[INTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
lcdDrawTextAtIndex(lcdNextPos + 3, y, STR_ACCST_RF_PROTOCOLS, 1+g_model.moduleData[INTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
else if (isModuleXJT2(INTERNAL_MODULE))
lcdDrawTextAtIndex(lcdNextPos + 3, y, STR_ISRM_PXX2_RF_PROTOCOLS, g_model.moduleData[INTERNAL_MODULE].subType, menuHorizontalPosition==1 ? attr : 0);
if (attr) {
if (menuHorizontalPosition == 0) {
uint8_t moduleType = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].type, MODULE_TYPE_NONE, MODULE_TYPE_MAX, EE_MODEL, isInternalModuleAvailable);
@ -1026,18 +1038,37 @@ void menuModelSetup(event_t event)
}
}
else if (isModuleXJT(INTERNAL_MODULE)) {
g_model.moduleData[INTERNAL_MODULE].rfProtocol = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].rfProtocol, 0, ACCST_RF_PROTO_LAST, EE_MODEL, isRfProtocolAvailable);
g_model.moduleData[INTERNAL_MODULE].rfProtocol = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].rfProtocol, 0, MODULE_SUBTYPE_PXX1_LAST, EE_MODEL, isRfProtocolAvailable);
if (checkIncDec_Ret) {
g_model.moduleData[0].type = MODULE_TYPE_PXX_XJT;
g_model.moduleData[0].type = MODULE_TYPE_PXX1_XJT;
g_model.moduleData[0].channelsStart = 0;
g_model.moduleData[0].channelsCount = defaultModuleChannels_M8(INTERNAL_MODULE);
}
}
else if (isModulePXX2(INTERNAL_MODULE)) {
g_model.moduleData[INTERNAL_MODULE].rfProtocol = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].rfProtocol, 0, ACCESS_RF_PROTO_LAST, EE_MODEL, isRfProtocolAvailable);
g_model.moduleData[INTERNAL_MODULE].subType = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].subType, 0, MODULE_SUBTYPE_ISRM_PXX2_LAST, EE_MODEL, isRfProtocolAvailable);
}
}
#else
uint8_t index = 0;
if (g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_PXX2_ISRM) {
index = 1 + g_model.moduleData[INTERNAL_MODULE].subType;
}
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_ISRM_PXX2_RF_PROTOCOLS, index, attr);
if (attr) {
index = checkIncDec(event, index, 0, 3, EE_MODEL);
if (checkIncDec_Ret) {
memclear(&g_model.moduleData[INTERNAL_MODULE], sizeof(ModuleData));
if (index > 0) {
g_model.moduleData[INTERNAL_MODULE].type = MODULE_TYPE_PXX2_ISRM;
g_model.moduleData[INTERNAL_MODULE].subType = index - 1;
g_model.moduleData[INTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(INTERNAL_MODULE);
}
}
}
#endif
break;
}
#endif
#if defined(PCBSKY9X)
@ -1050,22 +1081,24 @@ void menuModelSetup(event_t event)
lcdDrawTextAlignedLeft(y, TR_EXTERNALRF);
break;
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_MODE:
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_TYPE:
lcdDrawTextAlignedLeft(y, STR_MODE);
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_MODULE_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].type, menuHorizontalPosition==0 ? attr : 0);
if (isModuleR9M2(EXTERNAL_MODULE))
lcdDrawTextAtIndex(lcdNextPos + 3, y, STR_R9M_PXX2_RF_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==1 ? attr : 0);
if (isModuleXJT(EXTERNAL_MODULE))
lcdDrawTextAtIndex(lcdNextPos + FW, y, STR_ACCST_RF_PROTOCOLS, 1+g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
lcdDrawTextAtIndex(lcdNextPos + 3, y, STR_ACCST_RF_PROTOCOLS, 1+g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
else if (isModuleDSM2(EXTERNAL_MODULE))
lcdDrawTextAtIndex(lcdNextPos + FW, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
lcdDrawTextAtIndex(lcdNextPos + 3, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
else if (isModuleR9M(EXTERNAL_MODULE))
lcdDrawTextAtIndex(lcdNextPos + FW, y, STR_R9M_REGION, g_model.moduleData[EXTERNAL_MODULE].subType, (menuHorizontalPosition==1 ? attr : 0));
lcdDrawTextAtIndex(lcdNextPos + 3, y, STR_R9M_REGION, g_model.moduleData[EXTERNAL_MODULE].subType, (menuHorizontalPosition==1 ? attr : 0));
#if defined(MULTIMODULE)
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
int multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
if (g_model.moduleData[EXTERNAL_MODULE].multi.customProto)
lcdDrawText(lcdNextPos + FW, y, STR_MULTI_CUSTOM, menuHorizontalPosition==1 ? attr : 0);
lcdDrawText(lcdNextPos + 3, y, STR_MULTI_CUSTOM, menuHorizontalPosition==1 ? attr : 0);
else
lcdDrawTextAtIndex(lcdNextPos + FW, y, STR_MULTI_PROTOCOLS, multi_rfProto, menuHorizontalPosition==1 ? attr : 0);
lcdDrawTextAtIndex(lcdNextPos + 3, y, STR_MULTI_PROTOCOLS, multi_rfProto, menuHorizontalPosition==1 ? attr : 0);
}
#endif
if (attr && editMode > 0) {
@ -1090,6 +1123,8 @@ void menuModelSetup(event_t event)
}
break;
case 1:
if (isModuleR9M2(EXTERNAL_MODULE))
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, MODULE_SUBTYPE_R9M_PXX2_LAST);
if (isModuleDSM2(EXTERNAL_MODULE))
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX);
else if (isModuleR9M(EXTERNAL_MODULE)) {
@ -1106,15 +1141,15 @@ void menuModelSetup(event_t event)
#if defined(MULTIMODULE)
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
int multiRfProto = g_model.moduleData[EXTERNAL_MODULE].multi.customProto == 1 ? MM_RF_PROTO_CUSTOM : g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
CHECK_INCDEC_MODELVAR(event, multiRfProto, MM_RF_PROTO_FIRST, MM_RF_PROTO_LAST);
int multiRfProto = g_model.moduleData[EXTERNAL_MODULE].multi.customProto == 1 ? MODULE_SUBTYPE_MULTI_CUSTOM : g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
CHECK_INCDEC_MODELVAR(event, multiRfProto, MODULE_SUBTYPE_MULTI_FIRST, MODULE_SUBTYPE_MULTI_LAST);
if (checkIncDec_Ret) {
g_model.moduleData[EXTERNAL_MODULE].multi.customProto = (multiRfProto == MM_RF_PROTO_CUSTOM);
g_model.moduleData[EXTERNAL_MODULE].multi.customProto = (multiRfProto == MODULE_SUBTYPE_MULTI_CUSTOM);
if (!g_model.moduleData[EXTERNAL_MODULE].multi.customProto)
g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(multiRfProto);
g_model.moduleData[EXTERNAL_MODULE].subType = 0;
// Sensible default for DSM2 (same as for ppm): 7ch@22ms + Autodetect settings enabled
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_DSM2) {
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MODULE_SUBTYPE_MULTI_DSM2) {
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 1;
}
else {
@ -1125,7 +1160,7 @@ void menuModelSetup(event_t event)
}
#endif
else {
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, 0, ACCST_RF_PROTO_LAST);
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, 0, MODULE_SUBTYPE_PXX1_LAST);
}
if (checkIncDec_Ret) {
g_model.moduleData[EXTERNAL_MODULE].channelsStart = 0;
@ -1280,7 +1315,7 @@ void menuModelSetup(event_t event)
CHECK_INCDEC_MODELVAR_ZERO(event, moduleData.channelsStart, 32-8-moduleData.channelsCount);
break;
case 1:
CHECK_INCDEC_MODELVAR_CHECK(event, moduleData.channelsCount, -4, min<int8_t>(maxModuleChannels_M8(moduleIdx), 32-8-moduleData.channelsStart), moduleData.type == MODULE_TYPE_ACCESS_ISRM ? isPXX2ChannelsCountAllowed : nullptr);
CHECK_INCDEC_MODELVAR_CHECK(event, moduleData.channelsCount, -4, min<int8_t>(maxModuleChannels_M8(moduleIdx), 32-8-moduleData.channelsStart), moduleData.type == MODULE_TYPE_PXX2_ISRM ? isPxx2IsrmChannelsCountAllowed : nullptr);
if ((k == ITEM_MODEL_SETUP_EXTERNAL_MODULE_CHANNELS && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM)) {
SET_DEFAULT_PPM_FRAME_LENGTH(moduleIdx);
}
@ -1461,9 +1496,9 @@ void menuModelSetup(event_t event)
#endif
#if defined(PCBTARANIS)
#if defined(HARDWARE_INTERNAL_MODULE)
case ITEM_MODEL_SETUP_INTERNAL_MODULE_NPXX2_BIND:
case ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_BIND:
#endif
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_NPXX2_BIND:
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_NOT_ACCESS_BIND:
#endif
{
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
@ -1517,7 +1552,7 @@ void menuModelSetup(event_t event)
else {
lcdDrawTextAlignedLeft(y, STR_RECEIVER_NUM);
}
if (isModulePXX(moduleIdx) || isModuleDSM2(moduleIdx) || isModuleMultimodule(moduleIdx)) {
if (isModulePXX2(moduleIdx) || isModulePXX(moduleIdx) || isModuleDSM2(moduleIdx) || isModuleMultimodule(moduleIdx)) {
if (xOffsetBind)
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.header.modelId[moduleIdx], (l_posHorz==0 ? attr : 0) | LEADING0|LEFT, 2);
if (attr && l_posHorz == 0) {
@ -1549,7 +1584,7 @@ void menuModelSetup(event_t event)
if (attr && l_posHorz > 0) {
if (s_editMode > 0) {
if (l_posHorz == 1) {
if (isModuleR9M(moduleIdx) || (isModuleXJT(moduleIdx) && g_model.moduleData[moduleIdx].rfProtocol== ACCST_RF_PROTO_D16)) {
if (isModuleR9M(moduleIdx) || (isModuleXJT(moduleIdx) && g_model.moduleData[moduleIdx].rfProtocol == MODULE_SUBTYPE_PXX1_ACCST_D16) || (isModuleXJT2(moduleIdx) && g_model.moduleData[moduleIdx].subType == MODULE_SUBTYPE_ISRM_PXX2_ACCST_D16) || (isModuleR9M2(moduleIdx) && g_model.moduleData[moduleIdx].subType != MODULE_SUBTYPE_R9M_PXX2_ACCESS)) {
#if defined(PCBXLITE)
if (EVT_KEY_MASK(event) == KEY_ENTER) {
#elif defined(PCBSKY9X) || defined(PCBAR9X)
@ -1699,15 +1734,15 @@ void menuModelSetup(event_t event)
if (pdef->optionsstr)
lcdDrawTextAlignedLeft(y, pdef->optionsstr);
if (multi_proto == MM_RF_PROTO_FS_AFHDS2A)
if (multi_proto == MODULE_SUBTYPE_MULTI_FS_AFHDS2A)
optionValue = 50 + 5 * optionValue;
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, optionValue, LEFT | attr);
if (attr) {
if (multi_proto == MM_RF_PROTO_FS_AFHDS2A) {
if (multi_proto == MODULE_SUBTYPE_MULTI_FS_AFHDS2A) {
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, 0, 70);
}
else if (multi_proto == MM_RF_PROTO_OLRS) {
else if (multi_proto == MODULE_SUBTYPE_MULTI_OLRS) {
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -1, 7);
}
else {
@ -1739,7 +1774,7 @@ void menuModelSetup(event_t event)
lcdDrawTextAlignedLeft(y, TR_MULTI_RFPOWER);
if (isModuleR9M_FCC_VARIANT(moduleIdx)) {
g_model.moduleData[moduleIdx].pxx.power = min((uint8_t)g_model.moduleData[moduleIdx].pxx.power, (uint8_t)R9M_FCC_POWER_MAX); // Lite FCC has only one setting
if (g_model.moduleData[moduleIdx].type == MODULE_TYPE_PXX_R9M_LITE) { // R9M lite FCC has only one power value, so displayed for info only
if (g_model.moduleData[moduleIdx].type == MODULE_TYPE_PXX1_R9M_LITE) { // R9M lite FCC has only one power value, so displayed for info only
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_LITE_FCC_POWER_VALUES, g_model.moduleData[moduleIdx].pxx.power, LEFT);
if (attr)
REPEAT_LAST_CURSOR_MOVE();
@ -1750,7 +1785,7 @@ void menuModelSetup(event_t event)
CHECK_INCDEC_MODELVAR_ZERO(event, g_model.moduleData[moduleIdx].pxx.power, R9M_FCC_POWER_MAX);
}
}
else if (g_model.moduleData[moduleIdx].type == MODULE_TYPE_PXX_R9M_LITE) {
else if (g_model.moduleData[moduleIdx].type == MODULE_TYPE_PXX1_R9M_LITE) {
g_model.moduleData[moduleIdx].pxx.power = min((uint8_t)g_model.moduleData[moduleIdx].pxx.power, (uint8_t)R9M_LITE_LBT_POWER_MAX);
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_LITE_LBT_POWER_VALUES, g_model.moduleData[moduleIdx].pxx.power, LEFT | attr);
if (attr) {
@ -1763,7 +1798,7 @@ void menuModelSetup(event_t event)
reusableBuffer.moduleSetup.r9mPower = g_model.moduleData[moduleIdx].pxx.power;
}
}
else if (g_model.moduleData[moduleIdx].type == MODULE_TYPE_PXX_R9M) {
else if (g_model.moduleData[moduleIdx].type == MODULE_TYPE_PXX1_R9M) {
g_model.moduleData[moduleIdx].pxx.power = min((uint8_t)g_model.moduleData[moduleIdx].pxx.power, (uint8_t)R9M_LBT_POWER_MAX);
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_LBT_POWER_VALUES, g_model.moduleData[moduleIdx].pxx.power, LEFT | attr);
if (attr) {
@ -1788,7 +1823,7 @@ void menuModelSetup(event_t event)
#if defined(MULTIMODULE)
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_AUTOBIND:
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_DSM2)
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MODULE_SUBTYPE_MULTI_DSM2)
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode, MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_DSM_AUTODTECT, attr, event);
else
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode, MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_AUTOBIND, attr, event);
@ -1873,7 +1908,7 @@ void menuModelSetup(event_t event)
if (old_editMode > 0 && s_editMode == 0) {
switch(menuVerticalPosition) {
#if defined(HARDWARE_INTERNAL_MODULE)
case ITEM_MODEL_SETUP_INTERNAL_MODULE_NPXX2_BIND:
case ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_BIND:
case ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_MODEL_NUM:
if (menuHorizontalPosition == 0)
checkModelIdUnique(g_eeGeneral.currModel, INTERNAL_MODULE);
@ -1885,7 +1920,7 @@ void menuModelSetup(event_t event)
checkModelIdUnique(g_eeGeneral.currModel, EXTRA_MODULE);
break;
#endif
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_NPXX2_BIND:
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_NOT_ACCESS_BIND:
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_PXX2_MODEL_NUM:
if (menuHorizontalPosition == 0)
checkModelIdUnique(g_eeGeneral.currModel, EXTERNAL_MODULE);

View file

@ -240,7 +240,7 @@ void menuModelTelemetryFrsky(event_t event)
case ITEM_TELEMETRY_RSSI_LABEL:
#if defined(MULTIMODULE)
if (telemetryProtocol == PROTOCOL_TELEMETRY_MULTIMODULE && g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false) == MM_RF_PROTO_FS_AFHDS2A)
if (telemetryProtocol == PROTOCOL_TELEMETRY_MULTIMODULE && g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false) == MODULE_SUBTYPE_MULTI_FS_AFHDS2A)
lcdDrawTextAlignedLeft(y, "RSNR");
else
lcdDrawTextAlignedLeft(y, "RSSI");

View file

@ -22,77 +22,89 @@
uint8_t g_moduleIdx;
uint8_t getSwitchWarningsCount()
{
uint8_t count = 0;
for (int i=0; i<NUM_SWITCHES; ++i) {
if (SWITCH_WARNING_ALLOWED(i)) {
++count;
}
}
return count;
}
enum MenuModelSetupItems {
ITEM_MODEL_NAME,
ITEM_MODEL_BITMAP,
ITEM_MODEL_TIMER1,
ITEM_MODEL_TIMER1_NAME,
ITEM_MODEL_TIMER1_PERSISTENT,
ITEM_MODEL_TIMER1_MINUTE_BEEP,
ITEM_MODEL_TIMER1_COUNTDOWN_BEEP,
ITEM_MODEL_SETUP_NAME,
ITEM_MODEL_SETUP_BITMAP,
ITEM_MODEL_SETUP_TIMER1,
ITEM_MODEL_SETUP_TIMER1_NAME,
ITEM_MODEL_SETUP_TIMER1_PERSISTENT,
ITEM_MODEL_SETUP_TIMER1_MINUTE_BEEP,
ITEM_MODEL_SETUP_TIMER1_COUNTDOWN_BEEP,
#if TIMERS > 1
ITEM_MODEL_TIMER2,
ITEM_MODEL_TIMER2_NAME,
ITEM_MODEL_TIMER2_PERSISTENT,
ITEM_MODEL_TIMER2_MINUTE_BEEP,
ITEM_MODEL_TIMER2_COUNTDOWN_BEEP,
ITEM_MODEL_SETUP_TIMER2,
ITEM_MODEL_SETUP_TIMER2_NAME,
ITEM_MODEL_SETUP_TIMER2_PERSISTENT,
ITEM_MODEL_SETUP_TIMER2_MINUTE_BEEP,
ITEM_MODEL_SETUP_TIMER2_COUNTDOWN_BEEP,
#endif
#if TIMERS > 2
ITEM_MODEL_TIMER3,
ITEM_MODEL_TIMER3_NAME,
ITEM_MODEL_TIMER3_PERSISTENT,
ITEM_MODEL_TIMER3_MINUTE_BEEP,
ITEM_MODEL_TIMER3_COUNTDOWN_BEEP,
ITEM_MODEL_SETUP_TIMER3,
ITEM_MODEL_SETUP_TIMER3_NAME,
ITEM_MODEL_SETUP_TIMER3_PERSISTENT,
ITEM_MODEL_SETUP_TIMER3_MINUTE_BEEP,
ITEM_MODEL_SETUP_TIMER3_COUNTDOWN_BEEP,
#endif
#if defined(PCBX9E)
ITEM_MODEL_TOP_LCD_TIMER,
ITEM_MODEL_SETUP_TOP_LCD_TIMER,
#endif
ITEM_MODEL_EXTENDED_LIMITS,
ITEM_MODEL_EXTENDED_TRIMS,
ITEM_MODEL_DISPLAY_TRIMS,
ITEM_MODEL_TRIM_INC,
ITEM_MODEL_THROTTLE_LABEL,
ITEM_MODEL_THROTTLE_REVERSED,
ITEM_MODEL_THROTTLE_TRACE,
ITEM_MODEL_THROTTLE_TRIM,
ITEM_MODEL_PREFLIGHT_LABEL,
ITEM_MODEL_CHECKLIST_DISPLAY,
ITEM_MODEL_THROTTLE_WARNING,
ITEM_MODEL_SWITCHES_WARNING,
ITEM_MODEL_SETUP_EXTENDED_LIMITS,
ITEM_MODEL_SETUP_EXTENDED_TRIMS,
ITEM_MODEL_SETUP_DISPLAY_TRIMS,
ITEM_MODEL_SETUP_TRIM_INC,
ITEM_MODEL_SETUP_THROTTLE_LABEL,
ITEM_MODEL_SETUP_THROTTLE_REVERSED,
ITEM_MODEL_SETUP_THROTTLE_TRACE,
ITEM_MODEL_SETUP_THROTTLE_TRIM,
ITEM_MODEL_SETUP_PREFLIGHT_LABEL,
ITEM_MODEL_SETUP_CHECKLIST_DISPLAY,
ITEM_MODEL_SETUP_THROTTLE_WARNING,
ITEM_MODEL_SETUP_SWITCHES_WARNING1,
#if defined(PCBX9E)
ITEM_MODEL_SWITCHES_WARNING2,
ITEM_MODEL_SWITCHES_WARNING3,
ITEM_MODEL_SETUP_SWITCHES_WARNING2,
ITEM_MODEL_SETUP_SWITCHES_WARNING3,
#endif
ITEM_MODEL_POTS_WARNING,
ITEM_MODEL_SETUP_POTS_WARNING,
#if defined(PCBX9E)
ITEM_MODEL_POTS_WARNING2,
ITEM_MODEL_SETUP_POTS_WARNING2,
#endif
ITEM_MODEL_BEEP_CENTER,
ITEM_MODEL_USE_GLOBAL_FUNCTIONS,
ITEM_MODEL_INTERNAL_MODULE_LABEL,
ITEM_MODEL_INTERNAL_MODULE_MODE,
ITEM_MODEL_INTERNAL_MODULE_CHANNELS,
ITEM_MODEL_INTERNAL_MODULE_BIND,
ITEM_MODEL_INTERNAL_MODULE_FAILSAFE,
ITEM_MODEL_EXTERNAL_MODULE_LABEL,
ITEM_MODEL_EXTERNAL_MODULE_MODE,
ITEM_MODEL_SETUP_BEEP_CENTER,
ITEM_MODEL_SETUP_USE_GLOBAL_FUNCTIONS,
ITEM_MODEL_SETUP_REGISTRATION_ID,
ITEM_MODEL_SETUP_INTERNAL_MODULE_LABEL,
ITEM_MODEL_SETUP_INTERNAL_MODULE_MODE,
ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS,
ITEM_MODEL_SETUP_INTERNAL_MODULE_BIND,
ITEM_MODEL_SETUP_INTERNAL_MODULE_FAILSAFE,
ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL,
ITEM_MODEL_SETUP_EXTERNAL_MODULE_MODE,
#if defined (MULTIMODULE)
ITEM_MODEL_EXTERNAL_MODULE_STATUS,
ITEM_MODEL_EXTERNAL_MODULE_SYNCSTATUS,
ITEM_MODEL_SETUP_EXTERNAL_MODULE_STATUS,
ITEM_MODEL_SETUP_EXTERNAL_MODULE_SYNCSTATUS,
#endif
ITEM_MODEL_EXTERNAL_MODULE_CHANNELS,
ITEM_MODEL_EXTERNAL_MODULE_BIND,
ITEM_MODEL_EXTERNAL_MODULE_FAILSAFE,
ITEM_MODEL_EXTERNAL_MODULE_OPTIONS,
ITEM_MODEL_SETUP_EXTERNAL_MODULE_CHANNELS,
ITEM_MODEL_SETUP_EXTERNAL_MODULE_BIND,
ITEM_MODEL_SETUP_EXTERNAL_MODULE_FAILSAFE,
ITEM_MODEL_SETUP_EXTERNAL_MODULE_OPTIONS,
#if defined(MULTIMODULE)
ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND,
ITEM_MODEL_SETUP_EXTERNAL_MODULE_AUTOBIND,
#endif
ITEM_MODEL_EXTERNAL_MODULE_POWER,
ITEM_MODEL_TRAINER_LABEL,
ITEM_MODEL_TRAINER_MODE,
ITEM_MODEL_TRAINER_LINE1,
ITEM_MODEL_TRAINER_LINE2,
ITEM_MODEL_SETUP_MAX
ITEM_MODEL_SETUP_EXTERNAL_MODULE_POWER,
ITEM_MODEL_SETUP_TRAINER_LABEL,
ITEM_MODEL_SETUP_TRAINER_MODE,
ITEM_MODEL_SETUP_TRAINER_LINE1,
ITEM_MODEL_SETUP_TRAINER_LINE2,
ITEM_MODEL_SETUP_SETUP_MAX
};
#define FIELD_PROTOCOL_MAX 1
@ -103,11 +115,11 @@ enum MenuModelSetupItems {
#define MODEL_SETUP_RANGE_OFS 7*FW
#define MODEL_SETUP_SET_FAILSAFE_OFS 10*FW-2
#define CURRENT_MODULE_EDITED(k) (k >= ITEM_MODEL_EXTERNAL_MODULE_LABEL ? EXTERNAL_MODULE : INTERNAL_MODULE)
#define CURRENT_MODULE_EDITED(k) (k >= ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL ? EXTERNAL_MODULE : INTERNAL_MODULE)
void onBindMenu(const char * result)
{
uint8_t moduleIdx = CURRENT_MODULE_EDITED(menuVerticalPosition);
uint8_t moduleIdx = CURRENT_MODULE_EDITED(menuVerticalPosition - HEADER_LINE);
if (result == STR_BINDING_1_8_TELEM_ON) {
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = false;
@ -221,17 +233,6 @@ void editTimerCountdown(int timerIdx, coord_t y, LcdFlags attr, event_t event)
}
}
int getSwitchWarningsCount()
{
int count = 0;
for (int i=0; i<NUM_SWITCHES; ++i) {
if (SWITCH_WARNING_ALLOWED(i)) {
++count;
}
}
return count;
}
#define IF_INTERNAL_MODULE_ON(x) (IS_INTERNAL_MODULE_ENABLED() ? (uint8_t)(x) : HIDDEN_ROW)
#if defined(INTERNAL_MODULE_PPM)
#define INTERNAL_MODULE_MODE_ROWS (isModuleXJT(INTERNAL_MODULE) ? (uint8_t)1 : (uint8_t)0) // Module type + RF protocols
@ -298,7 +299,7 @@ void menuModelSetup(event_t event)
EXTERNAL_MODULE_POWER_ROW,
LABEL(Trainer), 0, TRAINER_LINE1_ROWS, TRAINER_LINE2_ROWS});
MENU_CHECK(STR_MENUSETUP, menuTabModel, MENU_MODEL_SETUP, ITEM_MODEL_SETUP_MAX);
MENU_CHECK(STR_MENUSETUP, menuTabModel, MENU_MODEL_SETUP, ITEM_MODEL_SETUP_SETUP_MAX);
if (event == EVT_ENTRY) {
reusableBuffer.moduleSetup.r9mPower = g_model.moduleData[EXTERNAL_MODULE].pxx.power;
@ -325,12 +326,12 @@ void menuModelSetup(event_t event)
LcdFlags attr = (sub == k ? blink : 0);
switch(k) {
case ITEM_MODEL_NAME:
case ITEM_MODEL_SETUP_NAME:
editSingleName(MODEL_SETUP_2ND_COLUMN, y, STR_MODELNAME, g_model.header.name, sizeof(g_model.header.name), event, attr);
memcpy(modelHeaders[g_eeGeneral.currModel].name, g_model.header.name, sizeof(g_model.header.name));
break;
case ITEM_MODEL_BITMAP:
case ITEM_MODEL_SETUP_BITMAP:
lcdDrawTextAlignedLeft(y, STR_BITMAP);
if (ZEXIST(g_model.header.bitmap))
lcdDrawSizedText(MODEL_SETUP_2ND_COLUMN, y, g_model.header.bitmap, sizeof(g_model.header.bitmap), attr);
@ -347,72 +348,72 @@ void menuModelSetup(event_t event)
}
break;
case ITEM_MODEL_TIMER1:
case ITEM_MODEL_SETUP_TIMER1:
editTimerMode(0, y, attr, event);
break;
case ITEM_MODEL_TIMER1_NAME:
case ITEM_MODEL_SETUP_TIMER1_NAME:
editSingleName(MODEL_SETUP_2ND_COLUMN, y, STR_TIMER_NAME, g_model.timers[0].name, LEN_TIMER_NAME, event, attr);
break;
case ITEM_MODEL_TIMER1_MINUTE_BEEP:
case ITEM_MODEL_SETUP_TIMER1_MINUTE_BEEP:
g_model.timers[0].minuteBeep = editCheckBox(g_model.timers[0].minuteBeep, MODEL_SETUP_2ND_COLUMN, y, STR_MINUTEBEEP, attr, event);
break;
case ITEM_MODEL_TIMER1_COUNTDOWN_BEEP:
case ITEM_MODEL_SETUP_TIMER1_COUNTDOWN_BEEP:
editTimerCountdown(0, y, attr, event);
break;
case ITEM_MODEL_TIMER1_PERSISTENT:
case ITEM_MODEL_SETUP_TIMER1_PERSISTENT:
g_model.timers[0].persistent = editChoice(MODEL_SETUP_2ND_COLUMN, y, STR_PERSISTENT, STR_VPERSISTENT, g_model.timers[0].persistent, 0, 2, attr, event);
break;
#if TIMERS > 1
case ITEM_MODEL_TIMER2:
case ITEM_MODEL_SETUP_TIMER2:
editTimerMode(1, y, attr, event);
break;
case ITEM_MODEL_TIMER2_NAME:
case ITEM_MODEL_SETUP_TIMER2_NAME:
editSingleName(MODEL_SETUP_2ND_COLUMN, y, STR_TIMER_NAME, g_model.timers[1].name, LEN_TIMER_NAME, event, attr);
break;
case ITEM_MODEL_TIMER2_MINUTE_BEEP:
case ITEM_MODEL_SETUP_TIMER2_MINUTE_BEEP:
g_model.timers[1].minuteBeep = editCheckBox(g_model.timers[1].minuteBeep, MODEL_SETUP_2ND_COLUMN, y, STR_MINUTEBEEP, attr, event);
break;
case ITEM_MODEL_TIMER2_COUNTDOWN_BEEP:
case ITEM_MODEL_SETUP_TIMER2_COUNTDOWN_BEEP:
editTimerCountdown(1, y, attr, event);
break;
case ITEM_MODEL_TIMER2_PERSISTENT:
case ITEM_MODEL_SETUP_TIMER2_PERSISTENT:
g_model.timers[1].persistent = editChoice(MODEL_SETUP_2ND_COLUMN, y, STR_PERSISTENT, STR_VPERSISTENT, g_model.timers[1].persistent, 0, 2, attr, event);
break;
#endif
#if TIMERS > 2
case ITEM_MODEL_TIMER3:
case ITEM_MODEL_SETUP_TIMER3:
editTimerMode(2, y, attr, event);
break;
case ITEM_MODEL_TIMER3_NAME:
case ITEM_MODEL_SETUP_TIMER3_NAME:
editSingleName(MODEL_SETUP_2ND_COLUMN, y, STR_TIMER_NAME, g_model.timers[2].name, LEN_TIMER_NAME, event, attr);
break;
case ITEM_MODEL_TIMER3_MINUTE_BEEP:
case ITEM_MODEL_SETUP_TIMER3_MINUTE_BEEP:
g_model.timers[2].minuteBeep = editCheckBox(g_model.timers[2].minuteBeep, MODEL_SETUP_2ND_COLUMN, y, STR_MINUTEBEEP, attr, event);
break;
case ITEM_MODEL_TIMER3_COUNTDOWN_BEEP:
case ITEM_MODEL_SETUP_TIMER3_COUNTDOWN_BEEP:
editTimerCountdown(2, y, attr, event);
break;
case ITEM_MODEL_TIMER3_PERSISTENT:
case ITEM_MODEL_SETUP_TIMER3_PERSISTENT:
g_model.timers[2].persistent = editChoice(MODEL_SETUP_2ND_COLUMN, y, STR_PERSISTENT, STR_VPERSISTENT, g_model.timers[2].persistent, 0, 2, attr, event);
break;
#endif
#if defined(PCBX9E)
case ITEM_MODEL_TOP_LCD_TIMER:
case ITEM_MODEL_SETUP_TOP_LCD_TIMER:
lcdDrawTextAlignedLeft(y, STR_TOPLCDTIMER);
drawStringWithIndex(MODEL_SETUP_2ND_COLUMN, y, STR_TIMER, g_model.toplcdTimer+1, attr);
if (attr) {
@ -421,11 +422,11 @@ void menuModelSetup(event_t event)
break;
#endif
case ITEM_MODEL_EXTENDED_LIMITS:
case ITEM_MODEL_SETUP_EXTENDED_LIMITS:
ON_OFF_MENU_ITEM(g_model.extendedLimits, MODEL_SETUP_2ND_COLUMN, y, STR_ELIMITS, attr, event);
break;
case ITEM_MODEL_EXTENDED_TRIMS:
case ITEM_MODEL_SETUP_EXTENDED_TRIMS:
ON_OFF_MENU_ITEM(g_model.extendedTrims, MODEL_SETUP_2ND_COLUMN, y, STR_ETRIMS, menuHorizontalPosition<=0 ? attr : 0, event==EVT_KEY_BREAK(KEY_ENTER) ? event : 0);
lcdDrawText(MODEL_SETUP_2ND_COLUMN+3*FW, y, STR_RESET_BTN, (menuHorizontalPosition>0 && !NO_HIGHLIGHT()) ? attr : 0);
if (attr && menuHorizontalPosition>0) {
@ -441,23 +442,23 @@ void menuModelSetup(event_t event)
}
break;
case ITEM_MODEL_DISPLAY_TRIMS:
case ITEM_MODEL_SETUP_DISPLAY_TRIMS:
g_model.displayTrims = editChoice(MODEL_SETUP_2ND_COLUMN, y, STR_DISPLAY_TRIMS, STR_VDISPLAYTRIMS, g_model.displayTrims, 0, 2, attr, event);
break;
case ITEM_MODEL_TRIM_INC:
case ITEM_MODEL_SETUP_TRIM_INC:
g_model.trimInc = editChoice(MODEL_SETUP_2ND_COLUMN, y, STR_TRIMINC, STR_VTRIMINC, g_model.trimInc, -2, 2, attr, event);
break;
case ITEM_MODEL_THROTTLE_LABEL:
case ITEM_MODEL_SETUP_THROTTLE_LABEL:
lcdDrawTextAlignedLeft(y, STR_THROTTLE_LABEL);
break;
case ITEM_MODEL_THROTTLE_REVERSED:
case ITEM_MODEL_SETUP_THROTTLE_REVERSED:
ON_OFF_MENU_ITEM(g_model.throttleReversed, MODEL_SETUP_2ND_COLUMN, y, STR_THROTTLEREVERSE, attr, event ) ;
break;
case ITEM_MODEL_THROTTLE_TRACE:
case ITEM_MODEL_SETUP_THROTTLE_TRACE:
{
lcdDrawTextAlignedLeft(y, STR_TTRACE);
if (attr) CHECK_INCDEC_MODELVAR_ZERO_CHECK(event, g_model.thrTraceSrc, NUM_POTS+NUM_SLIDERS+MAX_OUTPUT_CHANNELS, isThrottleSourceAvailable);
@ -470,26 +471,26 @@ void menuModelSetup(event_t event)
break;
}
case ITEM_MODEL_THROTTLE_TRIM:
case ITEM_MODEL_SETUP_THROTTLE_TRIM:
ON_OFF_MENU_ITEM(g_model.thrTrim, MODEL_SETUP_2ND_COLUMN, y, STR_TTRIM, attr, event);
break;
case ITEM_MODEL_PREFLIGHT_LABEL:
case ITEM_MODEL_SETUP_PREFLIGHT_LABEL:
lcdDrawTextAlignedLeft(y, STR_PREFLIGHT);
break;
case ITEM_MODEL_CHECKLIST_DISPLAY:
case ITEM_MODEL_SETUP_CHECKLIST_DISPLAY:
ON_OFF_MENU_ITEM(g_model.displayChecklist, MODEL_SETUP_2ND_COLUMN, y, STR_CHECKLIST, attr, event);
break;
case ITEM_MODEL_THROTTLE_WARNING:
case ITEM_MODEL_SETUP_THROTTLE_WARNING:
g_model.disableThrottleWarning = !editCheckBox(!g_model.disableThrottleWarning, MODEL_SETUP_2ND_COLUMN, y, STR_THROTTLEWARNING, attr, event);
break;
#if defined(PCBX9E)
case ITEM_MODEL_SWITCHES_WARNING2:
case ITEM_MODEL_SWITCHES_WARNING3:
case ITEM_MODEL_POTS_WARNING2:
case ITEM_MODEL_SETUP_SWITCHES_WARNING2:
case ITEM_MODEL_SETUP_SWITCHES_WARNING3:
case ITEM_MODEL_SETUP_POTS_WARNING2:
if (i==0) {
if (CURSOR_MOVED_LEFT(event))
menuVerticalOffset--;
@ -499,7 +500,7 @@ void menuModelSetup(event_t event)
break;
#endif
case ITEM_MODEL_SWITCHES_WARNING:
case ITEM_MODEL_SETUP_SWITCHES_WARNING1:
{
#if defined(PCBX9E)
if (i>=NUM_BODY_LINES-2 && getSwitchWarningsCount() > 8*(NUM_BODY_LINES-i)) {
@ -562,7 +563,7 @@ void menuModelSetup(event_t event)
break;
}
case ITEM_MODEL_POTS_WARNING:
case ITEM_MODEL_SETUP_POTS_WARNING:
#if defined(PCBX9E)
if (i==NUM_BODY_LINES-1 && g_model.potsWarnMode) {
if (CURSOR_MOVED_LEFT(event))
@ -632,7 +633,7 @@ void menuModelSetup(event_t event)
}
break;
case ITEM_MODEL_BEEP_CENTER:
case ITEM_MODEL_SETUP_BEEP_CENTER:
{
lcdDrawTextAlignedLeft(y, STR_BEEPCTR);
coord_t x = MODEL_SETUP_2ND_COLUMN;
@ -656,18 +657,18 @@ void menuModelSetup(event_t event)
break;
}
case ITEM_MODEL_USE_GLOBAL_FUNCTIONS:
case ITEM_MODEL_SETUP_USE_GLOBAL_FUNCTIONS:
lcdDrawTextAlignedLeft(y, STR_USE_GLOBAL_FUNCS);
drawCheckBox(MODEL_SETUP_2ND_COLUMN, y, !g_model.noGlobalFunctions, attr);
if (attr) g_model.noGlobalFunctions = !checkIncDecModel(event, !g_model.noGlobalFunctions, 0, 1);
break;
case ITEM_MODEL_INTERNAL_MODULE_LABEL:
case ITEM_MODEL_SETUP_INTERNAL_MODULE_LABEL:
lcdDrawTextAlignedLeft(y, TR_INTERNALRF);
break;
#if defined(INTERNAL_MODULE_PPM)
case ITEM_MODEL_INTERNAL_MODULE_MODE:
case ITEM_MODEL_SETUP_INTERNAL_MODULE_MODE:
lcdDrawTextAlignedLeft(y, STR_MODE);
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_MODULE_PROTOCOLS, g_model.moduleData[INTERNAL_MODULE].type, menuHorizontalPosition==0 ? attr : 0);
if (isModuleXJT(INTERNAL_MODULE))
@ -675,7 +676,7 @@ void menuModelSetup(event_t event)
if (attr && s_editMode>0) {
switch (menuHorizontalPosition) {
case 0:
g_model.moduleData[INTERNAL_MODULE].type = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].type, MODULE_TYPE_NONE, MODULE_TYPE_PXX_XJT, EE_MODEL, isModuleAvailable);
g_model.moduleData[INTERNAL_MODULE].type = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].type, MODULE_TYPE_NONE, MODULE_TYPE_PXX1_XJT, EE_MODEL, isModuleAvailable);
if (checkIncDec_Ret) {
g_model.moduleData[INTERNAL_MODULE].rfProtocol = 0;
g_model.moduleData[INTERNAL_MODULE].channelsStart = 0;
@ -683,7 +684,7 @@ void menuModelSetup(event_t event)
}
break;
case 1:
g_model.moduleData[INTERNAL_MODULE].rfProtocol = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].rfProtocol, ACCST_RF_PROTO_D16, ACCST_RF_PROTO_LAST, EE_MODEL, isRfProtocolAvailable);
g_model.moduleData[INTERNAL_MODULE].rfProtocol = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].rfProtocol, MODULE_SUBTYPE_PXX1_ACCST_D16, MODULE_SUBTYPE_PXX1_LAST, EE_MODEL, isRfProtocolAvailable);
if (checkIncDec_Ret) {
g_model.moduleData[INTERNAL_MODULE].channelsStart = 0;
g_model.moduleData[INTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(INTERNAL_MODULE);
@ -692,24 +693,24 @@ void menuModelSetup(event_t event)
}
break;
#else
case ITEM_MODEL_INTERNAL_MODULE_MODE:
case ITEM_MODEL_SETUP_INTERNAL_MODULE_MODE:
lcdDrawTextAlignedLeft(y, STR_MODE);
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_ACCST_RF_PROTOCOLS, 1+g_model.moduleData[0].rfProtocol, attr);
if (attr) {
g_model.moduleData[INTERNAL_MODULE].rfProtocol = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].rfProtocol, -1, ACCST_RF_PROTO_LAST, EE_MODEL, isRfProtocolAvailable);
g_model.moduleData[INTERNAL_MODULE].rfProtocol = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].rfProtocol, -1, MODULE_SUBTYPE_PXX1_LAST, EE_MODEL, isRfProtocolAvailable);
if (checkIncDec_Ret) {
g_model.moduleData[INTERNAL_MODULE].type = MODULE_TYPE_PXX_XJT;
g_model.moduleData[INTERNAL_MODULE].type = MODULE_TYPE_PXX1_XJT;
g_model.moduleData[INTERNAL_MODULE].channelsStart = 0;
g_model.moduleData[INTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(INTERNAL_MODULE);
if (g_model.moduleData[INTERNAL_MODULE].rfProtocol == ACCST_RF_PROTO_OFF)
if (g_model.moduleData[INTERNAL_MODULE].rfProtocol == MODULE_SUBTYPE_PXX1_OFF)
g_model.moduleData[INTERNAL_MODULE].type = MODULE_TYPE_NONE;
}
}
break;
#endif
case ITEM_MODEL_TRAINER_MODE:
case ITEM_MODEL_SETUP_TRAINER_MODE:
lcdDrawTextAlignedLeft(y, STR_MODE);
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_VTRAINERMODES, g_model.trainerData.mode, attr);
if (attr) {
@ -723,11 +724,11 @@ void menuModelSetup(event_t event)
#endif
break;
case ITEM_MODEL_EXTERNAL_MODULE_LABEL:
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL:
lcdDrawTextAlignedLeft(y, TR_EXTERNALRF);
break;
case ITEM_MODEL_EXTERNAL_MODULE_MODE:
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_MODE:
lcdDrawTextAlignedLeft(y, STR_MODE);
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_MODULE_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].type, menuHorizontalPosition==0 ? attr : 0);
if (isModuleXJT(EXTERNAL_MODULE))
@ -774,15 +775,15 @@ void menuModelSetup(event_t event)
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX);
#if defined(MULTIMODULE)
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
int multiRfProto = g_model.moduleData[EXTERNAL_MODULE].multi.customProto == 1 ? MM_RF_PROTO_CUSTOM : g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
CHECK_INCDEC_MODELVAR(event, multiRfProto, MM_RF_PROTO_FIRST, MM_RF_PROTO_LAST);
int multiRfProto = g_model.moduleData[EXTERNAL_MODULE].multi.customProto == 1 ? MODULE_SUBTYPE_MULTI_CUSTOM : g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
CHECK_INCDEC_MODELVAR(event, multiRfProto, MODULE_SUBTYPE_MULTI_FIRST, MODULE_SUBTYPE_MULTI_LAST);
if (checkIncDec_Ret) {
g_model.moduleData[EXTERNAL_MODULE].multi.customProto = (multiRfProto == MM_RF_PROTO_CUSTOM);
g_model.moduleData[EXTERNAL_MODULE].multi.customProto = (multiRfProto == MODULE_SUBTYPE_MULTI_CUSTOM);
if (!g_model.moduleData[EXTERNAL_MODULE].multi.customProto)
g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(multiRfProto);
g_model.moduleData[EXTERNAL_MODULE].subType = 0;
// Sensible default for DSM2 (same as for ppm): 7ch@22ms + Autodetect settings enabled
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_DSM2) {
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MODULE_SUBTYPE_MULTI_DSM2) {
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 1;
}
else {
@ -802,7 +803,7 @@ void menuModelSetup(event_t event)
g_model.moduleData[EXTERNAL_MODULE].subType = newR9MType;
}
else {
g_model.moduleData[EXTERNAL_MODULE].rfProtocol = checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, ACCST_RF_PROTO_D16, ACCST_RF_PROTO_LAST, EE_MODEL, isRfProtocolAvailable);
g_model.moduleData[EXTERNAL_MODULE].rfProtocol = checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, MODULE_SUBTYPE_PXX1_ACCST_D16, MODULE_SUBTYPE_PXX1_LAST, EE_MODEL, isRfProtocolAvailable);
}
if (checkIncDec_Ret) {
g_model.moduleData[EXTERNAL_MODULE].channelsStart = 0;
@ -830,12 +831,12 @@ void menuModelSetup(event_t event)
}
break;
case ITEM_MODEL_TRAINER_LABEL:
case ITEM_MODEL_SETUP_TRAINER_LABEL:
lcdDrawTextAlignedLeft(y, STR_TRAINER);
break;
#if defined(BLUETOOTH) && defined(USEHORUSBT)
case ITEM_MODEL_TRAINER_LINE1:
case ITEM_MODEL_SETUP_TRAINER_LINE1:
if (g_model.trainerData.mode == TRAINER_MODE_MASTER_BLUETOOTH) {
if (attr) {
s_editMode = 0;
@ -876,7 +877,7 @@ void menuModelSetup(event_t event)
}
// no break
#else
case ITEM_MODEL_TRAINER_LINE1:
case ITEM_MODEL_SETUP_TRAINER_LINE1:
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));
@ -895,8 +896,8 @@ void menuModelSetup(event_t event)
break;
#endif
case ITEM_MODEL_INTERNAL_MODULE_CHANNELS:
case ITEM_MODEL_EXTERNAL_MODULE_CHANNELS:
case ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS:
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_CHANNELS:
{
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
ModuleData & moduleData = g_model.moduleData[moduleIdx];
@ -920,11 +921,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_EXTERNAL_MODULE_CHANNELS && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM) || (k == ITEM_MODEL_INTERNAL_MODULE_CHANNELS && g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_PPM) || (k == ITEM_MODEL_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_LINE1)) {
SET_DEFAULT_PPM_FRAME_LENGTH(moduleIdx);
}
#else
if ((k == ITEM_MODEL_EXTERNAL_MODULE_CHANNELS && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM) || (k == ITEM_MODEL_TRAINER_LINE1)) {
if ((k == ITEM_MODEL_SETUP_EXTERNAL_MODULE_CHANNELS && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM) || (k == ITEM_MODEL_SETUP_TRAINER_LINE1)) {
SET_DEFAULT_PPM_FRAME_LENGTH(moduleIdx);
}
#endif
@ -935,7 +936,7 @@ void menuModelSetup(event_t event)
break;
}
case ITEM_MODEL_TRAINER_LINE2:
case ITEM_MODEL_SETUP_TRAINER_LINE2:
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);
@ -957,8 +958,8 @@ void menuModelSetup(event_t event)
}
break;
case ITEM_MODEL_INTERNAL_MODULE_BIND:
case ITEM_MODEL_EXTERNAL_MODULE_BIND:
case ITEM_MODEL_SETUP_INTERNAL_MODULE_BIND:
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_BIND:
{
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
ModuleData & moduleData = g_model.moduleData[moduleIdx];
@ -1004,7 +1005,7 @@ void menuModelSetup(event_t event)
else {
horzpos_t l_posHorz = menuHorizontalPosition;
coord_t xOffsetBind = MODEL_SETUP_BIND_OFS;
if (isModuleXJT(moduleIdx) && g_model.moduleData[moduleIdx].rfProtocol == ACCST_RF_PROTO_D8) {
if (isModuleXJT(moduleIdx) && g_model.moduleData[moduleIdx].rfProtocol == MODULE_SUBTYPE_PXX1_ACCST_D8) {
xOffsetBind = 0;
lcdDrawTextAlignedLeft(y, STR_RECEIVER);
if (attr) l_posHorz += 1;
@ -1043,7 +1044,7 @@ void menuModelSetup(event_t event)
if (attr && l_posHorz>0) {
if (s_editMode>0) {
if (l_posHorz == 1) {
if (isModuleR9M(moduleIdx) || (isModuleXJT(moduleIdx) && g_model.moduleData[moduleIdx].rfProtocol == ACCST_RF_PROTO_D16)) {
if (isModuleR9M(moduleIdx) || (isModuleXJT(moduleIdx) && g_model.moduleData[moduleIdx].rfProtocol == MODULE_SUBTYPE_PXX1_ACCST_D16)) {
if (event == EVT_KEY_BREAK(KEY_ENTER)) {
uint8_t default_selection = 0; // R9M_LBT should default to 0 as available options are variables
if (isModuleR9M_LBT(moduleIdx)) {
@ -1096,8 +1097,8 @@ void menuModelSetup(event_t event)
break;
}
case ITEM_MODEL_INTERNAL_MODULE_FAILSAFE:
case ITEM_MODEL_EXTERNAL_MODULE_FAILSAFE:
case ITEM_MODEL_SETUP_INTERNAL_MODULE_FAILSAFE:
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_FAILSAFE:
{
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
ModuleData & moduleData = g_model.moduleData[moduleIdx];
@ -1138,7 +1139,7 @@ void menuModelSetup(event_t event)
}
break;
case ITEM_MODEL_EXTERNAL_MODULE_OPTIONS:
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_OPTIONS:
{
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
#if defined(MULTIMODULE)
@ -1151,15 +1152,15 @@ void menuModelSetup(event_t event)
if (pdef->optionsstr)
lcdDrawText(INDENT_WIDTH, y, pdef->optionsstr);
if (multi_proto == MM_RF_PROTO_FS_AFHDS2A)
if (multi_proto == MODULE_SUBTYPE_MULTI_FS_AFHDS2A)
optionValue = 50 + 5 * optionValue;
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, optionValue, LEFT | attr);
if (attr) {
if (multi_proto == MM_RF_PROTO_FS_AFHDS2A) {
if (multi_proto == MODULE_SUBTYPE_MULTI_FS_AFHDS2A) {
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, 0, 70);
}
else if (multi_proto == MM_RF_PROTO_OLRS) {
else if (multi_proto == MODULE_SUBTYPE_MULTI_OLRS) {
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -1, 7);
}
else {
@ -1184,7 +1185,7 @@ void menuModelSetup(event_t event)
}
break;
case ITEM_MODEL_EXTERNAL_MODULE_POWER:
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_POWER:
{
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
if (isModuleR9M(moduleIdx)) {
@ -1214,13 +1215,13 @@ void menuModelSetup(event_t event)
}
#if defined (MULTIMODULE)
case ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND:
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_DSM2)
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_AUTOBIND:
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MODULE_SUBTYPE_MULTI_DSM2)
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode, MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_DSM_AUTODTECT, attr, event);
else
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode, MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_AUTOBIND, attr, event);
break;
case ITEM_MODEL_EXTERNAL_MODULE_STATUS:
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_STATUS:
{
lcdDrawTextAlignedLeft(y, STR_MODULE_STATUS);
char statusText[64];
@ -1228,7 +1229,7 @@ void menuModelSetup(event_t event)
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, statusText);
break;
}
case ITEM_MODEL_EXTERNAL_MODULE_SYNCSTATUS: {
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_SYNCSTATUS: {
lcdDrawTextAlignedLeft(y, STR_MODULE_SYNC);
char statusText[64];
@ -1249,12 +1250,12 @@ void menuModelSetup(event_t event)
if (old_editMode > 0 && s_editMode == 0) {
switch(menuVerticalPosition) {
case ITEM_MODEL_INTERNAL_MODULE_BIND:
case ITEM_MODEL_SETUP_INTERNAL_MODULE_BIND:
if (menuHorizontalPosition == 0)
checkModelIdUnique(g_eeGeneral.currModel, INTERNAL_MODULE);
break;
case ITEM_MODEL_EXTERNAL_MODULE_BIND:
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_BIND:
if (menuHorizontalPosition == 0)
checkModelIdUnique(g_eeGeneral.currModel, EXTERNAL_MODULE);
break;

View file

@ -214,9 +214,9 @@ void menuModelTelemetryFrsky(event_t event)
case ITEM_TELEMETRY_RSSI_LABEL:
#if defined(MULTIMODULE)
if (g_model.moduleData[INTERNAL_MODULE].type != MODULE_TYPE_PXX_XJT &&
if (g_model.moduleData[INTERNAL_MODULE].type != MODULE_TYPE_PXX1_XJT &&
g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_MULTIMODULE &&
g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false) == MM_RF_PROTO_FS_AFHDS2A)
g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false) == MODULE_SUBTYPE_MULTI_FS_AFHDS2A)
lcdDrawTextAlignedLeft(y, "RSNR");
else
#endif

View file

@ -941,9 +941,9 @@ bool menuModelSetup(event_t event)
}
}
else if (isModuleXJT(INTERNAL_MODULE)) {
g_model.moduleData[INTERNAL_MODULE].rfProtocol = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].rfProtocol, ACCST_RF_PROTO_D16, ACCST_RF_PROTO_LAST, EE_MODEL, isRfProtocolAvailable);
g_model.moduleData[INTERNAL_MODULE].rfProtocol = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].rfProtocol, MODULE_SUBTYPE_PXX1_ACCST_D16, MODULE_SUBTYPE_PXX1_LAST, EE_MODEL, isRfProtocolAvailable);
if (checkIncDec_Ret) {
g_model.moduleData[0].type = MODULE_TYPE_PXX_XJT;
g_model.moduleData[0].type = MODULE_TYPE_PXX1_XJT;
g_model.moduleData[0].channelsStart = 0;
g_model.moduleData[0].channelsCount = defaultModuleChannels_M8(INTERNAL_MODULE);
}
@ -1161,15 +1161,15 @@ bool menuModelSetup(event_t event)
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX);
#if defined(MULTIMODULE)
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
int multiRfProto = g_model.moduleData[EXTERNAL_MODULE].multi.customProto == 1 ? MM_RF_PROTO_CUSTOM : g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
CHECK_INCDEC_MODELVAR(event, multiRfProto, MM_RF_PROTO_FIRST, MM_RF_PROTO_LAST);
int multiRfProto = g_model.moduleData[EXTERNAL_MODULE].multi.customProto == 1 ? MODULE_SUBTYPE_MULTI_CUSTOM : g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
CHECK_INCDEC_MODELVAR(event, multiRfProto, MODULE_SUBTYPE_MULTI_FIRST, MODULE_SUBTYPE_MULTI_LAST);
if (checkIncDec_Ret) {
g_model.moduleData[EXTERNAL_MODULE].multi.customProto = (multiRfProto == MM_RF_PROTO_CUSTOM);
g_model.moduleData[EXTERNAL_MODULE].multi.customProto = (multiRfProto == MODULE_SUBTYPE_MULTI_CUSTOM);
if (!g_model.moduleData[EXTERNAL_MODULE].multi.customProto)
g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(multiRfProto);
g_model.moduleData[EXTERNAL_MODULE].subType = 0;
// Sensible default for DSM2 (same as for ppm): 7ch@22ms + Autodetect settings enabled
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_DSM2) {
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MODULE_SUBTYPE_MULTI_DSM2) {
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 1;
}
else {
@ -1189,7 +1189,7 @@ bool menuModelSetup(event_t event)
g_model.moduleData[EXTERNAL_MODULE].subType = newR9MType;
}
else {
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, ACCST_RF_PROTO_D16, ACCST_RF_PROTO_LAST);
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, MODULE_SUBTYPE_PXX1_ACCST_D16, MODULE_SUBTYPE_PXX1_LAST);
}
if (checkIncDec_Ret) {
g_model.moduleData[EXTERNAL_MODULE].channelsStart = 0;
@ -1394,7 +1394,7 @@ bool menuModelSetup(event_t event)
if (attr && l_posHorz>0) {
if (s_editMode>0) {
if (l_posHorz == 1) {
if (isModuleR9M(moduleIdx) || (isModuleXJT(moduleIdx) && g_model.moduleData[moduleIdx].rfProtocol == ACCST_RF_PROTO_D16)) {
if (isModuleR9M(moduleIdx) || (isModuleXJT(moduleIdx) && g_model.moduleData[moduleIdx].rfProtocol == MODULE_SUBTYPE_PXX1_ACCST_D16)) {
if (event == EVT_KEY_BREAK(KEY_ENTER)) {
uint8_t default_selection = 0; // R9M_LBT should default to 0 as available options are variables
if (isModuleR9M_LBT(moduleIdx)) {
@ -1501,15 +1501,15 @@ bool menuModelSetup(event_t event)
if (pdef->optionsstr)
lcdDrawText(MENUS_MARGIN_LEFT, y, pdef->optionsstr);
if (multi_proto == MM_RF_PROTO_FS_AFHDS2A)
if (multi_proto == MODULE_SUBTYPE_MULTI_FS_AFHDS2A)
optionValue = 50 + 5 * optionValue;
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, optionValue, LEFT | attr);
if (attr) {
if (multi_proto == MM_RF_PROTO_FS_AFHDS2A) {
if (multi_proto == MODULE_SUBTYPE_MULTI_FS_AFHDS2A) {
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, 0, 70);
}
else if (multi_proto == MM_RF_PROTO_OLRS) {
else if (multi_proto == MODULE_SUBTYPE_MULTI_OLRS) {
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -1, 7);
}
else {
@ -1559,7 +1559,7 @@ bool menuModelSetup(event_t event)
#if defined(MULTIMODULE)
case ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND:
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_DSM2)
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MODULE_SUBTYPE_MULTI_DSM2)
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MULTI_DSM_AUTODTECT);
else
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MULTI_AUTOBIND);

View file

@ -114,7 +114,7 @@ enum MenuModelTelemetryFrskyItems {
#define VARIO_ROWS
#endif
#define RSSI_ROWS LABEL(RSSI), 0, 0, 0,
#define TELEMETRY_TYPE_ROWS (g_model.moduleData[INTERNAL_MODULE].rfProtocol == ACCST_RF_PROTO_OFF && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM) ? (uint8_t)0 : HIDDEN_ROW,
#define TELEMETRY_TYPE_ROWS (g_model.moduleData[INTERNAL_MODULE].rfProtocol == MODULE_SUBTYPE_PXX1_OFF && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM) ? (uint8_t)0 : HIDDEN_ROW,
void onSensorMenu(const char * result)
{
@ -274,7 +274,7 @@ bool menuModelTelemetryFrsky(event_t event)
#if defined(MULTIMODULE)
if (!IS_INTERNAL_MODULE_ON() &&
g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_MULTIMODULE &&
g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false) == MM_RF_PROTO_FS_AFHDS2A)
g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false) == MODULE_SUBTYPE_MULTI_FS_AFHDS2A)
lcdDrawText(MENUS_MARGIN_LEFT, y, "RSNR");
else
#endif

View file

@ -514,7 +514,7 @@ bool isSourceAvailableInResetSpecialFunction(int index)
#if defined(PCBXLITE)
bool isR9MModeAvailable(int mode)
{
#if defined(MODULE_R9M_FLEX_FW)
#if defined(MODULE_R9M_FLEX)
return mode >= MODULE_SUBTYPE_R9M_EUPLUS;
#else
return mode <= MODULE_SUBTYPE_R9M_EU;
@ -524,7 +524,7 @@ bool isR9MModeAvailable(int mode)
#else
bool isR9MModeAvailable(int mode)
{
#if defined(MODULE_R9M_FLEX_FW)
#if defined(MODULE_R9M_FLEX)
return mode < MODULE_SUBTYPE_R9M_EUPLUS;
#else
return true;
@ -532,8 +532,11 @@ bool isR9MModeAvailable(int mode)
}
#endif
bool isPXX2ChannelsCountAllowed(int channels)
bool isPxx2IsrmChannelsCountAllowed(int channels)
{
if (g_model.moduleData[INTERNAL_MODULE].rfProtocol == MODULE_SUBTYPE_PXX1_ACCST_D16)
return (channels <= 8);
else
return (channels % 8 == 0);
}
@ -545,11 +548,11 @@ bool isModuleUSingSport(uint8_t moduleBay, uint8_t moduleType)
case MODULE_TYPE_PPM:
case MODULE_TYPE_DSM2:
case MODULE_TYPE_MULTIMODULE:
case MODULE_TYPE_ACCESS_R9M_LITE:
case MODULE_TYPE_ACCESS_R9M_LITE_PRO:
case MODULE_TYPE_PXX2_R9M_LITE:
case MODULE_TYPE_PXX2_R9M_LITE_PRO:
return false;
case MODULE_TYPE_ACCESS_ISRM:
case MODULE_TYPE_PXX2_ISRM:
if (moduleBay == EXTERNAL_MODULE)
return false;
@ -569,15 +572,15 @@ bool isInternalModuleAvailable(int moduleType)
return true;
#if defined(PXX1) && defined(INTERNAL_MODULE_PXX1)
if (moduleType == MODULE_TYPE_PXX_XJT)
if (moduleType == MODULE_TYPE_PXX1_XJT)
return !isModuleUSingSport(EXTERNAL_MODULE, g_model.moduleData[EXTERNAL_MODULE].type);
#else
if (moduleType == MODULE_TYPE_PXX_XJT)
if (moduleType == MODULE_TYPE_PXX1_XJT)
return false;
#endif
#if defined(PXX2)
if (moduleType == MODULE_TYPE_ACCESS_ISRM)
if (moduleType == MODULE_TYPE_PXX2_ISRM)
#if defined(INTMODULE_USART)
return true;
#else
@ -592,25 +595,25 @@ bool isInternalModuleAvailable(int moduleType)
bool isExternalModuleAvailable(int moduleType)
{
#if !defined(PCBXLITE) && !defined(PCBX9LITE)
if (moduleType == MODULE_TYPE_PXX_R9M_LITE || moduleType == MODULE_TYPE_ACCESS_R9M_LITE || moduleType == MODULE_TYPE_ACCESS_R9M_LITE_PRO)
if (moduleType == MODULE_TYPE_PXX1_R9M_LITE || moduleType == MODULE_TYPE_PXX2_R9M_LITE || moduleType == MODULE_TYPE_PXX2_R9M_LITE_PRO)
return false;
#endif
#if !defined(PXX1)
if (moduleType == MODULE_TYPE_PXX_XJT || moduleType == MODULE_TYPE_PXX_R9M || moduleType == MODULE_TYPE_PXX_R9M_LITE)
if (moduleType == MODULE_TYPE_PXX1_XJT || moduleType == MODULE_TYPE_PXX1_R9M || moduleType == MODULE_TYPE_PXX1_R9M_LITE)
return false;
#endif
#if defined(FRSKY_RELEASE)
if (moduleType == MODULE_TYPE_PXX_R9M)
if (moduleType == MODULE_TYPE_PXX1_R9M)
return false;
#endif
if (moduleType == MODULE_TYPE_ACCESS_ISRM || moduleType == MODULE_TYPE_ACCESS_R9M)
if (moduleType == MODULE_TYPE_PXX2_ISRM || moduleType == MODULE_TYPE_PXX2_R9M)
return false;
#if !defined(PXX2)
if (moduleType == MODULE_TYPE_ACCESS_R9M || moduleType == MODULE_TYPE_ACCESS_R9M_LITE || moduleType == MODULE_TYPE_ACCESS_R9M_LITE_PRO) {
if (moduleType == MODULE_TYPE_PXX2_R9M || moduleType == MODULE_TYPE_PXX2_R9M_LITE || moduleType == MODULE_TYPE_PXX2_R9M_LITE_PRO) {
return false;
}
#endif
@ -651,20 +654,20 @@ bool isExternalModuleAvailable(int moduleType)
bool isRfProtocolAvailable(int protocol)
{
#if defined(CROSSFIRE)
if (protocol != ACCST_RF_PROTO_OFF && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_CROSSFIRE) {
if (protocol != MODULE_SUBTYPE_PXX1_OFF && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_CROSSFIRE) {
return false;
}
#endif
#if defined(MODULE_D16_EU_ONLY_SUPPORT)
if (protocol == ACCST_RF_PROTO_D8) {
if (protocol == MODULE_SUBTYPE_PXX1_ACCST_D8) {
return false;
}
#endif
#if defined(PCBTARANIS) || defined(PCBHORUS)
if (protocol != ACCST_RF_PROTO_OFF && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PXX_R9M) {
if (protocol != MODULE_SUBTYPE_PXX1_OFF && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PXX1_R9M) {
return false;
}
if (protocol != ACCST_RF_PROTO_OFF && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_ACCESS_R9M) {
if (protocol != MODULE_SUBTYPE_PXX1_OFF && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PXX2_R9M) {
return false;
}
#endif
@ -834,36 +837,36 @@ const char STR_SUBTYPE_BUGS_MINI[] = "\006""Std\0 ""BUGS3H";
const mm_protocol_definition multi_protocols[] = {
{MM_RF_PROTO_FLYSKY, 4, false, STR_SUBTYPE_FLYSKY, nullptr},
{MM_RF_PROTO_HUBSAN, 2, false, STR_SUBTYPE_HUBSAN, STR_MULTI_VIDFREQ},
{MM_RF_PROTO_FRSKY, 5, false, STR_SUBTYPE_FRSKY, STR_MULTI_RFTUNE},
{MM_RF_PROTO_HISKY, 1, false, STR_SUBTYPE_HISKY, nullptr},
{MM_RF_PROTO_V2X2, 1, false, STR_SUBTYPE_V2X2, nullptr},
{MM_RF_PROTO_DSM2, 3, false, STR_SUBTYPE_DSM, nullptr},
{MM_RF_PROTO_YD717, 4, false, STR_SUBTYPE_YD717, nullptr},
{MM_RF_PROTO_KN, 1, false, STR_SUBTYPE_KN, nullptr},
{MM_RF_PROTO_SYMAX, 1, false, STR_SUBTYPE_SYMAX, nullptr},
{MM_RF_PROTO_SLT, 4, false, STR_SUBTYPE_SLT, nullptr},
{MM_RF_PROTO_CX10, 6, false, STR_SUBTYPE_CX10, nullptr},
{MM_RF_PROTO_CG023, 1, false, STR_SUBTYPE_CG023, nullptr},
{MM_RF_PROTO_BAYANG, 3, false, STR_SUBTYPE_BAYANG, STR_MULTI_TELEMETRY},
{MM_RF_PROTO_MT99XX, 4, false, STR_SUBTYPE_MT99, nullptr},
{MM_RF_PROTO_MJXQ, 6, false, STR_SUBTYPE_MJXQ, STR_MULTI_RFTUNE},
{MM_RF_PROTO_FY326, 1, false, STR_SUBTYPE_FY326, nullptr},
{MM_RF_PROTO_SFHSS, 0, true, NO_SUBTYPE, STR_MULTI_RFTUNE},
{MM_RF_PROTO_HONTAI, 3, false, STR_SUBTYPE_HONTAI, nullptr},
{MM_RF_PROTO_OLRS, 0, false, NO_SUBTYPE, STR_MULTI_RFPOWER},
{MM_RF_PROTO_FS_AFHDS2A, 3, true, STR_SUBTYPE_AFHDS2A, STR_MULTI_SERVOFREQ},
{MM_RF_PROTO_Q2X2, 2, false, STR_SUBTYPE_Q2X2, nullptr},
{MM_RF_PROTO_WK_2X01, 5, false, STR_SUBTYPE_WK2x01, nullptr},
{MM_RF_PROTO_Q303, 3, false, STR_SUBTYPE_Q303, nullptr},
{MM_RF_PROTO_CABELL, 7, false, STR_SUBTYPE_CABELL, STR_MULTI_OPTION},
{MM_RF_PROTO_H83D, 3, false, STR_SUBTYPE_H83D, nullptr},
{MM_RF_PROTO_CORONA, 2, false, STR_SUBTYPE_CORONA, STR_MULTI_RFTUNE},
{MM_RF_PROTO_HITEC, 2, false, STR_SUBTYPE_HITEC, STR_MULTI_RFTUNE},
{MM_RF_PROTO_E01X, 2, false, STR_SUBTYPE_E01X, nullptr},
{MM_RF_PROTO_GD00X, 1, false, STR_SUBTYPE_GD00X, nullptr},
{MM_RF_PROTO_BUGS_MINI, 1, false, STR_SUBTYPE_BUGS_MINI,nullptr},
{MODULE_SUBTYPE_MULTI_FLYSKY, 4, false, STR_SUBTYPE_FLYSKY, nullptr},
{MODULE_SUBTYPE_MULTI_HUBSAN, 2, false, STR_SUBTYPE_HUBSAN, STR_MULTI_VIDFREQ},
{MODULE_SUBTYPE_MULTI_FRSKY, 5, false, STR_SUBTYPE_FRSKY, STR_MULTI_RFTUNE},
{MODULE_SUBTYPE_MULTI_HISKY, 1, false, STR_SUBTYPE_HISKY, nullptr},
{MODULE_SUBTYPE_MULTI_V2X2, 1, false, STR_SUBTYPE_V2X2, nullptr},
{MODULE_SUBTYPE_MULTI_DSM2, 3, false, STR_SUBTYPE_DSM, nullptr},
{MODULE_SUBTYPE_MULTI_YD717, 4, false, STR_SUBTYPE_YD717, nullptr},
{MODULE_SUBTYPE_MULTI_KN, 1, false, STR_SUBTYPE_KN, nullptr},
{MODULE_SUBTYPE_MULTI_SYMAX, 1, false, STR_SUBTYPE_SYMAX, nullptr},
{MODULE_SUBTYPE_MULTI_SLT, 4, false, STR_SUBTYPE_SLT, nullptr},
{MODULE_SUBTYPE_MULTI_CX10, 6, false, STR_SUBTYPE_CX10, nullptr},
{MODULE_SUBTYPE_MULTI_CG023, 1, false, STR_SUBTYPE_CG023, nullptr},
{MODULE_SUBTYPE_MULTI_BAYANG, 3, false, STR_SUBTYPE_BAYANG, STR_MULTI_TELEMETRY},
{MODULE_SUBTYPE_MULTI_MT99XX, 4, false, STR_SUBTYPE_MT99, nullptr},
{MODULE_SUBTYPE_MULTI_MJXQ, 6, false, STR_SUBTYPE_MJXQ, STR_MULTI_RFTUNE},
{MODULE_SUBTYPE_MULTI_FY326, 1, false, STR_SUBTYPE_FY326, nullptr},
{MODULE_SUBTYPE_MULTI_SFHSS, 0, true, NO_SUBTYPE, STR_MULTI_RFTUNE},
{MODULE_SUBTYPE_MULTI_HONTAI, 3, false, STR_SUBTYPE_HONTAI, nullptr},
{MODULE_SUBTYPE_MULTI_OLRS, 0, false, NO_SUBTYPE, STR_MULTI_RFPOWER},
{MODULE_SUBTYPE_MULTI_FS_AFHDS2A, 3, true, STR_SUBTYPE_AFHDS2A, STR_MULTI_SERVOFREQ},
{MODULE_SUBTYPE_MULTI_Q2X2, 2, false, STR_SUBTYPE_Q2X2, nullptr},
{MODULE_SUBTYPE_MULTI_WK_2X01, 5, false, STR_SUBTYPE_WK2x01, nullptr},
{MODULE_SUBTYPE_MULTI_Q303, 3, false, STR_SUBTYPE_Q303, nullptr},
{MODULE_SUBTYPE_MULTI_CABELL, 7, false, STR_SUBTYPE_CABELL, STR_MULTI_OPTION},
{MODULE_SUBTYPE_MULTI_H83D, 3, false, STR_SUBTYPE_H83D, nullptr},
{MODULE_SUBTYPE_MULTI_CORONA, 2, false, STR_SUBTYPE_CORONA, STR_MULTI_RFTUNE},
{MODULE_SUBTYPE_MULTI_HITEC, 2, false, STR_SUBTYPE_HITEC, STR_MULTI_RFTUNE},
{MODULE_SUBTYPE_MULTI_E01X, 2, false, STR_SUBTYPE_E01X, nullptr},
{MODULE_SUBTYPE_MULTI_GD00X, 1, false, STR_SUBTYPE_GD00X, nullptr},
{MODULE_SUBTYPE_MULTI_BUGS_MINI, 1, false, STR_SUBTYPE_BUGS_MINI,nullptr},
{MM_RF_CUSTOM_SELECTED, 7, true, NO_SUBTYPE, STR_MULTI_OPTION},
// Sentinel and default for protocols not listed above (MM_RF_CUSTOM is 0xff)

View file

@ -54,7 +54,7 @@ bool isSwitchAvailableInCustomFunctions(int swtch);
bool isSwitchAvailableInMixes(int swtch);
bool isSwitchAvailableInTimers(int swtch);
bool isR9MModeAvailable(int mode);
bool isPXX2ChannelsCountAllowed(int channels);
bool isPxx2IsrmChannelsCountAllowed(int channels);
bool isExternalModuleAvailable(int moduleType);
bool isInternalModuleAvailable(int module);
bool isRfProtocolAvailable(int protocol);
@ -116,7 +116,7 @@ void lcdDrawMMM(coord_t x, coord_t y, LcdFlags flags=0);
// model_setup Defines that are used in all uis in the same way
#define INTERNAL_MODULE_CHANNELS_ROWS IF_INTERNAL_MODULE_ON((uint8_t)1)
#define EXTERNAL_MODULE_CHANNELS_ROWS IF_EXTERNAL_MODULE_ON((isModuleDSM2(EXTERNAL_MODULE) || isModuleCrossfire(EXTERNAL_MODULE) || isModuleSBUS(EXTERNAL_MODULE) || (isModuleMultimodule(EXTERNAL_MODULE) && g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) != MM_RF_PROTO_DSM2)) ? (uint8_t)0 : (uint8_t)1)
#define EXTERNAL_MODULE_CHANNELS_ROWS IF_EXTERNAL_MODULE_ON((isModuleDSM2(EXTERNAL_MODULE) || isModuleCrossfire(EXTERNAL_MODULE) || isModuleSBUS(EXTERNAL_MODULE) || (isModuleMultimodule(EXTERNAL_MODULE) && g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) != MODULE_SUBTYPE_MULTI_DSM2)) ? (uint8_t)0 : (uint8_t)1)
#if defined(MULTIMODULE)
@ -127,7 +127,7 @@ void lcdDrawMMM(coord_t x, coord_t y, LcdFlags flags=0);
#define MULTIMODULE_SUBTYPE_ROWS(x) isModuleMultimodule(x) ? MULTIMODULE_RFPROTO_ROWS(x) : HIDDEN_ROW,
#define MULTIMODULE_HAS_SUBTYPE(x) (getMultiProtocolDefinition(x)->maxSubtype > 0)
#define MULTIMODULE_HASOPTIONS(x) (getMultiProtocolDefinition(x)->optionsstr != nullptr)
#define MULTI_MAX_RX_NUM(x) (g_model.moduleData[x].getMultiProtocol(true) == MM_RF_PROTO_OLRS ? 4 : 15)
#define MULTI_MAX_RX_NUM(x) (g_model.moduleData[x].getMultiProtocol(true) == MODULE_SUBTYPE_MULTI_OLRS ? 4 : 15)
#define MULTIMODULE_HASFAILSAFE(x) (isModuleMultimodule(x) && multiModuleStatus.isValid() && multiModuleStatus.supportsFailsafe())
#define MULTIMODULE_OPTIONS_ROW (isModuleMultimodule(EXTERNAL_MODULE) && MULTIMODULE_HASOPTIONS(g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true))) ? (uint8_t) 0: HIDDEN_ROW
@ -153,14 +153,14 @@ const mm_protocol_definition *getMultiProtocolDefinition (uint8_t protocol);
#endif
#define MAX_RX_NUM(x) (isModuleDSM2(x) ? 20 : isModuleMultimodule(x) ? MULTI_MAX_RX_NUM(x) : 63)
#define IS_D8_RX(x) (g_model.moduleData[x].rfProtocol == ACCST_RF_PROTO_D8)
#define IS_R9M_OR_XJTD16(x) ((isModuleXJT(x) && g_model.moduleData[x].rfProtocol== ACCST_RF_PROTO_D16) || isModuleR9M(x))
#define IS_D8_RX(x) (g_model.moduleData[x].rfProtocol == MODULE_SUBTYPE_PXX1_ACCST_D8)
#define IS_R9M_OR_XJTD16(x) ((isModuleXJT(x) && g_model.moduleData[x].rfProtocol== MODULE_SUBTYPE_PXX1_ACCST_D16) || isModuleR9M(x))
#define FAILSAFE_ROWS(x) ((isModuleXJTVariant(x) && HAS_RF_PROTOCOL_FAILSAFE(g_model.moduleData[x].rfProtocol)) || MULTIMODULE_HASFAILSAFE(x) || isModuleR9M(x) || isModuleR9M2(x)) ? (g_model.moduleData[x].failsafeMode==FAILSAFE_CUSTOM ? (uint8_t)1 : (uint8_t)0) : HIDDEN_ROW
#define EXTERNAL_MODULE_OPTION_ROW (isModuleR9M(EXTERNAL_MODULE) || isModuleSBUS(EXTERNAL_MODULE) ? TITLE_ROW : MULTIMODULE_OPTIONS_ROW)
#define EXTERNAL_MODULE_POWER_ROW (isModuleMultimodule(EXTERNAL_MODULE) || isModuleR9M(EXTERNAL_MODULE)) ? (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PXX_R9M_LITE ? TITLE_ROW : (uint8_t) 0) : HIDDEN_ROW
#define EXTERNAL_MODULE_POWER_ROW (isModuleMultimodule(EXTERNAL_MODULE) || isModuleR9M(EXTERNAL_MODULE)) ? (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PXX1_R9M_LITE ? TITLE_ROW : (uint8_t) 0) : HIDDEN_ROW
void editStickHardwareSettings(coord_t x, coord_t y, int idx, event_t event, LcdFlags flags);

View file

@ -225,42 +225,6 @@ enum TelemetrySensorFormula
TELEM_FORMULA_LAST = TELEM_FORMULA_DIST
};
enum VarioSource {
VARIO_SOURCE_VSPEED,
VARIO_SOURCE_A1,
VARIO_SOURCE_A2,
VARIO_SOURCE_DTE,
VARIO_SOURCE_COUNT,
VARIO_SOURCE_LAST = VARIO_SOURCE_COUNT-1
};
enum FrskyUsrProtocols {
USR_PROTO_NONE,
USR_PROTO_FRSKY,
USR_PROTO_WS_HOW_HIGH,
USR_PROTO_LAST = USR_PROTO_WS_HOW_HIGH,
};
enum FrskyCurrentSource {
FRSKY_CURRENT_SOURCE_NONE,
FRSKY_CURRENT_SOURCE_A1,
FRSKY_CURRENT_SOURCE_A2,
FRSKY_CURRENT_SOURCE_A3,
FRSKY_CURRENT_SOURCE_A4,
FRSKY_CURRENT_SOURCE_FAS,
FRSKY_CURRENT_SOURCE_LAST=FRSKY_CURRENT_SOURCE_FAS
};
enum FrskyVoltsSource {
FRSKY_VOLTS_SOURCE_A1,
FRSKY_VOLTS_SOURCE_A2,
FRSKY_VOLTS_SOURCE_A3,
FRSKY_VOLTS_SOURCE_A4,
FRSKY_VOLTS_SOURCE_FAS,
FRSKY_VOLTS_SOURCE_CELLS,
FRSKY_VOLTS_SOURCE_LAST=FRSKY_VOLTS_SOURCE_CELLS
};
enum SwashType {
SWASH_TYPE_NONE,
SWASH_TYPE_120,
@ -275,8 +239,6 @@ enum SwashType {
#define TRIM_MAX 125
#define TRIM_MIN (-TRIM_MAX)
#define ROTARY_ENCODER_MAX 1024
#define TRIMS_ARRAY_SIZE 8
#define TRIM_MODE_NONE 0x1F // 0b11111
@ -288,153 +250,7 @@ enum SwashType {
#define TIMER_COUNTDOWN_START(x) 10
#endif
enum {
ACCST_RF_PROTO_OFF = -1,
ACCST_RF_PROTO_D16,
ACCST_RF_PROTO_D8,
ACCST_RF_PROTO_LR12,
ACCST_RF_PROTO_LAST = ACCST_RF_PROTO_LR12
};
enum {
ACCESS_RF_PROTO_ACCESS,
ACCESS_RF_PROTO_D16,
ACCESS_RF_PROTO_LR12,
ACCESS_RF_PROTO_LAST = ACCESS_RF_PROTO_LR12
};
enum R9MSubTypes
{
MODULE_SUBTYPE_R9M_FCC,
MODULE_SUBTYPE_R9M_EU,
MODULE_SUBTYPE_R9M_EUPLUS,
MODULE_SUBTYPE_R9M_AUPLUS,
MODULE_SUBTYPE_R9M_LAST=MODULE_SUBTYPE_R9M_AUPLUS
};
enum R9MRegion
{
MODULE_R9M_REGION_FCC,
MODULE_R9M_REGION_EU,
MODULE_R9M_REGION_FLEX,
MODULE_R9M_REGION_LAST=MODULE_R9M_REGION_FLEX
};
enum R9MFrenquency
{
MODULE_R9M_FREQ_868MHZ,
MODULE_R9M_FREQ_915MHZ,
MODULE_R9M_FREQ_LAST=MODULE_R9M_FREQ_915MHZ
};
enum MultiModuleRFProtocols {
MM_RF_PROTO_CUSTOM = -1,
MM_RF_PROTO_FIRST = MM_RF_PROTO_CUSTOM,
MM_RF_PROTO_FLYSKY=0,
MM_RF_PROTO_HUBSAN,
MM_RF_PROTO_FRSKY,
MM_RF_PROTO_HISKY,
MM_RF_PROTO_V2X2,
MM_RF_PROTO_DSM2,
MM_RF_PROTO_DEVO,
MM_RF_PROTO_YD717,
MM_RF_PROTO_KN,
MM_RF_PROTO_SYMAX,
MM_RF_PROTO_SLT,
MM_RF_PROTO_CX10,
MM_RF_PROTO_CG023,
MM_RF_PROTO_BAYANG,
MM_RF_PROTO_ESky,
MM_RF_PROTO_MT99XX,
MM_RF_PROTO_MJXQ,
MM_RF_PROTO_SHENQI,
MM_RF_PROTO_FY326,
MM_RF_PROTO_SFHSS,
MM_RF_PROTO_J6PRO,
MM_RF_PROTO_FQ777,
MM_RF_PROTO_ASSAN,
MM_RF_PROTO_HONTAI,
MM_RF_PROTO_OLRS,
MM_RF_PROTO_FS_AFHDS2A,
MM_RF_PROTO_Q2X2,
MM_RF_PROTO_WK_2X01,
MM_RF_PROTO_Q303,
MM_RF_PROTO_GW008,
MM_RF_PROTO_DM002,
MM_RF_PROTO_CABELL,
MM_RF_PROTO_ESKY150,
MM_RF_PROTO_H83D,
MM_RF_PROTO_CORONA,
MM_RF_PROTO_CFLIE,
MM_RF_PROTO_HITEC,
MM_RF_PROTO_WFLY,
MM_RF_PROTO_BUGS,
MM_RF_PROTO_BUGS_MINI,
MM_RF_PROTO_TRAXXAS,
MM_RF_PROTO_NCC1701,
MM_RF_PROTO_E01X,
MM_RF_PROTO_V911S,
MM_RF_PROTO_GD00X,
MM_RF_PROTO_LAST = MM_RF_PROTO_GD00X
};
enum MMDSM2Subtypes {
MM_RF_DSM2_SUBTYPE_DSM2_22,
MM_RF_DSM2_SUBTYPE_DSM2_11,
MM_RF_DSM2_SUBTYPE_DSMX_22,
MM_RF_DSM2_SUBTYPE_DSMX_11,
MM_RF_DSM2_SUBTYPE_AUTO
};
enum MMRFrskySubtypes {
MM_RF_FRSKY_SUBTYPE_D16,
MM_RF_FRSKY_SUBTYPE_D8,
MM_RF_FRSKY_SUBTYPE_D16_8CH,
MM_RF_FRSKY_SUBTYPE_V8,
MM_RF_FRSKY_SUBTYPE_D16_LBT,
MM_RF_FRSKY_SUBTYPE_D16_LBT_8CH
};
#define HAS_RF_PROTOCOL_FAILSAFE(rf) ((rf) == ACCST_RF_PROTO_D16)
#define HAS_RF_PROTOCOL_MODELINDEX(rf) (((rf) == ACCST_RF_PROTO_D16) || ((rf) == ACCST_RF_PROTO_LR12))
enum DSM2Protocols {
DSM2_PROTO_LP45,
DSM2_PROTO_DSM2,
DSM2_PROTO_DSMX,
};
enum ModuleTypes {
MODULE_TYPE_NONE = 0,
MODULE_TYPE_PPM,
MODULE_TYPE_PXX_XJT,
MODULE_TYPE_ACCESS_ISRM,
MODULE_TYPE_DSM2,
MODULE_TYPE_CROSSFIRE,
MODULE_TYPE_MULTIMODULE,
MODULE_TYPE_PXX_R9M,
MODULE_TYPE_ACCESS_R9M,
MODULE_TYPE_PXX_R9M_LITE,
MODULE_TYPE_ACCESS_R9M_LITE,
MODULE_TYPE_ACCESS_R9M_LITE_PRO,
MODULE_TYPE_SBUS,
MODULE_TYPE_MAX = MODULE_TYPE_SBUS,
MODULE_TYPE_COUNT
};
enum AntennaTypes {
XJT_INTERNAL_ANTENNA,
XJT_EXTERNAL_ANTENNA
};
enum FailsafeModes {
FAILSAFE_NOT_SET,
FAILSAFE_HOLD,
FAILSAFE_CUSTOM,
FAILSAFE_NOPULSES,
FAILSAFE_RECEIVER,
FAILSAFE_LAST = FAILSAFE_RECEIVER
};
#include "pulses/modules_constants.h"
enum ThrottleSources {
THROTTLE_SOURCE_THR,

View file

@ -473,7 +473,7 @@ void modelDefault(uint8_t id)
#endif
#if defined(HARDWARE_INTERNAL_MODULE)
g_model.moduleData[INTERNAL_MODULE].type = IS_PXX2_INTERNAL_ENABLED() ? MODULE_TYPE_ACCESS_ISRM : MODULE_TYPE_PXX_XJT;
g_model.moduleData[INTERNAL_MODULE].type = IS_PXX2_INTERNAL_ENABLED() ? MODULE_TYPE_PXX2_ISRM : MODULE_TYPE_PXX1_XJT;
g_model.moduleData[INTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(INTERNAL_MODULE);
#elif defined(PCBSKY9X)
g_model.moduleData[EXTERNAL_MODULE].type = MODULE_TYPE_PPM;

View file

@ -316,7 +316,7 @@ void memswap(void * a, void * b, uint8_t size);
#include "timers.h"
#include "storage/storage.h"
#include "pulses/pulses.h"
#include "pulses/modules.h"
#include "pulses/modules_helpers.h"
#define MASK_CFN_TYPE uint64_t // current max = 64 function switches
#define MASK_FUNC_TYPE uint32_t // current max = 32 functions

View file

@ -0,0 +1,162 @@
enum ModuleType {
MODULE_TYPE_NONE = 0,
MODULE_TYPE_PPM,
MODULE_TYPE_PXX1_XJT,
MODULE_TYPE_PXX2_ISRM,
MODULE_TYPE_DSM2,
MODULE_TYPE_CROSSFIRE,
MODULE_TYPE_MULTIMODULE,
MODULE_TYPE_PXX1_R9M,
MODULE_TYPE_PXX2_R9M,
MODULE_TYPE_PXX1_R9M_LITE,
MODULE_TYPE_PXX2_R9M_LITE,
MODULE_TYPE_PXX2_R9M_LITE_PRO,
MODULE_TYPE_SBUS,
MODULE_TYPE_MAX = MODULE_TYPE_SBUS,
MODULE_TYPE_COUNT
};
/* FrSky XJT / ISRM */
enum ModuleSubtypePXX1 {
MODULE_SUBTYPE_PXX1_OFF = -1,
MODULE_SUBTYPE_PXX1_ACCST_D16,
MODULE_SUBTYPE_PXX1_ACCST_D8,
MODULE_SUBTYPE_PXX1_ACCST_LR12,
MODULE_SUBTYPE_PXX1_LAST = MODULE_SUBTYPE_PXX1_ACCST_LR12
};
enum ModuleSubtypeISRM_PXX2 {
MODULE_SUBTYPE_ISRM_PXX2_ACCESS,
MODULE_SUBTYPE_ISRM_PXX2_ACCST_D16,
MODULE_SUBTYPE_ISRM_PXX2_ACCST_LR12,
MODULE_SUBTYPE_ISRM_PXX2_LAST = MODULE_SUBTYPE_ISRM_PXX2_ACCST_LR12
};
enum ModuleSubtypeR9M_PXX2 {
MODULE_SUBTYPE_R9M_PXX2_ACCESS,
MODULE_SUBTYPE_R9M_PXX2_FCC,
MODULE_SUBTYPE_R9M_PXX2_EU,
#if defined(MODULE_R9M_FLEX)
MODULE_SUBTYPE_R9M_PXX2_FLEX,
#endif
MODULE_SUBTYPE_R9M_PXX2_COUNT,
MODULE_SUBTYPE_R9M_PXX2_LAST = MODULE_SUBTYPE_R9M_PXX2_COUNT - 1
};
enum AntennaTypes {
XJT_INTERNAL_ANTENNA,
XJT_EXTERNAL_ANTENNA
};
#define HAS_RF_PROTOCOL_FAILSAFE(rf) ((rf) == MODULE_SUBTYPE_PXX1_ACCST_D16)
#define HAS_RF_PROTOCOL_MODELINDEX(rf) (((rf) == MODULE_SUBTYPE_PXX1_ACCST_D16) || ((rf) == MODULE_SUBTYPE_PXX1_ACCST_LR12))
/* FrSky R9M / R9M-Lite & co */
enum ModuleSubtypeR9M {
MODULE_SUBTYPE_R9M_FCC,
MODULE_SUBTYPE_R9M_EU,
MODULE_SUBTYPE_R9M_EUPLUS,
MODULE_SUBTYPE_R9M_AUPLUS,
MODULE_SUBTYPE_R9M_LAST=MODULE_SUBTYPE_R9M_AUPLUS
};
enum R9MRegion {
MODULE_R9M_REGION_FCC,
MODULE_R9M_REGION_EU,
MODULE_R9M_REGION_FLEX,
MODULE_R9M_REGION_LAST=MODULE_R9M_REGION_FLEX
};
enum R9MFrenquency
{
MODULE_R9M_FREQ_868MHZ,
MODULE_R9M_FREQ_915MHZ,
MODULE_R9M_FREQ_LAST=MODULE_R9M_FREQ_915MHZ
};
/* Multi module */
enum ModuleSubtypeMulti {
MODULE_SUBTYPE_MULTI_CUSTOM = -1,
MODULE_SUBTYPE_MULTI_FIRST = MODULE_SUBTYPE_MULTI_CUSTOM,
MODULE_SUBTYPE_MULTI_FLYSKY=0,
MODULE_SUBTYPE_MULTI_HUBSAN,
MODULE_SUBTYPE_MULTI_FRSKY,
MODULE_SUBTYPE_MULTI_HISKY,
MODULE_SUBTYPE_MULTI_V2X2,
MODULE_SUBTYPE_MULTI_DSM2,
MODULE_SUBTYPE_MULTI_DEVO,
MODULE_SUBTYPE_MULTI_YD717,
MODULE_SUBTYPE_MULTI_KN,
MODULE_SUBTYPE_MULTI_SYMAX,
MODULE_SUBTYPE_MULTI_SLT,
MODULE_SUBTYPE_MULTI_CX10,
MODULE_SUBTYPE_MULTI_CG023,
MODULE_SUBTYPE_MULTI_BAYANG,
MODULE_SUBTYPE_MULTI_ESky,
MODULE_SUBTYPE_MULTI_MT99XX,
MODULE_SUBTYPE_MULTI_MJXQ,
MODULE_SUBTYPE_MULTI_SHENQI,
MODULE_SUBTYPE_MULTI_FY326,
MODULE_SUBTYPE_MULTI_SFHSS,
MODULE_SUBTYPE_MULTI_J6PRO,
MODULE_SUBTYPE_MULTI_FQ777,
MODULE_SUBTYPE_MULTI_ASSAN,
MODULE_SUBTYPE_MULTI_HONTAI,
MODULE_SUBTYPE_MULTI_OLRS,
MODULE_SUBTYPE_MULTI_FS_AFHDS2A,
MODULE_SUBTYPE_MULTI_Q2X2,
MODULE_SUBTYPE_MULTI_WK_2X01,
MODULE_SUBTYPE_MULTI_Q303,
MODULE_SUBTYPE_MULTI_GW008,
MODULE_SUBTYPE_MULTI_DM002,
MODULE_SUBTYPE_MULTI_CABELL,
MODULE_SUBTYPE_MULTI_ESKY150,
MODULE_SUBTYPE_MULTI_H83D,
MODULE_SUBTYPE_MULTI_CORONA,
MODULE_SUBTYPE_MULTI_CFLIE,
MODULE_SUBTYPE_MULTI_HITEC,
MODULE_SUBTYPE_MULTI_WFLY,
MODULE_SUBTYPE_MULTI_BUGS,
MODULE_SUBTYPE_MULTI_BUGS_MINI,
MODULE_SUBTYPE_MULTI_TRAXXAS,
MODULE_SUBTYPE_MULTI_NCC1701,
MODULE_SUBTYPE_MULTI_E01X,
MODULE_SUBTYPE_MULTI_V911S,
MODULE_SUBTYPE_MULTI_GD00X,
MODULE_SUBTYPE_MULTI_LAST = MODULE_SUBTYPE_MULTI_GD00X
};
enum MMDSM2Subtypes {
MM_RF_DSM2_SUBTYPE_DSM2_22,
MM_RF_DSM2_SUBTYPE_DSM2_11,
MM_RF_DSM2_SUBTYPE_DSMX_22,
MM_RF_DSM2_SUBTYPE_DSMX_11,
MM_RF_DSM2_SUBTYPE_AUTO
};
enum MMRFrskySubtypes {
MM_RF_FRSKY_SUBTYPE_D16,
MM_RF_FRSKY_SUBTYPE_D8,
MM_RF_FRSKY_SUBTYPE_D16_8CH,
MM_RF_FRSKY_SUBTYPE_V8,
MM_RF_FRSKY_SUBTYPE_D16_LBT,
MM_RF_FRSKY_SUBTYPE_D16_LBT_8CH
};
enum ModuleSubtypeDSM2 {
DSM2_PROTO_LP45,
DSM2_PROTO_DSM2,
DSM2_PROTO_DSMX,
};
enum FailsafeModes {
FAILSAFE_NOT_SET,
FAILSAFE_HOLD,
FAILSAFE_CUSTOM,
FAILSAFE_NOPULSES,
FAILSAFE_RECEIVER,
FAILSAFE_LAST = FAILSAFE_RECEIVER
};

View file

@ -21,9 +21,10 @@
#ifndef _MODULES_H_
#define _MODULES_H_
#include "myeeprom.h"
#include "bitfield.h"
#define CROSSFIRE_CHANNELS_COUNT 16
#if defined(MULTIMODULE)
@ -34,7 +35,7 @@ inline bool isModuleMultimodule(uint8_t idx)
inline bool isModuleMultimoduleDSM2(uint8_t idx)
{
return isModuleMultimodule(idx) && g_model.moduleData[idx].getMultiProtocol(true) == MM_RF_PROTO_DSM2;
return isModuleMultimodule(idx) && g_model.moduleData[idx].getMultiProtocol(true) == MODULE_SUBTYPE_MULTI_DSM2;
}
#else
inline bool isModuleMultimodule(uint8_t)
@ -50,17 +51,17 @@ inline bool isModuleMultimoduleDSM2(uint8_t)
inline bool isModuleXJT(uint8_t idx)
{
return g_model.moduleData[idx].type == MODULE_TYPE_PXX_XJT;
return g_model.moduleData[idx].type == MODULE_TYPE_PXX1_XJT;
}
inline bool isModuleXJT2(uint8_t idx)
{
return g_model.moduleData[idx].type == MODULE_TYPE_ACCESS_ISRM;
return g_model.moduleData[idx].type == MODULE_TYPE_PXX2_ISRM;
}
inline bool isModuleXJTVariant(uint8_t idx)
{
return g_model.moduleData[idx].type == MODULE_TYPE_PXX_XJT || g_model.moduleData[idx].type == MODULE_TYPE_ACCESS_ISRM;
return g_model.moduleData[idx].type == MODULE_TYPE_PXX1_XJT || g_model.moduleData[idx].type == MODULE_TYPE_PXX2_ISRM;
}
@ -104,12 +105,12 @@ inline bool isModulePPM(uint8_t idx)
inline bool isModuleR9M(uint8_t idx)
{
return g_model.moduleData[idx].type == MODULE_TYPE_PXX_R9M || g_model.moduleData[idx].type == MODULE_TYPE_PXX_R9M_LITE;
return g_model.moduleData[idx].type == MODULE_TYPE_PXX1_R9M || g_model.moduleData[idx].type == MODULE_TYPE_PXX1_R9M_LITE;
}
inline bool isModuleR9M2(uint8_t idx)
{
return g_model.moduleData[idx].type == MODULE_TYPE_ACCESS_R9M || g_model.moduleData[idx].type == MODULE_TYPE_ACCESS_R9M_LITE || g_model.moduleData[idx].type == MODULE_TYPE_ACCESS_R9M_LITE_PRO;
return g_model.moduleData[idx].type == MODULE_TYPE_PXX2_R9M || g_model.moduleData[idx].type == MODULE_TYPE_PXX2_R9M_LITE || g_model.moduleData[idx].type == MODULE_TYPE_PXX2_R9M_LITE_PRO;
}
@ -148,6 +149,19 @@ inline bool isModulePXX2(uint8_t idx)
return isModuleXJT2(idx) || isModuleR9M2(idx);
}
inline bool isModuleRFAccess(uint8_t idx)
{
if (isModuleXJT2(idx)) {
return g_model.moduleData[idx].subType == MODULE_SUBTYPE_ISRM_PXX2_ACCESS;
}
else if (isModuleR9M2(idx)) {
return g_model.moduleData[idx].subType == MODULE_SUBTYPE_R9M_PXX2_ACCESS;
}
else {
return false;
}
}
#if defined(DSM2)
inline bool isModuleDSM2(uint8_t idx)
{

View file

@ -160,7 +160,7 @@ void sendFrameProtocolHeader(uint8_t port, bool failsafe)
protoByte |= MULTI_SEND_RANGECHECK;
// rfProtocol
if (g_model.moduleData[port].getMultiProtocol(true) == MM_RF_PROTO_DSM2) {
if (g_model.moduleData[port].getMultiProtocol(true) == MODULE_SUBTYPE_MULTI_DSM2) {
// Autobinding should always be done in DSMX 11ms
if (g_model.moduleData[port].multi.autoBindMode && moduleState[port].mode == MODULE_MODE_BIND)
@ -180,7 +180,7 @@ void sendFrameProtocolHeader(uint8_t port, bool failsafe)
if (type >= 25)
type = type + 1;
if (g_model.moduleData[port].getMultiProtocol(true) == MM_RF_PROTO_FRSKY) {
if (g_model.moduleData[port].getMultiProtocol(true) == MODULE_SUBTYPE_MULTI_FRSKY) {
if (subtype == MM_RF_FRSKY_SUBTYPE_D8) {
//D8
type = 3;
@ -204,7 +204,7 @@ void sendFrameProtocolHeader(uint8_t port, bool failsafe)
// Set the highest bit of option byte in AFHDS2A protocol to instruct MULTI to passthrough telemetry bytes instead
// of sending Frsky D telemetry
if (g_model.moduleData[port].getMultiProtocol(false) == MM_RF_PROTO_FS_AFHDS2A)
if (g_model.moduleData[port].getMultiProtocol(false) == MODULE_SUBTYPE_MULTI_FS_AFHDS2A)
optionValue = optionValue | 0x80;
// For custom protocol send unmodified type byte
@ -225,7 +225,7 @@ void sendFrameProtocolHeader(uint8_t port, bool failsafe)
// protocol byte
protoByte |= (type & 0x1f);
if (g_model.moduleData[port].getMultiProtocol(true) != MM_RF_PROTO_DSM2)
if (g_model.moduleData[port].getMultiProtocol(true) != MODULE_SUBTYPE_MULTI_DSM2)
protoByte |= (g_model.moduleData[port].multi.autoBindMode << 6);
sendByteSbus(protoByte);

View file

@ -54,7 +54,7 @@ uint8_t getRequiredProtocol(uint8_t module)
protocol = PROTOCOL_CHANNELS_PPM;
break;
case MODULE_TYPE_PXX_XJT:
case MODULE_TYPE_PXX1_XJT:
#if defined(INTMODULE_USART)
if (module == INTERNAL_MODULE) {
protocol = PROTOCOL_CHANNELS_PXX1_SERIAL;
@ -63,18 +63,18 @@ uint8_t getRequiredProtocol(uint8_t module)
#endif
// no break
case MODULE_TYPE_PXX_R9M:
case MODULE_TYPE_PXX1_R9M:
protocol = PROTOCOL_CHANNELS_PXX1_PULSES;
break;
case MODULE_TYPE_PXX_R9M_LITE:
case MODULE_TYPE_PXX1_R9M_LITE:
protocol = PROTOCOL_CHANNELS_PXX1_SERIAL;
break;
case MODULE_TYPE_ACCESS_ISRM:
case MODULE_TYPE_ACCESS_R9M:
case MODULE_TYPE_ACCESS_R9M_LITE:
case MODULE_TYPE_ACCESS_R9M_LITE_PRO:
case MODULE_TYPE_PXX2_ISRM:
case MODULE_TYPE_PXX2_R9M:
case MODULE_TYPE_PXX2_R9M_LITE:
case MODULE_TYPE_PXX2_R9M_LITE_PRO:
protocol = PROTOCOL_CHANNELS_PXX2;
break;

View file

@ -26,7 +26,7 @@
#include "pulses_common.h"
#include "pulses/pxx1.h"
#include "pulses/pxx2.h"
#include "modules.h"
#include "modules_helpers.h"
#include "ff.h"
#if NUM_MODULES > 1
@ -415,5 +415,5 @@ enum R9MLBTPowerValues {
};
#define BIND_CH9TO16_ALLOWED(idx) (!isModuleR9M_LBT(idx) || g_model.moduleData[idx].pxx.power != R9M_LBT_POWER_25)
#define BIND_TELEM_ALLOWED(idx) (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PXX_R9M) ? (!(IS_TELEMETRY_INTERNAL_MODULE() && moduleIdx == EXTERNAL_MODULE) && (!isModuleR9M_LBT(idx) || g_model.moduleData[idx].pxx.power < R9M_LBT_POWER_200)) : (!(IS_TELEMETRY_INTERNAL_MODULE() && moduleIdx == EXTERNAL_MODULE) && (!isModuleR9M_LBT(idx) || g_model.moduleData[idx].pxx.power < R9M_LITE_LBT_POWER_100))
#define BIND_TELEM_ALLOWED(idx) (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PXX1_R9M) ? (!(IS_TELEMETRY_INTERNAL_MODULE() && moduleIdx == EXTERNAL_MODULE) && (!isModuleR9M_LBT(idx) || g_model.moduleData[idx].pxx.power < R9M_LBT_POWER_200)) : (!(IS_TELEMETRY_INTERNAL_MODULE() && moduleIdx == EXTERNAL_MODULE) && (!isModuleR9M_LBT(idx) || g_model.moduleData[idx].pxx.power < R9M_LITE_LBT_POWER_100))
#endif // _PULSES_H_

View file

@ -38,7 +38,7 @@ uint8_t Pxx2Pulses::addFlag0(uint8_t module)
void Pxx2Pulses::addFlag1(uint8_t module)
{
uint8_t flag1 = g_model.moduleData[module].rfProtocol << 4;
uint8_t flag1 = g_model.moduleData[module].subType << 4;
Pxx2Transport::addByte(flag1);
}
@ -220,7 +220,21 @@ void Pxx2Pulses::setupReceiverSettingsFrame(uint8_t module)
}
}
void Pxx2Pulses::setupBindFrame(uint8_t module)
void Pxx2Pulses::setupAccstBindFrame(uint8_t module)
{
addFrameType(PXX2_TYPE_C_MODULE, PXX2_TYPE_ID_BIND);
Pxx2Transport::addByte(0x01); // DATA0
for (uint8_t i=0; i<PXX2_LEN_RX_NAME; i++) {
Pxx2Transport::addByte(0x00);
}
if (g_model.moduleData[module].type == MODULE_TYPE_PXX2_ISRM)
Pxx2Transport::addByte((g_model.moduleData[module].pxx.receiver_telem_off << 7) + (g_model.moduleData[module].pxx.receiver_telem_off << 6));
else
Pxx2Transport::addByte(0x00);
Pxx2Transport::addByte(g_model.header.modelId[module]);
}
void Pxx2Pulses::setupAccessBindFrame(uint8_t module)
{
BindInformation * destination = moduleState[module].bindInformation;
@ -236,13 +250,13 @@ void Pxx2Pulses::setupBindFrame(uint8_t module)
addFrameType(PXX2_TYPE_C_MODULE, PXX2_TYPE_ID_BIND);
if (destination->step == BIND_INFO_REQUEST) {
Pxx2Transport::addByte(0x02);
Pxx2Transport::addByte(0x02); // DATA0
for (uint8_t i=0; i<PXX2_LEN_RX_NAME; i++) {
Pxx2Transport::addByte(destination->candidateReceiversNames[destination->selectedReceiverIndex][i]);
}
}
else if (destination->step == BIND_START) {
Pxx2Transport::addByte(0x01);
Pxx2Transport::addByte(0x01); // DATA0
for (uint8_t i=0; i<PXX2_LEN_RX_NAME; i++) {
Pxx2Transport::addByte(destination->candidateReceiversNames[destination->selectedReceiverIndex][i]);
}
@ -250,7 +264,7 @@ void Pxx2Pulses::setupBindFrame(uint8_t module)
Pxx2Transport::addByte(g_model.header.modelId[module]);
}
else {
Pxx2Transport::addByte(0x00);
Pxx2Transport::addByte(0x00); // DATA0
for (uint8_t i=0; i<PXX2_LEN_REGISTRATION_ID; i++) {
Pxx2Transport::addByte(zchar2char(g_model.modelRegistrationID[i]));
}
@ -343,7 +357,10 @@ void Pxx2Pulses::setupFrame(uint8_t module)
setupRegisterFrame(module);
break;
case MODULE_MODE_BIND:
setupBindFrame(module);
if (g_model.moduleData[module].subType == MODULE_SUBTYPE_ISRM_PXX2_ACCESS || g_model.moduleData[module].subType == MODULE_SUBTYPE_R9M_PXX2_ACCESS)
setupAccessBindFrame(module);
else
setupAccstBindFrame(module);
break;
case MODULE_MODE_RESET:
setupResetFrame(module);

View file

@ -198,7 +198,9 @@ class Pxx2Pulses: public Pxx2Transport {
void setupRegisterFrame(uint8_t module);
void setupBindFrame(uint8_t module);
void setupAccstBindFrame(uint8_t module);
void setupAccessBindFrame(uint8_t module);
void setupResetFrame(uint8_t module);

View file

@ -1059,7 +1059,7 @@ void convertModelData_216_to_217(ModelData &model)
}
#if defined(PCBTARANIS)
newModel.moduleData[INTERNAL_MODULE].type = MODULE_TYPE_PXX_XJT;
newModel.moduleData[INTERNAL_MODULE].type = MODULE_TYPE_PXX1_XJT;
#endif
newModel.moduleData[EXTERNAL_MODULE].type = oldModel.externalModule;
@ -1140,7 +1140,7 @@ void convertModelData_217_to_218(ModelData &model)
for (int i=0; i<MAX_OUTPUT_CHANNELS; i++) {
newModel.limitData[i] = oldModel.limitData[i];
#if defined(PCBTARANIS)
if (newModel.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_PXX_XJT || newModel.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PXX_XJT) {
if (newModel.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_PXX1_XJT || newModel.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PXX1_XJT) {
newModel.limitData[i].ppmCenter = (oldModel.limitData[i].ppmCenter * 612) / 1024;
}
#endif

View file

@ -180,9 +180,9 @@ void convertModelData_218_to_219(ModelData &model)
for (int i=0; i<NUM_MODULES; i++) {
memcpy(&newModel.moduleData[i], &oldModel.moduleData[i], 4);
memcpy(((uint8_t *)&newModel.moduleData[i]) + 4, ((uint8_t *)&oldModel.moduleData[i]) + 64 + 4, 2);
if (newModel.moduleData[i].type >= MODULE_TYPE_ACCESS_ISRM)
if (newModel.moduleData[i].type >= MODULE_TYPE_PXX2_ISRM)
newModel.moduleData[i].type += 1;
if (newModel.moduleData[i].type >= MODULE_TYPE_ACCESS_R9M)
if (newModel.moduleData[i].type >= MODULE_TYPE_PXX2_R9M)
newModel.moduleData[i].type += 4;
}

View file

@ -56,8 +56,8 @@ void preModelLoad()
#if defined(PCBTARANIS) || defined(PCBHORUS)
static void fixUpModel()
{
// Ensure that when rfProtocol is ACCST_RF_PROTO_OFF the type of the module is MODULE_TYPE_NONE
if (g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_PXX_XJT && g_model.moduleData[INTERNAL_MODULE].rfProtocol == ACCST_RF_PROTO_OFF)
// Ensure that when rfProtocol is MODULE_SUBTYPE_PXX1_OFF the type of the module is MODULE_TYPE_NONE
if (g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_PXX1_XJT && g_model.moduleData[INTERNAL_MODULE].rfProtocol == MODULE_SUBTYPE_PXX1_OFF)
g_model.moduleData[INTERNAL_MODULE].type = MODULE_TYPE_NONE;
}
#endif

View file

@ -214,7 +214,7 @@ extern "C" void EXTMODULE_USART_IRQHandler(void)
void extmodulePxx2Start()
{
extmoduleInvertedSerialStart(g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_ACCESS_R9M_LITE_PRO ? 450000 : 230400);
extmoduleInvertedSerialStart(g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PXX2_R9M_LITE_PRO ? 450000 : 230400);
}
#else
void extmodulePxx2Start()

View file

@ -53,9 +53,9 @@ enum MultiBufferState : uint8_t {
MultiBufferState guessProtocol()
{
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false) == MM_RF_PROTO_DSM2)
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false) == MODULE_SUBTYPE_MULTI_DSM2)
return SpektrumTelemetryFallback;
else if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false) == MM_RF_PROTO_FS_AFHDS2A)
else if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false) == MODULE_SUBTYPE_MULTI_FS_AFHDS2A)
return FlyskyTelemetryFallback;
else
return FrskyTelemetryFallback;

View file

@ -373,7 +373,7 @@ void processSpektrumPacket(const uint8_t *packet)
void processDSMBindPacket(const uint8_t *packet)
{
uint32_t debugval;
if (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_MULTIMODULE && g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_DSM2
if (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_MULTIMODULE && g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MODULE_SUBTYPE_MULTI_DSM2
&& g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode) {
int channels = packet[5];
@ -400,7 +400,7 @@ void processDSMBindPacket(const uint8_t *packet)
setTelemetryValue(TELEM_PROTO_SPEKTRUM, (I2C_PSEUDO_TX << 8) + 4, 0, 0, debugval, UNIT_RAW, 0);
/* Finally stop binding as the rx just told us that it is bound */
if (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_MULTIMODULE && g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_DSM2 && moduleState[EXTERNAL_MODULE].mode == MODULE_MODE_BIND) {
if (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_MULTIMODULE && g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MODULE_SUBTYPE_MULTI_DSM2 && moduleState[EXTERNAL_MODULE].mode == MODULE_MODE_BIND) {
multiBindStatus=MULTI_BIND_FINISHED;
}
}

View file

@ -107,7 +107,7 @@ void frskyDSetDefault(int index, uint16_t id);
extern uint8_t telemetryProtocol;
#if defined (MULTIMODULE)
#define IS_D16_MULTI() ((g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false) == MM_RF_PROTO_FRSKY) && (g_model.moduleData[EXTERNAL_MODULE].subType == MM_RF_FRSKY_SUBTYPE_D16 || g_model.moduleData[EXTERNAL_MODULE].subType == MM_RF_FRSKY_SUBTYPE_D16_8CH))
#define IS_D16_MULTI() ((g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false) == MODULE_SUBTYPE_MULTI_FRSKY) && (g_model.moduleData[EXTERNAL_MODULE].subType == MM_RF_FRSKY_SUBTYPE_D16 || g_model.moduleData[EXTERNAL_MODULE].subType == MM_RF_FRSKY_SUBTYPE_D16_8CH))
#define IS_FRSKY_SPORT_PROTOCOL() (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT || (telemetryProtocol == PROTOCOL_TELEMETRY_MULTIMODULE && IS_D16_MULTI()))
#else
#define IS_FRSKY_SPORT_PROTOCOL() (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT)
@ -238,7 +238,7 @@ extern Fifo<uint8_t, LUA_TELEMETRY_INPUT_FIFO_SIZE> * luaInputTelemetryFifo;
#endif
#if defined(STM32)
#define IS_TELEMETRY_INTERNAL_MODULE() (g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_PXX_XJT)
#define IS_TELEMETRY_INTERNAL_MODULE() (g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_PXX1_XJT)
#else
#define IS_TELEMETRY_INTERNAL_MODULE() (false)
#endif

View file

@ -47,7 +47,7 @@ TEST(Conversions, ConversionX9DPFrom22)
EXPECT_EQ(SWASH_TYPE_120X, g_model.swashR.type);
EXPECT_EQ(10, g_model.flightModeData[0].gvars[0]);
EXPECT_ZSTREQ("Tes", g_model.gvars[0].name);
EXPECT_EQ(MODULE_TYPE_PXX_R9M, g_model.moduleData[EXTERNAL_MODULE].type);
EXPECT_EQ(MODULE_TYPE_PXX1_R9M, g_model.moduleData[EXTERNAL_MODULE].type);
EXPECT_EQ(MODULE_SUBTYPE_R9M_FCC, g_model.moduleData[EXTERNAL_MODULE].subType);
EXPECT_ZSTREQ("Thr", g_model.inputNames[0]);
EXPECT_ZSTREQ("Tes", g_model.telemetrySensors[0].label);
@ -66,7 +66,7 @@ TEST(Conversions, ConversionX7From22)
eeLoadModel(0);
EXPECT_ZSTREQ("Test", g_model.header.name);
EXPECT_EQ(MODULE_TYPE_PXX_R9M, g_model.moduleData[EXTERNAL_MODULE].type);
EXPECT_EQ(MODULE_TYPE_PXX1_R9M, g_model.moduleData[EXTERNAL_MODULE].type);
EXPECT_EQ(MODULE_SUBTYPE_R9M_EU, g_model.moduleData[EXTERNAL_MODULE].subType);
EXPECT_EQ(80, g_model.mixData[0].weight);
EXPECT_EQ(80, g_model.expoData[0].weight);
@ -111,7 +111,7 @@ TEST(Conversions, ConversionHorusFrom22)
EXPECT_ZSTREQ("Tes", g_model.flightModeData[0].name);
EXPECT_EQ(10, g_model.flightModeData[0].gvars[0]);
EXPECT_ZSTREQ("Tes", g_model.gvars[0].name);
EXPECT_EQ(MODULE_TYPE_PXX_R9M, g_model.moduleData[EXTERNAL_MODULE].type);
EXPECT_EQ(MODULE_TYPE_PXX1_R9M, g_model.moduleData[EXTERNAL_MODULE].type);
EXPECT_EQ(MODULE_SUBTYPE_R9M_EU, g_model.moduleData[EXTERNAL_MODULE].subType);
EXPECT_ZSTREQ("Rud", g_model.inputNames[0]);
EXPECT_ZSTREQ("Tes", g_model.telemetrySensors[0].label);

View file

@ -309,10 +309,6 @@ TEST(FrSkySPORT, frskySetCellVoltage)
//display test
lcdClear();
#if defined(PCBX9D) || defined(PCBX9DP) || defined(PCBX9E)
g_model.voltsSource = FRSKY_VOLTS_SOURCE_A1;
#endif
}
TEST(FrSkySPORT, StrangeCellsBug)
@ -389,10 +385,6 @@ TEST(FrSkySPORT, frskySetCellVoltageTwoSensors)
//display test
lcdClear();
#if defined(PCBX9D) || defined(PCBX9DP) || defined(PCBX9E)
g_model.voltsSource = FRSKY_VOLTS_SOURCE_A1;
#endif
}
void generateSportFasVoltagePacket(uint8_t * packet, uint32_t voltage)

View file

@ -73,7 +73,8 @@ ISTR(R9M_LITE_FCC_POWER_VALUES);
ISTR(R9M_LITE_LBT_POWER_VALUES);
ISTR(TELEMETRY_PROTOCOLS);
ISTR(ACCST_RF_PROTOCOLS);
ISTR(ACCESS_RF_PROTOCOLS);
ISTR(ISRM_PXX2_RF_PROTOCOLS);
ISTR(R9M_PXX2_RF_PROTOCOLS);
ISTR(DSM_PROTOCOLS);
ISTR(VOLTSRC);
ISTR(CURVE_TYPES);

View file

@ -161,7 +161,8 @@ extern const char STR_R9M_LITE_FCC_POWER_VALUES[];
extern const char STR_R9M_LITE_LBT_POWER_VALUES[];
extern const char STR_TELEMETRY_PROTOCOLS[];
extern const char STR_ACCST_RF_PROTOCOLS[];
extern const char STR_ACCESS_RF_PROTOCOLS[];
extern const char STR_ISRM_PXX2_RF_PROTOCOLS[];
extern const char STR_R9M_PXX2_RF_PROTOCOLS[];
extern const char STR_DSM_PROTOCOLS[];
#if defined(MULTIMODULE)

View file

@ -103,14 +103,6 @@
#define LEN_JACKMODES "\007"
#define TR_JACKMODES "Zeptat\0""Audio\0 ""Trenér"
#if defined(PCBXLITES) || defined(PCBX9LITE)
#define LEN_MODULE_PROTOCOLS "\014"
#define TR_MODULE_PROTOCOLS "Vyp\0 ""PPM\0 ""XJT\0 ""ISRM\0 ""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M ACCESS\0 ""R9MLite\0 ""R9ML ACCESS\0""R9M Lite PRO""SBUS\0"
#else
#define LEN_MODULE_PROTOCOLS "\014"
#define TR_MODULE_PROTOCOLS "Vyp\0 ""PPM\0 ""XJT\0 ""XJT ACCESS\0 ""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M ACCESS\0 ""R9MLite\0 ""R9ML ACCESS\0""R9M Lite PRO""SBUS\0"
#endif
#define LEN_TELEMETRY_PROTOCOLS "\017"
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 FrSky D\0 FrSky D (kabel)Spektrum\0 "

View file

@ -104,14 +104,6 @@
#define LEN_JACKMODES "\007"
#define TR_JACKMODES "Popup\0 ""Audio\0 ""Trainer"
#if defined(PCBXLITES) || defined(PCBX9LITE)
#define LEN_MODULE_PROTOCOLS "\014"
#define TR_MODULE_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""ISRM\0 ""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M ACCESS\0 ""R9MLite\0 ""R9ML ACCESS\0""R9M Lite PRO""SBUS\0"
#else
#define LEN_MODULE_PROTOCOLS "\014"
#define TR_MODULE_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""XJT ACCESS\0 ""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M ACCESS\0 ""R9MLite\0 ""R9ML ACCESS\0""R9M Lite PRO""SBUS\0"
#endif
#define LEN_TELEMETRY_PROTOCOLS "\017"
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (Kabel)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"

View file

@ -104,14 +104,6 @@
#define LEN_JACKMODES "\007"
#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer"
#if defined(PCBXLITES) || defined(PCBX9LITE)
#define LEN_MODULE_PROTOCOLS "\014"
#define TR_MODULE_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""ISRM\0 ""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M ACCESS\0 ""R9MLite\0 ""R9ML ACCESS\0""R9M Lite PRO""SBUS\0"
#else
#define LEN_MODULE_PROTOCOLS "\014"
#define TR_MODULE_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""XJT ACCESS\0 ""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M ACCESS\0 ""R9MLite\0 ""R9ML ACCESS\0""R9M Lite PRO""SBUS\0"
#endif
#define LEN_TELEMETRY_PROTOCOLS "\017"
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"

View file

@ -104,14 +104,6 @@
#define LEN_JACKMODES "\007"
#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer"
#if defined(PCBXLITES) || defined(PCBX9LITE)
#define LEN_MODULE_PROTOCOLS "\014"
#define TR_MODULE_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""ISRM\0 ""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M ACCESS\0 ""R9MLite\0 ""R9ML ACCESS\0""R9M Lite PRO""SBUS\0"
#else
#define LEN_MODULE_PROTOCOLS "\014"
#define TR_MODULE_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""XJT ACCESS\0 ""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M ACCESS\0 ""R9MLite\0 ""R9ML ACCESS\0""R9M Lite PRO""SBUS\0"
#endif
#define LEN_TELEMETRY_PROTOCOLS "\017"
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"

View file

@ -104,14 +104,6 @@
#define LEN_JACKMODES "\007"
#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer"
#if defined(PCBXLITES) || defined(PCBX9LITE)
#define LEN_MODULE_PROTOCOLS "\014"
#define TR_MODULE_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""ISRM\0 ""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M ACCESS\0 ""R9MLite\0 ""R9ML ACCESS\0""R9M Lite PRO""SBUS\0"
#else
#define LEN_MODULE_PROTOCOLS "\014"
#define TR_MODULE_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""XJT ACCESS\0 ""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M ACCESS\0 ""R9MLite\0 ""R9ML ACCESS\0""R9M Lite PRO""SBUS\0"
#endif
#define LEN_TELEMETRY_PROTOCOLS "\017"
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"

View file

@ -104,14 +104,6 @@
#define LEN_JACKMODES "\007"
#define TR_JACKMODES "Demander""Audio\0 ""Ecolage"
#if defined(PCBXLITES) || defined(PCBX9LITE)
#define LEN_MODULE_PROTOCOLS "\014"
#define TR_MODULE_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""ISRM\0 ""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M ACCESS\0 ""R9MLite\0 ""R9ML ACCESS\0""R9M Lite PRO""SBUS\0"
#else
#define LEN_MODULE_PROTOCOLS "\014"
#define TR_MODULE_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""XJT ACCESS\0 ""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M ACCESS\0 ""R9MLite\0 ""R9ML ACCESS\0""R9M Lite PRO""SBUS\0"
#endif
#define LEN_TELEMETRY_PROTOCOLS "\017"
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"

View file

@ -104,14 +104,6 @@
#define LEN_JACKMODES "\007"
#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer"
#if defined(PCBXLITES) || defined(PCBX9LITE)
#define LEN_MODULE_PROTOCOLS "\014"
#define TR_MODULE_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""ISRM\0 ""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M ACCESS\0 ""R9MLite\0 ""R9ML ACCESS\0""R9M Lite PRO""SBUS\0"
#else
#define LEN_MODULE_PROTOCOLS "\014"
#define TR_MODULE_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""XJT ACCESS\0 ""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M ACCESS\0 ""R9MLite\0 ""R9ML ACCESS\0""R9M Lite PRO""SBUS\0"
#endif
#define LEN_TELEMETRY_PROTOCOLS "\017"
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"

View file

@ -106,14 +106,6 @@
#define LEN_JACKMODES "\007"
#define TR_JACKMODES "Popup\0 ""Audio\0 ""Trainer"
#if defined(PCBXLITES) || defined(PCBX9LITE)
#define LEN_MODULE_PROTOCOLS "\014"
#define TR_MODULE_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""ISRM\0 ""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M ACCESS\0 ""R9MLite\0 ""R9ML ACCESS\0""R9M Lite PRO""SBUS\0"
#else
#define LEN_MODULE_PROTOCOLS "\014"
#define TR_MODULE_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""XJT ACCESS\0 ""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M ACCESS\0 ""R9MLite\0 ""R9ML ACCESS\0""R9M Lite PRO""SBUS\0"
#endif
#define LEN_TELEMETRY_PROTOCOLS "\017"
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"

View file

@ -104,14 +104,6 @@
#define LEN_JACKMODES "\007"
#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer"
#if defined(PCBXLITES) || defined(PCBX9LITE)
#define LEN_MODULE_PROTOCOLS "\014"
#define TR_MODULE_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""ISRM\0 ""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M ACCESS\0 ""R9MLite\0 ""R9ML ACCESS\0""R9M Lite PRO""SBUS\0"
#else
#define LEN_MODULE_PROTOCOLS "\014"
#define TR_MODULE_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""XJT ACCESS\0 ""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M ACCESS\0 ""R9MLite\0 ""R9ML ACCESS\0""R9M Lite PRO""SBUS\0"
#endif
#define LEN_TELEMETRY_PROTOCOLS "\017"
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"

View file

@ -104,14 +104,6 @@
#define LEN_JACKMODES "\007"
#define TR_JACKMODES "Popup\0 ""Audio\0 ""Trainer"
#if defined(PCBXLITES) || defined(PCBX9LITE)
#define LEN_MODULE_PROTOCOLS "\014"
#define TR_MODULE_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""ISRM\0 ""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M ACCESS\0 ""R9MLite\0 ""R9ML ACCESS\0""R9M Lite PRO""SBUS\0"
#else
#define LEN_MODULE_PROTOCOLS "\014"
#define TR_MODULE_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""XJT ACCESS\0 ""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M ACCESS\0 ""R9MLite\0 ""R9ML ACCESS\0""R9M Lite PRO""SBUS\0"
#endif
#define LEN_TELEMETRY_PROTOCOLS "\017"
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"

View file

@ -104,14 +104,6 @@
#define LEN_JACKMODES "\007"
#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer"
#if defined(PCBXLITES) || defined(PCBX9LITE)
#define LEN_MODULE_PROTOCOLS "\014"
#define TR_MODULE_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""ISRM\0 ""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M ACCESS\0 ""R9MLite\0 ""R9ML ACCESS\0""R9M Lite PRO""SBUS\0"
#else
#define LEN_MODULE_PROTOCOLS "\014"
#define TR_MODULE_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""XJT ACCESS\0 ""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M ACCESS\0 ""R9MLite\0 ""R9ML ACCESS\0""R9M Lite PRO""SBUS\0"
#endif
#define LEN_TELEMETRY_PROTOCOLS "\017"
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"

View file

@ -82,11 +82,27 @@
#define TR_VSRCRAW "---\0" TR_STICKS_VSRCRAW TR_POTS_VSRCRAW TR_ROTARY_ENCODERS TR_GYR_VSRCRAW "MAX\0" TR_CYC_VSRCRAW TR_TRIMS_VSRCRAW TR_SW_VSRCRAW TR_EXTRA_VSRCRAW
#if defined(PXX1)
#define LEN_MODULE_PROTOCOLS "\010"
#define TR_MODULE_PROTOCOLS "OFF\0 ""PPM\0 ""XJT\0 ""ISRM\0 ""DSM2\0 ""CRSF\0 ""MULT\0 ""R9M\0 ""R9M2\0 ""R9MLite\0""R9ML2\0 ""R9MLP\0 ""SBUS"
#else
#define LEN_MODULE_PROTOCOLS "\010"
#define TR_MODULE_PROTOCOLS "OFF\0 ""PPM\0 ""ACCST\0 ""ISRM\0 ""DSM2\0 ""CRSF\0 ""MULT\0 ""---\0 ""R9M\0 ""---\0 ""R9ML\0 ""R9MLP\0 ""SBUS\0"
#endif
#define LEN_ACCST_RF_PROTOCOLS "\004"
#define TR_ACCST_RF_PROTOCOLS "OFF\0""D16\0""D8\0 ""LR12"
#define LEN_ACCESS_RF_PROTOCOLS "\006"
#define TR_ACCESS_RF_PROTOCOLS "ACCESS""D16\0 ""LR12"
#if defined(PXX1)
#define LEN_ISRM_PXX2_RF_PROTOCOLS "\006"
#define TR_ISRM_PXX2_RF_PROTOCOLS "ACCESS""D16\0 ""LR12"
#else
#define LEN_ISRM_PXX2_RF_PROTOCOLS "\012"
#define TR_ISRM_PXX2_RF_PROTOCOLS "OFF\0 ""ACCESS\0 ""ACCST D16\0""ACCST LR12"
#endif
#define LEN_R9M_PXX2_RF_PROTOCOLS "\006"
#define TR_R9M_PXX2_RF_PROTOCOLS "ACCESS""FCC\0 ""EU\0 ""Flex"
#define LEN_DSM_PROTOCOLS "\004"
#define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX"

View file

@ -41,7 +41,7 @@ options_sky9x = {
"faichoice": ("FAI", "CHOICE", None),
"nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"),
"multimodule": ("MULTIMODULE", "YES", "NO"),
"flexr9m": ("MODULE_R9M_FLEX_FW", "YES", None)
"flexr9m": ("MODULE_R9M_FLEX", "YES", None)
}
options_ar9x = {
@ -63,7 +63,7 @@ options_ar9x = {
"nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"),
# "rtc": ("RTCLOCK", "YES", "NO"),
"multimodule": ("MULTIMODULE", "YES", "NO"),
"flexr9m": ("MODULE_R9M_FLEX_FW", "YES", None)
"flexr9m": ("MODULE_R9M_FLEX", "YES", None)
}
options_taranis_x9d = {