feat: Support for MPM DSM clone mode (#3974)
This commit is contained in:
@@ -126,6 +126,7 @@ enum MenuModelSetupItems {
|
||||
#endif
|
||||
#if defined (MULTIMODULE)
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_PROTOCOL,
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_DSM_CLONED,
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_STATUS,
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_SYNCSTATUS,
|
||||
#endif
|
||||
@@ -509,72 +510,73 @@ void menuModelSetup(event_t event)
|
||||
MENU_TAB({
|
||||
HEADER_LINE_COLUMNS
|
||||
|
||||
0, // Model name
|
||||
0, // Model image
|
||||
0, // ITEM_MODEL_SETUP_NAME
|
||||
0, // ITEM_MODEL_SETUP_BITMAP
|
||||
|
||||
TIMERS_ROWS,
|
||||
|
||||
TOPLCD_ROWS
|
||||
|
||||
0, // Extended limits
|
||||
1, // Extended trims
|
||||
0, // Show trims
|
||||
0, // Trims step
|
||||
0, // ITEM_MODEL_SETUP_EXTENDED_LIMITS
|
||||
1, // ITEM_MODEL_SETUP_EXTENDED_TRIMS
|
||||
0, // ITEM_MODEL_SETUP_DISPLAY_TRIMS
|
||||
0, // ITEM_MODEL_SETUP_TRIM_INC
|
||||
|
||||
0, // Throttle section
|
||||
THROTTLE_ROW(0), // Throttle reverse
|
||||
THROTTLE_ROW(0), // Throttle trace source
|
||||
THROTTLE_ROW(0), // Throttle trim
|
||||
THROTTLE_ROW(0), // Throttle trim switch
|
||||
0, // ITEM_MODEL_SETUP_THROTTLE_LABEL
|
||||
THROTTLE_ROW(0), // ITEM_MODEL_SETUP_THROTTLE_REVERSED
|
||||
THROTTLE_ROW(0), // ITEM_MODEL_SETUP_THROTTLE_TRACE
|
||||
THROTTLE_ROW(0), // ITEM_MODEL_SETUP_THROTTLE_TRIM
|
||||
THROTTLE_ROW(0), // ITEM_MODEL_SETUP_THROTTLE_TRIM_SWITCH
|
||||
|
||||
0, // Preflight section
|
||||
PREFLIGHT_ROW(0), // Checklist
|
||||
PREFLIGHT_ROW(0), // Checklist interactive
|
||||
PREFLIGHT_ROW(0), // Throttle warning
|
||||
PREFLIGHT_ROW(0), // Custom position for throttle warning enable
|
||||
PREFLIGHT_ROW(0), // Custom position for throttle warning value
|
||||
SW_WARN_ROWS, // Switch warning
|
||||
POT_WARN_ROWS, // Pot warning
|
||||
0, // ITEM_MODEL_SETUP_PREFLIGHT_LABEL
|
||||
PREFLIGHT_ROW(0), // ITEM_MODEL_SETUP_CHECKLIST_DISPLAY
|
||||
PREFLIGHT_ROW(0), // ITEM_MODEL_SETUP_CHECKLIST_INTERACTIVE
|
||||
PREFLIGHT_ROW(0), // ITEM_MODEL_SETUP_THROTTLE_WARNING
|
||||
PREFLIGHT_ROW(0), // ITEM_MODEL_SETUP_CUSTOM_THROTTLE_WARNING
|
||||
PREFLIGHT_ROW(0), // ITEM_MODEL_SETUP_CUSTOM_THROTTLE_WARNING_VALUE
|
||||
SW_WARN_ROWS, // ITEM_MODEL_SETUP_SWITCHES_WARNING1
|
||||
POT_WARN_ROWS, // ITEM_MODEL_SETUP_POTS_WARNING
|
||||
|
||||
uint8_t(NAVIGATION_LINE_BY_LINE | (adcGetInputOffset(ADC_INPUT_POT + 1) - 1)), // Center beeps
|
||||
uint8_t(NAVIGATION_LINE_BY_LINE | (adcGetInputOffset(ADC_INPUT_POT + 1) - 1)), // ITEM_MODEL_SETUP_BEEP_CENTER
|
||||
|
||||
0, // ADC Jitter filter
|
||||
0, // ITEM_MODEL_SETUP_USE_JITTER_FILTER
|
||||
|
||||
REGISTRATION_ID_ROWS
|
||||
REGISTRATION_ID_ROWS // ITEM_MODEL_SETUP_REGISTRATION_ID
|
||||
|
||||
LABEL(InternalModule),
|
||||
INTERNAL_MODULE_TYPE_ROWS,
|
||||
MODULE_CHANNELS_ROWS(INTERNAL_MODULE),
|
||||
IF_ALLOW_RACING_MODE(INTERNAL_MODULE),
|
||||
IF_NOT_ACCESS_MODULE_RF(INTERNAL_MODULE, MODULE_BIND_ROWS(INTERNAL_MODULE)), // RxNum, [Bind] and [Range] buttons
|
||||
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), // RxNum for ACCESS
|
||||
IF_INTERNAL_MODULE_ON(FAILSAFE_ROWS(INTERNAL_MODULE)), // Failsafe
|
||||
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 1), // [Range] and [Register] buttons
|
||||
IF_PXX2_MODULE(INTERNAL_MODULE, 0), // Module options
|
||||
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), // Receiver 1
|
||||
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), // Receiver 2
|
||||
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), // Receiver 3
|
||||
LABEL(InternalModule), // ITEM_MODEL_SETUP_INTERNAL_MODULE_LABEL
|
||||
INTERNAL_MODULE_TYPE_ROWS, // ITEM_MODEL_SETUP_INTERNAL_MODULE_TYPE
|
||||
MODULE_CHANNELS_ROWS(INTERNAL_MODULE), // ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS
|
||||
IF_ALLOW_RACING_MODE(INTERNAL_MODULE), // ITEM_MODEL_SETUP_INTERNAL_MODULE_RACING_MODE
|
||||
IF_NOT_ACCESS_MODULE_RF(INTERNAL_MODULE, MODULE_BIND_ROWS(INTERNAL_MODULE)), // ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_RXNUM_BIND_RANGE
|
||||
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), // ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_MODEL_NUM
|
||||
IF_INTERNAL_MODULE_ON(FAILSAFE_ROW(INTERNAL_MODULE)), // ITEM_MODEL_SETUP_INTERNAL_MODULE_FAILSAFE
|
||||
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 1), // ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_REGISTER_RANGE
|
||||
IF_PXX2_MODULE(INTERNAL_MODULE, 0), // ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_OPTIONS
|
||||
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), // ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_RECEIVER_1
|
||||
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), // ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_RECEIVER_2
|
||||
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), // ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_RECEIVER_3
|
||||
|
||||
LABEL(ExternalModule),
|
||||
EXTERNAL_MODULE_TYPE_ROW(),
|
||||
IF_MODULE_BAUDRATE_ADJUST(EXTERNAL_MODULE, 0), // Baudrate
|
||||
IF_MODULE_SYNCED(EXTERNAL_MODULE, 0), // Sync rate + errors
|
||||
MULTIMODULE_TYPE_ROW(EXTERNAL_MODULE)
|
||||
MULTIMODULE_STATUS_ROWS(EXTERNAL_MODULE)
|
||||
AFHDS3_MODE_ROWS(EXTERNAL_MODULE)
|
||||
MODULE_CHANNELS_ROWS(EXTERNAL_MODULE),
|
||||
IF_NOT_ACCESS_MODULE_RF(EXTERNAL_MODULE, MODULE_BIND_ROWS(EXTERNAL_MODULE)),
|
||||
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), // RxNum for ACCESS
|
||||
IF_NOT_PXX2_MODULE(EXTERNAL_MODULE, MODULE_OPTION_ROW(EXTERNAL_MODULE)),
|
||||
MULTIMODULE_MODULE_ROWS(EXTERNAL_MODULE)
|
||||
AFHDS3_MODULE_ROWS(EXTERNAL_MODULE)
|
||||
MODULE_POWER_ROW(EXTERNAL_MODULE),
|
||||
FAILSAFE_ROWS(EXTERNAL_MODULE),
|
||||
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 1), // Range check and Register buttons
|
||||
IF_PXX2_MODULE(EXTERNAL_MODULE, 0), // Module options
|
||||
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), // Receiver 1
|
||||
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), // Receiver 2
|
||||
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), // Receiver 3
|
||||
LABEL(ExternalModule), // ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL - 37
|
||||
EXTERNAL_MODULE_TYPE_ROW(), // ITEM_MODEL_SETUP_EXTERNAL_MODULE_TYPE
|
||||
IF_MODULE_BAUDRATE_ADJUST(EXTERNAL_MODULE, 0), // ITEM_MODEL_SETUP_EXTERNAL_MODULE_BAUDRATE
|
||||
IF_MODULE_SYNCED(EXTERNAL_MODULE, 0), // ITEM_MODEL_SETUP_EXTERNAL_MODULE_SERIALSTATUS
|
||||
MULTIMODULE_TYPE_ROW(EXTERNAL_MODULE) // ITEM_MODEL_SETUP_EXTERNAL_MODULE_PROTOCOL
|
||||
MULTIMODULE_DSM_CLONED_RAW(EXTERNAL_MODULE), // ITEM_MODEL_SETUP_EXTERNAL_MODULE_DSM_CLONED
|
||||
MULTIMODULE_STATUS_ROWS(EXTERNAL_MODULE) // ITEM_MODEL_SETUP_EXTERNAL_MODULE_STATUS + ITEM_MODEL_SETUP_EXTERNAL_MODULE_SYNCSTATUS
|
||||
AFHDS3_MODE_ROWS(EXTERNAL_MODULE) // ITEM_MODEL_SETUP_EXTERNAL_MODULE_AFHDS3_MODE + ITEM_MODEL_SETUP_EXTERNAL_MODULE_AFHDS3_STATUS + ITEM_MODEL_SETUP_EXTERNAL_MODULE_AFHDS3_POWER_STATUS
|
||||
MODULE_CHANNELS_ROWS(EXTERNAL_MODULE), // ITEM_MODEL_SETUP_EXTERNAL_MODULE_CHANNELS
|
||||
IF_NOT_ACCESS_MODULE_RF(EXTERNAL_MODULE, MODULE_BIND_ROWS(EXTERNAL_MODULE)), // ITEM_MODEL_SETUP_EXTERNAL_MODULE_NOT_ACCESS_RXNUM_BIND_RANGE
|
||||
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), // ITEM_MODEL_SETUP_EXTERNAL_MODULE_PXX2_MODEL_NUM
|
||||
IF_NOT_PXX2_MODULE(EXTERNAL_MODULE, MODULE_OPTION_ROW(EXTERNAL_MODULE)), // ITEM_MODEL_SETUP_EXTERNAL_MODULE_OPTIONS
|
||||
MULTIMODULE_MODULE_ROWS(EXTERNAL_MODULE) // ITEM_MODEL_SETUP_EXTERNAL_MODULE_AUTOBIND + (ITEM_MODEL_SETUP_EXTERNAL_MODULE_DISABLE_TELEM) + ITEM_MODEL_SETUP_EXTERNAL_MODULE_DISABLE_MAPPING
|
||||
AFHDS3_MODULE_ROWS(EXTERNAL_MODULE) // ITEM_MODEL_SETUP_EXTERNAL_MODULE_AFHDS3_RX_FREQ + ITEM_MODEL_SETUP_EXTERNAL_MODULE_AFHDS3_ACTUAL_POWER
|
||||
MODULE_POWER_ROW(EXTERNAL_MODULE), // ITEM_MODEL_SETUP_EXTERNAL_MODULE_POWER
|
||||
FAILSAFE_ROW(EXTERNAL_MODULE), // ITEM_MODEL_SETUP_EXTERNAL_MODULE_FAILSAFE
|
||||
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 1), // ITEM_MODEL_SETUP_EXTERNAL_MODULE_PXX2_REGISTER_RANGE
|
||||
IF_PXX2_MODULE(EXTERNAL_MODULE, 0), // ITEM_MODEL_SETUP_EXTERNAL_MODULE_PXX2_OPTIONS
|
||||
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), // ITEM_MODEL_SETUP_EXTERNAL_MODULE_PXX2_RECEIVER_1
|
||||
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), // ITEM_MODEL_SETUP_EXTERNAL_MODULE_PXX2_RECEIVER_2
|
||||
IF_ACCESS_MODULE_RF(EXTERNAL_MODULE, 0), // ITEM_MODEL_SETUP_EXTERNAL_MODULE_PXX2_RECEIVER_3
|
||||
|
||||
TRAINER_ROWS,
|
||||
|
||||
@@ -1203,17 +1205,6 @@ void menuModelSetup(event_t event)
|
||||
pulsesModuleSettingsUpdate(EXTERNAL_MODULE);
|
||||
}
|
||||
break;
|
||||
|
||||
#if defined(MULTIMODULE)
|
||||
case 2:
|
||||
CHECK_INCDEC_MODELVAR(
|
||||
event, g_model.moduleData[EXTERNAL_MODULE].subType, 0,
|
||||
getMaxMultiSubtype(EXTERNAL_MODULE));
|
||||
if (checkIncDec_Ret) {
|
||||
resetMultiProtocolsOptions(EXTERNAL_MODULE);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#if POPUP_LEVEL > 1
|
||||
@@ -1243,6 +1234,23 @@ void menuModelSetup(event_t event)
|
||||
}
|
||||
break;
|
||||
|
||||
#if defined(MULTIMODULE)
|
||||
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_DSM_CLONED: {
|
||||
int8_t optionValue =
|
||||
(g_model.moduleData[EXTERNAL_MODULE].multi.optionValue & 0x04) >> 2;
|
||||
lcdDrawText(INDENT_WIDTH / 2, y, STR_SUBTYPE);
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_DSM_CLONE, optionValue, attr | LEFT);
|
||||
|
||||
if (attr && s_editMode > 0) {
|
||||
CHECK_INCDEC_MODELVAR(event, optionValue, 0, 1);
|
||||
if (checkIncDec_Ret) {
|
||||
g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = (g_model.moduleData[EXTERNAL_MODULE].multi.optionValue & 0xFB) + (optionValue << 2);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CROSSFIRE) || defined(GHOST)
|
||||
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_BAUDRATE: {
|
||||
ModuleData &moduleData = g_model.moduleData[EXTERNAL_MODULE];
|
||||
|
||||
Reference in New Issue
Block a user