mirror of
https://github.com/opentx/opentx.git
synced 2025-07-23 16:25:16 +03:00
parent
bca162f4a5
commit
4d07faa8e0
46 changed files with 669 additions and 697 deletions
|
@ -56,53 +56,53 @@ enum PulsesProtocol {
|
||||||
};
|
};
|
||||||
|
|
||||||
enum MultiModuleRFProtocols {
|
enum MultiModuleRFProtocols {
|
||||||
MM_RF_PROTO_FLYSKY=0,
|
MODULE_SUBTYPE_MULTI_FLYSKY=0,
|
||||||
MM_RF_PROTO_FIRST=MM_RF_PROTO_FLYSKY,
|
MODULE_SUBTYPE_MULTI_FIRST=MODULE_SUBTYPE_MULTI_FLYSKY,
|
||||||
MM_RF_PROTO_HUBSAN,
|
MODULE_SUBTYPE_MULTI_HUBSAN,
|
||||||
MM_RF_PROTO_FRSKY,
|
MODULE_SUBTYPE_MULTI_FRSKY,
|
||||||
MM_RF_PROTO_HISKY,
|
MODULE_SUBTYPE_MULTI_HISKY,
|
||||||
MM_RF_PROTO_V2X2,
|
MODULE_SUBTYPE_MULTI_V2X2,
|
||||||
MM_RF_PROTO_DSM2,
|
MODULE_SUBTYPE_MULTI_DSM2,
|
||||||
MM_RF_PROTO_DEVO,
|
MODULE_SUBTYPE_MULTI_DEVO,
|
||||||
MM_RF_PROTO_YD717,
|
MODULE_SUBTYPE_MULTI_YD717,
|
||||||
MM_RF_PROTO_KN,
|
MODULE_SUBTYPE_MULTI_KN,
|
||||||
MM_RF_PROTO_SYMAX,
|
MODULE_SUBTYPE_MULTI_SYMAX,
|
||||||
MM_RF_PROTO_SLT,
|
MODULE_SUBTYPE_MULTI_SLT,
|
||||||
MM_RF_PROTO_CX10,
|
MODULE_SUBTYPE_MULTI_CX10,
|
||||||
MM_RF_PROTO_CG023,
|
MODULE_SUBTYPE_MULTI_CG023,
|
||||||
MM_RF_PROTO_BAYANG,
|
MODULE_SUBTYPE_MULTI_BAYANG,
|
||||||
MM_RF_PROTO_ESky,
|
MODULE_SUBTYPE_MULTI_ESky,
|
||||||
MM_RF_PROTO_MT99XX,
|
MODULE_SUBTYPE_MULTI_MT99XX,
|
||||||
MM_RF_PROTO_MJXQ,
|
MODULE_SUBTYPE_MULTI_MJXQ,
|
||||||
MM_RF_PROTO_SHENQI,
|
MODULE_SUBTYPE_MULTI_SHENQI,
|
||||||
MM_RF_PROTO_FY326,
|
MODULE_SUBTYPE_MULTI_FY326,
|
||||||
MM_RF_PROTO_SFHSS,
|
MODULE_SUBTYPE_MULTI_SFHSS,
|
||||||
MM_RF_PROTO_J6PRO,
|
MODULE_SUBTYPE_MULTI_J6PRO,
|
||||||
MM_RF_PROTO_FQ777,
|
MODULE_SUBTYPE_MULTI_FQ777,
|
||||||
MM_RF_PROTO_ASSAN,
|
MODULE_SUBTYPE_MULTI_ASSAN,
|
||||||
MM_RF_PROTO_HONTAI,
|
MODULE_SUBTYPE_MULTI_HONTAI,
|
||||||
MM_RF_PROTO_OLRS,
|
MODULE_SUBTYPE_MULTI_OLRS,
|
||||||
MM_RF_PROTO_FS_AFHDS2A,
|
MODULE_SUBTYPE_MULTI_FS_AFHDS2A,
|
||||||
MM_RF_PROTO_Q2X2,
|
MODULE_SUBTYPE_MULTI_Q2X2,
|
||||||
MM_RF_PROTO_WK_2X01,
|
MODULE_SUBTYPE_MULTI_WK_2X01,
|
||||||
MM_RF_PROTO_Q303,
|
MODULE_SUBTYPE_MULTI_Q303,
|
||||||
MM_RF_PROTO_GW008,
|
MODULE_SUBTYPE_MULTI_GW008,
|
||||||
MM_RF_PROTO_DM002,
|
MODULE_SUBTYPE_MULTI_DM002,
|
||||||
MM_RF_PROTO_CABELL,
|
MODULE_SUBTYPE_MULTI_CABELL,
|
||||||
MM_RF_PROTO_ESKY150,
|
MODULE_SUBTYPE_MULTI_ESKY150,
|
||||||
MM_RF_PROTO_H83D,
|
MODULE_SUBTYPE_MULTI_H83D,
|
||||||
MM_RF_PROTO_CORONA,
|
MODULE_SUBTYPE_MULTI_CORONA,
|
||||||
MM_RF_PROTO_CFLIE,
|
MODULE_SUBTYPE_MULTI_CFLIE,
|
||||||
MM_RF_PROTO_HITEC,
|
MODULE_SUBTYPE_MULTI_HITEC,
|
||||||
MM_RF_PROTO_WFLY,
|
MODULE_SUBTYPE_MULTI_WFLY,
|
||||||
MM_RF_PROTO_BUGS,
|
MODULE_SUBTYPE_MULTI_BUGS,
|
||||||
MM_RF_PROTO_BUGS_MINI,
|
MODULE_SUBTYPE_MULTI_BUGS_MINI,
|
||||||
MM_RF_PROTO_TRAXXAS,
|
MODULE_SUBTYPE_MULTI_TRAXXAS,
|
||||||
MM_RF_PROTO_NCC1701,
|
MODULE_SUBTYPE_MULTI_NCC1701,
|
||||||
MM_RF_PROTO_E01X,
|
MODULE_SUBTYPE_MULTI_E01X,
|
||||||
MM_RF_PROTO_V911S,
|
MODULE_SUBTYPE_MULTI_V911S,
|
||||||
MM_RF_PROTO_GD00X,
|
MODULE_SUBTYPE_MULTI_GD00X,
|
||||||
MM_RF_PROTO_LAST = MM_RF_PROTO_GD00X
|
MODULE_SUBTYPE_MULTI_LAST = MODULE_SUBTYPE_MULTI_GD00X
|
||||||
};
|
};
|
||||||
|
|
||||||
enum TrainerProtocol {
|
enum TrainerProtocol {
|
||||||
|
@ -113,7 +113,7 @@ enum TrainerProtocol {
|
||||||
TRAINER_MASTER_SBUS_BATT_COMPARTMENT
|
TRAINER_MASTER_SBUS_BATT_COMPARTMENT
|
||||||
};
|
};
|
||||||
|
|
||||||
enum R9MSubTypes {
|
enum ModuleSubtypeR9M {
|
||||||
MODULE_SUBTYPE_R9M_FCC,
|
MODULE_SUBTYPE_R9M_FCC,
|
||||||
MODULE_SUBTYPE_R9M_EU,
|
MODULE_SUBTYPE_R9M_EU,
|
||||||
MODULE_SUBTYPE_R9M_EUPLUS,
|
MODULE_SUBTYPE_R9M_EUPLUS,
|
||||||
|
|
|
@ -69,34 +69,34 @@ static const QStringList NO_SUBTYPE {STR_MULTI_DEFAULT};
|
||||||
// Table is designed to be shared with gui_common_arm.cpp
|
// Table is designed to be shared with gui_common_arm.cpp
|
||||||
|
|
||||||
const Multiprotocols multiProtocols {
|
const Multiprotocols multiProtocols {
|
||||||
{MM_RF_PROTO_FLYSKY, 4, false, STR_SUBTYPE_FLYSKY, nullptr},
|
{MODULE_SUBTYPE_MULTI_FLYSKY, 4, false, STR_SUBTYPE_FLYSKY, nullptr},
|
||||||
{MM_RF_PROTO_HUBSAN, 2, false, STR_SUBTYPE_HUBSAN, STR_MULTI_VIDFREQ},
|
{MODULE_SUBTYPE_MULTI_HUBSAN, 2, false, STR_SUBTYPE_HUBSAN, STR_MULTI_VIDFREQ},
|
||||||
{MM_RF_PROTO_FRSKY, 5, false, STR_SUBTYPE_FRSKY, STR_MULTI_RFTUNE},
|
{MODULE_SUBTYPE_MULTI_FRSKY, 5, false, STR_SUBTYPE_FRSKY, STR_MULTI_RFTUNE},
|
||||||
{MM_RF_PROTO_HISKY, 1, false, STR_SUBTYPE_HISKY, nullptr},
|
{MODULE_SUBTYPE_MULTI_HISKY, 1, false, STR_SUBTYPE_HISKY, nullptr},
|
||||||
{MM_RF_PROTO_V2X2, 1, false, STR_SUBTYPE_V2X2, nullptr},
|
{MODULE_SUBTYPE_MULTI_V2X2, 1, false, STR_SUBTYPE_V2X2, nullptr},
|
||||||
{MM_RF_PROTO_DSM2, 3, false, STR_SUBTYPE_DSM, nullptr},
|
{MODULE_SUBTYPE_MULTI_DSM2, 3, false, STR_SUBTYPE_DSM, nullptr},
|
||||||
{MM_RF_PROTO_YD717, 4, false, STR_SUBTYPE_YD717, nullptr},
|
{MODULE_SUBTYPE_MULTI_YD717, 4, false, STR_SUBTYPE_YD717, nullptr},
|
||||||
{MM_RF_PROTO_KN, 1, false, STR_SUBTYPE_KN, nullptr},
|
{MODULE_SUBTYPE_MULTI_KN, 1, false, STR_SUBTYPE_KN, nullptr},
|
||||||
{MM_RF_PROTO_SYMAX, 1, false, STR_SUBTYPE_SYMAX, nullptr},
|
{MODULE_SUBTYPE_MULTI_SYMAX, 1, false, STR_SUBTYPE_SYMAX, nullptr},
|
||||||
{MM_RF_PROTO_SLT, 4, false, STR_SUBTYPE_SLT, nullptr},
|
{MODULE_SUBTYPE_MULTI_SLT, 4, false, STR_SUBTYPE_SLT, nullptr},
|
||||||
{MM_RF_PROTO_CX10, 6, false, STR_SUBTYPE_CX10, nullptr},
|
{MODULE_SUBTYPE_MULTI_CX10, 6, false, STR_SUBTYPE_CX10, nullptr},
|
||||||
{MM_RF_PROTO_CG023, 1, false, STR_SUBTYPE_CG023, nullptr},
|
{MODULE_SUBTYPE_MULTI_CG023, 1, false, STR_SUBTYPE_CG023, nullptr},
|
||||||
{MM_RF_PROTO_BAYANG, 3, false, STR_SUBTYPE_BAYANG, STR_MULTI_TELEMETRY},
|
{MODULE_SUBTYPE_MULTI_BAYANG, 3, false, STR_SUBTYPE_BAYANG, STR_MULTI_TELEMETRY},
|
||||||
{MM_RF_PROTO_MT99XX, 4, false, STR_SUBTYPE_MT99, nullptr},
|
{MODULE_SUBTYPE_MULTI_MT99XX, 4, false, STR_SUBTYPE_MT99, nullptr},
|
||||||
{MM_RF_PROTO_MJXQ, 5, false, STR_SUBTYPE_MJXQ, nullptr},
|
{MODULE_SUBTYPE_MULTI_MJXQ, 5, false, STR_SUBTYPE_MJXQ, nullptr},
|
||||||
{MM_RF_PROTO_FY326, 1, false, STR_SUBTYPE_FY326, nullptr},
|
{MODULE_SUBTYPE_MULTI_FY326, 1, false, STR_SUBTYPE_FY326, nullptr},
|
||||||
{MM_RF_PROTO_SFHSS, 0, true, NO_SUBTYPE, STR_MULTI_RFTUNE},
|
{MODULE_SUBTYPE_MULTI_SFHSS, 0, true, NO_SUBTYPE, STR_MULTI_RFTUNE},
|
||||||
{MM_RF_PROTO_HONTAI, 3, false, STR_SUBTYPE_HONTAI, nullptr},
|
{MODULE_SUBTYPE_MULTI_HONTAI, 3, false, STR_SUBTYPE_HONTAI, nullptr},
|
||||||
{MM_RF_PROTO_OLRS, 0, false, NO_SUBTYPE, STR_MULTI_RFPOWER},
|
{MODULE_SUBTYPE_MULTI_OLRS, 0, false, NO_SUBTYPE, STR_MULTI_RFPOWER},
|
||||||
{MM_RF_PROTO_FS_AFHDS2A, 3, true, STR_SUBTYPE_AFHDS2A, STR_MULTI_SERVOFREQ},
|
{MODULE_SUBTYPE_MULTI_FS_AFHDS2A, 3, true, STR_SUBTYPE_AFHDS2A, STR_MULTI_SERVOFREQ},
|
||||||
{MM_RF_PROTO_Q2X2, 2, false, STR_SUBTYPE_Q2X2, nullptr},
|
{MODULE_SUBTYPE_MULTI_Q2X2, 2, false, STR_SUBTYPE_Q2X2, nullptr},
|
||||||
{MM_RF_PROTO_WK_2X01, 5, false, STR_SUBTYPE_WK2x01, nullptr},
|
{MODULE_SUBTYPE_MULTI_WK_2X01, 5, false, STR_SUBTYPE_WK2x01, nullptr},
|
||||||
{MM_RF_PROTO_Q303, 3, false, STR_SUBTYPE_Q303, nullptr},
|
{MODULE_SUBTYPE_MULTI_Q303, 3, false, STR_SUBTYPE_Q303, nullptr},
|
||||||
{MM_RF_PROTO_CABELL, 7, false, STR_SUBTYPE_CABELL, STR_MULTI_OPTION},
|
{MODULE_SUBTYPE_MULTI_CABELL, 7, false, STR_SUBTYPE_CABELL, STR_MULTI_OPTION},
|
||||||
{MM_RF_PROTO_H83D, 3, false, STR_SUBTYPE_H83D, nullptr},
|
{MODULE_SUBTYPE_MULTI_H83D, 3, false, STR_SUBTYPE_H83D, nullptr},
|
||||||
{MM_RF_PROTO_CORONA, 2, false, STR_SUBTYPE_CORONA, STR_MULTI_RFTUNE},
|
{MODULE_SUBTYPE_MULTI_CORONA, 2, false, STR_SUBTYPE_CORONA, STR_MULTI_RFTUNE},
|
||||||
{MM_RF_PROTO_HITEC, 2, false, STR_SUBTYPE_HITEC, STR_MULTI_RFTUNE},
|
{MODULE_SUBTYPE_MULTI_HITEC, 2, false, STR_SUBTYPE_HITEC, STR_MULTI_RFTUNE},
|
||||||
{MM_RF_PROTO_E01X, 1, false, STR_SUBTYPE_E01X, nullptr},
|
{MODULE_SUBTYPE_MULTI_E01X, 1, false, STR_SUBTYPE_E01X, nullptr},
|
||||||
{MM_RF_CUSTOM_SELECTED, 7, true, STR_SUBTYPE_CUSTOM, STR_MULTI_OPTION},
|
{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)
|
// Sentinel and default for protocols not listed above (MM_RF_CUSTOM is 0xff)
|
||||||
|
|
|
@ -224,7 +224,7 @@ ModulePanel::ModulePanel(QWidget * parent, ModelData & model, ModuleData & modul
|
||||||
ui->protocol->setCurrentIndex(ui->protocol->count()-1);
|
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);
|
ui->multiProtocol->addItem(Multiprotocols::protocolToString(i), i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -398,7 +398,7 @@ void ModulePanel::update()
|
||||||
case PULSES_MULTIMODULE:
|
case PULSES_MULTIMODULE:
|
||||||
mask |= MASK_CHANNELS_RANGE | MASK_RX_NUMBER | MASK_MULTIMODULE | MASK_SUBTYPES;
|
mask |= MASK_CHANNELS_RANGE | MASK_RX_NUMBER | MASK_MULTIMODULE | MASK_SUBTYPES;
|
||||||
max_rx_num = 15;
|
max_rx_num = 15;
|
||||||
if (module.multi.rfProtocol == MM_RF_PROTO_DSM2)
|
if (module.multi.rfProtocol == MODULE_SUBTYPE_MULTI_DSM2)
|
||||||
mask |= MASK_CHANNELS_COUNT;
|
mask |= MASK_CHANNELS_COUNT;
|
||||||
else
|
else
|
||||||
module.channelsCount = 16;
|
module.channelsCount = 16;
|
||||||
|
|
|
@ -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(FRSKY_STICKS "Reverse sticks for FrSky sticks" OFF)
|
||||||
option(NANO "Use nano newlib and binalloc")
|
option(NANO "Use nano newlib and binalloc")
|
||||||
option(NIGHTLY_BUILD_WARNING "Warn this is a nightly build" OFF)
|
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)
|
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.
|
# 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)
|
add_definitions(-DNIGHTLY_BUILD_WARNING)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(MODULE_R9M_FLEX_FW)
|
if(MODULE_R9M_FLEX)
|
||||||
add_definitions(-DMODULE_R9M_FLEX_FW)
|
add_definitions(-DMODULE_R9M_FLEX)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(FRSKY_RELEASE)
|
if(FRSKY_RELEASE)
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <opentx.h>
|
#include "opentx.h"
|
||||||
|
|
||||||
// TODO find why we need this (for REGISTER at least)
|
// TODO find why we need this (for REGISTER at least)
|
||||||
#if defined(PCBXLITE)
|
#if defined(PCBXLITE)
|
||||||
|
@ -32,7 +32,7 @@ uint8_t g_moduleIdx;
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
uint8_t getSwitchWarningsCount()
|
uint8_t getSwitchWarningsCount()
|
||||||
{
|
{
|
||||||
int count = 0;
|
uint8_t count = 0;
|
||||||
for (int i=0; i<NUM_SWITCHES; ++i) {
|
for (int i=0; i<NUM_SWITCHES; ++i) {
|
||||||
if (SWITCH_WARNING_ALLOWED(i)) {
|
if (SWITCH_WARNING_ALLOWED(i)) {
|
||||||
++count;
|
++count;
|
||||||
|
@ -69,19 +69,21 @@ enum MenuModelSetupItems {
|
||||||
ITEM_MODEL_SETUP_PREFLIGHT_LABEL,
|
ITEM_MODEL_SETUP_PREFLIGHT_LABEL,
|
||||||
ITEM_MODEL_SETUP_CHECKLIST_DISPLAY,
|
ITEM_MODEL_SETUP_CHECKLIST_DISPLAY,
|
||||||
ITEM_MODEL_SETUP_THROTTLE_WARNING,
|
ITEM_MODEL_SETUP_THROTTLE_WARNING,
|
||||||
ITEM_MODEL_SETUP_SWITCHES_WARNING,
|
ITEM_MODEL_SETUP_SWITCHES_WARNING1,
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
ITEM_MODEL_SETUP_SWITCHES_WARNING2,
|
ITEM_MODEL_SETUP_SWITCHES_WARNING2,
|
||||||
ITEM_MODEL_SETUP_POTS_WARNING,
|
ITEM_MODEL_SETUP_POTS_WARNING,
|
||||||
#endif
|
#endif
|
||||||
ITEM_MODEL_SETUP_BEEP_CENTER,
|
ITEM_MODEL_SETUP_BEEP_CENTER,
|
||||||
ITEM_MODEL_SETUP_USE_GLOBAL_FUNCTIONS,
|
ITEM_MODEL_SETUP_USE_GLOBAL_FUNCTIONS,
|
||||||
|
#if defined(PXX2)
|
||||||
ITEM_MODEL_SETUP_REGISTRATION_ID,
|
ITEM_MODEL_SETUP_REGISTRATION_ID,
|
||||||
|
#endif
|
||||||
#if defined(HARDWARE_INTERNAL_MODULE)
|
#if defined(HARDWARE_INTERNAL_MODULE)
|
||||||
ITEM_MODEL_SETUP_INTERNAL_MODULE_LABEL,
|
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_CHANNELS,
|
||||||
ITEM_MODEL_SETUP_INTERNAL_MODULE_NPXX2_BIND,
|
ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_BIND,
|
||||||
ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_MODEL_NUM,
|
ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_MODEL_NUM,
|
||||||
#if defined(EXTERNAL_ANTENNA)
|
#if defined(EXTERNAL_ANTENNA)
|
||||||
ITEM_MODEL_SETUP_INTERNAL_MODULE_ANTENNA,
|
ITEM_MODEL_SETUP_INTERNAL_MODULE_ANTENNA,
|
||||||
|
@ -94,14 +96,14 @@ enum MenuModelSetupItems {
|
||||||
ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_RECEIVER_3,
|
ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_RECEIVER_3,
|
||||||
#endif
|
#endif
|
||||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL,
|
ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL,
|
||||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_MODE,
|
ITEM_MODEL_SETUP_EXTERNAL_MODULE_TYPE,
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_SUBTYPE,
|
ITEM_MODEL_SETUP_EXTERNAL_MODULE_SUBTYPE,
|
||||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_STATUS,
|
ITEM_MODEL_SETUP_EXTERNAL_MODULE_STATUS,
|
||||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_SYNCSTATUS,
|
ITEM_MODEL_SETUP_EXTERNAL_MODULE_SYNCSTATUS,
|
||||||
#endif
|
#endif
|
||||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_CHANNELS,
|
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,
|
ITEM_MODEL_SETUP_EXTERNAL_MODULE_PXX2_MODEL_NUM,
|
||||||
#if defined(PCBSKY9X) && defined(REVX)
|
#if defined(PCBSKY9X) && defined(REVX)
|
||||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_OUTPUT_TYPE,
|
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_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_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)
|
#if defined(HARDWARE_INTERNAL_MODULE)
|
||||||
#define CURRENT_MODULE_EDITED(k) (k >= ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL ? EXTERNAL_MODULE : 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)
|
#define SW_WARN_ROWS uint8_t(NAVIGATION_LINE_BY_LINE|(getSwitchWarningsCount()-1)), uint8_t(getSwitchWarningsCount() > 5 ? TITLE_ROW : HIDDEN_ROW)
|
||||||
#endif
|
#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_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 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)
|
#if defined(PCBSKY9X) && defined(REVX)
|
||||||
#define OUTPUT_TYPE_ROWS() (isModulePPM(EXTERNAL_MODULE) ? (uint8_t)0 : HIDDEN_ROW) ,
|
#define OUTPUT_TYPE_ROWS() (isModulePPM(EXTERNAL_MODULE) ? (uint8_t)0 : HIDDEN_ROW) ,
|
||||||
|
@ -182,7 +192,7 @@ enum MenuModelSetupItems {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define PORT_CHANNELS_ROWS(x) (x==EXTERNAL_MODULE ? EXTERNAL_MODULE_CHANNELS_ROWS : 0)
|
#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 POT_WARN_ITEMS() ((g_model.potsWarnMode) ? (uint8_t)(NUM_POTS+NUM_SLIDERS) : (uint8_t)0)
|
||||||
#define TIMER_ROWS 2, 0, 0, 0, 0
|
#define TIMER_ROWS 2, 0, 0, 0, 0
|
||||||
|
@ -515,17 +525,17 @@ void onBluetoothConnectMenu(const char * result)
|
||||||
#if defined(HARDWARE_INTERNAL_MODULE)
|
#if defined(HARDWARE_INTERNAL_MODULE)
|
||||||
#define INTERNAL_MODULE_ROWS \
|
#define INTERNAL_MODULE_ROWS \
|
||||||
LABEL(InternalModule), \
|
LABEL(InternalModule), \
|
||||||
INTERNAL_MODULE_MODE_ROWS, \
|
INTERNAL_MODULE_TYPE_ROWS, \
|
||||||
INTERNAL_MODULE_CHANNELS_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_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_PXX2_MODULE(INTERNAL_MODULE, 0), \
|
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), \
|
||||||
ANTENNA_ROW \
|
ANTENNA_ROW \
|
||||||
IF_INTERNAL_MODULE_ON(FAILSAFE_ROWS(INTERNAL_MODULE)), \
|
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_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), \
|
||||||
IF_PXX2_MODULE(INTERNAL_MODULE, 0), \
|
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), \
|
||||||
IF_PXX2_MODULE(INTERNAL_MODULE, 0),
|
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0),
|
||||||
#else
|
#else
|
||||||
#define INTERNAL_MODULE_ROWS
|
#define INTERNAL_MODULE_ROWS
|
||||||
#endif
|
#endif
|
||||||
|
@ -566,32 +576,33 @@ void menuModelSetup(event_t event)
|
||||||
NUM_STICKS + NUM_POTS + NUM_SLIDERS - 1, // Center beeps
|
NUM_STICKS + NUM_POTS + NUM_SLIDERS - 1, // Center beeps
|
||||||
0, // Global functions
|
0, // Global functions
|
||||||
|
|
||||||
uint8_t((isDefaultModelRegistrationID() || (warningText && popupFunc == runPopupRegister)) ? HIDDEN_ROW : READONLY_ROW), // Registration ID
|
REGISTRATION_ID_ROWS
|
||||||
|
|
||||||
INTERNAL_MODULE_ROWS
|
INTERNAL_MODULE_ROWS
|
||||||
|
|
||||||
LABEL(ExternalModule),
|
LABEL(ExternalModule),
|
||||||
EXTERNAL_MODULE_MODE_ROWS,
|
EXTERNAL_MODULE_TYPE_ROWS,
|
||||||
MULTIMODULE_SUBTYPE_ROWS(EXTERNAL_MODULE)
|
MULTIMODULE_SUBTYPE_ROWS(EXTERNAL_MODULE)
|
||||||
MULTIMODULE_STATUS_ROWS
|
MULTIMODULE_STATUS_ROWS
|
||||||
EXTERNAL_MODULE_CHANNELS_ROWS,
|
EXTERNAL_MODULE_CHANNELS_ROWS,
|
||||||
IF_NOT_PXX2_MODULE(EXTERNAL_MODULE, EXTERNAL_MODULE_BIND_ROWS()), // line reused for PPM: PPM settings
|
IF_NOT_ACCESS_MODULE_RF(EXTERNAL_MODULE, EXTERNAL_MODULE_BIND_ROWS()), // line reused for PPM: PPM settings
|
||||||
IF_PXX2_MODULE(EXTERNAL_MODULE, 0), // RxNum
|
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), // RxNum
|
||||||
IF_NOT_PXX2_MODULE(EXTERNAL_MODULE, EXTERNAL_MODULE_OPTION_ROW),
|
IF_NOT_PXX2_MODULE(EXTERNAL_MODULE, EXTERNAL_MODULE_OPTION_ROW),
|
||||||
MULTIMODULE_MODULE_ROWS
|
MULTIMODULE_MODULE_ROWS
|
||||||
EXTERNAL_MODULE_POWER_ROW,
|
EXTERNAL_MODULE_POWER_ROW,
|
||||||
FAILSAFE_ROWS(EXTERNAL_MODULE),
|
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), // Module options
|
||||||
IF_PXX2_MODULE(EXTERNAL_MODULE, 0), // Receiver 1
|
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), // Receiver 1
|
||||||
IF_PXX2_MODULE(EXTERNAL_MODULE, 0), // Receiver 2
|
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), // Receiver 2
|
||||||
IF_PXX2_MODULE(EXTERNAL_MODULE, 0), // Receiver 3
|
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), // Receiver 3
|
||||||
|
|
||||||
TRAINER_ROWS
|
TRAINER_ROWS
|
||||||
});
|
});
|
||||||
#else
|
#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,
|
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),
|
LABEL(ExternalModule),
|
||||||
EXTERNAL_MODULE_MODE_ROWS,
|
EXTERNAL_MODULE_TYPE_ROWS,
|
||||||
MULTIMODULE_SUBTYPE_ROWS(EXTERNAL_MODULE)
|
MULTIMODULE_SUBTYPE_ROWS(EXTERNAL_MODULE)
|
||||||
MULTIMODULE_STATUS_ROWS
|
MULTIMODULE_STATUS_ROWS
|
||||||
EXTERNAL_MODULE_CHANNELS_ROWS,
|
EXTERNAL_MODULE_CHANNELS_ROWS,
|
||||||
|
@ -800,7 +811,7 @@ void menuModelSetup(event_t event)
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case ITEM_MODEL_SETUP_SWITCHES_WARNING:
|
case ITEM_MODEL_SETUP_SWITCHES_WARNING1:
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
{
|
{
|
||||||
#define FIRSTSW_STR STR_VSRCRAW+(MIXSRC_FIRST_SWITCH-MIXSRC_Rud+1)*length
|
#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);
|
lcdDrawTextAlignedLeft(y, TR_INTERNALRF);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ITEM_MODEL_SETUP_INTERNAL_MODULE_MODE:
|
case ITEM_MODEL_SETUP_INTERNAL_MODULE_TYPE: {
|
||||||
lcdDrawTextAlignedLeft(y, STR_MODE);
|
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);
|
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_MODULE_PROTOCOLS, g_model.moduleData[INTERNAL_MODULE].type, menuHorizontalPosition==0 ? attr : 0);
|
||||||
if (isModuleXJT(INTERNAL_MODULE))
|
if (isModuleXJT(INTERNAL_MODULE))
|
||||||
lcdDrawTextAtIndex(lcdNextPos + FW, y, STR_ACCST_RF_PROTOCOLS, 1+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 (isModulePXX2(INTERNAL_MODULE))
|
else if (isModuleXJT2(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_ISRM_PXX2_RF_PROTOCOLS, g_model.moduleData[INTERNAL_MODULE].subType, menuHorizontalPosition==1 ? attr : 0);
|
||||||
if (attr) {
|
if (attr) {
|
||||||
if (menuHorizontalPosition == 0) {
|
if (menuHorizontalPosition == 0) {
|
||||||
uint8_t moduleType = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].type, MODULE_TYPE_NONE, MODULE_TYPE_MAX, EE_MODEL, isInternalModuleAvailable);
|
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)) {
|
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) {
|
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].channelsStart = 0;
|
||||||
g_model.moduleData[0].channelsCount = defaultModuleChannels_M8(INTERNAL_MODULE);
|
g_model.moduleData[0].channelsCount = defaultModuleChannels_M8(INTERNAL_MODULE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (isModulePXX2(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;
|
break;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PCBSKY9X)
|
#if defined(PCBSKY9X)
|
||||||
|
@ -1050,22 +1081,24 @@ void menuModelSetup(event_t event)
|
||||||
lcdDrawTextAlignedLeft(y, TR_EXTERNALRF);
|
lcdDrawTextAlignedLeft(y, TR_EXTERNALRF);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_MODE:
|
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_TYPE:
|
||||||
lcdDrawTextAlignedLeft(y, STR_MODE);
|
lcdDrawTextAlignedLeft(y, STR_MODE);
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_MODULE_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].type, menuHorizontalPosition==0 ? attr : 0);
|
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))
|
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))
|
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))
|
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)
|
#if defined(MULTIMODULE)
|
||||||
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
|
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
|
||||||
int multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
|
int multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
|
||||||
if (g_model.moduleData[EXTERNAL_MODULE].multi.customProto)
|
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
|
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
|
#endif
|
||||||
if (attr && editMode > 0) {
|
if (attr && editMode > 0) {
|
||||||
|
@ -1090,6 +1123,8 @@ void menuModelSetup(event_t event)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1:
|
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))
|
if (isModuleDSM2(EXTERNAL_MODULE))
|
||||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX);
|
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX);
|
||||||
else if (isModuleR9M(EXTERNAL_MODULE)) {
|
else if (isModuleR9M(EXTERNAL_MODULE)) {
|
||||||
|
@ -1106,15 +1141,15 @@ void menuModelSetup(event_t event)
|
||||||
|
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
|
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);
|
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, MM_RF_PROTO_FIRST, MM_RF_PROTO_LAST);
|
CHECK_INCDEC_MODELVAR(event, multiRfProto, MODULE_SUBTYPE_MULTI_FIRST, MODULE_SUBTYPE_MULTI_LAST);
|
||||||
if (checkIncDec_Ret) {
|
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)
|
if (!g_model.moduleData[EXTERNAL_MODULE].multi.customProto)
|
||||||
g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(multiRfProto);
|
g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(multiRfProto);
|
||||||
g_model.moduleData[EXTERNAL_MODULE].subType = 0;
|
g_model.moduleData[EXTERNAL_MODULE].subType = 0;
|
||||||
// Sensible default for DSM2 (same as for ppm): 7ch@22ms + Autodetect settings enabled
|
// 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;
|
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -1125,7 +1160,7 @@ void menuModelSetup(event_t event)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else {
|
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) {
|
if (checkIncDec_Ret) {
|
||||||
g_model.moduleData[EXTERNAL_MODULE].channelsStart = 0;
|
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);
|
CHECK_INCDEC_MODELVAR_ZERO(event, moduleData.channelsStart, 32-8-moduleData.channelsCount);
|
||||||
break;
|
break;
|
||||||
case 1:
|
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)) {
|
if ((k == ITEM_MODEL_SETUP_EXTERNAL_MODULE_CHANNELS && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM)) {
|
||||||
SET_DEFAULT_PPM_FRAME_LENGTH(moduleIdx);
|
SET_DEFAULT_PPM_FRAME_LENGTH(moduleIdx);
|
||||||
}
|
}
|
||||||
|
@ -1461,9 +1496,9 @@ void menuModelSetup(event_t event)
|
||||||
#endif
|
#endif
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
#if defined(HARDWARE_INTERNAL_MODULE)
|
#if defined(HARDWARE_INTERNAL_MODULE)
|
||||||
case ITEM_MODEL_SETUP_INTERNAL_MODULE_NPXX2_BIND:
|
case ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_BIND:
|
||||||
#endif
|
#endif
|
||||||
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_NPXX2_BIND:
|
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_NOT_ACCESS_BIND:
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
||||||
|
@ -1517,7 +1552,7 @@ void menuModelSetup(event_t event)
|
||||||
else {
|
else {
|
||||||
lcdDrawTextAlignedLeft(y, STR_RECEIVER_NUM);
|
lcdDrawTextAlignedLeft(y, STR_RECEIVER_NUM);
|
||||||
}
|
}
|
||||||
if (isModulePXX(moduleIdx) || isModuleDSM2(moduleIdx) || isModuleMultimodule(moduleIdx)) {
|
if (isModulePXX2(moduleIdx) || isModulePXX(moduleIdx) || isModuleDSM2(moduleIdx) || isModuleMultimodule(moduleIdx)) {
|
||||||
if (xOffsetBind)
|
if (xOffsetBind)
|
||||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.header.modelId[moduleIdx], (l_posHorz==0 ? attr : 0) | LEADING0|LEFT, 2);
|
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.header.modelId[moduleIdx], (l_posHorz==0 ? attr : 0) | LEADING0|LEFT, 2);
|
||||||
if (attr && l_posHorz == 0) {
|
if (attr && l_posHorz == 0) {
|
||||||
|
@ -1549,7 +1584,7 @@ void menuModelSetup(event_t event)
|
||||||
if (attr && l_posHorz > 0) {
|
if (attr && l_posHorz > 0) {
|
||||||
if (s_editMode > 0) {
|
if (s_editMode > 0) {
|
||||||
if (l_posHorz == 1) {
|
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 defined(PCBXLITE)
|
||||||
if (EVT_KEY_MASK(event) == KEY_ENTER) {
|
if (EVT_KEY_MASK(event) == KEY_ENTER) {
|
||||||
#elif defined(PCBSKY9X) || defined(PCBAR9X)
|
#elif defined(PCBSKY9X) || defined(PCBAR9X)
|
||||||
|
@ -1699,15 +1734,15 @@ void menuModelSetup(event_t event)
|
||||||
if (pdef->optionsstr)
|
if (pdef->optionsstr)
|
||||||
lcdDrawTextAlignedLeft(y, 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;
|
optionValue = 50 + 5 * optionValue;
|
||||||
|
|
||||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, optionValue, LEFT | attr);
|
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, optionValue, LEFT | attr);
|
||||||
if (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);
|
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);
|
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -1, 7);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -1739,7 +1774,7 @@ void menuModelSetup(event_t event)
|
||||||
lcdDrawTextAlignedLeft(y, TR_MULTI_RFPOWER);
|
lcdDrawTextAlignedLeft(y, TR_MULTI_RFPOWER);
|
||||||
if (isModuleR9M_FCC_VARIANT(moduleIdx)) {
|
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
|
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);
|
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_LITE_FCC_POWER_VALUES, g_model.moduleData[moduleIdx].pxx.power, LEFT);
|
||||||
if (attr)
|
if (attr)
|
||||||
REPEAT_LAST_CURSOR_MOVE();
|
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);
|
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);
|
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);
|
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_LITE_LBT_POWER_VALUES, g_model.moduleData[moduleIdx].pxx.power, LEFT | attr);
|
||||||
if (attr) {
|
if (attr) {
|
||||||
|
@ -1763,7 +1798,7 @@ void menuModelSetup(event_t event)
|
||||||
reusableBuffer.moduleSetup.r9mPower = g_model.moduleData[moduleIdx].pxx.power;
|
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);
|
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);
|
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_LBT_POWER_VALUES, g_model.moduleData[moduleIdx].pxx.power, LEFT | attr);
|
||||||
if (attr) {
|
if (attr) {
|
||||||
|
@ -1788,7 +1823,7 @@ void menuModelSetup(event_t event)
|
||||||
|
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_AUTOBIND:
|
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);
|
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
|
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);
|
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) {
|
if (old_editMode > 0 && s_editMode == 0) {
|
||||||
switch(menuVerticalPosition) {
|
switch(menuVerticalPosition) {
|
||||||
#if defined(HARDWARE_INTERNAL_MODULE)
|
#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:
|
case ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_MODEL_NUM:
|
||||||
if (menuHorizontalPosition == 0)
|
if (menuHorizontalPosition == 0)
|
||||||
checkModelIdUnique(g_eeGeneral.currModel, INTERNAL_MODULE);
|
checkModelIdUnique(g_eeGeneral.currModel, INTERNAL_MODULE);
|
||||||
|
@ -1885,7 +1920,7 @@ void menuModelSetup(event_t event)
|
||||||
checkModelIdUnique(g_eeGeneral.currModel, EXTRA_MODULE);
|
checkModelIdUnique(g_eeGeneral.currModel, EXTRA_MODULE);
|
||||||
break;
|
break;
|
||||||
#endif
|
#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:
|
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_PXX2_MODEL_NUM:
|
||||||
if (menuHorizontalPosition == 0)
|
if (menuHorizontalPosition == 0)
|
||||||
checkModelIdUnique(g_eeGeneral.currModel, EXTERNAL_MODULE);
|
checkModelIdUnique(g_eeGeneral.currModel, EXTERNAL_MODULE);
|
||||||
|
|
|
@ -240,7 +240,7 @@ void menuModelTelemetryFrsky(event_t event)
|
||||||
|
|
||||||
case ITEM_TELEMETRY_RSSI_LABEL:
|
case ITEM_TELEMETRY_RSSI_LABEL:
|
||||||
#if defined(MULTIMODULE)
|
#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");
|
lcdDrawTextAlignedLeft(y, "RSNR");
|
||||||
else
|
else
|
||||||
lcdDrawTextAlignedLeft(y, "RSSI");
|
lcdDrawTextAlignedLeft(y, "RSSI");
|
||||||
|
|
|
@ -22,77 +22,89 @@
|
||||||
|
|
||||||
uint8_t g_moduleIdx;
|
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 {
|
enum MenuModelSetupItems {
|
||||||
ITEM_MODEL_NAME,
|
ITEM_MODEL_SETUP_NAME,
|
||||||
ITEM_MODEL_BITMAP,
|
ITEM_MODEL_SETUP_BITMAP,
|
||||||
ITEM_MODEL_TIMER1,
|
ITEM_MODEL_SETUP_TIMER1,
|
||||||
ITEM_MODEL_TIMER1_NAME,
|
ITEM_MODEL_SETUP_TIMER1_NAME,
|
||||||
ITEM_MODEL_TIMER1_PERSISTENT,
|
ITEM_MODEL_SETUP_TIMER1_PERSISTENT,
|
||||||
ITEM_MODEL_TIMER1_MINUTE_BEEP,
|
ITEM_MODEL_SETUP_TIMER1_MINUTE_BEEP,
|
||||||
ITEM_MODEL_TIMER1_COUNTDOWN_BEEP,
|
ITEM_MODEL_SETUP_TIMER1_COUNTDOWN_BEEP,
|
||||||
#if TIMERS > 1
|
#if TIMERS > 1
|
||||||
ITEM_MODEL_TIMER2,
|
ITEM_MODEL_SETUP_TIMER2,
|
||||||
ITEM_MODEL_TIMER2_NAME,
|
ITEM_MODEL_SETUP_TIMER2_NAME,
|
||||||
ITEM_MODEL_TIMER2_PERSISTENT,
|
ITEM_MODEL_SETUP_TIMER2_PERSISTENT,
|
||||||
ITEM_MODEL_TIMER2_MINUTE_BEEP,
|
ITEM_MODEL_SETUP_TIMER2_MINUTE_BEEP,
|
||||||
ITEM_MODEL_TIMER2_COUNTDOWN_BEEP,
|
ITEM_MODEL_SETUP_TIMER2_COUNTDOWN_BEEP,
|
||||||
#endif
|
#endif
|
||||||
#if TIMERS > 2
|
#if TIMERS > 2
|
||||||
ITEM_MODEL_TIMER3,
|
ITEM_MODEL_SETUP_TIMER3,
|
||||||
ITEM_MODEL_TIMER3_NAME,
|
ITEM_MODEL_SETUP_TIMER3_NAME,
|
||||||
ITEM_MODEL_TIMER3_PERSISTENT,
|
ITEM_MODEL_SETUP_TIMER3_PERSISTENT,
|
||||||
ITEM_MODEL_TIMER3_MINUTE_BEEP,
|
ITEM_MODEL_SETUP_TIMER3_MINUTE_BEEP,
|
||||||
ITEM_MODEL_TIMER3_COUNTDOWN_BEEP,
|
ITEM_MODEL_SETUP_TIMER3_COUNTDOWN_BEEP,
|
||||||
#endif
|
#endif
|
||||||
#if defined(PCBX9E)
|
#if defined(PCBX9E)
|
||||||
ITEM_MODEL_TOP_LCD_TIMER,
|
ITEM_MODEL_SETUP_TOP_LCD_TIMER,
|
||||||
#endif
|
#endif
|
||||||
ITEM_MODEL_EXTENDED_LIMITS,
|
ITEM_MODEL_SETUP_EXTENDED_LIMITS,
|
||||||
ITEM_MODEL_EXTENDED_TRIMS,
|
ITEM_MODEL_SETUP_EXTENDED_TRIMS,
|
||||||
ITEM_MODEL_DISPLAY_TRIMS,
|
ITEM_MODEL_SETUP_DISPLAY_TRIMS,
|
||||||
ITEM_MODEL_TRIM_INC,
|
ITEM_MODEL_SETUP_TRIM_INC,
|
||||||
ITEM_MODEL_THROTTLE_LABEL,
|
ITEM_MODEL_SETUP_THROTTLE_LABEL,
|
||||||
ITEM_MODEL_THROTTLE_REVERSED,
|
ITEM_MODEL_SETUP_THROTTLE_REVERSED,
|
||||||
ITEM_MODEL_THROTTLE_TRACE,
|
ITEM_MODEL_SETUP_THROTTLE_TRACE,
|
||||||
ITEM_MODEL_THROTTLE_TRIM,
|
ITEM_MODEL_SETUP_THROTTLE_TRIM,
|
||||||
ITEM_MODEL_PREFLIGHT_LABEL,
|
ITEM_MODEL_SETUP_PREFLIGHT_LABEL,
|
||||||
ITEM_MODEL_CHECKLIST_DISPLAY,
|
ITEM_MODEL_SETUP_CHECKLIST_DISPLAY,
|
||||||
ITEM_MODEL_THROTTLE_WARNING,
|
ITEM_MODEL_SETUP_THROTTLE_WARNING,
|
||||||
ITEM_MODEL_SWITCHES_WARNING,
|
ITEM_MODEL_SETUP_SWITCHES_WARNING1,
|
||||||
#if defined(PCBX9E)
|
#if defined(PCBX9E)
|
||||||
ITEM_MODEL_SWITCHES_WARNING2,
|
ITEM_MODEL_SETUP_SWITCHES_WARNING2,
|
||||||
ITEM_MODEL_SWITCHES_WARNING3,
|
ITEM_MODEL_SETUP_SWITCHES_WARNING3,
|
||||||
#endif
|
#endif
|
||||||
ITEM_MODEL_POTS_WARNING,
|
ITEM_MODEL_SETUP_POTS_WARNING,
|
||||||
#if defined(PCBX9E)
|
#if defined(PCBX9E)
|
||||||
ITEM_MODEL_POTS_WARNING2,
|
ITEM_MODEL_SETUP_POTS_WARNING2,
|
||||||
#endif
|
#endif
|
||||||
ITEM_MODEL_BEEP_CENTER,
|
ITEM_MODEL_SETUP_BEEP_CENTER,
|
||||||
ITEM_MODEL_USE_GLOBAL_FUNCTIONS,
|
ITEM_MODEL_SETUP_USE_GLOBAL_FUNCTIONS,
|
||||||
ITEM_MODEL_INTERNAL_MODULE_LABEL,
|
ITEM_MODEL_SETUP_REGISTRATION_ID,
|
||||||
ITEM_MODEL_INTERNAL_MODULE_MODE,
|
ITEM_MODEL_SETUP_INTERNAL_MODULE_LABEL,
|
||||||
ITEM_MODEL_INTERNAL_MODULE_CHANNELS,
|
ITEM_MODEL_SETUP_INTERNAL_MODULE_MODE,
|
||||||
ITEM_MODEL_INTERNAL_MODULE_BIND,
|
ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS,
|
||||||
ITEM_MODEL_INTERNAL_MODULE_FAILSAFE,
|
ITEM_MODEL_SETUP_INTERNAL_MODULE_BIND,
|
||||||
ITEM_MODEL_EXTERNAL_MODULE_LABEL,
|
ITEM_MODEL_SETUP_INTERNAL_MODULE_FAILSAFE,
|
||||||
ITEM_MODEL_EXTERNAL_MODULE_MODE,
|
ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL,
|
||||||
|
ITEM_MODEL_SETUP_EXTERNAL_MODULE_MODE,
|
||||||
#if defined (MULTIMODULE)
|
#if defined (MULTIMODULE)
|
||||||
ITEM_MODEL_EXTERNAL_MODULE_STATUS,
|
ITEM_MODEL_SETUP_EXTERNAL_MODULE_STATUS,
|
||||||
ITEM_MODEL_EXTERNAL_MODULE_SYNCSTATUS,
|
ITEM_MODEL_SETUP_EXTERNAL_MODULE_SYNCSTATUS,
|
||||||
#endif
|
#endif
|
||||||
ITEM_MODEL_EXTERNAL_MODULE_CHANNELS,
|
ITEM_MODEL_SETUP_EXTERNAL_MODULE_CHANNELS,
|
||||||
ITEM_MODEL_EXTERNAL_MODULE_BIND,
|
ITEM_MODEL_SETUP_EXTERNAL_MODULE_BIND,
|
||||||
ITEM_MODEL_EXTERNAL_MODULE_FAILSAFE,
|
ITEM_MODEL_SETUP_EXTERNAL_MODULE_FAILSAFE,
|
||||||
ITEM_MODEL_EXTERNAL_MODULE_OPTIONS,
|
ITEM_MODEL_SETUP_EXTERNAL_MODULE_OPTIONS,
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND,
|
ITEM_MODEL_SETUP_EXTERNAL_MODULE_AUTOBIND,
|
||||||
#endif
|
#endif
|
||||||
ITEM_MODEL_EXTERNAL_MODULE_POWER,
|
ITEM_MODEL_SETUP_EXTERNAL_MODULE_POWER,
|
||||||
ITEM_MODEL_TRAINER_LABEL,
|
ITEM_MODEL_SETUP_TRAINER_LABEL,
|
||||||
ITEM_MODEL_TRAINER_MODE,
|
ITEM_MODEL_SETUP_TRAINER_MODE,
|
||||||
ITEM_MODEL_TRAINER_LINE1,
|
ITEM_MODEL_SETUP_TRAINER_LINE1,
|
||||||
ITEM_MODEL_TRAINER_LINE2,
|
ITEM_MODEL_SETUP_TRAINER_LINE2,
|
||||||
ITEM_MODEL_SETUP_MAX
|
ITEM_MODEL_SETUP_SETUP_MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
#define FIELD_PROTOCOL_MAX 1
|
#define FIELD_PROTOCOL_MAX 1
|
||||||
|
@ -103,11 +115,11 @@ enum MenuModelSetupItems {
|
||||||
#define MODEL_SETUP_RANGE_OFS 7*FW
|
#define MODEL_SETUP_RANGE_OFS 7*FW
|
||||||
#define MODEL_SETUP_SET_FAILSAFE_OFS 10*FW-2
|
#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)
|
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) {
|
if (result == STR_BINDING_1_8_TELEM_ON) {
|
||||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = false;
|
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)
|
#define IF_INTERNAL_MODULE_ON(x) (IS_INTERNAL_MODULE_ENABLED() ? (uint8_t)(x) : HIDDEN_ROW)
|
||||||
#if defined(INTERNAL_MODULE_PPM)
|
#if defined(INTERNAL_MODULE_PPM)
|
||||||
#define INTERNAL_MODULE_MODE_ROWS (isModuleXJT(INTERNAL_MODULE) ? (uint8_t)1 : (uint8_t)0) // Module type + RF protocols
|
#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,
|
EXTERNAL_MODULE_POWER_ROW,
|
||||||
LABEL(Trainer), 0, TRAINER_LINE1_ROWS, TRAINER_LINE2_ROWS});
|
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) {
|
if (event == EVT_ENTRY) {
|
||||||
reusableBuffer.moduleSetup.r9mPower = g_model.moduleData[EXTERNAL_MODULE].pxx.power;
|
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);
|
LcdFlags attr = (sub == k ? blink : 0);
|
||||||
|
|
||||||
switch(k) {
|
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);
|
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));
|
memcpy(modelHeaders[g_eeGeneral.currModel].name, g_model.header.name, sizeof(g_model.header.name));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ITEM_MODEL_BITMAP:
|
case ITEM_MODEL_SETUP_BITMAP:
|
||||||
lcdDrawTextAlignedLeft(y, STR_BITMAP);
|
lcdDrawTextAlignedLeft(y, STR_BITMAP);
|
||||||
if (ZEXIST(g_model.header.bitmap))
|
if (ZEXIST(g_model.header.bitmap))
|
||||||
lcdDrawSizedText(MODEL_SETUP_2ND_COLUMN, y, g_model.header.bitmap, sizeof(g_model.header.bitmap), attr);
|
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;
|
break;
|
||||||
|
|
||||||
case ITEM_MODEL_TIMER1:
|
case ITEM_MODEL_SETUP_TIMER1:
|
||||||
editTimerMode(0, y, attr, event);
|
editTimerMode(0, y, attr, event);
|
||||||
break;
|
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);
|
editSingleName(MODEL_SETUP_2ND_COLUMN, y, STR_TIMER_NAME, g_model.timers[0].name, LEN_TIMER_NAME, event, attr);
|
||||||
break;
|
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);
|
g_model.timers[0].minuteBeep = editCheckBox(g_model.timers[0].minuteBeep, MODEL_SETUP_2ND_COLUMN, y, STR_MINUTEBEEP, attr, event);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ITEM_MODEL_TIMER1_COUNTDOWN_BEEP:
|
case ITEM_MODEL_SETUP_TIMER1_COUNTDOWN_BEEP:
|
||||||
editTimerCountdown(0, y, attr, event);
|
editTimerCountdown(0, y, attr, event);
|
||||||
break;
|
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);
|
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;
|
break;
|
||||||
|
|
||||||
#if TIMERS > 1
|
#if TIMERS > 1
|
||||||
case ITEM_MODEL_TIMER2:
|
case ITEM_MODEL_SETUP_TIMER2:
|
||||||
editTimerMode(1, y, attr, event);
|
editTimerMode(1, y, attr, event);
|
||||||
break;
|
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);
|
editSingleName(MODEL_SETUP_2ND_COLUMN, y, STR_TIMER_NAME, g_model.timers[1].name, LEN_TIMER_NAME, event, attr);
|
||||||
break;
|
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);
|
g_model.timers[1].minuteBeep = editCheckBox(g_model.timers[1].minuteBeep, MODEL_SETUP_2ND_COLUMN, y, STR_MINUTEBEEP, attr, event);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ITEM_MODEL_TIMER2_COUNTDOWN_BEEP:
|
case ITEM_MODEL_SETUP_TIMER2_COUNTDOWN_BEEP:
|
||||||
editTimerCountdown(1, y, attr, event);
|
editTimerCountdown(1, y, attr, event);
|
||||||
break;
|
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);
|
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;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if TIMERS > 2
|
#if TIMERS > 2
|
||||||
case ITEM_MODEL_TIMER3:
|
case ITEM_MODEL_SETUP_TIMER3:
|
||||||
editTimerMode(2, y, attr, event);
|
editTimerMode(2, y, attr, event);
|
||||||
break;
|
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);
|
editSingleName(MODEL_SETUP_2ND_COLUMN, y, STR_TIMER_NAME, g_model.timers[2].name, LEN_TIMER_NAME, event, attr);
|
||||||
break;
|
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);
|
g_model.timers[2].minuteBeep = editCheckBox(g_model.timers[2].minuteBeep, MODEL_SETUP_2ND_COLUMN, y, STR_MINUTEBEEP, attr, event);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ITEM_MODEL_TIMER3_COUNTDOWN_BEEP:
|
case ITEM_MODEL_SETUP_TIMER3_COUNTDOWN_BEEP:
|
||||||
editTimerCountdown(2, y, attr, event);
|
editTimerCountdown(2, y, attr, event);
|
||||||
break;
|
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);
|
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;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PCBX9E)
|
#if defined(PCBX9E)
|
||||||
case ITEM_MODEL_TOP_LCD_TIMER:
|
case ITEM_MODEL_SETUP_TOP_LCD_TIMER:
|
||||||
lcdDrawTextAlignedLeft(y, STR_TOPLCDTIMER);
|
lcdDrawTextAlignedLeft(y, STR_TOPLCDTIMER);
|
||||||
drawStringWithIndex(MODEL_SETUP_2ND_COLUMN, y, STR_TIMER, g_model.toplcdTimer+1, attr);
|
drawStringWithIndex(MODEL_SETUP_2ND_COLUMN, y, STR_TIMER, g_model.toplcdTimer+1, attr);
|
||||||
if (attr) {
|
if (attr) {
|
||||||
|
@ -421,11 +422,11 @@ void menuModelSetup(event_t event)
|
||||||
break;
|
break;
|
||||||
#endif
|
#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);
|
ON_OFF_MENU_ITEM(g_model.extendedLimits, MODEL_SETUP_2ND_COLUMN, y, STR_ELIMITS, attr, event);
|
||||||
break;
|
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);
|
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);
|
lcdDrawText(MODEL_SETUP_2ND_COLUMN+3*FW, y, STR_RESET_BTN, (menuHorizontalPosition>0 && !NO_HIGHLIGHT()) ? attr : 0);
|
||||||
if (attr && menuHorizontalPosition>0) {
|
if (attr && menuHorizontalPosition>0) {
|
||||||
|
@ -441,23 +442,23 @@ void menuModelSetup(event_t event)
|
||||||
}
|
}
|
||||||
break;
|
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);
|
g_model.displayTrims = editChoice(MODEL_SETUP_2ND_COLUMN, y, STR_DISPLAY_TRIMS, STR_VDISPLAYTRIMS, g_model.displayTrims, 0, 2, attr, event);
|
||||||
break;
|
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);
|
g_model.trimInc = editChoice(MODEL_SETUP_2ND_COLUMN, y, STR_TRIMINC, STR_VTRIMINC, g_model.trimInc, -2, 2, attr, event);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ITEM_MODEL_THROTTLE_LABEL:
|
case ITEM_MODEL_SETUP_THROTTLE_LABEL:
|
||||||
lcdDrawTextAlignedLeft(y, STR_THROTTLE_LABEL);
|
lcdDrawTextAlignedLeft(y, STR_THROTTLE_LABEL);
|
||||||
break;
|
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 ) ;
|
ON_OFF_MENU_ITEM(g_model.throttleReversed, MODEL_SETUP_2ND_COLUMN, y, STR_THROTTLEREVERSE, attr, event ) ;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ITEM_MODEL_THROTTLE_TRACE:
|
case ITEM_MODEL_SETUP_THROTTLE_TRACE:
|
||||||
{
|
{
|
||||||
lcdDrawTextAlignedLeft(y, STR_TTRACE);
|
lcdDrawTextAlignedLeft(y, STR_TTRACE);
|
||||||
if (attr) CHECK_INCDEC_MODELVAR_ZERO_CHECK(event, g_model.thrTraceSrc, NUM_POTS+NUM_SLIDERS+MAX_OUTPUT_CHANNELS, isThrottleSourceAvailable);
|
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;
|
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);
|
ON_OFF_MENU_ITEM(g_model.thrTrim, MODEL_SETUP_2ND_COLUMN, y, STR_TTRIM, attr, event);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ITEM_MODEL_PREFLIGHT_LABEL:
|
case ITEM_MODEL_SETUP_PREFLIGHT_LABEL:
|
||||||
lcdDrawTextAlignedLeft(y, STR_PREFLIGHT);
|
lcdDrawTextAlignedLeft(y, STR_PREFLIGHT);
|
||||||
break;
|
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);
|
ON_OFF_MENU_ITEM(g_model.displayChecklist, MODEL_SETUP_2ND_COLUMN, y, STR_CHECKLIST, attr, event);
|
||||||
break;
|
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);
|
g_model.disableThrottleWarning = !editCheckBox(!g_model.disableThrottleWarning, MODEL_SETUP_2ND_COLUMN, y, STR_THROTTLEWARNING, attr, event);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#if defined(PCBX9E)
|
#if defined(PCBX9E)
|
||||||
case ITEM_MODEL_SWITCHES_WARNING2:
|
case ITEM_MODEL_SETUP_SWITCHES_WARNING2:
|
||||||
case ITEM_MODEL_SWITCHES_WARNING3:
|
case ITEM_MODEL_SETUP_SWITCHES_WARNING3:
|
||||||
case ITEM_MODEL_POTS_WARNING2:
|
case ITEM_MODEL_SETUP_POTS_WARNING2:
|
||||||
if (i==0) {
|
if (i==0) {
|
||||||
if (CURSOR_MOVED_LEFT(event))
|
if (CURSOR_MOVED_LEFT(event))
|
||||||
menuVerticalOffset--;
|
menuVerticalOffset--;
|
||||||
|
@ -499,7 +500,7 @@ void menuModelSetup(event_t event)
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case ITEM_MODEL_SWITCHES_WARNING:
|
case ITEM_MODEL_SETUP_SWITCHES_WARNING1:
|
||||||
{
|
{
|
||||||
#if defined(PCBX9E)
|
#if defined(PCBX9E)
|
||||||
if (i>=NUM_BODY_LINES-2 && getSwitchWarningsCount() > 8*(NUM_BODY_LINES-i)) {
|
if (i>=NUM_BODY_LINES-2 && getSwitchWarningsCount() > 8*(NUM_BODY_LINES-i)) {
|
||||||
|
@ -562,7 +563,7 @@ void menuModelSetup(event_t event)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case ITEM_MODEL_POTS_WARNING:
|
case ITEM_MODEL_SETUP_POTS_WARNING:
|
||||||
#if defined(PCBX9E)
|
#if defined(PCBX9E)
|
||||||
if (i==NUM_BODY_LINES-1 && g_model.potsWarnMode) {
|
if (i==NUM_BODY_LINES-1 && g_model.potsWarnMode) {
|
||||||
if (CURSOR_MOVED_LEFT(event))
|
if (CURSOR_MOVED_LEFT(event))
|
||||||
|
@ -632,7 +633,7 @@ void menuModelSetup(event_t event)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ITEM_MODEL_BEEP_CENTER:
|
case ITEM_MODEL_SETUP_BEEP_CENTER:
|
||||||
{
|
{
|
||||||
lcdDrawTextAlignedLeft(y, STR_BEEPCTR);
|
lcdDrawTextAlignedLeft(y, STR_BEEPCTR);
|
||||||
coord_t x = MODEL_SETUP_2ND_COLUMN;
|
coord_t x = MODEL_SETUP_2ND_COLUMN;
|
||||||
|
@ -656,18 +657,18 @@ void menuModelSetup(event_t event)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case ITEM_MODEL_USE_GLOBAL_FUNCTIONS:
|
case ITEM_MODEL_SETUP_USE_GLOBAL_FUNCTIONS:
|
||||||
lcdDrawTextAlignedLeft(y, STR_USE_GLOBAL_FUNCS);
|
lcdDrawTextAlignedLeft(y, STR_USE_GLOBAL_FUNCS);
|
||||||
drawCheckBox(MODEL_SETUP_2ND_COLUMN, y, !g_model.noGlobalFunctions, attr);
|
drawCheckBox(MODEL_SETUP_2ND_COLUMN, y, !g_model.noGlobalFunctions, attr);
|
||||||
if (attr) g_model.noGlobalFunctions = !checkIncDecModel(event, !g_model.noGlobalFunctions, 0, 1);
|
if (attr) g_model.noGlobalFunctions = !checkIncDecModel(event, !g_model.noGlobalFunctions, 0, 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ITEM_MODEL_INTERNAL_MODULE_LABEL:
|
case ITEM_MODEL_SETUP_INTERNAL_MODULE_LABEL:
|
||||||
lcdDrawTextAlignedLeft(y, TR_INTERNALRF);
|
lcdDrawTextAlignedLeft(y, TR_INTERNALRF);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#if defined(INTERNAL_MODULE_PPM)
|
#if defined(INTERNAL_MODULE_PPM)
|
||||||
case ITEM_MODEL_INTERNAL_MODULE_MODE:
|
case ITEM_MODEL_SETUP_INTERNAL_MODULE_MODE:
|
||||||
lcdDrawTextAlignedLeft(y, STR_MODE);
|
lcdDrawTextAlignedLeft(y, STR_MODE);
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_MODULE_PROTOCOLS, g_model.moduleData[INTERNAL_MODULE].type, menuHorizontalPosition==0 ? attr : 0);
|
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_MODULE_PROTOCOLS, g_model.moduleData[INTERNAL_MODULE].type, menuHorizontalPosition==0 ? attr : 0);
|
||||||
if (isModuleXJT(INTERNAL_MODULE))
|
if (isModuleXJT(INTERNAL_MODULE))
|
||||||
|
@ -675,7 +676,7 @@ void menuModelSetup(event_t event)
|
||||||
if (attr && s_editMode>0) {
|
if (attr && s_editMode>0) {
|
||||||
switch (menuHorizontalPosition) {
|
switch (menuHorizontalPosition) {
|
||||||
case 0:
|
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) {
|
if (checkIncDec_Ret) {
|
||||||
g_model.moduleData[INTERNAL_MODULE].rfProtocol = 0;
|
g_model.moduleData[INTERNAL_MODULE].rfProtocol = 0;
|
||||||
g_model.moduleData[INTERNAL_MODULE].channelsStart = 0;
|
g_model.moduleData[INTERNAL_MODULE].channelsStart = 0;
|
||||||
|
@ -683,7 +684,7 @@ void menuModelSetup(event_t event)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1:
|
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) {
|
if (checkIncDec_Ret) {
|
||||||
g_model.moduleData[INTERNAL_MODULE].channelsStart = 0;
|
g_model.moduleData[INTERNAL_MODULE].channelsStart = 0;
|
||||||
g_model.moduleData[INTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(INTERNAL_MODULE);
|
g_model.moduleData[INTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(INTERNAL_MODULE);
|
||||||
|
@ -692,24 +693,24 @@ void menuModelSetup(event_t event)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#else
|
#else
|
||||||
case ITEM_MODEL_INTERNAL_MODULE_MODE:
|
case ITEM_MODEL_SETUP_INTERNAL_MODULE_MODE:
|
||||||
lcdDrawTextAlignedLeft(y, STR_MODE);
|
lcdDrawTextAlignedLeft(y, STR_MODE);
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_ACCST_RF_PROTOCOLS, 1+g_model.moduleData[0].rfProtocol, attr);
|
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_ACCST_RF_PROTOCOLS, 1+g_model.moduleData[0].rfProtocol, attr);
|
||||||
if (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) {
|
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].channelsStart = 0;
|
||||||
g_model.moduleData[INTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(INTERNAL_MODULE);
|
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;
|
g_model.moduleData[INTERNAL_MODULE].type = MODULE_TYPE_NONE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case ITEM_MODEL_TRAINER_MODE:
|
case ITEM_MODEL_SETUP_TRAINER_MODE:
|
||||||
lcdDrawTextAlignedLeft(y, STR_MODE);
|
lcdDrawTextAlignedLeft(y, STR_MODE);
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_VTRAINERMODES, g_model.trainerData.mode, attr);
|
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_VTRAINERMODES, g_model.trainerData.mode, attr);
|
||||||
if (attr) {
|
if (attr) {
|
||||||
|
@ -723,11 +724,11 @@ void menuModelSetup(event_t event)
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ITEM_MODEL_EXTERNAL_MODULE_LABEL:
|
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL:
|
||||||
lcdDrawTextAlignedLeft(y, TR_EXTERNALRF);
|
lcdDrawTextAlignedLeft(y, TR_EXTERNALRF);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ITEM_MODEL_EXTERNAL_MODULE_MODE:
|
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_MODE:
|
||||||
lcdDrawTextAlignedLeft(y, STR_MODE);
|
lcdDrawTextAlignedLeft(y, STR_MODE);
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_MODULE_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].type, menuHorizontalPosition==0 ? attr : 0);
|
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_MODULE_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].type, menuHorizontalPosition==0 ? attr : 0);
|
||||||
if (isModuleXJT(EXTERNAL_MODULE))
|
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);
|
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX);
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
|
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);
|
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, MM_RF_PROTO_FIRST, MM_RF_PROTO_LAST);
|
CHECK_INCDEC_MODELVAR(event, multiRfProto, MODULE_SUBTYPE_MULTI_FIRST, MODULE_SUBTYPE_MULTI_LAST);
|
||||||
if (checkIncDec_Ret) {
|
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)
|
if (!g_model.moduleData[EXTERNAL_MODULE].multi.customProto)
|
||||||
g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(multiRfProto);
|
g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(multiRfProto);
|
||||||
g_model.moduleData[EXTERNAL_MODULE].subType = 0;
|
g_model.moduleData[EXTERNAL_MODULE].subType = 0;
|
||||||
// Sensible default for DSM2 (same as for ppm): 7ch@22ms + Autodetect settings enabled
|
// 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;
|
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -802,7 +803,7 @@ void menuModelSetup(event_t event)
|
||||||
g_model.moduleData[EXTERNAL_MODULE].subType = newR9MType;
|
g_model.moduleData[EXTERNAL_MODULE].subType = newR9MType;
|
||||||
}
|
}
|
||||||
else {
|
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) {
|
if (checkIncDec_Ret) {
|
||||||
g_model.moduleData[EXTERNAL_MODULE].channelsStart = 0;
|
g_model.moduleData[EXTERNAL_MODULE].channelsStart = 0;
|
||||||
|
@ -830,12 +831,12 @@ void menuModelSetup(event_t event)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ITEM_MODEL_TRAINER_LABEL:
|
case ITEM_MODEL_SETUP_TRAINER_LABEL:
|
||||||
lcdDrawTextAlignedLeft(y, STR_TRAINER);
|
lcdDrawTextAlignedLeft(y, STR_TRAINER);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#if defined(BLUETOOTH) && defined(USEHORUSBT)
|
#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 (g_model.trainerData.mode == TRAINER_MODE_MASTER_BLUETOOTH) {
|
||||||
if (attr) {
|
if (attr) {
|
||||||
s_editMode = 0;
|
s_editMode = 0;
|
||||||
|
@ -876,7 +877,7 @@ void menuModelSetup(event_t event)
|
||||||
}
|
}
|
||||||
// no break
|
// no break
|
||||||
#else
|
#else
|
||||||
case ITEM_MODEL_TRAINER_LINE1:
|
case ITEM_MODEL_SETUP_TRAINER_LINE1:
|
||||||
lcdDrawTextAlignedLeft(y, STR_CHANNELRANGE);
|
lcdDrawTextAlignedLeft(y, STR_CHANNELRANGE);
|
||||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_CH, menuHorizontalPosition==0 ? attr : 0);
|
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));
|
lcdDrawNumber(lcdLastRightPos, y, g_model.trainerData.channelsStart+1, LEFT | (menuHorizontalPosition==0 ? attr : 0));
|
||||||
|
@ -895,8 +896,8 @@ void menuModelSetup(event_t event)
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case ITEM_MODEL_INTERNAL_MODULE_CHANNELS:
|
case ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS:
|
||||||
case ITEM_MODEL_EXTERNAL_MODULE_CHANNELS:
|
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_CHANNELS:
|
||||||
{
|
{
|
||||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
||||||
ModuleData & moduleData = g_model.moduleData[moduleIdx];
|
ModuleData & moduleData = g_model.moduleData[moduleIdx];
|
||||||
|
@ -920,11 +921,11 @@ void menuModelSetup(event_t event)
|
||||||
case 1:
|
case 1:
|
||||||
CHECK_INCDEC_MODELVAR(event, moduleData.channelsCount, -4, min<int8_t>(maxModuleChannels_M8(moduleIdx), 32-8-moduleData.channelsStart));
|
CHECK_INCDEC_MODELVAR(event, moduleData.channelsCount, -4, min<int8_t>(maxModuleChannels_M8(moduleIdx), 32-8-moduleData.channelsStart));
|
||||||
#if defined(INTERNAL_MODULE_PPM)
|
#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);
|
SET_DEFAULT_PPM_FRAME_LENGTH(moduleIdx);
|
||||||
}
|
}
|
||||||
#else
|
#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);
|
SET_DEFAULT_PPM_FRAME_LENGTH(moduleIdx);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -935,7 +936,7 @@ void menuModelSetup(event_t event)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case ITEM_MODEL_TRAINER_LINE2:
|
case ITEM_MODEL_SETUP_TRAINER_LINE2:
|
||||||
lcdDrawTextAlignedLeft(y, STR_PPMFRAME);
|
lcdDrawTextAlignedLeft(y, STR_PPMFRAME);
|
||||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, (int16_t)g_model.trainerData.frameLength*5 + 225, (menuHorizontalPosition<=0 ? attr : 0) | PREC1|LEFT);
|
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);
|
lcdDrawText(lcdLastRightPos, y, STR_MS);
|
||||||
|
@ -957,8 +958,8 @@ void menuModelSetup(event_t event)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ITEM_MODEL_INTERNAL_MODULE_BIND:
|
case ITEM_MODEL_SETUP_INTERNAL_MODULE_BIND:
|
||||||
case ITEM_MODEL_EXTERNAL_MODULE_BIND:
|
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_BIND:
|
||||||
{
|
{
|
||||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
||||||
ModuleData & moduleData = g_model.moduleData[moduleIdx];
|
ModuleData & moduleData = g_model.moduleData[moduleIdx];
|
||||||
|
@ -1004,7 +1005,7 @@ void menuModelSetup(event_t event)
|
||||||
else {
|
else {
|
||||||
horzpos_t l_posHorz = menuHorizontalPosition;
|
horzpos_t l_posHorz = menuHorizontalPosition;
|
||||||
coord_t xOffsetBind = MODEL_SETUP_BIND_OFS;
|
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;
|
xOffsetBind = 0;
|
||||||
lcdDrawTextAlignedLeft(y, STR_RECEIVER);
|
lcdDrawTextAlignedLeft(y, STR_RECEIVER);
|
||||||
if (attr) l_posHorz += 1;
|
if (attr) l_posHorz += 1;
|
||||||
|
@ -1043,7 +1044,7 @@ void menuModelSetup(event_t event)
|
||||||
if (attr && l_posHorz>0) {
|
if (attr && l_posHorz>0) {
|
||||||
if (s_editMode>0) {
|
if (s_editMode>0) {
|
||||||
if (l_posHorz == 1) {
|
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)) {
|
if (event == EVT_KEY_BREAK(KEY_ENTER)) {
|
||||||
uint8_t default_selection = 0; // R9M_LBT should default to 0 as available options are variables
|
uint8_t default_selection = 0; // R9M_LBT should default to 0 as available options are variables
|
||||||
if (isModuleR9M_LBT(moduleIdx)) {
|
if (isModuleR9M_LBT(moduleIdx)) {
|
||||||
|
@ -1096,8 +1097,8 @@ void menuModelSetup(event_t event)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case ITEM_MODEL_INTERNAL_MODULE_FAILSAFE:
|
case ITEM_MODEL_SETUP_INTERNAL_MODULE_FAILSAFE:
|
||||||
case ITEM_MODEL_EXTERNAL_MODULE_FAILSAFE:
|
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_FAILSAFE:
|
||||||
{
|
{
|
||||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
||||||
ModuleData & moduleData = g_model.moduleData[moduleIdx];
|
ModuleData & moduleData = g_model.moduleData[moduleIdx];
|
||||||
|
@ -1138,7 +1139,7 @@ void menuModelSetup(event_t event)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ITEM_MODEL_EXTERNAL_MODULE_OPTIONS:
|
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_OPTIONS:
|
||||||
{
|
{
|
||||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
|
@ -1151,15 +1152,15 @@ void menuModelSetup(event_t event)
|
||||||
if (pdef->optionsstr)
|
if (pdef->optionsstr)
|
||||||
lcdDrawText(INDENT_WIDTH, y, 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;
|
optionValue = 50 + 5 * optionValue;
|
||||||
|
|
||||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, optionValue, LEFT | attr);
|
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, optionValue, LEFT | attr);
|
||||||
if (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);
|
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);
|
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -1, 7);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -1184,7 +1185,7 @@ void menuModelSetup(event_t event)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ITEM_MODEL_EXTERNAL_MODULE_POWER:
|
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_POWER:
|
||||||
{
|
{
|
||||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
||||||
if (isModuleR9M(moduleIdx)) {
|
if (isModuleR9M(moduleIdx)) {
|
||||||
|
@ -1214,13 +1215,13 @@ void menuModelSetup(event_t event)
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined (MULTIMODULE)
|
#if defined (MULTIMODULE)
|
||||||
case ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND:
|
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);
|
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
|
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);
|
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;
|
break;
|
||||||
case ITEM_MODEL_EXTERNAL_MODULE_STATUS:
|
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_STATUS:
|
||||||
{
|
{
|
||||||
lcdDrawTextAlignedLeft(y, STR_MODULE_STATUS);
|
lcdDrawTextAlignedLeft(y, STR_MODULE_STATUS);
|
||||||
char statusText[64];
|
char statusText[64];
|
||||||
|
@ -1228,7 +1229,7 @@ void menuModelSetup(event_t event)
|
||||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, statusText);
|
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, statusText);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ITEM_MODEL_EXTERNAL_MODULE_SYNCSTATUS: {
|
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_SYNCSTATUS: {
|
||||||
lcdDrawTextAlignedLeft(y, STR_MODULE_SYNC);
|
lcdDrawTextAlignedLeft(y, STR_MODULE_SYNC);
|
||||||
|
|
||||||
char statusText[64];
|
char statusText[64];
|
||||||
|
@ -1249,12 +1250,12 @@ void menuModelSetup(event_t event)
|
||||||
|
|
||||||
if (old_editMode > 0 && s_editMode == 0) {
|
if (old_editMode > 0 && s_editMode == 0) {
|
||||||
switch(menuVerticalPosition) {
|
switch(menuVerticalPosition) {
|
||||||
case ITEM_MODEL_INTERNAL_MODULE_BIND:
|
case ITEM_MODEL_SETUP_INTERNAL_MODULE_BIND:
|
||||||
if (menuHorizontalPosition == 0)
|
if (menuHorizontalPosition == 0)
|
||||||
checkModelIdUnique(g_eeGeneral.currModel, INTERNAL_MODULE);
|
checkModelIdUnique(g_eeGeneral.currModel, INTERNAL_MODULE);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ITEM_MODEL_EXTERNAL_MODULE_BIND:
|
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_BIND:
|
||||||
if (menuHorizontalPosition == 0)
|
if (menuHorizontalPosition == 0)
|
||||||
checkModelIdUnique(g_eeGeneral.currModel, EXTERNAL_MODULE);
|
checkModelIdUnique(g_eeGeneral.currModel, EXTERNAL_MODULE);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -214,9 +214,9 @@ void menuModelTelemetryFrsky(event_t event)
|
||||||
|
|
||||||
case ITEM_TELEMETRY_RSSI_LABEL:
|
case ITEM_TELEMETRY_RSSI_LABEL:
|
||||||
#if defined(MULTIMODULE)
|
#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].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");
|
lcdDrawTextAlignedLeft(y, "RSNR");
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -941,9 +941,9 @@ bool menuModelSetup(event_t event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (isModuleXJT(INTERNAL_MODULE)) {
|
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) {
|
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].channelsStart = 0;
|
||||||
g_model.moduleData[0].channelsCount = defaultModuleChannels_M8(INTERNAL_MODULE);
|
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);
|
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX);
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
|
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);
|
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, MM_RF_PROTO_FIRST, MM_RF_PROTO_LAST);
|
CHECK_INCDEC_MODELVAR(event, multiRfProto, MODULE_SUBTYPE_MULTI_FIRST, MODULE_SUBTYPE_MULTI_LAST);
|
||||||
if (checkIncDec_Ret) {
|
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)
|
if (!g_model.moduleData[EXTERNAL_MODULE].multi.customProto)
|
||||||
g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(multiRfProto);
|
g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(multiRfProto);
|
||||||
g_model.moduleData[EXTERNAL_MODULE].subType = 0;
|
g_model.moduleData[EXTERNAL_MODULE].subType = 0;
|
||||||
// Sensible default for DSM2 (same as for ppm): 7ch@22ms + Autodetect settings enabled
|
// 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;
|
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -1189,7 +1189,7 @@ bool menuModelSetup(event_t event)
|
||||||
g_model.moduleData[EXTERNAL_MODULE].subType = newR9MType;
|
g_model.moduleData[EXTERNAL_MODULE].subType = newR9MType;
|
||||||
}
|
}
|
||||||
else {
|
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) {
|
if (checkIncDec_Ret) {
|
||||||
g_model.moduleData[EXTERNAL_MODULE].channelsStart = 0;
|
g_model.moduleData[EXTERNAL_MODULE].channelsStart = 0;
|
||||||
|
@ -1394,7 +1394,7 @@ bool menuModelSetup(event_t event)
|
||||||
if (attr && l_posHorz>0) {
|
if (attr && l_posHorz>0) {
|
||||||
if (s_editMode>0) {
|
if (s_editMode>0) {
|
||||||
if (l_posHorz == 1) {
|
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)) {
|
if (event == EVT_KEY_BREAK(KEY_ENTER)) {
|
||||||
uint8_t default_selection = 0; // R9M_LBT should default to 0 as available options are variables
|
uint8_t default_selection = 0; // R9M_LBT should default to 0 as available options are variables
|
||||||
if (isModuleR9M_LBT(moduleIdx)) {
|
if (isModuleR9M_LBT(moduleIdx)) {
|
||||||
|
@ -1501,15 +1501,15 @@ bool menuModelSetup(event_t event)
|
||||||
if (pdef->optionsstr)
|
if (pdef->optionsstr)
|
||||||
lcdDrawText(MENUS_MARGIN_LEFT, y, 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;
|
optionValue = 50 + 5 * optionValue;
|
||||||
|
|
||||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, optionValue, LEFT | attr);
|
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, optionValue, LEFT | attr);
|
||||||
if (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);
|
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);
|
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -1, 7);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -1559,7 +1559,7 @@ bool menuModelSetup(event_t event)
|
||||||
|
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
case ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND:
|
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);
|
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MULTI_DSM_AUTODTECT);
|
||||||
else
|
else
|
||||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MULTI_AUTOBIND);
|
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MULTI_AUTOBIND);
|
||||||
|
|
|
@ -114,7 +114,7 @@ enum MenuModelTelemetryFrskyItems {
|
||||||
#define VARIO_ROWS
|
#define VARIO_ROWS
|
||||||
#endif
|
#endif
|
||||||
#define RSSI_ROWS LABEL(RSSI), 0, 0, 0,
|
#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)
|
void onSensorMenu(const char * result)
|
||||||
{
|
{
|
||||||
|
@ -274,7 +274,7 @@ bool menuModelTelemetryFrsky(event_t event)
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
if (!IS_INTERNAL_MODULE_ON() &&
|
if (!IS_INTERNAL_MODULE_ON() &&
|
||||||
g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_MULTIMODULE &&
|
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");
|
lcdDrawText(MENUS_MARGIN_LEFT, y, "RSNR");
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -514,7 +514,7 @@ bool isSourceAvailableInResetSpecialFunction(int index)
|
||||||
#if defined(PCBXLITE)
|
#if defined(PCBXLITE)
|
||||||
bool isR9MModeAvailable(int mode)
|
bool isR9MModeAvailable(int mode)
|
||||||
{
|
{
|
||||||
#if defined(MODULE_R9M_FLEX_FW)
|
#if defined(MODULE_R9M_FLEX)
|
||||||
return mode >= MODULE_SUBTYPE_R9M_EUPLUS;
|
return mode >= MODULE_SUBTYPE_R9M_EUPLUS;
|
||||||
#else
|
#else
|
||||||
return mode <= MODULE_SUBTYPE_R9M_EU;
|
return mode <= MODULE_SUBTYPE_R9M_EU;
|
||||||
|
@ -524,7 +524,7 @@ bool isR9MModeAvailable(int mode)
|
||||||
#else
|
#else
|
||||||
bool isR9MModeAvailable(int mode)
|
bool isR9MModeAvailable(int mode)
|
||||||
{
|
{
|
||||||
#if defined(MODULE_R9M_FLEX_FW)
|
#if defined(MODULE_R9M_FLEX)
|
||||||
return mode < MODULE_SUBTYPE_R9M_EUPLUS;
|
return mode < MODULE_SUBTYPE_R9M_EUPLUS;
|
||||||
#else
|
#else
|
||||||
return true;
|
return true;
|
||||||
|
@ -532,9 +532,12 @@ bool isR9MModeAvailable(int mode)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool isPXX2ChannelsCountAllowed(int channels)
|
bool isPxx2IsrmChannelsCountAllowed(int channels)
|
||||||
{
|
{
|
||||||
return (channels % 8 == 0);
|
if (g_model.moduleData[INTERNAL_MODULE].rfProtocol == MODULE_SUBTYPE_PXX1_ACCST_D16)
|
||||||
|
return (channels <= 8);
|
||||||
|
else
|
||||||
|
return (channels % 8 == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isModuleUSingSport(uint8_t moduleBay, uint8_t moduleType)
|
bool isModuleUSingSport(uint8_t moduleBay, uint8_t moduleType)
|
||||||
|
@ -545,11 +548,11 @@ bool isModuleUSingSport(uint8_t moduleBay, uint8_t moduleType)
|
||||||
case MODULE_TYPE_PPM:
|
case MODULE_TYPE_PPM:
|
||||||
case MODULE_TYPE_DSM2:
|
case MODULE_TYPE_DSM2:
|
||||||
case MODULE_TYPE_MULTIMODULE:
|
case MODULE_TYPE_MULTIMODULE:
|
||||||
case MODULE_TYPE_ACCESS_R9M_LITE:
|
case MODULE_TYPE_PXX2_R9M_LITE:
|
||||||
case MODULE_TYPE_ACCESS_R9M_LITE_PRO:
|
case MODULE_TYPE_PXX2_R9M_LITE_PRO:
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
case MODULE_TYPE_ACCESS_ISRM:
|
case MODULE_TYPE_PXX2_ISRM:
|
||||||
if (moduleBay == EXTERNAL_MODULE)
|
if (moduleBay == EXTERNAL_MODULE)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -569,15 +572,15 @@ bool isInternalModuleAvailable(int moduleType)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
#if defined(PXX1) && defined(INTERNAL_MODULE_PXX1)
|
#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);
|
return !isModuleUSingSport(EXTERNAL_MODULE, g_model.moduleData[EXTERNAL_MODULE].type);
|
||||||
#else
|
#else
|
||||||
if (moduleType == MODULE_TYPE_PXX_XJT)
|
if (moduleType == MODULE_TYPE_PXX1_XJT)
|
||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PXX2)
|
#if defined(PXX2)
|
||||||
if (moduleType == MODULE_TYPE_ACCESS_ISRM)
|
if (moduleType == MODULE_TYPE_PXX2_ISRM)
|
||||||
#if defined(INTMODULE_USART)
|
#if defined(INTMODULE_USART)
|
||||||
return true;
|
return true;
|
||||||
#else
|
#else
|
||||||
|
@ -592,25 +595,25 @@ bool isInternalModuleAvailable(int moduleType)
|
||||||
bool isExternalModuleAvailable(int moduleType)
|
bool isExternalModuleAvailable(int moduleType)
|
||||||
{
|
{
|
||||||
#if !defined(PCBXLITE) && !defined(PCBX9LITE)
|
#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;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(PXX1)
|
#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;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(FRSKY_RELEASE)
|
#if defined(FRSKY_RELEASE)
|
||||||
if (moduleType == MODULE_TYPE_PXX_R9M)
|
if (moduleType == MODULE_TYPE_PXX1_R9M)
|
||||||
return false;
|
return false;
|
||||||
#endif
|
#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;
|
return false;
|
||||||
|
|
||||||
#if !defined(PXX2)
|
#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;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -651,20 +654,20 @@ bool isExternalModuleAvailable(int moduleType)
|
||||||
bool isRfProtocolAvailable(int protocol)
|
bool isRfProtocolAvailable(int protocol)
|
||||||
{
|
{
|
||||||
#if defined(CROSSFIRE)
|
#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;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if defined(MODULE_D16_EU_ONLY_SUPPORT)
|
#if defined(MODULE_D16_EU_ONLY_SUPPORT)
|
||||||
if (protocol == ACCST_RF_PROTO_D8) {
|
if (protocol == MODULE_SUBTYPE_PXX1_ACCST_D8) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if defined(PCBTARANIS) || defined(PCBHORUS)
|
#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;
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -834,36 +837,36 @@ const char STR_SUBTYPE_BUGS_MINI[] = "\006""Std\0 ""BUGS3H";
|
||||||
|
|
||||||
const mm_protocol_definition multi_protocols[] = {
|
const mm_protocol_definition multi_protocols[] = {
|
||||||
|
|
||||||
{MM_RF_PROTO_FLYSKY, 4, false, STR_SUBTYPE_FLYSKY, nullptr},
|
{MODULE_SUBTYPE_MULTI_FLYSKY, 4, false, STR_SUBTYPE_FLYSKY, nullptr},
|
||||||
{MM_RF_PROTO_HUBSAN, 2, false, STR_SUBTYPE_HUBSAN, STR_MULTI_VIDFREQ},
|
{MODULE_SUBTYPE_MULTI_HUBSAN, 2, false, STR_SUBTYPE_HUBSAN, STR_MULTI_VIDFREQ},
|
||||||
{MM_RF_PROTO_FRSKY, 5, false, STR_SUBTYPE_FRSKY, STR_MULTI_RFTUNE},
|
{MODULE_SUBTYPE_MULTI_FRSKY, 5, false, STR_SUBTYPE_FRSKY, STR_MULTI_RFTUNE},
|
||||||
{MM_RF_PROTO_HISKY, 1, false, STR_SUBTYPE_HISKY, nullptr},
|
{MODULE_SUBTYPE_MULTI_HISKY, 1, false, STR_SUBTYPE_HISKY, nullptr},
|
||||||
{MM_RF_PROTO_V2X2, 1, false, STR_SUBTYPE_V2X2, nullptr},
|
{MODULE_SUBTYPE_MULTI_V2X2, 1, false, STR_SUBTYPE_V2X2, nullptr},
|
||||||
{MM_RF_PROTO_DSM2, 3, false, STR_SUBTYPE_DSM, nullptr},
|
{MODULE_SUBTYPE_MULTI_DSM2, 3, false, STR_SUBTYPE_DSM, nullptr},
|
||||||
{MM_RF_PROTO_YD717, 4, false, STR_SUBTYPE_YD717, nullptr},
|
{MODULE_SUBTYPE_MULTI_YD717, 4, false, STR_SUBTYPE_YD717, nullptr},
|
||||||
{MM_RF_PROTO_KN, 1, false, STR_SUBTYPE_KN, nullptr},
|
{MODULE_SUBTYPE_MULTI_KN, 1, false, STR_SUBTYPE_KN, nullptr},
|
||||||
{MM_RF_PROTO_SYMAX, 1, false, STR_SUBTYPE_SYMAX, nullptr},
|
{MODULE_SUBTYPE_MULTI_SYMAX, 1, false, STR_SUBTYPE_SYMAX, nullptr},
|
||||||
{MM_RF_PROTO_SLT, 4, false, STR_SUBTYPE_SLT, nullptr},
|
{MODULE_SUBTYPE_MULTI_SLT, 4, false, STR_SUBTYPE_SLT, nullptr},
|
||||||
{MM_RF_PROTO_CX10, 6, false, STR_SUBTYPE_CX10, nullptr},
|
{MODULE_SUBTYPE_MULTI_CX10, 6, false, STR_SUBTYPE_CX10, nullptr},
|
||||||
{MM_RF_PROTO_CG023, 1, false, STR_SUBTYPE_CG023, nullptr},
|
{MODULE_SUBTYPE_MULTI_CG023, 1, false, STR_SUBTYPE_CG023, nullptr},
|
||||||
{MM_RF_PROTO_BAYANG, 3, false, STR_SUBTYPE_BAYANG, STR_MULTI_TELEMETRY},
|
{MODULE_SUBTYPE_MULTI_BAYANG, 3, false, STR_SUBTYPE_BAYANG, STR_MULTI_TELEMETRY},
|
||||||
{MM_RF_PROTO_MT99XX, 4, false, STR_SUBTYPE_MT99, nullptr},
|
{MODULE_SUBTYPE_MULTI_MT99XX, 4, false, STR_SUBTYPE_MT99, nullptr},
|
||||||
{MM_RF_PROTO_MJXQ, 6, false, STR_SUBTYPE_MJXQ, STR_MULTI_RFTUNE},
|
{MODULE_SUBTYPE_MULTI_MJXQ, 6, false, STR_SUBTYPE_MJXQ, STR_MULTI_RFTUNE},
|
||||||
{MM_RF_PROTO_FY326, 1, false, STR_SUBTYPE_FY326, nullptr},
|
{MODULE_SUBTYPE_MULTI_FY326, 1, false, STR_SUBTYPE_FY326, nullptr},
|
||||||
{MM_RF_PROTO_SFHSS, 0, true, NO_SUBTYPE, STR_MULTI_RFTUNE},
|
{MODULE_SUBTYPE_MULTI_SFHSS, 0, true, NO_SUBTYPE, STR_MULTI_RFTUNE},
|
||||||
{MM_RF_PROTO_HONTAI, 3, false, STR_SUBTYPE_HONTAI, nullptr},
|
{MODULE_SUBTYPE_MULTI_HONTAI, 3, false, STR_SUBTYPE_HONTAI, nullptr},
|
||||||
{MM_RF_PROTO_OLRS, 0, false, NO_SUBTYPE, STR_MULTI_RFPOWER},
|
{MODULE_SUBTYPE_MULTI_OLRS, 0, false, NO_SUBTYPE, STR_MULTI_RFPOWER},
|
||||||
{MM_RF_PROTO_FS_AFHDS2A, 3, true, STR_SUBTYPE_AFHDS2A, STR_MULTI_SERVOFREQ},
|
{MODULE_SUBTYPE_MULTI_FS_AFHDS2A, 3, true, STR_SUBTYPE_AFHDS2A, STR_MULTI_SERVOFREQ},
|
||||||
{MM_RF_PROTO_Q2X2, 2, false, STR_SUBTYPE_Q2X2, nullptr},
|
{MODULE_SUBTYPE_MULTI_Q2X2, 2, false, STR_SUBTYPE_Q2X2, nullptr},
|
||||||
{MM_RF_PROTO_WK_2X01, 5, false, STR_SUBTYPE_WK2x01, nullptr},
|
{MODULE_SUBTYPE_MULTI_WK_2X01, 5, false, STR_SUBTYPE_WK2x01, nullptr},
|
||||||
{MM_RF_PROTO_Q303, 3, false, STR_SUBTYPE_Q303, nullptr},
|
{MODULE_SUBTYPE_MULTI_Q303, 3, false, STR_SUBTYPE_Q303, nullptr},
|
||||||
{MM_RF_PROTO_CABELL, 7, false, STR_SUBTYPE_CABELL, STR_MULTI_OPTION},
|
{MODULE_SUBTYPE_MULTI_CABELL, 7, false, STR_SUBTYPE_CABELL, STR_MULTI_OPTION},
|
||||||
{MM_RF_PROTO_H83D, 3, false, STR_SUBTYPE_H83D, nullptr},
|
{MODULE_SUBTYPE_MULTI_H83D, 3, false, STR_SUBTYPE_H83D, nullptr},
|
||||||
{MM_RF_PROTO_CORONA, 2, false, STR_SUBTYPE_CORONA, STR_MULTI_RFTUNE},
|
{MODULE_SUBTYPE_MULTI_CORONA, 2, false, STR_SUBTYPE_CORONA, STR_MULTI_RFTUNE},
|
||||||
{MM_RF_PROTO_HITEC, 2, false, STR_SUBTYPE_HITEC, STR_MULTI_RFTUNE},
|
{MODULE_SUBTYPE_MULTI_HITEC, 2, false, STR_SUBTYPE_HITEC, STR_MULTI_RFTUNE},
|
||||||
{MM_RF_PROTO_E01X, 2, false, STR_SUBTYPE_E01X, nullptr},
|
{MODULE_SUBTYPE_MULTI_E01X, 2, false, STR_SUBTYPE_E01X, nullptr},
|
||||||
{MM_RF_PROTO_GD00X, 1, false, STR_SUBTYPE_GD00X, nullptr},
|
{MODULE_SUBTYPE_MULTI_GD00X, 1, false, STR_SUBTYPE_GD00X, nullptr},
|
||||||
{MM_RF_PROTO_BUGS_MINI, 1, false, STR_SUBTYPE_BUGS_MINI,nullptr},
|
{MODULE_SUBTYPE_MULTI_BUGS_MINI, 1, false, STR_SUBTYPE_BUGS_MINI,nullptr},
|
||||||
{MM_RF_CUSTOM_SELECTED, 7, true, NO_SUBTYPE, STR_MULTI_OPTION},
|
{MM_RF_CUSTOM_SELECTED, 7, true, NO_SUBTYPE, STR_MULTI_OPTION},
|
||||||
|
|
||||||
// Sentinel and default for protocols not listed above (MM_RF_CUSTOM is 0xff)
|
// Sentinel and default for protocols not listed above (MM_RF_CUSTOM is 0xff)
|
||||||
|
|
|
@ -54,7 +54,7 @@ bool isSwitchAvailableInCustomFunctions(int swtch);
|
||||||
bool isSwitchAvailableInMixes(int swtch);
|
bool isSwitchAvailableInMixes(int swtch);
|
||||||
bool isSwitchAvailableInTimers(int swtch);
|
bool isSwitchAvailableInTimers(int swtch);
|
||||||
bool isR9MModeAvailable(int mode);
|
bool isR9MModeAvailable(int mode);
|
||||||
bool isPXX2ChannelsCountAllowed(int channels);
|
bool isPxx2IsrmChannelsCountAllowed(int channels);
|
||||||
bool isExternalModuleAvailable(int moduleType);
|
bool isExternalModuleAvailable(int moduleType);
|
||||||
bool isInternalModuleAvailable(int module);
|
bool isInternalModuleAvailable(int module);
|
||||||
bool isRfProtocolAvailable(int protocol);
|
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
|
// 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 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)
|
#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_SUBTYPE_ROWS(x) isModuleMultimodule(x) ? MULTIMODULE_RFPROTO_ROWS(x) : HIDDEN_ROW,
|
||||||
#define MULTIMODULE_HAS_SUBTYPE(x) (getMultiProtocolDefinition(x)->maxSubtype > 0)
|
#define MULTIMODULE_HAS_SUBTYPE(x) (getMultiProtocolDefinition(x)->maxSubtype > 0)
|
||||||
#define MULTIMODULE_HASOPTIONS(x) (getMultiProtocolDefinition(x)->optionsstr != nullptr)
|
#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_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
|
#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
|
#endif
|
||||||
|
|
||||||
#define MAX_RX_NUM(x) (isModuleDSM2(x) ? 20 : isModuleMultimodule(x) ? MULTI_MAX_RX_NUM(x) : 63)
|
#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_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== ACCST_RF_PROTO_D16) || isModuleR9M(x))
|
#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 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_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);
|
void editStickHardwareSettings(coord_t x, coord_t y, int idx, event_t event, LcdFlags flags);
|
||||||
|
|
|
@ -225,42 +225,6 @@ enum TelemetrySensorFormula
|
||||||
TELEM_FORMULA_LAST = TELEM_FORMULA_DIST
|
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 {
|
enum SwashType {
|
||||||
SWASH_TYPE_NONE,
|
SWASH_TYPE_NONE,
|
||||||
SWASH_TYPE_120,
|
SWASH_TYPE_120,
|
||||||
|
@ -275,8 +239,6 @@ enum SwashType {
|
||||||
#define TRIM_MAX 125
|
#define TRIM_MAX 125
|
||||||
#define TRIM_MIN (-TRIM_MAX)
|
#define TRIM_MIN (-TRIM_MAX)
|
||||||
|
|
||||||
#define ROTARY_ENCODER_MAX 1024
|
|
||||||
|
|
||||||
#define TRIMS_ARRAY_SIZE 8
|
#define TRIMS_ARRAY_SIZE 8
|
||||||
#define TRIM_MODE_NONE 0x1F // 0b11111
|
#define TRIM_MODE_NONE 0x1F // 0b11111
|
||||||
|
|
||||||
|
@ -288,153 +250,7 @@ enum SwashType {
|
||||||
#define TIMER_COUNTDOWN_START(x) 10
|
#define TIMER_COUNTDOWN_START(x) 10
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
enum {
|
#include "pulses/modules_constants.h"
|
||||||
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
|
|
||||||
};
|
|
||||||
|
|
||||||
enum ThrottleSources {
|
enum ThrottleSources {
|
||||||
THROTTLE_SOURCE_THR,
|
THROTTLE_SOURCE_THR,
|
||||||
|
|
|
@ -473,7 +473,7 @@ void modelDefault(uint8_t id)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(HARDWARE_INTERNAL_MODULE)
|
#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);
|
g_model.moduleData[INTERNAL_MODULE].channelsCount = defaultModuleChannels_M8(INTERNAL_MODULE);
|
||||||
#elif defined(PCBSKY9X)
|
#elif defined(PCBSKY9X)
|
||||||
g_model.moduleData[EXTERNAL_MODULE].type = MODULE_TYPE_PPM;
|
g_model.moduleData[EXTERNAL_MODULE].type = MODULE_TYPE_PPM;
|
||||||
|
|
|
@ -316,7 +316,7 @@ void memswap(void * a, void * b, uint8_t size);
|
||||||
#include "timers.h"
|
#include "timers.h"
|
||||||
#include "storage/storage.h"
|
#include "storage/storage.h"
|
||||||
#include "pulses/pulses.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_CFN_TYPE uint64_t // current max = 64 function switches
|
||||||
#define MASK_FUNC_TYPE uint32_t // current max = 32 functions
|
#define MASK_FUNC_TYPE uint32_t // current max = 32 functions
|
||||||
|
|
162
radio/src/pulses/modules_constants.h
Normal file
162
radio/src/pulses/modules_constants.h
Normal 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
|
||||||
|
};
|
|
@ -21,9 +21,10 @@
|
||||||
#ifndef _MODULES_H_
|
#ifndef _MODULES_H_
|
||||||
#define _MODULES_H_
|
#define _MODULES_H_
|
||||||
|
|
||||||
#include "myeeprom.h"
|
|
||||||
#include "bitfield.h"
|
#include "bitfield.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define CROSSFIRE_CHANNELS_COUNT 16
|
#define CROSSFIRE_CHANNELS_COUNT 16
|
||||||
|
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
|
@ -34,7 +35,7 @@ inline bool isModuleMultimodule(uint8_t idx)
|
||||||
|
|
||||||
inline bool isModuleMultimoduleDSM2(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
|
#else
|
||||||
inline bool isModuleMultimodule(uint8_t)
|
inline bool isModuleMultimodule(uint8_t)
|
||||||
|
@ -50,17 +51,17 @@ inline bool isModuleMultimoduleDSM2(uint8_t)
|
||||||
|
|
||||||
inline bool isModuleXJT(uint8_t idx)
|
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)
|
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)
|
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)
|
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)
|
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);
|
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)
|
#if defined(DSM2)
|
||||||
inline bool isModuleDSM2(uint8_t idx)
|
inline bool isModuleDSM2(uint8_t idx)
|
||||||
{
|
{
|
|
@ -160,7 +160,7 @@ void sendFrameProtocolHeader(uint8_t port, bool failsafe)
|
||||||
protoByte |= MULTI_SEND_RANGECHECK;
|
protoByte |= MULTI_SEND_RANGECHECK;
|
||||||
|
|
||||||
// rfProtocol
|
// 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
|
// Autobinding should always be done in DSMX 11ms
|
||||||
if (g_model.moduleData[port].multi.autoBindMode && moduleState[port].mode == MODULE_MODE_BIND)
|
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)
|
if (type >= 25)
|
||||||
type = type + 1;
|
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) {
|
if (subtype == MM_RF_FRSKY_SUBTYPE_D8) {
|
||||||
//D8
|
//D8
|
||||||
type = 3;
|
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
|
// Set the highest bit of option byte in AFHDS2A protocol to instruct MULTI to passthrough telemetry bytes instead
|
||||||
// of sending Frsky D telemetry
|
// 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;
|
optionValue = optionValue | 0x80;
|
||||||
|
|
||||||
// For custom protocol send unmodified type byte
|
// For custom protocol send unmodified type byte
|
||||||
|
@ -225,7 +225,7 @@ void sendFrameProtocolHeader(uint8_t port, bool failsafe)
|
||||||
|
|
||||||
// protocol byte
|
// protocol byte
|
||||||
protoByte |= (type & 0x1f);
|
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);
|
protoByte |= (g_model.moduleData[port].multi.autoBindMode << 6);
|
||||||
|
|
||||||
sendByteSbus(protoByte);
|
sendByteSbus(protoByte);
|
||||||
|
|
|
@ -54,7 +54,7 @@ uint8_t getRequiredProtocol(uint8_t module)
|
||||||
protocol = PROTOCOL_CHANNELS_PPM;
|
protocol = PROTOCOL_CHANNELS_PPM;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MODULE_TYPE_PXX_XJT:
|
case MODULE_TYPE_PXX1_XJT:
|
||||||
#if defined(INTMODULE_USART)
|
#if defined(INTMODULE_USART)
|
||||||
if (module == INTERNAL_MODULE) {
|
if (module == INTERNAL_MODULE) {
|
||||||
protocol = PROTOCOL_CHANNELS_PXX1_SERIAL;
|
protocol = PROTOCOL_CHANNELS_PXX1_SERIAL;
|
||||||
|
@ -63,18 +63,18 @@ uint8_t getRequiredProtocol(uint8_t module)
|
||||||
#endif
|
#endif
|
||||||
// no break
|
// no break
|
||||||
|
|
||||||
case MODULE_TYPE_PXX_R9M:
|
case MODULE_TYPE_PXX1_R9M:
|
||||||
protocol = PROTOCOL_CHANNELS_PXX1_PULSES;
|
protocol = PROTOCOL_CHANNELS_PXX1_PULSES;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MODULE_TYPE_PXX_R9M_LITE:
|
case MODULE_TYPE_PXX1_R9M_LITE:
|
||||||
protocol = PROTOCOL_CHANNELS_PXX1_SERIAL;
|
protocol = PROTOCOL_CHANNELS_PXX1_SERIAL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MODULE_TYPE_ACCESS_ISRM:
|
case MODULE_TYPE_PXX2_ISRM:
|
||||||
case MODULE_TYPE_ACCESS_R9M:
|
case MODULE_TYPE_PXX2_R9M:
|
||||||
case MODULE_TYPE_ACCESS_R9M_LITE:
|
case MODULE_TYPE_PXX2_R9M_LITE:
|
||||||
case MODULE_TYPE_ACCESS_R9M_LITE_PRO:
|
case MODULE_TYPE_PXX2_R9M_LITE_PRO:
|
||||||
protocol = PROTOCOL_CHANNELS_PXX2;
|
protocol = PROTOCOL_CHANNELS_PXX2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#include "pulses_common.h"
|
#include "pulses_common.h"
|
||||||
#include "pulses/pxx1.h"
|
#include "pulses/pxx1.h"
|
||||||
#include "pulses/pxx2.h"
|
#include "pulses/pxx2.h"
|
||||||
#include "modules.h"
|
#include "modules_helpers.h"
|
||||||
#include "ff.h"
|
#include "ff.h"
|
||||||
|
|
||||||
#if NUM_MODULES > 1
|
#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_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_
|
#endif // _PULSES_H_
|
||||||
|
|
|
@ -38,7 +38,7 @@ uint8_t Pxx2Pulses::addFlag0(uint8_t module)
|
||||||
|
|
||||||
void Pxx2Pulses::addFlag1(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);
|
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;
|
BindInformation * destination = moduleState[module].bindInformation;
|
||||||
|
|
||||||
|
@ -236,13 +250,13 @@ void Pxx2Pulses::setupBindFrame(uint8_t module)
|
||||||
addFrameType(PXX2_TYPE_C_MODULE, PXX2_TYPE_ID_BIND);
|
addFrameType(PXX2_TYPE_C_MODULE, PXX2_TYPE_ID_BIND);
|
||||||
|
|
||||||
if (destination->step == BIND_INFO_REQUEST) {
|
if (destination->step == BIND_INFO_REQUEST) {
|
||||||
Pxx2Transport::addByte(0x02);
|
Pxx2Transport::addByte(0x02); // DATA0
|
||||||
for (uint8_t i=0; i<PXX2_LEN_RX_NAME; i++) {
|
for (uint8_t i=0; i<PXX2_LEN_RX_NAME; i++) {
|
||||||
Pxx2Transport::addByte(destination->candidateReceiversNames[destination->selectedReceiverIndex][i]);
|
Pxx2Transport::addByte(destination->candidateReceiversNames[destination->selectedReceiverIndex][i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (destination->step == BIND_START) {
|
else if (destination->step == BIND_START) {
|
||||||
Pxx2Transport::addByte(0x01);
|
Pxx2Transport::addByte(0x01); // DATA0
|
||||||
for (uint8_t i=0; i<PXX2_LEN_RX_NAME; i++) {
|
for (uint8_t i=0; i<PXX2_LEN_RX_NAME; i++) {
|
||||||
Pxx2Transport::addByte(destination->candidateReceiversNames[destination->selectedReceiverIndex][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]);
|
Pxx2Transport::addByte(g_model.header.modelId[module]);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Pxx2Transport::addByte(0x00);
|
Pxx2Transport::addByte(0x00); // DATA0
|
||||||
for (uint8_t i=0; i<PXX2_LEN_REGISTRATION_ID; i++) {
|
for (uint8_t i=0; i<PXX2_LEN_REGISTRATION_ID; i++) {
|
||||||
Pxx2Transport::addByte(zchar2char(g_model.modelRegistrationID[i]));
|
Pxx2Transport::addByte(zchar2char(g_model.modelRegistrationID[i]));
|
||||||
}
|
}
|
||||||
|
@ -343,7 +357,10 @@ void Pxx2Pulses::setupFrame(uint8_t module)
|
||||||
setupRegisterFrame(module);
|
setupRegisterFrame(module);
|
||||||
break;
|
break;
|
||||||
case MODULE_MODE_BIND:
|
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;
|
break;
|
||||||
case MODULE_MODE_RESET:
|
case MODULE_MODE_RESET:
|
||||||
setupResetFrame(module);
|
setupResetFrame(module);
|
||||||
|
|
|
@ -198,7 +198,9 @@ class Pxx2Pulses: public Pxx2Transport {
|
||||||
|
|
||||||
void setupRegisterFrame(uint8_t module);
|
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);
|
void setupResetFrame(uint8_t module);
|
||||||
|
|
||||||
|
|
|
@ -1059,7 +1059,7 @@ void convertModelData_216_to_217(ModelData &model)
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
newModel.moduleData[INTERNAL_MODULE].type = MODULE_TYPE_PXX_XJT;
|
newModel.moduleData[INTERNAL_MODULE].type = MODULE_TYPE_PXX1_XJT;
|
||||||
#endif
|
#endif
|
||||||
newModel.moduleData[EXTERNAL_MODULE].type = oldModel.externalModule;
|
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++) {
|
for (int i=0; i<MAX_OUTPUT_CHANNELS; i++) {
|
||||||
newModel.limitData[i] = oldModel.limitData[i];
|
newModel.limitData[i] = oldModel.limitData[i];
|
||||||
#if defined(PCBTARANIS)
|
#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;
|
newModel.limitData[i].ppmCenter = (oldModel.limitData[i].ppmCenter * 612) / 1024;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -180,9 +180,9 @@ void convertModelData_218_to_219(ModelData &model)
|
||||||
for (int i=0; i<NUM_MODULES; i++) {
|
for (int i=0; i<NUM_MODULES; i++) {
|
||||||
memcpy(&newModel.moduleData[i], &oldModel.moduleData[i], 4);
|
memcpy(&newModel.moduleData[i], &oldModel.moduleData[i], 4);
|
||||||
memcpy(((uint8_t *)&newModel.moduleData[i]) + 4, ((uint8_t *)&oldModel.moduleData[i]) + 64 + 4, 2);
|
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;
|
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;
|
newModel.moduleData[i].type += 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,8 +56,8 @@ void preModelLoad()
|
||||||
#if defined(PCBTARANIS) || defined(PCBHORUS)
|
#if defined(PCBTARANIS) || defined(PCBHORUS)
|
||||||
static void fixUpModel()
|
static void fixUpModel()
|
||||||
{
|
{
|
||||||
// Ensure that when rfProtocol is ACCST_RF_PROTO_OFF the type of the module is MODULE_TYPE_NONE
|
// 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_PXX_XJT && g_model.moduleData[INTERNAL_MODULE].rfProtocol == ACCST_RF_PROTO_OFF)
|
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;
|
g_model.moduleData[INTERNAL_MODULE].type = MODULE_TYPE_NONE;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -214,7 +214,7 @@ extern "C" void EXTMODULE_USART_IRQHandler(void)
|
||||||
|
|
||||||
void extmodulePxx2Start()
|
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
|
#else
|
||||||
void extmodulePxx2Start()
|
void extmodulePxx2Start()
|
||||||
|
|
|
@ -53,9 +53,9 @@ enum MultiBufferState : uint8_t {
|
||||||
|
|
||||||
MultiBufferState guessProtocol()
|
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;
|
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;
|
return FlyskyTelemetryFallback;
|
||||||
else
|
else
|
||||||
return FrskyTelemetryFallback;
|
return FrskyTelemetryFallback;
|
||||||
|
|
|
@ -373,7 +373,7 @@ void processSpektrumPacket(const uint8_t *packet)
|
||||||
void processDSMBindPacket(const uint8_t *packet)
|
void processDSMBindPacket(const uint8_t *packet)
|
||||||
{
|
{
|
||||||
uint32_t debugval;
|
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) {
|
&& g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode) {
|
||||||
|
|
||||||
int channels = packet[5];
|
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);
|
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 */
|
/* 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;
|
multiBindStatus=MULTI_BIND_FINISHED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -107,7 +107,7 @@ void frskyDSetDefault(int index, uint16_t id);
|
||||||
extern uint8_t telemetryProtocol;
|
extern uint8_t telemetryProtocol;
|
||||||
|
|
||||||
#if defined (MULTIMODULE)
|
#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()))
|
#define IS_FRSKY_SPORT_PROTOCOL() (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT || (telemetryProtocol == PROTOCOL_TELEMETRY_MULTIMODULE && IS_D16_MULTI()))
|
||||||
#else
|
#else
|
||||||
#define IS_FRSKY_SPORT_PROTOCOL() (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT)
|
#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
|
#endif
|
||||||
|
|
||||||
#if defined(STM32)
|
#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
|
#else
|
||||||
#define IS_TELEMETRY_INTERNAL_MODULE() (false)
|
#define IS_TELEMETRY_INTERNAL_MODULE() (false)
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -47,7 +47,7 @@ TEST(Conversions, ConversionX9DPFrom22)
|
||||||
EXPECT_EQ(SWASH_TYPE_120X, g_model.swashR.type);
|
EXPECT_EQ(SWASH_TYPE_120X, g_model.swashR.type);
|
||||||
EXPECT_EQ(10, g_model.flightModeData[0].gvars[0]);
|
EXPECT_EQ(10, g_model.flightModeData[0].gvars[0]);
|
||||||
EXPECT_ZSTREQ("Tes", g_model.gvars[0].name);
|
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_EQ(MODULE_SUBTYPE_R9M_FCC, g_model.moduleData[EXTERNAL_MODULE].subType);
|
||||||
EXPECT_ZSTREQ("Thr", g_model.inputNames[0]);
|
EXPECT_ZSTREQ("Thr", g_model.inputNames[0]);
|
||||||
EXPECT_ZSTREQ("Tes", g_model.telemetrySensors[0].label);
|
EXPECT_ZSTREQ("Tes", g_model.telemetrySensors[0].label);
|
||||||
|
@ -66,7 +66,7 @@ TEST(Conversions, ConversionX7From22)
|
||||||
eeLoadModel(0);
|
eeLoadModel(0);
|
||||||
|
|
||||||
EXPECT_ZSTREQ("Test", g_model.header.name);
|
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(MODULE_SUBTYPE_R9M_EU, g_model.moduleData[EXTERNAL_MODULE].subType);
|
||||||
EXPECT_EQ(80, g_model.mixData[0].weight);
|
EXPECT_EQ(80, g_model.mixData[0].weight);
|
||||||
EXPECT_EQ(80, g_model.expoData[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_ZSTREQ("Tes", g_model.flightModeData[0].name);
|
||||||
EXPECT_EQ(10, g_model.flightModeData[0].gvars[0]);
|
EXPECT_EQ(10, g_model.flightModeData[0].gvars[0]);
|
||||||
EXPECT_ZSTREQ("Tes", g_model.gvars[0].name);
|
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_EQ(MODULE_SUBTYPE_R9M_EU, g_model.moduleData[EXTERNAL_MODULE].subType);
|
||||||
EXPECT_ZSTREQ("Rud", g_model.inputNames[0]);
|
EXPECT_ZSTREQ("Rud", g_model.inputNames[0]);
|
||||||
EXPECT_ZSTREQ("Tes", g_model.telemetrySensors[0].label);
|
EXPECT_ZSTREQ("Tes", g_model.telemetrySensors[0].label);
|
||||||
|
|
|
@ -309,10 +309,6 @@ TEST(FrSkySPORT, frskySetCellVoltage)
|
||||||
|
|
||||||
//display test
|
//display test
|
||||||
lcdClear();
|
lcdClear();
|
||||||
|
|
||||||
#if defined(PCBX9D) || defined(PCBX9DP) || defined(PCBX9E)
|
|
||||||
g_model.voltsSource = FRSKY_VOLTS_SOURCE_A1;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(FrSkySPORT, StrangeCellsBug)
|
TEST(FrSkySPORT, StrangeCellsBug)
|
||||||
|
@ -389,10 +385,6 @@ TEST(FrSkySPORT, frskySetCellVoltageTwoSensors)
|
||||||
|
|
||||||
//display test
|
//display test
|
||||||
lcdClear();
|
lcdClear();
|
||||||
|
|
||||||
#if defined(PCBX9D) || defined(PCBX9DP) || defined(PCBX9E)
|
|
||||||
g_model.voltsSource = FRSKY_VOLTS_SOURCE_A1;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void generateSportFasVoltagePacket(uint8_t * packet, uint32_t voltage)
|
void generateSportFasVoltagePacket(uint8_t * packet, uint32_t voltage)
|
||||||
|
|
|
@ -73,7 +73,8 @@ ISTR(R9M_LITE_FCC_POWER_VALUES);
|
||||||
ISTR(R9M_LITE_LBT_POWER_VALUES);
|
ISTR(R9M_LITE_LBT_POWER_VALUES);
|
||||||
ISTR(TELEMETRY_PROTOCOLS);
|
ISTR(TELEMETRY_PROTOCOLS);
|
||||||
ISTR(ACCST_RF_PROTOCOLS);
|
ISTR(ACCST_RF_PROTOCOLS);
|
||||||
ISTR(ACCESS_RF_PROTOCOLS);
|
ISTR(ISRM_PXX2_RF_PROTOCOLS);
|
||||||
|
ISTR(R9M_PXX2_RF_PROTOCOLS);
|
||||||
ISTR(DSM_PROTOCOLS);
|
ISTR(DSM_PROTOCOLS);
|
||||||
ISTR(VOLTSRC);
|
ISTR(VOLTSRC);
|
||||||
ISTR(CURVE_TYPES);
|
ISTR(CURVE_TYPES);
|
||||||
|
|
|
@ -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_R9M_LITE_LBT_POWER_VALUES[];
|
||||||
extern const char STR_TELEMETRY_PROTOCOLS[];
|
extern const char STR_TELEMETRY_PROTOCOLS[];
|
||||||
extern const char STR_ACCST_RF_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[];
|
extern const char STR_DSM_PROTOCOLS[];
|
||||||
|
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
|
|
|
@ -103,14 +103,6 @@
|
||||||
#define LEN_JACKMODES "\007"
|
#define LEN_JACKMODES "\007"
|
||||||
#define TR_JACKMODES "Zeptat\0""Audio\0 ""Trenér"
|
#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 LEN_TELEMETRY_PROTOCOLS "\017"
|
||||||
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 FrSky D\0 FrSky D (kabel)Spektrum\0 "
|
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 FrSky D\0 FrSky D (kabel)Spektrum\0 "
|
||||||
|
|
||||||
|
|
|
@ -104,14 +104,6 @@
|
||||||
#define LEN_JACKMODES "\007"
|
#define LEN_JACKMODES "\007"
|
||||||
#define TR_JACKMODES "Popup\0 ""Audio\0 ""Trainer"
|
#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 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"
|
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (Kabel)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||||
|
|
||||||
|
|
|
@ -104,14 +104,6 @@
|
||||||
#define LEN_JACKMODES "\007"
|
#define LEN_JACKMODES "\007"
|
||||||
#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer"
|
#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 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"
|
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||||
|
|
||||||
|
|
|
@ -104,14 +104,6 @@
|
||||||
#define LEN_JACKMODES "\007"
|
#define LEN_JACKMODES "\007"
|
||||||
#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer"
|
#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 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"
|
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||||
|
|
||||||
|
|
|
@ -104,14 +104,6 @@
|
||||||
#define LEN_JACKMODES "\007"
|
#define LEN_JACKMODES "\007"
|
||||||
#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer"
|
#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 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"
|
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||||
|
|
||||||
|
|
|
@ -104,14 +104,6 @@
|
||||||
#define LEN_JACKMODES "\007"
|
#define LEN_JACKMODES "\007"
|
||||||
#define TR_JACKMODES "Demander""Audio\0 ""Ecolage"
|
#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 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"
|
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||||
|
|
||||||
|
|
|
@ -104,14 +104,6 @@
|
||||||
#define LEN_JACKMODES "\007"
|
#define LEN_JACKMODES "\007"
|
||||||
#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer"
|
#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 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"
|
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||||
|
|
||||||
|
|
|
@ -106,14 +106,6 @@
|
||||||
#define LEN_JACKMODES "\007"
|
#define LEN_JACKMODES "\007"
|
||||||
#define TR_JACKMODES "Popup\0 ""Audio\0 ""Trainer"
|
#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 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"
|
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||||
|
|
||||||
|
|
|
@ -104,14 +104,6 @@
|
||||||
#define LEN_JACKMODES "\007"
|
#define LEN_JACKMODES "\007"
|
||||||
#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer"
|
#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 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"
|
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||||
|
|
||||||
|
|
|
@ -104,14 +104,6 @@
|
||||||
#define LEN_JACKMODES "\007"
|
#define LEN_JACKMODES "\007"
|
||||||
#define TR_JACKMODES "Popup\0 ""Audio\0 ""Trainer"
|
#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 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"
|
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||||
|
|
||||||
|
|
|
@ -104,14 +104,6 @@
|
||||||
#define LEN_JACKMODES "\007"
|
#define LEN_JACKMODES "\007"
|
||||||
#define TR_JACKMODES "Ask\0 ""Audio\0 ""Trainer"
|
#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 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"
|
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||||
|
|
||||||
|
|
|
@ -69,24 +69,40 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PCBHORUS)
|
#if defined(PCBHORUS)
|
||||||
#define TR_VTRAINERMODES TR_VTRAINER_MASTER_JACK TR_VTRAINER_SLAVE_JACK TR_VTRAINER_MASTER_BATTERY TR_VTRAINER_BLUETOOTH
|
#define TR_VTRAINERMODES TR_VTRAINER_MASTER_JACK TR_VTRAINER_SLAVE_JACK TR_VTRAINER_MASTER_BATTERY TR_VTRAINER_BLUETOOTH
|
||||||
#elif defined(PCBX9E)
|
#elif defined(PCBX9E)
|
||||||
#define TR_VTRAINERMODES TR_VTRAINER_MASTER_JACK TR_VTRAINER_SLAVE_JACK TR_VTRAINER_MASTER_SBUS_MODULE TR_VTRAINER_MASTER_CPPM_MODULE TR_VTRAINER_MASTER_BATTERY TR_VTRAINER_BLUETOOTH
|
#define TR_VTRAINERMODES TR_VTRAINER_MASTER_JACK TR_VTRAINER_SLAVE_JACK TR_VTRAINER_MASTER_SBUS_MODULE TR_VTRAINER_MASTER_CPPM_MODULE TR_VTRAINER_MASTER_BATTERY TR_VTRAINER_BLUETOOTH
|
||||||
#elif defined(PCBTARANIS) && defined(BLUETOOTH)
|
#elif defined(PCBTARANIS) && defined(BLUETOOTH)
|
||||||
#define TR_VTRAINERMODES TR_VTRAINER_MASTER_JACK TR_VTRAINER_SLAVE_JACK TR_VTRAINER_MASTER_SBUS_MODULE TR_VTRAINER_MASTER_CPPM_MODULE TR_VTRAINER_MASTER_BATTERY TR_VTRAINER_BLUETOOTH
|
#define TR_VTRAINERMODES TR_VTRAINER_MASTER_JACK TR_VTRAINER_SLAVE_JACK TR_VTRAINER_MASTER_SBUS_MODULE TR_VTRAINER_MASTER_CPPM_MODULE TR_VTRAINER_MASTER_BATTERY TR_VTRAINER_BLUETOOTH
|
||||||
#elif defined(PCBTARANIS)
|
#elif defined(PCBTARANIS)
|
||||||
#define TR_VTRAINERMODES TR_VTRAINER_MASTER_JACK TR_VTRAINER_SLAVE_JACK TR_VTRAINER_MASTER_SBUS_MODULE TR_VTRAINER_MASTER_CPPM_MODULE TR_VTRAINER_MASTER_BATTERY
|
#define TR_VTRAINERMODES TR_VTRAINER_MASTER_JACK TR_VTRAINER_SLAVE_JACK TR_VTRAINER_MASTER_SBUS_MODULE TR_VTRAINER_MASTER_CPPM_MODULE TR_VTRAINER_MASTER_BATTERY
|
||||||
#else
|
#else
|
||||||
#define TR_VTRAINERMODES TR_VTRAINER_MASTER_JACK TR_VTRAINER_SLAVE_JACK TR_VTRAINER_MASTER_CPPM_MODULE TR_VTRAINER_MASTER_BATTERY
|
#define TR_VTRAINERMODES TR_VTRAINER_MASTER_JACK TR_VTRAINER_SLAVE_JACK TR_VTRAINER_MASTER_CPPM_MODULE TR_VTRAINER_MASTER_BATTERY
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#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
|
#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 LEN_ACCST_RF_PROTOCOLS "\004"
|
||||||
#define TR_ACCST_RF_PROTOCOLS "OFF\0""D16\0""D8\0 ""LR12"
|
#define TR_ACCST_RF_PROTOCOLS "OFF\0""D16\0""D8\0 ""LR12"
|
||||||
|
|
||||||
#define LEN_ACCESS_RF_PROTOCOLS "\006"
|
#if defined(PXX1)
|
||||||
#define TR_ACCESS_RF_PROTOCOLS "ACCESS""D16\0 ""LR12"
|
#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 LEN_DSM_PROTOCOLS "\004"
|
||||||
#define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX"
|
#define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX"
|
||||||
|
|
|
@ -41,7 +41,7 @@ options_sky9x = {
|
||||||
"faichoice": ("FAI", "CHOICE", None),
|
"faichoice": ("FAI", "CHOICE", None),
|
||||||
"nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"),
|
"nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"),
|
||||||
"multimodule": ("MULTIMODULE", "YES", "NO"),
|
"multimodule": ("MULTIMODULE", "YES", "NO"),
|
||||||
"flexr9m": ("MODULE_R9M_FLEX_FW", "YES", None)
|
"flexr9m": ("MODULE_R9M_FLEX", "YES", None)
|
||||||
}
|
}
|
||||||
|
|
||||||
options_ar9x = {
|
options_ar9x = {
|
||||||
|
@ -63,7 +63,7 @@ options_ar9x = {
|
||||||
"nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"),
|
"nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"),
|
||||||
# "rtc": ("RTCLOCK", "YES", "NO"),
|
# "rtc": ("RTCLOCK", "YES", "NO"),
|
||||||
"multimodule": ("MULTIMODULE", "YES", "NO"),
|
"multimodule": ("MULTIMODULE", "YES", "NO"),
|
||||||
"flexr9m": ("MODULE_R9M_FLEX_FW", "YES", None)
|
"flexr9m": ("MODULE_R9M_FLEX", "YES", None)
|
||||||
}
|
}
|
||||||
|
|
||||||
options_taranis_x9d = {
|
options_taranis_x9d = {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue