diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index ca57b7c90..6038d6b71 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -1,7 +1,7 @@ include(CMakeForceCompiler) include(Bitmaps) -set(PCB_TYPES X9LITE X9LITES X7 XLITE XLITES X9D X9D+ X9E X10 X12S NV14 PL18 T15PRO ST16 PA01 TX15) +set(PCB_TYPES X9LITE X9LITES X7 XLITE XLITES X9D X9D+ X9E X10 X12S PL18 T15PRO ST16 PA01 TX15) set(RADIO_LANGUAGES CN CZ DA DE EN ES FI FR HE HU IT JP KO NL PL PT RU SE SK TW UA) set(TTS_LANGUAGES CN CZ DA DE EN ES FR HE HU IT JP KO NL PL PT RU SE SK UA) @@ -82,8 +82,6 @@ configure_file(stamp.h.in stamp.h @ONLY) if(PCB STREQUAL X12S OR PCB STREQUAL X10) include(targets/horus/CMakeLists.txt) -elseif(PCB STREQUAL NV14) - include(targets/nv14/CMakeLists.txt) elseif(PCB STREQUAL PL18) include(targets/pl18/CMakeLists.txt) elseif(PCB STREQUAL T15PRO) diff --git a/radio/src/boards/generic_stm32/module_ports.cpp b/radio/src/boards/generic_stm32/module_ports.cpp index 2be636284..5a2dcb866 100644 --- a/radio/src/boards/generic_stm32/module_ports.cpp +++ b/radio/src/boards/generic_stm32/module_ports.cpp @@ -456,14 +456,14 @@ static void _external_module_set_pwr(uint8_t enable) { if (enable) { EXTERNAL_MODULE_ON(); -#if defined(PCBNV14) +#if defined(RADIO_NV14_FAMILY) if (hardwareOptions.pcbrev == PCBREV_NV14) { gpio_clear(EXTMODULE_PWR_FIX_GPIO); } #endif } else { EXTERNAL_MODULE_OFF(); -#if defined(PCBNV14) +#if defined(RADIO_NV14_FAMILY) if (hardwareOptions.pcbrev == PCBREV_NV14) { gpio_set(EXTMODULE_PWR_FIX_GPIO); } @@ -619,7 +619,7 @@ void boardInitModulePorts() _extmod_init_inverter(); #endif -#if defined(PCBNV14) +#if defined(RADIO_NV14_FAMILY) if (hardwareOptions.pcbrev == PCBREV_NV14) { // pin must be pulled to V+ (voltage of board - VCC is not enough to fully close transistor) // for additional transistor to ensuring module is completely disabled diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h index 63fb695a4..154f652a2 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -73,7 +73,7 @@ static inline void check_struct() CHKSIZE(TimerData, 17); CHKSIZE(ModelHeader, 131); CHKSIZE(CustomScreenData, 1972); - #if defined(PCBNV14) || defined(RADIO_NB4P) || defined(RADIO_NV14_FAMILY) + #if defined(RADIO_NB4P) || defined(RADIO_NV14_FAMILY) CHKTYPE(TopBarPersistentData, 736); #elif defined(PCBPA01) CHKTYPE(TopBarPersistentData, 916); @@ -118,8 +118,6 @@ static inline void check_struct() #else CHKSIZE(ModelData, 27693); #endif -#elif defined(PCBNV14) - CHKSIZE(ModelData, 27295); #elif defined(PCBST16) CHKSIZE(ModelData, 27761); #elif defined(PCBPA01) diff --git a/radio/src/datastructs_private.h b/radio/src/datastructs_private.h index 39c8b159a..3c9cd2951 100644 --- a/radio/src/datastructs_private.h +++ b/radio/src/datastructs_private.h @@ -621,7 +621,7 @@ PACK(struct CustomScreenData { #define TOPBAR_DATA #endif -#if defined(PCBHORUS) || defined(PCBTARANIS) || defined(PCBNV14) || defined(PCBPL18) || defined(PCBST16) +#if defined(PCBHORUS) || defined(PCBTARANIS) || defined(PCBPL18) || defined(PCBST16) #define SCRIPT_DATA \ NOBACKUP(ScriptData scriptsData[MAX_SCRIPTS]); #else diff --git a/radio/src/gui/colorlcd/model/menu_model.cpp b/radio/src/gui/colorlcd/model/menu_model.cpp index 0169993b2..37af6d1ab 100644 --- a/radio/src/gui/colorlcd/model/menu_model.cpp +++ b/radio/src/gui/colorlcd/model/menu_model.cpp @@ -65,7 +65,7 @@ void ModelMenu::build() #endif addTab(new ModelTelemetryPage()); -#if defined(PCBNV14) || defined(PCBPL18) || defined(PCBST16) +#if defined(PCBPL18) || defined(PCBST16) new TextButton( this, {LCD_W / 2 + 6, MENU_TITLE_TOP, LCD_W / 2 - 8, MENU_TITLE_HEIGHT}, diff --git a/radio/src/gui/colorlcd/module/afhds2a_settings.cpp b/radio/src/gui/colorlcd/module/afhds2a_settings.cpp index 1df089829..30aebc1be 100644 --- a/radio/src/gui/colorlcd/module/afhds2a_settings.cpp +++ b/radio/src/gui/colorlcd/module/afhds2a_settings.cpp @@ -82,7 +82,7 @@ AFHDS2ASettings::AFHDS2ASettings(Window* parent, const FlexGridLayout& g, line, [=]() { return md->flysky.mode; }, [=](uint8_t v) { md->flysky.mode = v; }); -#if defined(PCBNV14) +#if defined(RADIO_NV14_FAMILY) line = newLine(grid); static const char* _rf_power[] = {"Default", "High"}; afhds2RFPowerText = new StaticText(line, rect_t{}, STR_MULTI_RFPOWER); @@ -101,7 +101,7 @@ void AFHDS2ASettings::hideAFHDS2Options() { afhds2OptionsLabel->hide(); afhds2ProtoOpts->hide(); -#if defined(PCBNV14) +#if defined(RADIO_NV14_FAMILY) afhds2RFPowerText->hide(); afhds2RFPowerChoice->hide(); #endif @@ -111,7 +111,7 @@ void AFHDS2ASettings::showAFHDS2Options() { afhds2OptionsLabel->show(); afhds2ProtoOpts->show(); -#if defined(PCBNV14) +#if defined(RADIO_NV14_FAMILY) bool showRFPower = (getNV14RfFwVersion() >= 0x1000E); afhds2RFPowerText->show(showRFPower); afhds2RFPowerChoice->show(showRFPower); diff --git a/radio/src/gui/colorlcd/module/afhds2a_settings.h b/radio/src/gui/colorlcd/module/afhds2a_settings.h index 9f16f92a8..38b8f46d1 100644 --- a/radio/src/gui/colorlcd/module/afhds2a_settings.h +++ b/radio/src/gui/colorlcd/module/afhds2a_settings.h @@ -35,7 +35,7 @@ class AFHDS2ASettings : public Window, public ModuleOptions Window* afhds2OptionsLabel = nullptr; Window* afhds2ProtoOpts = nullptr; -#if defined(PCBNV14) +#if defined(RADIO_NV14_FAMILY) bool hasRFPower = false; Window* afhds2RFPowerText = nullptr; Choice* afhds2RFPowerChoice = nullptr; diff --git a/radio/src/gui/colorlcd/radio/radio_version.cpp b/radio/src/gui/colorlcd/radio/radio_version.cpp index 5d5388262..25e026c78 100644 --- a/radio/src/gui/colorlcd/radio/radio_version.cpp +++ b/radio/src/gui/colorlcd/radio/radio_version.cpp @@ -200,7 +200,7 @@ class VersionDialog : public BaseDialog } #endif -#if defined(PCBNV14) && defined(AFHDS2) +#if defined(RADIO_NV14_FAMILY) && defined(AFHDS2) // NV14 AFHDS2A internal module is able to provide FW version extern uint32_t NV14internalModuleFwVersion; if (isModuleAFHDS2A(module)) { @@ -337,7 +337,7 @@ RadioVersionPage::RadioVersionPage() : { } -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) extern const char* boardLcdType; extern const char* boardTouchType; #endif @@ -366,7 +366,7 @@ void RadioVersionPage::build(Window* window) version += '0' + hardwareOptions.pcbrev; #endif -#if (defined(PCBNV14) || defined(PCBPL18)) && !defined(SIMU) +#if defined(PCBPL18) && !defined(SIMU) version += nl; version += "LCD: "; version += boardLcdType; diff --git a/radio/src/pulses/modules_helpers.h b/radio/src/pulses/modules_helpers.h index 915642901..14b545135 100644 --- a/radio/src/pulses/modules_helpers.h +++ b/radio/src/pulses/modules_helpers.h @@ -34,7 +34,7 @@ #include "telemetry/multi.h" #endif -#if defined(PCBNV14) && defined(AFHDS2) +#if defined(RADIO_NV14_FAMILY) && defined(AFHDS2) extern uint32_t NV14internalModuleFwVersion; #endif @@ -624,7 +624,7 @@ inline bool isModuleBindRangeAvailable(uint8_t moduleIdx) inline uint32_t getNV14RfFwVersion() { -#if defined(PCBNV14) && defined(AFHDS2) +#if defined(RADIO_NV14_FAMILY) && defined(AFHDS2) return NV14internalModuleFwVersion; #else return 0; @@ -634,7 +634,7 @@ inline uint32_t getNV14RfFwVersion() inline bool isModuleRangeAvailable(uint8_t moduleIdx) { bool ret = isModuleBindRangeAvailable(moduleIdx) && !IS_RX_MULTI(moduleIdx) && !isModuleCrossfire(moduleIdx); -#if defined(PCBNV14) && defined(AFHDS2) +#if defined(RADIO_NV14_FAMILY) && defined(AFHDS2) ret = ret && (!isModuleAFHDS2A(moduleIdx) || NV14internalModuleFwVersion >= 0x1000E); #elif defined(AFHDS3) diff --git a/radio/src/storage/yaml/CMakeLists.txt b/radio/src/storage/yaml/CMakeLists.txt index e36480c18..fe222f631 100644 --- a/radio/src/storage/yaml/CMakeLists.txt +++ b/radio/src/storage/yaml/CMakeLists.txt @@ -22,13 +22,11 @@ if((PCB STREQUAL X10) OR (PCB STREQUAL X12S) OR (PCB STREQUAL STM32H7S78_DK)) else() set(YAML_GEN_OUTPUT storage/yaml/yaml_datastructs_x10.cpp) endif() -elseif(PCB STREQUAL NV14) - set(YAML_GEN_OUTPUT storage/yaml/yaml_datastructs_nv14.cpp) elseif(PCB STREQUAL PL18) if(PCBREV STREQUAL NB4P) set(YAML_GEN_OUTPUT storage/yaml/yaml_datastructs_nb4p.cpp) elseif(PCBREV STREQUAL NV14) - set(YAML_GEN_OUTPUT storage/yaml/yaml_datastructs_nv14_family.cpp) + set(YAML_GEN_OUTPUT storage/yaml/yaml_datastructs_nv14.cpp) elseif(PCBREV STREQUAL PL18U) set(YAML_GEN_OUTPUT storage/yaml/yaml_datastructs_pl18u.cpp) else() diff --git a/radio/src/storage/yaml/yaml_datastructs.cpp b/radio/src/storage/yaml/yaml_datastructs.cpp index 23cb98450..a554db9a6 100644 --- a/radio/src/storage/yaml/yaml_datastructs.cpp +++ b/radio/src/storage/yaml/yaml_datastructs.cpp @@ -43,15 +43,13 @@ #elif defined(PCBPL18) #if defined(RADIO_NB4P) #include "yaml_datastructs_nb4p.cpp" - #elif defined(RADIO_NV14_FAMILY) - #include "yaml_datastructs_nv14_family.cpp" + #elif defined(RADIO_NV14_FAMILY) + #include "yaml_datastructs_nv14.cpp" #elif defined(RADIO_PL18U) #include "yaml_datastructs_pl18u.cpp" #else #include "yaml_datastructs_pl18.cpp" #endif -#elif defined(PCBNV14) - #include "yaml_datastructs_nv14.cpp" #elif defined(PCBST16) #include "yaml_datastructs_st16.cpp" #elif defined(PCBPA01) diff --git a/radio/src/storage/yaml/yaml_datastructs_nv14.cpp b/radio/src/storage/yaml/yaml_datastructs_nv14.cpp index b3430aaf4..8c3b0e2e4 100644 --- a/radio/src/storage/yaml/yaml_datastructs_nv14.cpp +++ b/radio/src/storage/yaml/yaml_datastructs_nv14.cpp @@ -96,6 +96,17 @@ const struct YamlIdStr enum_Functions[] = { { FUNC_TEST, "TEST" }, { 0, NULL } }; +const struct YamlIdStr enum_SwitchConfig[] = { + { SWITCH_NONE, "NONE" }, + { SWITCH_TOGGLE, "TOGGLE" }, + { SWITCH_2POS, "2POS" }, + { SWITCH_3POS, "3POS" }, + { SWITCH_none, "none" }, + { SWITCH_toggle, "toggle" }, + { SWITCH_2pos, "2pos" }, + { SWITCH_3pos, "3pos" }, + { 0, NULL } +}; const struct YamlIdStr enum_TimerModes[] = { { TMRMODE_OFF, "OFF" }, { TMRMODE_ON, "ON" }, @@ -238,7 +249,7 @@ static const struct YamlNode struct_signed_16[] = { static const struct YamlNode struct_TrainerMix[] = { YAML_IDX, YAML_UNSIGNED( "srcChn", 6 ), - YAML_ENUM("mode", 2, enum_TrainerMultiplex), + YAML_ENUM("mode", 2, enum_TrainerMultiplex, NULL), YAML_SIGNED( "studWeight", 8 ), YAML_END }; @@ -272,18 +283,25 @@ static const struct YamlNode union_anonymous_0_elmts[] = { static const struct YamlNode struct_CustomFunctionData[] = { YAML_IDX, YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ), - YAML_ENUM("func", 6, enum_Functions), + YAML_ENUM("func", 6, enum_Functions, NULL), YAML_CUSTOM("def",r_customFn,w_customFn), YAML_PADDING( 64 ), YAML_PADDING( 1 ), YAML_PADDING( 7 ), YAML_END }; +static const struct YamlNode struct_switchDef[] = { + YAML_IDX_CUST("sw",sw_idx_read,sw_idx_write), + YAML_STRING("name", 3), + YAML_ENUM("type", 3, enum_SwitchConfig, NULL), + YAML_PADDING( 5 ), + YAML_END +}; static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "manuallyEdited", 1 ), YAML_SIGNED( "timezoneMinutes", 3 ), YAML_UNSIGNED( "ppmunit", 2 ), - YAML_ENUM("hatsMode", 2, enum_HatsMode), + YAML_ENUM("hatsMode", 2, enum_HatsMode, NULL), YAML_CUSTOM("semver",nullptr,w_semver), YAML_CUSTOM("board",nullptr,w_board), YAML_ARRAY("calib", 48, 20, struct_CalibData, NULL), @@ -292,12 +310,12 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "contrast", 8 ), YAML_UNSIGNED( "vBatWarn", 8 ), YAML_SIGNED( "txVoltageCalibration", 8 ), - YAML_ENUM("backlightMode", 3, enum_BacklightMode), - YAML_ENUM("antennaMode", 2, enum_AntennaModes), + YAML_ENUM("backlightMode", 3, enum_BacklightMode, NULL), + YAML_ENUM("antennaMode", 2, enum_AntennaModes, NULL), YAML_UNSIGNED( "disableRtcWarning", 1 ), YAML_UNSIGNED( "keysBacklight", 1 ), YAML_UNSIGNED( "dontPlayHello", 1 ), - YAML_ENUM("internalModule", 8, enum_ModuleType), + YAML_ENUM("internalModule", 8, enum_ModuleType, NULL), YAML_STRUCT("trainer", 128, struct_TrainerData, NULL), YAML_UNSIGNED( "view", 8 ), YAML_PADDING( 2 ), @@ -330,7 +348,7 @@ static const struct YamlNode struct_RadioData[] = { YAML_UNSIGNED( "backlightBright", 8 ), YAML_UNSIGNED( "globalTimer", 32 ), YAML_UNSIGNED( "bluetoothBaudrate", 4 ), - YAML_ENUM("bluetoothMode", 4, enum_BluetoothModes), + YAML_ENUM("bluetoothMode", 4, enum_BluetoothModes, NULL), YAML_UNSIGNED( "countryCode", 2 ), YAML_SIGNED( "pwrOnSpeed", 3 ), YAML_SIGNED( "pwrOffSpeed", 3 ), @@ -355,8 +373,9 @@ static const struct YamlNode struct_RadioData[] = { YAML_ARRAY("serialPort", 8, 4, struct_serialConfig, nullptr), YAML_ARRAY("sticksConfig", 0, MAX_STICKS, struct_stickConfig, stick_name_valid), YAML_ARRAY("slidersConfig", 0, MAX_POTS, struct_sliderConfig, nullptr), + YAML_PADDING( 8 ), YAML_ARRAY("potsConfig", 4, 16, struct_potConfig, nullptr), - YAML_ARRAY("switchConfig", 2, 32, struct_switchConfig, nullptr), + YAML_ARRAY("switchConfig", 32, 20, struct_switchDef, switchIsActive), YAML_ARRAY("flexSwitches", 0, MAX_FLEX_SWITCHES, struct_flexSwitch, flex_sw_valid), YAML_STRING("currModelFilename", 17), YAML_UNSIGNED( "modelQuickSelect", 1 ), @@ -406,7 +425,7 @@ static const struct YamlNode struct_TimerData[] = { YAML_UNSIGNED( "start", 22 ), YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ), YAML_SIGNED( "value", 22 ), - YAML_ENUM("mode", 3, enum_TimerModes), + YAML_ENUM("mode", 3, enum_TimerModes, NULL), YAML_UNSIGNED( "countdownBeep", 2 ), YAML_UNSIGNED( "minuteBeep", 1 ), YAML_UNSIGNED( "persistent", 2 ), @@ -419,7 +438,7 @@ static const struct YamlNode struct_TimerData[] = { }; static const struct YamlNode struct_CurveRef[] = { YAML_UNSIGNED( "type", 5 ), - YAML_SIGNED_CUST( "value", 11, r_sourceNumVal, w_sourceNumVal ), + YAML_UNSIGNED_CUST( "value", 11, r_sourceNumVal, w_sourceNumVal ), YAML_END }; static const struct YamlNode struct_MixData[] = { @@ -427,7 +446,7 @@ static const struct YamlNode struct_MixData[] = { YAML_SIGNED_CUST( "srcRaw", 10, r_mixSrcRawEx, w_mixSrcRawEx ), YAML_UNSIGNED( "carryTrim", 1 ), YAML_UNSIGNED( "mixWarn", 2 ), - YAML_ENUM("mltpx", 2, enum_MixerMultiplex), + YAML_ENUM("mltpx", 2, enum_MixerMultiplex, NULL), YAML_UNSIGNED( "delayPrec", 1 ), YAML_UNSIGNED( "speedPrec", 1 ), YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ), @@ -487,7 +506,7 @@ static const struct YamlNode struct_signed_8[] = { }; static const struct YamlNode struct_LogicalSwitchData[] = { YAML_IDX, - YAML_ENUM("func", 8, enum_LogicalSwitchesFunctions), + YAML_ENUM("func", 8, enum_LogicalSwitchesFunctions, NULL), YAML_CUSTOM("def",r_logicSw,w_logicSw), YAML_PADDING( 10 ), YAML_PADDING( 10 ), @@ -500,7 +519,7 @@ static const struct YamlNode struct_LogicalSwitchData[] = { YAML_END }; static const struct YamlNode struct_SwashRingData[] = { - YAML_ENUM("type", 8, enum_SwashType), + YAML_ENUM("type", 8, enum_SwashType, NULL), YAML_UNSIGNED( "value", 8 ), YAML_UNSIGNED_CUST( "collectiveSource", 8, r_mixSrcRaw, w_mixSrcRaw ), YAML_UNSIGNED_CUST( "aileronSource", 8, r_mixSrcRaw, w_mixSrcRaw ), @@ -518,7 +537,7 @@ static const struct YamlNode struct_trim_t[] = { }; static const struct YamlNode struct_FlightModeData[] = { YAML_IDX, - YAML_ARRAY("trim", 16, 6, struct_trim_t, NULL), + YAML_ARRAY("trim", 16, 8, struct_trim_t, NULL), YAML_STRING("name", 10), YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ), YAML_PADDING( 6 ), @@ -658,7 +677,7 @@ static const struct YamlNode struct_ModuleData[] = { YAML_CUSTOM("subType",r_modSubtype,w_modSubtype), YAML_UNSIGNED( "channelsStart", 8 ), YAML_SIGNED_CUST( "channelsCount", 8, r_channelsCount, w_channelsCount ), - YAML_ENUM("failsafeMode", 4, enum_FailsafeModes), + YAML_ENUM("failsafeMode", 4, enum_FailsafeModes, NULL), YAML_PADDING( 4 ), YAML_UNION("mod", 200, union_anonymous_4_elmts, select_mod_type), YAML_END @@ -708,7 +727,7 @@ static const struct YamlNode struct_anonymous_16[] = { static const struct YamlNode union_anonymous_15_elmts[] = { YAML_STRUCT("frskyInstance", 8, struct_anonymous_16, NULL), YAML_UNSIGNED( "instance", 8 ), - YAML_ENUM("formula", 8, enum_TelemetrySensorFormula), + YAML_ENUM("formula", 8, enum_TelemetrySensorFormula, NULL), YAML_END }; static const struct YamlNode struct_anonymous_18[] = { @@ -752,7 +771,7 @@ static const struct YamlNode struct_TelemetrySensor[] = { YAML_UNION("id2", 8, union_anonymous_15_elmts, select_id2), YAML_STRING("label", 4), YAML_UNSIGNED( "subId", 8 ), - YAML_ENUM("type", 1, enum_TelemetrySensorType), + YAML_ENUM("type", 1, enum_TelemetrySensorType, NULL), YAML_PADDING( 1 ), YAML_UNSIGNED( "unit", 6 ), YAML_UNSIGNED( "prec", 2 ), @@ -776,7 +795,7 @@ static const struct YamlNode union_ZoneOptionValue_elmts[] = { }; static const struct YamlNode struct_ZoneOptionValueTyped[] = { YAML_IDX, - YAML_ENUM("type", 32, enum_ZoneOptionValueEnum), + YAML_ENUM("type", 32, enum_ZoneOptionValueEnum, NULL), YAML_UNION("value", 96, union_ZoneOptionValue_elmts, select_zov), YAML_END }; @@ -786,29 +805,29 @@ static const struct YamlNode struct_WidgetPersistentData[] = { }; static const struct YamlNode struct_ZonePersistentData[] = { YAML_IDX, - YAML_STRING("widgetName", 12), + YAML_STRING("widgetName", 20), YAML_STRUCT("widgetData", 1280, struct_WidgetPersistentData, NULL), YAML_END }; static const struct YamlNode struct_LayoutPersistentData[] = { - YAML_ARRAY("zones", 1376, 10, struct_ZonePersistentData, NULL), + YAML_ARRAY("zones", 1440, 10, struct_ZonePersistentData, NULL), YAML_ARRAY("options", 128, 10, struct_ZoneOptionValueTyped, NULL), YAML_END }; static const struct YamlNode struct_CustomScreenData[] = { YAML_IDX, YAML_STRING("LayoutId", 12), - YAML_STRUCT("layoutData", 15040, struct_LayoutPersistentData, NULL), + YAML_STRUCT("layoutData", 15680, struct_LayoutPersistentData, NULL), YAML_END }; static const struct YamlNode struct_TopBarPersistentData[] = { - YAML_ARRAY("zones", 1376, 4, struct_ZonePersistentData, NULL), + YAML_ARRAY("zones", 1440, 4, struct_ZonePersistentData, NULL), YAML_ARRAY("options", 128, 1, struct_ZoneOptionValueTyped, NULL), YAML_END }; static const struct YamlNode struct_USBJoystickChData[] = { YAML_IDX, - YAML_ENUM("mode", 3, enum_USBJoystickCh), + YAML_ENUM("mode", 3, enum_USBJoystickCh, NULL), YAML_UNSIGNED( "inversion", 1 ), YAML_UNSIGNED( "param", 4 ), YAML_UNSIGNED( "btn_num", 5 ), @@ -834,7 +853,7 @@ static const struct YamlNode struct_ModelData[] = { YAML_UNSIGNED( "disableTelemetryWarning", 1 ), YAML_UNSIGNED( "showInstanceIds", 1 ), YAML_UNSIGNED( "checklistInteractive", 1 ), - YAML_ENUM("hatsMode", 2, enum_HatsMode), + YAML_ENUM("hatsMode", 2, enum_HatsMode, NULL), YAML_PADDING( 2 ), YAML_SIGNED( "customThrottleWarningPosition", 8 ), YAML_UNSIGNED( "beepANACenter", 16 ), @@ -846,19 +865,18 @@ static const struct YamlNode struct_ModelData[] = { YAML_ARRAY("logicalSw", 72, 64, struct_LogicalSwitchData, NULL), YAML_ARRAY("customFn", 88, 64, struct_CustomFunctionData, cfn_is_active), YAML_STRUCT("swashR", 64, struct_SwashRingData, swash_is_active), - YAML_ARRAY("flightModeData", 352, 9, struct_FlightModeData, fmd_is_active), + YAML_ARRAY("flightModeData", 384, 9, struct_FlightModeData, fmd_is_active), YAML_UNSIGNED_CUST( "thrTraceSrc", 8, r_thrSrc, w_thrSrc ), YAML_CUSTOM("switchWarningState",r_swtchWarn,nullptr), - YAML_ARRAY("switchWarning", 3, 21, struct_swtchWarn, nullptr), - YAML_PADDING(1), + YAML_ARRAY("switchWarning", 2, 32, struct_swtchWarn, nullptr), YAML_ARRAY("gvars", 56, 9, struct_GVarData, NULL), YAML_STRUCT("varioData", 40, struct_VarioData, NULL), YAML_UNSIGNED_CUST( "rssiSource", 8, r_tele_sensor, w_tele_sensor ), YAML_STRUCT("rssiAlarms", 0, struct_RssiAlarmData, NULL), YAML_STRUCT("rfAlarms", 16, struct_RFAlarmData, NULL), YAML_UNSIGNED( "thrTrimSw", 3 ), - YAML_ENUM("potsWarnMode", 2, enum_PotsWarnMode), - YAML_ENUM("jitterFilter", 2, enum_ModelOverridableEnable), + YAML_ENUM("potsWarnMode", 2, enum_PotsWarnMode, NULL), + YAML_ENUM("jitterFilter", 2, enum_ModelOverridableEnable, NULL), YAML_PADDING( 1 ), YAML_ARRAY("moduleData", 232, 2, struct_ModuleData, NULL), YAML_ARRAY("failsafeChannels", 16, 32, struct_signed_16, NULL), @@ -868,26 +886,26 @@ static const struct YamlNode struct_ModelData[] = { YAML_UNSIGNED( "potsWarnEnabled", 16 ), YAML_ARRAY("potsWarnPosition", 8, 16, struct_signed_8, NULL), YAML_ARRAY("telemetrySensors", 112, 60, struct_TelemetrySensor, NULL), - YAML_ARRAY("screenData", 15136, 10, struct_CustomScreenData, NULL), - YAML_STRUCT("topbarData", 5632, struct_TopBarPersistentData, NULL), + YAML_ARRAY("screenData", 15776, 10, struct_CustomScreenData, NULL), + YAML_STRUCT("topbarData", 5888, struct_TopBarPersistentData, NULL), YAML_ARRAY("topbarWidgetWidth", 8, 4, struct_unsigned_8, NULL), YAML_UNSIGNED( "view", 8 ), YAML_STRING("modelRegistrationID", 8), YAML_UNSIGNED( "usbJoystickExtMode", 1 ), - YAML_ENUM("usbJoystickIfMode", 3, enum_USBJoystickIfMode), + YAML_ENUM("usbJoystickIfMode", 3, enum_USBJoystickIfMode, NULL), YAML_UNSIGNED( "usbJoystickCircularCut", 4 ), YAML_ARRAY("usbJoystickCh", 16, 26, struct_USBJoystickChData, NULL), - YAML_ENUM("radioThemesDisabled", 2, enum_ModelOverridableEnable), - YAML_ENUM("radioGFDisabled", 2, enum_ModelOverridableEnable), - YAML_ENUM("radioTrainerDisabled", 2, enum_ModelOverridableEnable), - YAML_ENUM("modelHeliDisabled", 2, enum_ModelOverridableEnable), - YAML_ENUM("modelFMDisabled", 2, enum_ModelOverridableEnable), - YAML_ENUM("modelCurvesDisabled", 2, enum_ModelOverridableEnable), - YAML_ENUM("modelGVDisabled", 2, enum_ModelOverridableEnable), - YAML_ENUM("modelLSDisabled", 2, enum_ModelOverridableEnable), - YAML_ENUM("modelSFDisabled", 2, enum_ModelOverridableEnable), - YAML_ENUM("modelCustomScriptsDisabled", 2, enum_ModelOverridableEnable), - YAML_ENUM("modelTelemetryDisabled", 2, enum_ModelOverridableEnable), + YAML_ENUM("radioThemesDisabled", 2, enum_ModelOverridableEnable, NULL), + YAML_ENUM("radioGFDisabled", 2, enum_ModelOverridableEnable, NULL), + YAML_ENUM("radioTrainerDisabled", 2, enum_ModelOverridableEnable, NULL), + YAML_ENUM("modelHeliDisabled", 2, enum_ModelOverridableEnable, NULL), + YAML_ENUM("modelFMDisabled", 2, enum_ModelOverridableEnable, NULL), + YAML_ENUM("modelCurvesDisabled", 2, enum_ModelOverridableEnable, NULL), + YAML_ENUM("modelGVDisabled", 2, enum_ModelOverridableEnable, NULL), + YAML_ENUM("modelLSDisabled", 2, enum_ModelOverridableEnable, NULL), + YAML_ENUM("modelSFDisabled", 2, enum_ModelOverridableEnable, NULL), + YAML_ENUM("modelCustomScriptsDisabled", 2, enum_ModelOverridableEnable, NULL), + YAML_ENUM("modelTelemetryDisabled", 2, enum_ModelOverridableEnable, NULL), YAML_END }; static const struct YamlNode struct_PartialModel[] = { diff --git a/radio/src/storage/yaml/yaml_datastructs_nv14_family.cpp b/radio/src/storage/yaml/yaml_datastructs_nv14_family.cpp deleted file mode 100644 index 8c3b0e2e4..000000000 --- a/radio/src/storage/yaml/yaml_datastructs_nv14_family.cpp +++ /dev/null @@ -1,937 +0,0 @@ -// generated by generate_yaml.py - -// -// Enums first -// - -const struct YamlIdStr enum_HatsMode[] = { - { HATSMODE_TRIMS_ONLY, "TRIMS_ONLY" }, - { HATSMODE_KEYS_ONLY, "KEYS_ONLY" }, - { HATSMODE_SWITCHABLE, "SWITCHABLE" }, - { HATSMODE_GLOBAL, "GLOBAL" }, - { 0, NULL } -}; -const struct YamlIdStr enum_BacklightMode[] = { - { e_backlight_mode_off, "backlight_mode_off" }, - { e_backlight_mode_keys, "backlight_mode_keys" }, - { e_backlight_mode_sticks, "backlight_mode_sticks" }, - { e_backlight_mode_all, "backlight_mode_all" }, - { e_backlight_mode_on, "backlight_mode_on" }, - { 0, NULL } -}; -const struct YamlIdStr enum_AntennaModes[] = { - { ANTENNA_MODE_INTERNAL, "MODE_INTERNAL" }, - { ANTENNA_MODE_ASK, "MODE_ASK" }, - { ANTENNA_MODE_PER_MODEL, "MODE_PER_MODEL" }, - { ANTENNA_MODE_EXTERNAL, "MODE_EXTERNAL" }, - { 0, NULL } -}; -const struct YamlIdStr enum_ModuleType[] = { - { MODULE_TYPE_NONE, "TYPE_NONE" }, - { MODULE_TYPE_PPM, "TYPE_PPM" }, - { MODULE_TYPE_XJT_PXX1, "TYPE_XJT_PXX1" }, - { MODULE_TYPE_ISRM_PXX2, "TYPE_ISRM_PXX2" }, - { MODULE_TYPE_DSM2, "TYPE_DSM2" }, - { MODULE_TYPE_CROSSFIRE, "TYPE_CROSSFIRE" }, - { MODULE_TYPE_MULTIMODULE, "TYPE_MULTIMODULE" }, - { MODULE_TYPE_R9M_PXX1, "TYPE_R9M_PXX1" }, - { MODULE_TYPE_R9M_PXX2, "TYPE_R9M_PXX2" }, - { MODULE_TYPE_R9M_LITE_PXX1, "TYPE_R9M_LITE_PXX1" }, - { MODULE_TYPE_R9M_LITE_PXX2, "TYPE_R9M_LITE_PXX2" }, - { MODULE_TYPE_GHOST, "TYPE_GHOST" }, - { MODULE_TYPE_R9M_LITE_PRO_PXX2, "TYPE_R9M_LITE_PRO_PXX2" }, - { MODULE_TYPE_SBUS, "TYPE_SBUS" }, - { MODULE_TYPE_XJT_LITE_PXX2, "TYPE_XJT_LITE_PXX2" }, - { MODULE_TYPE_FLYSKY_AFHDS2A, "TYPE_FLYSKY_AFHDS2A" }, - { MODULE_TYPE_FLYSKY_AFHDS3, "TYPE_FLYSKY_AFHDS3" }, - { MODULE_TYPE_LEMON_DSMP, "TYPE_LEMON_DSMP" }, - { 0, NULL } -}; -const struct YamlIdStr enum_TrainerMultiplex[] = { - { TRAINER_OFF, "OFF" }, - { TRAINER_ADD, "ADD" }, - { TRAINER_REPL, "REPL" }, - { 0, NULL } -}; -const struct YamlIdStr enum_BeeperMode[] = { - { e_mode_quiet, "mode_quiet" }, - { e_mode_alarms, "mode_alarms" }, - { e_mode_nokeys, "mode_nokeys" }, - { e_mode_all, "mode_all" }, - { 0, NULL } -}; -const struct YamlIdStr enum_BluetoothModes[] = { - { BLUETOOTH_OFF, "OFF" }, - { BLUETOOTH_TELEMETRY, "TELEMETRY" }, - { BLUETOOTH_TRAINER, "TRAINER" }, - { 0, NULL } -}; -const struct YamlIdStr enum_Functions[] = { - { FUNC_OVERRIDE_CHANNEL, "OVERRIDE_CHANNEL" }, - { FUNC_TRAINER, "TRAINER" }, - { FUNC_INSTANT_TRIM, "INSTANT_TRIM" }, - { FUNC_RESET, "RESET" }, - { FUNC_SET_TIMER, "SET_TIMER" }, - { FUNC_ADJUST_GVAR, "ADJUST_GVAR" }, - { FUNC_VOLUME, "VOLUME" }, - { FUNC_SET_FAILSAFE, "SET_FAILSAFE" }, - { FUNC_RANGECHECK, "RANGECHECK" }, - { FUNC_BIND, "BIND" }, - { FUNC_PLAY_SOUND, "PLAY_SOUND" }, - { FUNC_PLAY_TRACK, "PLAY_TRACK" }, - { FUNC_PLAY_VALUE, "PLAY_VALUE" }, - { FUNC_PLAY_SCRIPT, "PLAY_SCRIPT" }, - { FUNC_BACKGND_MUSIC, "BACKGND_MUSIC" }, - { FUNC_BACKGND_MUSIC_PAUSE, "BACKGND_MUSIC_PAUSE" }, - { FUNC_VARIO, "VARIO" }, - { FUNC_HAPTIC, "HAPTIC" }, - { FUNC_LOGS, "LOGS" }, - { FUNC_BACKLIGHT, "BACKLIGHT" }, - { FUNC_SCREENSHOT, "SCREENSHOT" }, - { FUNC_RACING_MODE, "RACING_MODE" }, - { FUNC_DISABLE_TOUCH, "DISABLE_TOUCH" }, - { FUNC_SET_SCREEN, "SET_SCREEN" }, - { FUNC_DISABLE_AUDIO_AMP, "DISABLE_AUDIO_AMP" }, - { FUNC_RGB_LED, "RGB_LED" }, - { FUNC_TEST, "TEST" }, - { 0, NULL } -}; -const struct YamlIdStr enum_SwitchConfig[] = { - { SWITCH_NONE, "NONE" }, - { SWITCH_TOGGLE, "TOGGLE" }, - { SWITCH_2POS, "2POS" }, - { SWITCH_3POS, "3POS" }, - { SWITCH_none, "none" }, - { SWITCH_toggle, "toggle" }, - { SWITCH_2pos, "2pos" }, - { SWITCH_3pos, "3pos" }, - { 0, NULL } -}; -const struct YamlIdStr enum_TimerModes[] = { - { TMRMODE_OFF, "OFF" }, - { TMRMODE_ON, "ON" }, - { TMRMODE_START, "START" }, - { TMRMODE_THR, "THR" }, - { TMRMODE_THR_REL, "THR_REL" }, - { TMRMODE_THR_START, "THR_START" }, - { 0, NULL } -}; -const struct YamlIdStr enum_MixerMultiplex[] = { - { MLTPX_ADD, "ADD" }, - { MLTPX_MUL, "MUL" }, - { MLTPX_REPL, "REPL" }, - { 0, NULL } -}; -const struct YamlIdStr enum_MixSources[] = { - { MIXSRC_NONE, "NONE" }, - { MIXSRC_MIN, "MIN" }, - { MIXSRC_MAX, "MAX" }, - { MIXSRC_TX_VOLTAGE, "TX_VOLTAGE" }, - { MIXSRC_TX_TIME, "TX_TIME" }, - { MIXSRC_TX_GPS, "TX_GPS" }, - { 0, NULL } -}; -const struct YamlIdStr enum_LogicalSwitchesFunctions[] = { - { LS_FUNC_NONE, "FUNC_NONE" }, - { LS_FUNC_VEQUAL, "FUNC_VEQUAL" }, - { LS_FUNC_VALMOSTEQUAL, "FUNC_VALMOSTEQUAL" }, - { LS_FUNC_VPOS, "FUNC_VPOS" }, - { LS_FUNC_VNEG, "FUNC_VNEG" }, - { LS_FUNC_APOS, "FUNC_APOS" }, - { LS_FUNC_ANEG, "FUNC_ANEG" }, - { LS_FUNC_AND, "FUNC_AND" }, - { LS_FUNC_OR, "FUNC_OR" }, - { LS_FUNC_XOR, "FUNC_XOR" }, - { LS_FUNC_EDGE, "FUNC_EDGE" }, - { LS_FUNC_EQUAL, "FUNC_EQUAL" }, - { LS_FUNC_GREATER, "FUNC_GREATER" }, - { LS_FUNC_LESS, "FUNC_LESS" }, - { LS_FUNC_DIFFEGREATER, "FUNC_DIFFEGREATER" }, - { LS_FUNC_ADIFFEGREATER, "FUNC_ADIFFEGREATER" }, - { LS_FUNC_TIMER, "FUNC_TIMER" }, - { LS_FUNC_STICKY, "FUNC_STICKY" }, - { 0, NULL } -}; -const struct YamlIdStr enum_SwashType[] = { - { SWASH_TYPE_NONE, "TYPE_NONE" }, - { SWASH_TYPE_120, "TYPE_120" }, - { SWASH_TYPE_120X, "TYPE_120X" }, - { SWASH_TYPE_140, "TYPE_140" }, - { SWASH_TYPE_90, "TYPE_90" }, - { 0, NULL } -}; -const struct YamlIdStr enum_SwitchSources[] = { - { SWSRC_NONE, "NONE" }, - { SWSRC_ON, "ON" }, - { SWSRC_ONE, "ONE" }, - { SWSRC_TELEMETRY_STREAMING, "TELEMETRY_STREAMING" }, - { SWSRC_RADIO_ACTIVITY, "RADIO_ACTIVITY" }, - { SWSRC_TRAINER_CONNECTED, "TRAINER_CONNECTED" }, - { SWSRC_OFF, "OFF" }, - { 0, NULL } -}; -const struct YamlIdStr enum_PotsWarnMode[] = { - { POTS_WARN_OFF, "WARN_OFF" }, - { POTS_WARN_MANUAL, "WARN_MANUAL" }, - { POTS_WARN_AUTO, "WARN_AUTO" }, - { 0, NULL } -}; -const struct YamlIdStr enum_ModelOverridableEnable[] = { - { OVERRIDE_GLOBAL, "GLOBAL" }, - { OVERRIDE_OFF, "OFF" }, - { OVERRIDE_ON, "ON" }, - { 0, NULL } -}; -const struct YamlIdStr enum_FailsafeModes[] = { - { FAILSAFE_NOT_SET, "NOT_SET" }, - { FAILSAFE_HOLD, "HOLD" }, - { FAILSAFE_CUSTOM, "CUSTOM" }, - { FAILSAFE_NOPULSES, "NOPULSES" }, - { FAILSAFE_RECEIVER, "RECEIVER" }, - { 0, NULL } -}; -const struct YamlIdStr enum_TelemetrySensorFormula[] = { - { TELEM_FORMULA_ADD, "FORMULA_ADD" }, - { TELEM_FORMULA_AVERAGE, "FORMULA_AVERAGE" }, - { TELEM_FORMULA_MIN, "FORMULA_MIN" }, - { TELEM_FORMULA_MAX, "FORMULA_MAX" }, - { TELEM_FORMULA_MULTIPLY, "FORMULA_MULTIPLY" }, - { TELEM_FORMULA_TOTALIZE, "FORMULA_TOTALIZE" }, - { TELEM_FORMULA_CELL, "FORMULA_CELL" }, - { TELEM_FORMULA_CONSUMPTION, "FORMULA_CONSUMPTION" }, - { TELEM_FORMULA_DIST, "FORMULA_DIST" }, - { 0, NULL } -}; -const struct YamlIdStr enum_TelemetrySensorType[] = { - { TELEM_TYPE_CUSTOM, "TYPE_CUSTOM" }, - { TELEM_TYPE_CALCULATED, "TYPE_CALCULATED" }, - { 0, NULL } -}; -const struct YamlIdStr enum_ZoneOptionValueEnum[] = { - { ZOV_Unsigned, "Unsigned" }, - { ZOV_Signed, "Signed" }, - { ZOV_Bool, "Bool" }, - { ZOV_String, "String" }, - { ZOV_Source, "Source" }, - { ZOV_Color, "Color" }, - { 0, NULL } -}; -const struct YamlIdStr enum_USBJoystickIfMode[] = { - { USBJOYS_JOYSTICK, "JOYSTICK" }, - { USBJOYS_GAMEPAD, "GAMEPAD" }, - { USBJOYS_MULTIAXIS, "MULTIAXIS" }, - { 0, NULL } -}; -const struct YamlIdStr enum_USBJoystickCh[] = { - { USBJOYS_CH_NONE, "CH_NONE" }, - { USBJOYS_CH_BUTTON, "CH_BUTTON" }, - { USBJOYS_CH_AXIS, "CH_AXIS" }, - { USBJOYS_CH_SIM, "CH_SIM" }, - { 0, NULL } -}; - -// -// Structs last -// - -static const struct YamlNode struct_CalibData[] = { - YAML_IDX_CUST("calib",r_calib,w_calib), - YAML_SIGNED( "mid", 16 ), - YAML_SIGNED( "spanNeg", 16 ), - YAML_SIGNED( "spanPos", 16 ), - YAML_END -}; -static const struct YamlNode struct_signed_16[] = { - YAML_IDX, - YAML_SIGNED( "val", 16 ), - YAML_END -}; -static const struct YamlNode struct_TrainerMix[] = { - YAML_IDX, - YAML_UNSIGNED( "srcChn", 6 ), - YAML_ENUM("mode", 2, enum_TrainerMultiplex, NULL), - YAML_SIGNED( "studWeight", 8 ), - YAML_END -}; -static const struct YamlNode struct_TrainerData[] = { - YAML_ARRAY("calib", 16, 4, struct_signed_16, NULL), - YAML_ARRAY("mix", 16, 4, struct_TrainerMix, NULL), - YAML_END -}; -static const struct YamlNode struct_anonymous_1[] = { - YAML_STRING("name", 8), - YAML_END -}; -static const struct YamlNode struct_anonymous_2[] = { - YAML_SIGNED( "val", 16 ), - YAML_UNSIGNED( "mode", 8 ), - YAML_UNSIGNED( "param", 8 ), - YAML_SIGNED( "val2", 32 ), - YAML_END -}; -static const struct YamlNode struct_anonymous_3[] = { - YAML_SIGNED( "val1", 32 ), - YAML_SIGNED( "val2", 32 ), - YAML_END -}; -static const struct YamlNode union_anonymous_0_elmts[] = { - YAML_STRUCT("play", 64, struct_anonymous_1, NULL), - YAML_STRUCT("all", 64, struct_anonymous_2, NULL), - YAML_STRUCT("clear", 64, struct_anonymous_3, NULL), - YAML_END -}; -static const struct YamlNode struct_CustomFunctionData[] = { - YAML_IDX, - YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ), - YAML_ENUM("func", 6, enum_Functions, NULL), - YAML_CUSTOM("def",r_customFn,w_customFn), - YAML_PADDING( 64 ), - YAML_PADDING( 1 ), - YAML_PADDING( 7 ), - YAML_END -}; -static const struct YamlNode struct_switchDef[] = { - YAML_IDX_CUST("sw",sw_idx_read,sw_idx_write), - YAML_STRING("name", 3), - YAML_ENUM("type", 3, enum_SwitchConfig, NULL), - YAML_PADDING( 5 ), - YAML_END -}; -static const struct YamlNode struct_RadioData[] = { - YAML_UNSIGNED( "manuallyEdited", 1 ), - YAML_SIGNED( "timezoneMinutes", 3 ), - YAML_UNSIGNED( "ppmunit", 2 ), - YAML_ENUM("hatsMode", 2, enum_HatsMode, NULL), - YAML_CUSTOM("semver",nullptr,w_semver), - YAML_CUSTOM("board",nullptr,w_board), - YAML_ARRAY("calib", 48, 20, struct_CalibData, NULL), - YAML_PADDING( 16 ), - YAML_SIGNED( "currModel", 8 ), - YAML_UNSIGNED( "contrast", 8 ), - YAML_UNSIGNED( "vBatWarn", 8 ), - YAML_SIGNED( "txVoltageCalibration", 8 ), - YAML_ENUM("backlightMode", 3, enum_BacklightMode, NULL), - YAML_ENUM("antennaMode", 2, enum_AntennaModes, NULL), - YAML_UNSIGNED( "disableRtcWarning", 1 ), - YAML_UNSIGNED( "keysBacklight", 1 ), - YAML_UNSIGNED( "dontPlayHello", 1 ), - YAML_ENUM("internalModule", 8, enum_ModuleType, NULL), - YAML_STRUCT("trainer", 128, struct_TrainerData, NULL), - YAML_UNSIGNED( "view", 8 ), - YAML_PADDING( 2 ), - YAML_UNSIGNED( "fai", 1 ), - YAML_SIGNED_CUST( "beepMode", 2, r_beeperMode, w_beeperMode ), - YAML_UNSIGNED( "alarmsFlash", 1 ), - YAML_UNSIGNED( "disableMemoryWarning", 1 ), - YAML_UNSIGNED( "disableAlarmWarning", 1 ), - YAML_UNSIGNED( "stickMode", 2 ), - YAML_SIGNED( "timezone", 5 ), - YAML_UNSIGNED( "adjustRTC", 1 ), - YAML_UNSIGNED( "inactivityTimer", 8 ), - YAML_CUSTOM("telemetryBaudrate",r_telemetryBaudrate,nullptr), - YAML_UNSIGNED( "internalModuleBaudrate", 3 ), - YAML_SIGNED( "splashMode", 3 ), - YAML_SIGNED_CUST( "hapticMode", 2, r_beeperMode, w_beeperMode ), - YAML_SIGNED( "switchesDelay", 8 ), - YAML_UNSIGNED( "lightAutoOff", 8 ), - YAML_UNSIGNED( "templateSetup", 8 ), - YAML_SIGNED( "PPM_Multiplier", 8 ), - YAML_SIGNED_CUST( "hapticLength", 8, r_5pos, w_5pos ), - YAML_SIGNED_CUST( "beepLength", 3, r_5pos, w_5pos ), - YAML_SIGNED_CUST( "hapticStrength", 3, r_5pos, w_5pos ), - YAML_UNSIGNED( "gpsFormat", 1 ), - YAML_UNSIGNED( "audioMuteEnable", 1 ), - YAML_UNSIGNED_CUST( "speakerPitch", 8, r_spPitch, w_spPitch ), - YAML_SIGNED_CUST( "speakerVolume", 8, r_vol, w_vol ), - YAML_SIGNED_CUST( "vBatMin", 8, r_vbat_min, w_vbat_min ), - YAML_SIGNED_CUST( "vBatMax", 8, r_vbat_max, w_vbat_max ), - YAML_UNSIGNED( "backlightBright", 8 ), - YAML_UNSIGNED( "globalTimer", 32 ), - YAML_UNSIGNED( "bluetoothBaudrate", 4 ), - YAML_ENUM("bluetoothMode", 4, enum_BluetoothModes, NULL), - YAML_UNSIGNED( "countryCode", 2 ), - YAML_SIGNED( "pwrOnSpeed", 3 ), - YAML_SIGNED( "pwrOffSpeed", 3 ), - YAML_CUSTOM("jitterFilter",r_jitterFilter,nullptr), - YAML_UNSIGNED( "noJitterFilter", 1 ), - YAML_UNSIGNED( "imperial", 1 ), - YAML_UNSIGNED( "disableRssiPoweroffAlarm", 1 ), - YAML_UNSIGNED( "USBMode", 2 ), - YAML_UNSIGNED( "jackMode", 2 ), - YAML_PADDING( 1 ), - YAML_STRING("ttsLanguage", 2), - YAML_SIGNED_CUST( "beepVolume", 4, r_5pos, w_5pos ), - YAML_SIGNED_CUST( "wavVolume", 4, r_5pos, w_5pos ), - YAML_SIGNED_CUST( "varioVolume", 4, r_5pos, w_5pos ), - YAML_SIGNED_CUST( "backgroundVolume", 4, r_5pos, w_5pos ), - YAML_SIGNED_CUST( "varioPitch", 8, r_vPitch, w_vPitch ), - YAML_SIGNED_CUST( "varioRange", 8, r_vPitch, w_vPitch ), - YAML_SIGNED( "varioRepeat", 8 ), - YAML_ARRAY("customFn", 88, 64, struct_CustomFunctionData, cfn_is_active), - YAML_CUSTOM("auxSerialMode",r_serialMode,nullptr), - YAML_CUSTOM("aux2SerialMode",r_serialMode,nullptr), - YAML_ARRAY("serialPort", 8, 4, struct_serialConfig, nullptr), - YAML_ARRAY("sticksConfig", 0, MAX_STICKS, struct_stickConfig, stick_name_valid), - YAML_ARRAY("slidersConfig", 0, MAX_POTS, struct_sliderConfig, nullptr), - YAML_PADDING( 8 ), - YAML_ARRAY("potsConfig", 4, 16, struct_potConfig, nullptr), - YAML_ARRAY("switchConfig", 32, 20, struct_switchDef, switchIsActive), - YAML_ARRAY("flexSwitches", 0, MAX_FLEX_SWITCHES, struct_flexSwitch, flex_sw_valid), - YAML_STRING("currModelFilename", 17), - YAML_UNSIGNED( "modelQuickSelect", 1 ), - YAML_UNSIGNED( "blOffBright", 7 ), - YAML_STRING("bluetoothName", 10), - YAML_STRING("ownerRegistrationID", 8), - YAML_CUSTOM("rotEncDirection",r_rotEncDirection,nullptr), - YAML_UNSIGNED( "rotEncMode", 3 ), - YAML_SIGNED( "uartSampleMode", 2 ), - YAML_UNSIGNED( "stickDeadZone", 3 ), - YAML_STRING("selectedTheme", 26), - YAML_UNSIGNED( "labelSingleSelect", 1 ), - YAML_UNSIGNED( "labelMultiMode", 1 ), - YAML_UNSIGNED( "favMultiMode", 1 ), - YAML_UNSIGNED( "modelSelectLayout", 2 ), - YAML_UNSIGNED( "radioThemesDisabled", 1 ), - YAML_UNSIGNED( "radioGFDisabled", 1 ), - YAML_UNSIGNED( "radioTrainerDisabled", 1 ), - YAML_UNSIGNED( "modelHeliDisabled", 1 ), - YAML_UNSIGNED( "modelFMDisabled", 1 ), - YAML_UNSIGNED( "modelCurvesDisabled", 1 ), - YAML_UNSIGNED( "modelGVDisabled", 1 ), - YAML_UNSIGNED( "modelLSDisabled", 1 ), - YAML_UNSIGNED( "modelSFDisabled", 1 ), - YAML_UNSIGNED( "modelCustomScriptsDisabled", 1 ), - YAML_UNSIGNED( "modelTelemetryDisabled", 1 ), - YAML_UNSIGNED( "disableTrainerPoweroffAlarm", 1 ), - YAML_UNSIGNED( "disablePwrOnOffHaptic", 1 ), - YAML_PADDING( 6 ), - YAML_UNSIGNED( "pwrOffIfInactive", 8 ), - YAML_END -}; -static const struct YamlNode struct_unsigned_8[] = { - YAML_IDX, - YAML_UNSIGNED( "val", 8 ), - YAML_END -}; -static const struct YamlNode struct_ModelHeader[] = { - YAML_STRING("name", 15), - YAML_ARRAY("modelId", 8, 2, struct_unsigned_8, NULL), - YAML_STRING("bitmap", 14), - YAML_STRING("labels", 100), - YAML_END -}; -static const struct YamlNode struct_TimerData[] = { - YAML_IDX, - YAML_UNSIGNED( "start", 22 ), - YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ), - YAML_SIGNED( "value", 22 ), - YAML_ENUM("mode", 3, enum_TimerModes, NULL), - YAML_UNSIGNED( "countdownBeep", 2 ), - YAML_UNSIGNED( "minuteBeep", 1 ), - YAML_UNSIGNED( "persistent", 2 ), - YAML_SIGNED( "countdownStart", 2 ), - YAML_UNSIGNED( "showElapsed", 1 ), - YAML_UNSIGNED( "extraHaptic", 1 ), - YAML_PADDING( 6 ), - YAML_STRING("name", 8), - YAML_END -}; -static const struct YamlNode struct_CurveRef[] = { - YAML_UNSIGNED( "type", 5 ), - YAML_UNSIGNED_CUST( "value", 11, r_sourceNumVal, w_sourceNumVal ), - YAML_END -}; -static const struct YamlNode struct_MixData[] = { - YAML_UNSIGNED( "destCh", 5 ), - YAML_SIGNED_CUST( "srcRaw", 10, r_mixSrcRawEx, w_mixSrcRawEx ), - YAML_UNSIGNED( "carryTrim", 1 ), - YAML_UNSIGNED( "mixWarn", 2 ), - YAML_ENUM("mltpx", 2, enum_MixerMultiplex, NULL), - YAML_UNSIGNED( "delayPrec", 1 ), - YAML_UNSIGNED( "speedPrec", 1 ), - YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ), - YAML_PADDING( 1 ), - YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ), - YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ), - YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ), - YAML_STRUCT("curve", 16, struct_CurveRef, NULL), - YAML_UNSIGNED( "delayUp", 8 ), - YAML_UNSIGNED( "delayDown", 8 ), - YAML_UNSIGNED( "speedUp", 8 ), - YAML_UNSIGNED( "speedDown", 8 ), - YAML_STRING("name", 6), - YAML_END -}; -static const struct YamlNode struct_LimitData[] = { - YAML_IDX, - YAML_SIGNED_CUST( "min", 11, in_read_weight, in_write_weight ), - YAML_SIGNED_CUST( "max", 11, in_read_weight, in_write_weight ), - YAML_SIGNED( "ppmCenter", 10 ), - YAML_SIGNED_CUST( "offset", 11, in_read_weight, in_write_weight ), - YAML_UNSIGNED( "symetrical", 1 ), - YAML_UNSIGNED( "revert", 1 ), - YAML_PADDING( 3 ), - YAML_SIGNED( "curve", 8 ), - YAML_STRING("name", 6), - YAML_END -}; -static const struct YamlNode struct_ExpoData[] = { - YAML_UNSIGNED( "mode", 2 ), - YAML_UNSIGNED( "scale", 14 ), - YAML_CUSTOM("carryTrim",r_carryTrim,nullptr), - YAML_SIGNED( "trimSource", 6 ), - YAML_SIGNED_CUST( "srcRaw", 10, r_mixSrcRawEx, w_mixSrcRawEx ), - YAML_UNSIGNED_CUST( "weight", 11, r_sourceNumVal, w_sourceNumVal ), - YAML_UNSIGNED_CUST( "offset", 11, r_sourceNumVal, w_sourceNumVal ), - YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ), - YAML_STRUCT("curve", 16, struct_CurveRef, NULL), - YAML_UNSIGNED( "chn", 5 ), - YAML_UNSIGNED_CUST( "flightModes", 9, r_flightModes, w_flightModes ), - YAML_PADDING( 2 ), - YAML_STRING("name", 6), - YAML_END -}; -static const struct YamlNode struct_CurveHeader[] = { - YAML_IDX, - YAML_UNSIGNED( "type", 1 ), - YAML_UNSIGNED( "smooth", 1 ), - YAML_SIGNED( "points", 6 ), - YAML_STRING("name", 3), - YAML_END -}; -static const struct YamlNode struct_signed_8[] = { - YAML_IDX, - YAML_SIGNED( "val", 8 ), - YAML_END -}; -static const struct YamlNode struct_LogicalSwitchData[] = { - YAML_IDX, - YAML_ENUM("func", 8, enum_LogicalSwitchesFunctions, NULL), - YAML_CUSTOM("def",r_logicSw,w_logicSw), - YAML_PADDING( 10 ), - YAML_PADDING( 10 ), - YAML_SIGNED_CUST( "andsw", 10, r_swtchSrc, w_swtchSrc ), - YAML_UNSIGNED( "lsPersist", 1 ), - YAML_UNSIGNED( "lsState", 1 ), - YAML_PADDING( 16 ), - YAML_UNSIGNED( "delay", 8 ), - YAML_UNSIGNED( "duration", 8 ), - YAML_END -}; -static const struct YamlNode struct_SwashRingData[] = { - YAML_ENUM("type", 8, enum_SwashType, NULL), - YAML_UNSIGNED( "value", 8 ), - YAML_UNSIGNED_CUST( "collectiveSource", 8, r_mixSrcRaw, w_mixSrcRaw ), - YAML_UNSIGNED_CUST( "aileronSource", 8, r_mixSrcRaw, w_mixSrcRaw ), - YAML_UNSIGNED_CUST( "elevatorSource", 8, r_mixSrcRaw, w_mixSrcRaw ), - YAML_SIGNED( "collectiveWeight", 8 ), - YAML_SIGNED( "aileronWeight", 8 ), - YAML_SIGNED( "elevatorWeight", 8 ), - YAML_END -}; -static const struct YamlNode struct_trim_t[] = { - YAML_IDX, - YAML_SIGNED( "value", 11 ), - YAML_UNSIGNED( "mode", 5 ), - YAML_END -}; -static const struct YamlNode struct_FlightModeData[] = { - YAML_IDX, - YAML_ARRAY("trim", 16, 8, struct_trim_t, NULL), - YAML_STRING("name", 10), - YAML_SIGNED_CUST( "swtch", 10, r_swtchSrc, w_swtchSrc ), - YAML_PADDING( 6 ), - YAML_UNSIGNED( "fadeIn", 8 ), - YAML_UNSIGNED( "fadeOut", 8 ), - YAML_ARRAY("gvars", 16, 9, struct_signed_16, gvar_is_active), - YAML_END -}; -static const struct YamlNode struct_GVarData[] = { - YAML_IDX, - YAML_STRING("name", 3), - YAML_UNSIGNED( "min", 12 ), - YAML_UNSIGNED( "max", 12 ), - YAML_UNSIGNED( "popup", 1 ), - YAML_UNSIGNED( "prec", 1 ), - YAML_UNSIGNED( "unit", 2 ), - YAML_PADDING( 4 ), - YAML_END -}; -static const struct YamlNode struct_VarioData[] = { - YAML_UNSIGNED_CUST( "source", 7, r_tele_sensor, w_tele_sensor ), - YAML_UNSIGNED( "centerSilent", 1 ), - YAML_SIGNED( "centerMax", 8 ), - YAML_SIGNED( "centerMin", 8 ), - YAML_SIGNED( "min", 8 ), - YAML_SIGNED( "max", 8 ), - YAML_END -}; -static const struct YamlNode struct_RssiAlarmData[] = { - YAML_CUSTOM("disabled",r_rssiDisabled,nullptr), - YAML_CUSTOM("warning",r_rssiWarning,nullptr), - YAML_CUSTOM("critical",r_rssiCritical,nullptr), - YAML_END -}; -static const struct YamlNode struct_RFAlarmData[] = { - YAML_SIGNED( "warning", 8 ), - YAML_SIGNED( "critical", 8 ), - YAML_END -}; -static const struct YamlNode struct_PpmModule[] = { - YAML_SIGNED( "delay", 6 ), - YAML_UNSIGNED( "pulsePol", 1 ), - YAML_UNSIGNED( "outputType", 1 ), - YAML_SIGNED( "frameLength", 8 ), - YAML_END -}; -static const struct YamlNode struct_anonymous_5[] = { - YAML_PADDING( 8 ), - YAML_UNSIGNED( "disableTelemetry", 1 ), - YAML_UNSIGNED( "disableMapping", 1 ), - YAML_UNSIGNED( "autoBindMode", 1 ), - YAML_UNSIGNED( "lowPowerMode", 1 ), - YAML_UNSIGNED( "receiverTelemetryOff", 1 ), - YAML_UNSIGNED( "receiverHigherChannels", 1 ), - YAML_PADDING( 2 ), - YAML_SIGNED( "optionValue", 8 ), - YAML_END -}; -static const struct YamlNode struct_anonymous_6[] = { - YAML_UNSIGNED( "power", 2 ), - YAML_PADDING( 2 ), - YAML_UNSIGNED( "receiverTelemetryOff", 1 ), - YAML_UNSIGNED( "receiverHigherChannels", 1 ), - YAML_SIGNED( "antennaMode", 2 ), - YAML_PADDING( 8 ), - YAML_END -}; -static const struct YamlNode struct_anonymous_7[] = { - YAML_PADDING( 6 ), - YAML_UNSIGNED( "noninverted", 1 ), - YAML_PADDING( 1 ), - YAML_SIGNED( "refreshRate", 8 ), - YAML_END -}; -static const struct YamlNode struct_string_64[] = { - YAML_IDX, - YAML_STRING("val", 8), - YAML_END -}; -static const struct YamlNode struct_anonymous_8[] = { - YAML_UNSIGNED( "receivers", 7 ), - YAML_UNSIGNED( "racingMode", 1 ), - YAML_ARRAY("receiverName", 64, 3, struct_string_64, NULL), - YAML_END -}; -static const struct YamlNode struct_anonymous_9[] = { - YAML_ARRAY("rx_id", 8, 4, struct_unsigned_8, NULL), - YAML_UNSIGNED( "mode", 3 ), - YAML_UNSIGNED( "rfPower", 1 ), - YAML_UNSIGNED( "reserved", 4 ), - YAML_ARRAY("rx_freq", 8, 2, struct_unsigned_8, NULL), - YAML_END -}; -static const struct YamlNode struct_anonymous_10[] = { - YAML_UNSIGNED( "emi", 2 ), - YAML_UNSIGNED( "telemetry", 1 ), - YAML_UNSIGNED( "phyMode", 3 ), - YAML_UNSIGNED( "reserved", 2 ), - YAML_UNSIGNED( "rfPower", 8 ), - YAML_END -}; -static const struct YamlNode struct_anonymous_11[] = { - YAML_UNSIGNED( "raw12bits", 1 ), - YAML_UNSIGNED( "telemetryBaudrate", 3 ), - YAML_PADDING( 4 ), - YAML_END -}; -static const struct YamlNode struct_anonymous_12[] = { - YAML_UNSIGNED( "telemetryBaudrate", 3 ), - YAML_UNSIGNED( "crsfArmingMode", 1 ), - YAML_PADDING( 4 ), - YAML_SIGNED_CUST( "crsfArmingTrigger", 10, r_swtchSrc, w_swtchSrc ), - YAML_SIGNED( "spare3", 6 ), - YAML_END -}; -static const struct YamlNode struct_anonymous_13[] = { - YAML_UNSIGNED( "flags", 8 ), - YAML_END -}; -static const struct YamlNode union_anonymous_4_elmts[] = { - YAML_ARRAY("raw", 8, 25, struct_unsigned_8, NULL), - YAML_STRUCT("ppm", 16, struct_PpmModule, NULL), - YAML_STRUCT("multi", 24, struct_anonymous_5, NULL), - YAML_STRUCT("pxx", 16, struct_anonymous_6, NULL), - YAML_STRUCT("sbus", 16, struct_anonymous_7, NULL), - YAML_STRUCT("pxx2", 200, struct_anonymous_8, NULL), - YAML_STRUCT("flysky", 56, struct_anonymous_9, NULL), - YAML_STRUCT("afhds3", 16, struct_anonymous_10, NULL), - YAML_STRUCT("ghost", 8, struct_anonymous_11, NULL), - YAML_STRUCT("crsf", 24, struct_anonymous_12, NULL), - YAML_STRUCT("dsmp", 8, struct_anonymous_13, NULL), - YAML_END -}; -static const struct YamlNode struct_ModuleData[] = { - YAML_IDX, - YAML_UNSIGNED_CUST( "type", 8, r_moduleType, w_moduleType ), - YAML_CUSTOM("subType",r_modSubtype,w_modSubtype), - YAML_UNSIGNED( "channelsStart", 8 ), - YAML_SIGNED_CUST( "channelsCount", 8, r_channelsCount, w_channelsCount ), - YAML_ENUM("failsafeMode", 4, enum_FailsafeModes, NULL), - YAML_PADDING( 4 ), - YAML_UNION("mod", 200, union_anonymous_4_elmts, select_mod_type), - YAML_END -}; -static const struct YamlNode struct_TrainerModuleData[] = { - YAML_UNSIGNED_CUST( "mode", 8, r_trainerMode, w_trainerMode ), - YAML_UNSIGNED( "channelsStart", 8 ), - YAML_SIGNED( "channelsCount", 8 ), - YAML_SIGNED( "frameLength", 8 ), - YAML_SIGNED( "delay", 6 ), - YAML_UNSIGNED( "pulsePol", 1 ), - YAML_PADDING( 1 ), - YAML_END -}; -static const struct YamlNode union_ScriptDataInput_elmts[] = { - YAML_SIGNED( "value", 16 ), - YAML_UNSIGNED_CUST( "source", 16, r_mixSrcRaw, w_mixSrcRaw ), - YAML_END -}; -static const struct YamlNode union_ScriptDataInput[] = { - YAML_IDX, - YAML_UNION("u", 16, union_ScriptDataInput_elmts, select_script_input), - YAML_END -}; -static const struct YamlNode struct_ScriptData[] = { - YAML_IDX, - YAML_STRING("file", 6), - YAML_STRING("name", 6), - YAML_ARRAY("inputs", 16, 6, union_ScriptDataInput, NULL), - YAML_END -}; -static const struct YamlNode struct_string_32[] = { - YAML_IDX, - YAML_STRING("val", 4), - YAML_END -}; -static const struct YamlNode union_anonymous_14_elmts[] = { - YAML_UNSIGNED( "id", 16 ), - YAML_UNSIGNED( "persistentValue", 16 ), - YAML_END -}; -static const struct YamlNode struct_anonymous_16[] = { - YAML_UNSIGNED( "physID", 5 ), - YAML_UNSIGNED( "rxIndex", 3 ), - YAML_END -}; -static const struct YamlNode union_anonymous_15_elmts[] = { - YAML_STRUCT("frskyInstance", 8, struct_anonymous_16, NULL), - YAML_UNSIGNED( "instance", 8 ), - YAML_ENUM("formula", 8, enum_TelemetrySensorFormula, NULL), - YAML_END -}; -static const struct YamlNode struct_anonymous_18[] = { - YAML_UNSIGNED( "ratio", 16 ), - YAML_SIGNED( "offset", 16 ), - YAML_END -}; -static const struct YamlNode struct_anonymous_19[] = { - YAML_UNSIGNED( "source", 8 ), - YAML_UNSIGNED( "index", 8 ), - YAML_PADDING( 16 ), - YAML_END -}; -static const struct YamlNode struct_anonymous_20[] = { - YAML_ARRAY("sources", 8, 4, struct_signed_8, NULL), - YAML_END -}; -static const struct YamlNode struct_anonymous_21[] = { - YAML_UNSIGNED( "source", 8 ), - YAML_PADDING( 24 ), - YAML_END -}; -static const struct YamlNode struct_anonymous_22[] = { - YAML_UNSIGNED( "gps", 8 ), - YAML_UNSIGNED( "alt", 8 ), - YAML_PADDING( 16 ), - YAML_END -}; -static const struct YamlNode union_anonymous_17_elmts[] = { - YAML_STRUCT("custom", 32, struct_anonymous_18, NULL), - YAML_STRUCT("cell", 32, struct_anonymous_19, NULL), - YAML_STRUCT("calc", 32, struct_anonymous_20, NULL), - YAML_STRUCT("consumption", 32, struct_anonymous_21, NULL), - YAML_STRUCT("dist", 32, struct_anonymous_22, NULL), - YAML_UNSIGNED( "param", 32 ), - YAML_END -}; -static const struct YamlNode struct_TelemetrySensor[] = { - YAML_IDX, - YAML_UNION("id1", 16, union_anonymous_14_elmts, select_id1), - YAML_UNION("id2", 8, union_anonymous_15_elmts, select_id2), - YAML_STRING("label", 4), - YAML_UNSIGNED( "subId", 8 ), - YAML_ENUM("type", 1, enum_TelemetrySensorType, NULL), - YAML_PADDING( 1 ), - YAML_UNSIGNED( "unit", 6 ), - YAML_UNSIGNED( "prec", 2 ), - YAML_UNSIGNED( "autoOffset", 1 ), - YAML_UNSIGNED( "filter", 1 ), - YAML_UNSIGNED( "logs", 1 ), - YAML_UNSIGNED( "persistent", 1 ), - YAML_UNSIGNED( "onlyPositive", 1 ), - YAML_PADDING( 1 ), - YAML_UNION("cfg", 32, union_anonymous_17_elmts, select_sensor_cfg), - YAML_END -}; -static const struct YamlNode union_ZoneOptionValue_elmts[] = { - YAML_UNSIGNED( "unsignedValue", 32 ), - YAML_SIGNED( "signedValue", 32 ), - YAML_UNSIGNED( "boolValue", 32 ), - YAML_STRING("stringValue", 12), - YAML_CUSTOM("source",r_zov_source,w_zov_source), - YAML_CUSTOM("color",r_zov_color,w_zov_color), - YAML_END -}; -static const struct YamlNode struct_ZoneOptionValueTyped[] = { - YAML_IDX, - YAML_ENUM("type", 32, enum_ZoneOptionValueEnum, NULL), - YAML_UNION("value", 96, union_ZoneOptionValue_elmts, select_zov), - YAML_END -}; -static const struct YamlNode struct_WidgetPersistentData[] = { - YAML_ARRAY("options", 128, 10, struct_ZoneOptionValueTyped, NULL), - YAML_END -}; -static const struct YamlNode struct_ZonePersistentData[] = { - YAML_IDX, - YAML_STRING("widgetName", 20), - YAML_STRUCT("widgetData", 1280, struct_WidgetPersistentData, NULL), - YAML_END -}; -static const struct YamlNode struct_LayoutPersistentData[] = { - YAML_ARRAY("zones", 1440, 10, struct_ZonePersistentData, NULL), - YAML_ARRAY("options", 128, 10, struct_ZoneOptionValueTyped, NULL), - YAML_END -}; -static const struct YamlNode struct_CustomScreenData[] = { - YAML_IDX, - YAML_STRING("LayoutId", 12), - YAML_STRUCT("layoutData", 15680, struct_LayoutPersistentData, NULL), - YAML_END -}; -static const struct YamlNode struct_TopBarPersistentData[] = { - YAML_ARRAY("zones", 1440, 4, struct_ZonePersistentData, NULL), - YAML_ARRAY("options", 128, 1, struct_ZoneOptionValueTyped, NULL), - YAML_END -}; -static const struct YamlNode struct_USBJoystickChData[] = { - YAML_IDX, - YAML_ENUM("mode", 3, enum_USBJoystickCh, NULL), - YAML_UNSIGNED( "inversion", 1 ), - YAML_UNSIGNED( "param", 4 ), - YAML_UNSIGNED( "btn_num", 5 ), - YAML_UNSIGNED( "switch_npos", 3 ), - YAML_END -}; -static const struct YamlNode struct_ModelData[] = { - YAML_CUSTOM("semver",nullptr,w_semver), - YAML_STRUCT("header", 1048, struct_ModelHeader, NULL), - YAML_ARRAY("timers", 136, 3, struct_TimerData, NULL), - YAML_UNSIGNED( "telemetryProtocol", 3 ), - YAML_UNSIGNED( "thrTrim", 1 ), - YAML_UNSIGNED( "noGlobalFunctions", 1 ), - YAML_UNSIGNED( "displayTrims", 2 ), - YAML_UNSIGNED( "ignoreSensorIds", 1 ), - YAML_SIGNED( "trimInc", 3 ), - YAML_UNSIGNED( "disableThrottleWarning", 1 ), - YAML_UNSIGNED( "displayChecklist", 1 ), - YAML_UNSIGNED( "extendedLimits", 1 ), - YAML_UNSIGNED( "extendedTrims", 1 ), - YAML_UNSIGNED( "throttleReversed", 1 ), - YAML_UNSIGNED( "enableCustomThrottleWarning", 1 ), - YAML_UNSIGNED( "disableTelemetryWarning", 1 ), - YAML_UNSIGNED( "showInstanceIds", 1 ), - YAML_UNSIGNED( "checklistInteractive", 1 ), - YAML_ENUM("hatsMode", 2, enum_HatsMode, NULL), - YAML_PADDING( 2 ), - YAML_SIGNED( "customThrottleWarningPosition", 8 ), - YAML_UNSIGNED( "beepANACenter", 16 ), - YAML_ARRAY("mixData", 160, 64, struct_MixData, NULL), - YAML_ARRAY("limitData", 104, 32, struct_LimitData, NULL), - YAML_ARRAY("expoData", 144, 64, struct_ExpoData, NULL), - YAML_ARRAY("curves", 32, 32, struct_CurveHeader, NULL), - YAML_ARRAY("points", 8, 512, struct_signed_8, NULL), - YAML_ARRAY("logicalSw", 72, 64, struct_LogicalSwitchData, NULL), - YAML_ARRAY("customFn", 88, 64, struct_CustomFunctionData, cfn_is_active), - YAML_STRUCT("swashR", 64, struct_SwashRingData, swash_is_active), - YAML_ARRAY("flightModeData", 384, 9, struct_FlightModeData, fmd_is_active), - YAML_UNSIGNED_CUST( "thrTraceSrc", 8, r_thrSrc, w_thrSrc ), - YAML_CUSTOM("switchWarningState",r_swtchWarn,nullptr), - YAML_ARRAY("switchWarning", 2, 32, struct_swtchWarn, nullptr), - YAML_ARRAY("gvars", 56, 9, struct_GVarData, NULL), - YAML_STRUCT("varioData", 40, struct_VarioData, NULL), - YAML_UNSIGNED_CUST( "rssiSource", 8, r_tele_sensor, w_tele_sensor ), - YAML_STRUCT("rssiAlarms", 0, struct_RssiAlarmData, NULL), - YAML_STRUCT("rfAlarms", 16, struct_RFAlarmData, NULL), - YAML_UNSIGNED( "thrTrimSw", 3 ), - YAML_ENUM("potsWarnMode", 2, enum_PotsWarnMode, NULL), - YAML_ENUM("jitterFilter", 2, enum_ModelOverridableEnable, NULL), - YAML_PADDING( 1 ), - YAML_ARRAY("moduleData", 232, 2, struct_ModuleData, NULL), - YAML_ARRAY("failsafeChannels", 16, 32, struct_signed_16, NULL), - YAML_STRUCT("trainerData", 40, struct_TrainerModuleData, NULL), - YAML_ARRAY("scriptsData", 192, 9, struct_ScriptData, NULL), - YAML_ARRAY("inputNames", 32, 32, struct_string_32, NULL), - YAML_UNSIGNED( "potsWarnEnabled", 16 ), - YAML_ARRAY("potsWarnPosition", 8, 16, struct_signed_8, NULL), - YAML_ARRAY("telemetrySensors", 112, 60, struct_TelemetrySensor, NULL), - YAML_ARRAY("screenData", 15776, 10, struct_CustomScreenData, NULL), - YAML_STRUCT("topbarData", 5888, struct_TopBarPersistentData, NULL), - YAML_ARRAY("topbarWidgetWidth", 8, 4, struct_unsigned_8, NULL), - YAML_UNSIGNED( "view", 8 ), - YAML_STRING("modelRegistrationID", 8), - YAML_UNSIGNED( "usbJoystickExtMode", 1 ), - YAML_ENUM("usbJoystickIfMode", 3, enum_USBJoystickIfMode, NULL), - YAML_UNSIGNED( "usbJoystickCircularCut", 4 ), - YAML_ARRAY("usbJoystickCh", 16, 26, struct_USBJoystickChData, NULL), - YAML_ENUM("radioThemesDisabled", 2, enum_ModelOverridableEnable, NULL), - YAML_ENUM("radioGFDisabled", 2, enum_ModelOverridableEnable, NULL), - YAML_ENUM("radioTrainerDisabled", 2, enum_ModelOverridableEnable, NULL), - YAML_ENUM("modelHeliDisabled", 2, enum_ModelOverridableEnable, NULL), - YAML_ENUM("modelFMDisabled", 2, enum_ModelOverridableEnable, NULL), - YAML_ENUM("modelCurvesDisabled", 2, enum_ModelOverridableEnable, NULL), - YAML_ENUM("modelGVDisabled", 2, enum_ModelOverridableEnable, NULL), - YAML_ENUM("modelLSDisabled", 2, enum_ModelOverridableEnable, NULL), - YAML_ENUM("modelSFDisabled", 2, enum_ModelOverridableEnable, NULL), - YAML_ENUM("modelCustomScriptsDisabled", 2, enum_ModelOverridableEnable, NULL), - YAML_ENUM("modelTelemetryDisabled", 2, enum_ModelOverridableEnable, NULL), - YAML_END -}; -static const struct YamlNode struct_PartialModel[] = { - YAML_STRUCT("header", 1048, struct_ModelHeader, NULL), - YAML_ARRAY("timers", 136, 3, struct_TimerData, NULL), - YAML_END -}; - -#define MAX_RADIODATA_MODELDATA_PARTIALMODEL_STR_LEN 29 - -static const struct YamlNode __RadioData_root_node = YAML_ROOT( struct_RadioData ); - -const YamlNode* get_radiodata_nodes() -{ - return &__RadioData_root_node; -} -static const struct YamlNode __ModelData_root_node = YAML_ROOT( struct_ModelData ); - -const YamlNode* get_modeldata_nodes() -{ - return &__ModelData_root_node; -} -static const struct YamlNode __PartialModel_root_node = YAML_ROOT( struct_PartialModel ); - -const YamlNode* get_partialmodel_nodes() -{ - return &__PartialModel_root_node; -} - diff --git a/radio/src/targets/nv14/CMakeLists.txt b/radio/src/targets/nv14/CMakeLists.txt deleted file mode 100644 index e83b9d050..000000000 --- a/radio/src/targets/nv14/CMakeLists.txt +++ /dev/null @@ -1,159 +0,0 @@ -option(DISK_CACHE "Enable SD card disk cache" ON) -option(UNEXPECTED_SHUTDOWN "Enable the Unexpected Shutdown screen" ON) -option(STICKS_DEAD_ZONE "Enable sticks dead zone" YES) -option(MULTIMODULE "DIY Multiprotocol TX Module (https://github.com/pascallanger/DIY-Multiprotocol-TX-Module)" ON) -option(GHOST "Ghost TX Module" ON) -option(PXX1 "PXX1 protocol support" ON) -option(PXX2 "PXX2 protocol support" OFF) -option(MODULE_SIZE_STD "Standard size TX Module" ON) - -set(PWR_BUTTON "PRESS" CACHE STRING "Pwr button type (PRESS/SWITCH)") -set(CPU_TYPE STM32F4) -set(HSE_VALUE 12000000) -set(STORAGE_MODELSLIST YES) -set(HAPTIC YES) -set(GUI_DIR colorlcd) -set(BITMAPS_DIR 480x272) -set(HARDWARE_EXTERNAL_MODULE YES) - -set(TARGET_DIR nv14) - -set(RTC_BACKUP_RAM YES) -set(PPM_LIMITS_SYMETRICAL YES) - -# for size report script -set(CPU_TYPE_FULL STM32F429xI) -set(TARGET_LINKER_DIR stm32f429_sdram) -set(TARGET_EXTRAM_START 0xC0000000) - -set(SIZE_TARGET_MEM_DEFINE "MEM_SIZE_SDRAM1=8192") - -option(USB_SERIAL "Enable USB serial (CDC)" ON) - -set(RF_BAUD_RATE 921600 230400 115200 57600 38400 19200 9600 4800 2400 1200) -set(PCB_RF_BAUD 921600 CACHE STRING "INTERNAL_MODULE_BAUDRATE: ${RF_BAUD_RATE}") -set_property(CACHE PCB_RF_BAUD PROPERTY STRINGS ${RF_BAUD_RATE}) - -add_definitions(-DPCBNV14 -DPCBFLYSKY -DAFHDS2_BAUDRATE=${PCB_RF_BAUD}) -add_definitions(-DBATTERY_CHARGE -DUSE_HATS_AS_KEYS) - -if (PCBREV STREQUAL EL18) - set(FLAVOUR el18) - # defines existing internal modules - set(INTERNAL_MODULES AFHDS3;CRSF CACHE STRING "Internal modules") - set(DEFAULT_INTERNAL_MODULE FLYSKY_AFHDS3 CACHE STRING "Default internal module") - set(AFHDS3 ON) -else() - set(FLAVOUR nv14) - # defines existing internal modules - set(INTERNAL_MODULES AFHDS2A CACHE STRING "Internal modules") - set(DEFAULT_INTERNAL_MODULE FLYSKY_AFHDS2A CACHE STRING "Default internal module") - set(AFHDS2 ON) -endif() - -set(BITMAPS_TARGET bm480_bitmaps) -set(FONTS_TARGET x12_fonts) -set(LCD_DRIVER lcd_driver.cpp) -set(TOUCH_DRIVER touch_driver.cpp) -set(HARDWARE_TOUCH YES) - -set(RADIO_DEPENDENCIES ${RADIO_DEPENDENCIES} ${BITMAPS_TARGET}) - -set(HARDWARE_TOUCH ON) -set(FLYSKY_GIMBAL ON) - -add_definitions( - -DSTM32F429_439xx -DSTM32F429xx - -DSDRAM -DCOLORLCD -DLIBOPENUI - -DHARDWARE_TOUCH -DHARDWARE_KEYS) - -set(SDRAM ON) - -add_definitions(-DAUDIO -DVOICE -DRTCLOCK) -add_definitions(-DPWR_BUTTON_${PWR_BUTTON}) - -if(INTERNAL_GPS) - add_definitions(-DGPS_USART_BAUDRATE=${INTERNAL_GPS_BAUDRATE}) -endif() - -if(STICKS_DEAD_ZONE) - add_definitions(-DSTICK_DEAD_ZONE) -endif() - -if(NOT UNEXPECTED_SHUTDOWN) - add_definitions(-DNO_UNEXPECTED_SHUTDOWN) -endif() - -# VCP CLI -set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") -set(CLI ON CACHE BOOL "Enable CLI") - - -if(DISK_CACHE) - set(SRC ${SRC} disk_cache.cpp) - add_definitions(-DDISK_CACHE) -endif() - -set(TARGET_SRC_DIR targets/${TARGET_DIR}) - -set(BOARD_COMMON_SRC - ${TARGET_SRC_DIR}/board.cpp - ${TARGET_SRC_DIR}/haptic_driver.cpp - ${TARGET_SRC_DIR}/backlight_driver.cpp - ${TARGET_SRC_DIR}/${LCD_DRIVER} - targets/common/arm/stm32/abnormal_reboot.cpp - targets/common/arm/stm32/delays_driver.cpp - targets/common/arm/stm32/diskio_spi_flash.cpp - targets/common/arm/stm32/dma2d.cpp - targets/common/arm/stm32/flash_driver.cpp - targets/common/arm/stm32/pwr_driver.cpp - targets/common/arm/stm32/rtc_driver.cpp - targets/common/arm/stm32/sdram_driver.cpp - targets/common/arm/stm32/spi_flash.cpp - targets/common/arm/stm32/watchdog_driver.cpp - drivers/frftl.cpp -) - -# Bootloader board library -add_library(board_bl OBJECT EXCLUDE_FROM_ALL - ${BOARD_COMMON_SRC} - ${RADIO_SRC_DIR}/gui/colorlcd/boot_menu.cpp -) -add_dependencies(board_bl ${BITMAPS_TARGET}) -set(BOOTLOADER_SRC ${BOOTLOADER_SRC} $) - -# Firmware board library -add_library(board OBJECT EXCLUDE_FROM_ALL - ${BOARD_COMMON_SRC} - ${TARGET_SRC_DIR}/${TOUCH_DRIVER} - ${TARGET_SRC_DIR}/battery_driver.cpp - targets/common/arm/stm32/delays_driver.cpp - targets/common/arm/stm32/heartbeat_driver.cpp - targets/common/arm/stm32/mixer_scheduler_driver.cpp - targets/common/arm/stm32/module_timer_driver.cpp - targets/common/arm/stm32/stm32_pulse_driver.cpp - targets/common/arm/stm32/stm32_softserial_driver.cpp - targets/common/arm/stm32/stm32_switch_driver.cpp - targets/common/arm/stm32/trainer_driver.cpp - targets/common/arm/stm32/vs1053b.cpp - targets/common/arm/stm32/stm32_ws2812.cpp -) -set(FIRMWARE_SRC ${FIRMWARE_SRC} $) - -set(FIRMWARE_SRC - ${FIRMWARE_SRC} - bootloader/loadboot.cpp -) - -set(SRC ${SRC} - io/frsky_firmware_update.cpp - io/multi_firmware_update.cpp - io/multi_protolist.cpp -) - -if (MULTIMODULE) - add_definitions(-DMULTI_PROTOLIST) -endif() - -# Make malloc() thread-safe -add_definitions(-DTHREADSAFE_MALLOC) diff --git a/radio/src/targets/nv14/backlight_driver.cpp b/radio/src/targets/nv14/backlight_driver.cpp deleted file mode 100644 index b8e1b14b0..000000000 --- a/radio/src/targets/nv14/backlight_driver.cpp +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (C) EdgeTX - * - * Based on code named - * opentx - https://github.com/opentx/opentx - * th9x - http://code.google.com/p/th9x - * er9x - http://code.google.com/p/er9x - * gruvin9x - http://code.google.com/p/gruvin9x - * - * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#include "hal/gpio.h" -#include "stm32_gpio.h" -#include "stm32_timer.h" - -#include "edgetx_types.h" -#include "board.h" - -#include "globals.h" -#include "lcd_driver.h" - -void backlightLowInit( void ) -{ - gpio_init(BACKLIGHT_GPIO, GPIO_OUT, GPIO_PIN_SPEED_LOW); - gpio_clear(BACKLIGHT_GPIO); -} - -void backlightInit() -{ - // PIN init - gpio_init_af(BACKLIGHT_GPIO, BACKLIGHT_GPIO_AF, GPIO_PIN_SPEED_LOW); - - stm32_timer_enable_clock(BACKLIGHT_TIMER); - BACKLIGHT_TIMER->ARR = 100; - BACKLIGHT_TIMER->PSC = BACKLIGHT_TIMER_FREQ / 1000000 - 1; // 10kHz (same as FrOS) - BACKLIGHT_TIMER->CCMR1 = TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1PE; // PWM mode 1 - BACKLIGHT_TIMER->CCER = TIM_CCER_CC1E | TIM_CCER_CC1NE; - BACKLIGHT_TIMER->CCR1 = 0; - BACKLIGHT_TIMER->EGR = TIM_EGR_UG; - BACKLIGHT_TIMER->CR1 |= TIM_CR1_CEN; // Counter enable - BACKLIGHT_TIMER->BDTR |= TIM_BDTR_MOE; -} - -uint8_t lastDutyCycle = 0; - -void backlightEnable(uint8_t dutyCycle) -{ - BACKLIGHT_TIMER->CCR1 = dutyCycle; - if(!dutyCycle) { - //experimental to turn off LCD when no backlight - if(lcdOffFunction) lcdOffFunction(); - } - else if(!lastDutyCycle) { - if(lcdOnFunction) lcdOnFunction(); - else lcdInit(); - } - lastDutyCycle = dutyCycle; -} - -void backlightFullOn() -{ - backlightEnable(BACKLIGHT_LEVEL_MAX); -} - -void lcdOff() { - backlightEnable(0); -} - -void lcdOn(){ - if(lcdOnFunction) lcdOnFunction(); - else lcdInit(); - backlightEnable(BACKLIGHT_LEVEL_MAX); -} - -bool boardBacklightOn; - -bool isBacklightEnabled() -{ - return boardBacklightOn; -} diff --git a/radio/src/targets/nv14/battery_driver.cpp b/radio/src/targets/nv14/battery_driver.cpp deleted file mode 100644 index 772be5a2a..000000000 --- a/radio/src/targets/nv14/battery_driver.cpp +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Copyright (C) EdgeTX - * - * Based on code named - * opentx - https://github.com/opentx/opentx - * th9x - http://code.google.com/p/th9x - * er9x - http://code.google.com/p/er9x - * gruvin9x - http://code.google.com/p/gruvin9x - * - * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#include "hal/gpio.h" -#include "stm32_gpio.h" - -#include "edgetx.h" -#include "battery_driver.h" - -#define __BATTERY_DRIVER_C__ - -#define BATTERY_W 140 -#define BATTERY_H 320 -#define BATTERY_TOP ((LCD_H - BATTERY_H)/2) -#define BATTERY_CONNECTOR_W 32 -#define BATTERY_CONNECTOR_H 10 -#define BATTERY_BORDER 4 -#define BATTERY_W_INNER (BATTERY_W - 2*BATTERY_BORDER) -#define BATTERY_H_INNER (BATTERY_H - 2*BATTERY_BORDER) -#define BATTERY_TOP_INNER (BATTERY_TOP + BATTERY_BORDER) - -void battery_charge_init() -{ - gpio_init(PWR_CHARGE_FINISHED_GPIO, GPIO_IN_PU, GPIO_PIN_SPEED_LOW); - gpio_init(PWR_CHARGING_GPIO, GPIO_IN_PU, GPIO_PIN_SPEED_LOW); -} - -#define CHARGE_SAMPLES 10 - -uint16_t get_battery_charge_state() -{ - static uint16_t chargeSamples[CHARGE_SAMPLES] = {0}; - static uint16_t chargeSampleIndex = 0; - uint16_t chargeState = CHARGE_UNKNOWN; - int maxSamples = CHARGE_SAMPLES; -#if !defined(SIMU) - bool isFinished = !READ_CHARGE_FINISHED_STATE(); - bool isCharging = !READ_CHARGING_STATE(); - //maxSamples = boardState == BOARD_POWER_OFF ? CHARGE_SAMPLES/2 : CHARGE_SAMPLES; - if(chargeSampleIndex >= maxSamples) chargeSampleIndex = 0; - uint16_t currentChargeState = isFinished ? CHARGE_FINISHED : isCharging ? CHARGE_STARTED : CHARGE_NONE; - chargeSamples[chargeSampleIndex++] = currentChargeState; - //TRACE("CHARGE sample %d value %d", chargeSampleIndex -1, currentChargeState); -#endif - uint8_t temp1 = 0, temp2 = 0, temp3 = 0; - for(int index = 0; index < maxSamples; index++) { - if(chargeSamples[index] == CHARGE_FINISHED) - { - temp1++; - } - else if(chargeSamples[index] == CHARGE_STARTED) - { - temp2++; - } - else - { - temp3++; - } - - if(temp1>=temp2&& temp1>temp3) - { - chargeState = CHARGE_FINISHED; - } - else if(temp2>=temp1&& temp2>temp3) - { - chargeState = CHARGE_STARTED; - } - else - { - chargeState = CHARGE_NONE; - } - } - return chargeState; -} - -void drawChargingInfo(uint16_t chargeState) -{ - static int progress = 0; - const char* text = - chargeState == CHARGE_STARTED ? STR_BATTERYCHARGING : STR_BATTERYFULL; - int h = 0; - LcdFlags color = 0; - if (CHARGE_STARTED == chargeState) { - if (progress >= 100) { - progress = 0; - } else { - progress += 25; - } - text = STR_BATTERYCHARGING; - h = ((BATTERY_H_INNER * progress) / 100); - color = COLOR_THEME_EDIT; - } else if (CHARGE_FINISHED == chargeState) { - text = STR_BATTERYFULL; - h = BATTERY_H_INNER; - color = COLOR_THEME_EDIT; - } else { - text = STR_BATTERYNONE; - h = BATTERY_H_INNER; - color = COLOR_THEME_PRIMARY1; - } - - BACKLIGHT_ENABLE(); - lcd->clear(); - lcd->drawSizedText(LCD_W / 2, LCD_H - 50, text, strlen(text), - CENTERED | COLOR_THEME_PRIMARY2); - - lcd->drawFilledRect((LCD_W - BATTERY_W) / 2, BATTERY_TOP, BATTERY_W, - BATTERY_H, SOLID, COLOR_THEME_PRIMARY2); - lcd->drawFilledRect((LCD_W - BATTERY_W_INNER) / 2, BATTERY_TOP_INNER, - BATTERY_W_INNER, BATTERY_H_INNER, SOLID, - COLOR_THEME_PRIMARY1); - - lcd->drawFilledRect((LCD_W - BATTERY_W_INNER) / 2, - BATTERY_TOP_INNER + BATTERY_H_INNER - h, BATTERY_W_INNER, - h, SOLID, color); - lcd->drawFilledRect((LCD_W - BATTERY_CONNECTOR_W) / 2, - BATTERY_TOP - BATTERY_CONNECTOR_H, BATTERY_CONNECTOR_W, - BATTERY_CONNECTOR_H, SOLID, COLOR_THEME_PRIMARY2); -} - -#define CHARGE_INFO_DURATION 5000 // ms - -//this method should be called by timer interrupt or by GPIO interrupt -void handle_battery_charge(uint32_t last_press_time) -{ -#if !defined(SIMU) - static uint32_t updateTime = 0; - static uint16_t lastState = CHARGE_UNKNOWN; - static uint32_t info_until = 0; - static bool lcdInited = false; - - uint32_t now = timersGetMsTick(); - uint16_t chargeState = get_battery_charge_state(); - if(chargeState != CHARGE_UNKNOWN) { - - if(lastState != chargeState) { - //avoid positive check when none and unknown - if(lastState + chargeState > 1) { - //charge state changed - last state known - info_until = now + (CHARGE_INFO_DURATION); - } - } - //power buttons pressed - else if(now - last_press_time < POWER_ON_DELAY) { - info_until = now + CHARGE_INFO_DURATION; - } - lastState = chargeState; - } - - if(now > info_until) { - info_until = 0; - lcd->clear(); - BACKLIGHT_DISABLE(); - if(lcdInited) { - lcdOff(); - } - return; - } - - if(updateTime == 0 || ((timersGetMsTick() - updateTime) >= 500)) - { - if(!lcdInited) { - lcdInitDisplayDriver(); - lcdInited = true; - } - else { - lcdOn(); - } - updateTime = timersGetMsTick(); - lcdInitDirectDrawing(); - drawChargingInfo(chargeState); - lcdRefresh(); - } -#endif -} diff --git a/radio/src/targets/nv14/battery_driver.h b/radio/src/targets/nv14/battery_driver.h deleted file mode 100644 index ecc824ffa..000000000 --- a/radio/src/targets/nv14/battery_driver.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) EdgeTX - * - * Based on code named - * opentx - https://github.com/opentx/opentx - * th9x - http://code.google.com/p/th9x - * er9x - http://code.google.com/p/er9x - * gruvin9x - http://code.google.com/p/gruvin9x - * - * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -/*************************************************************************************************** - -***************************************************************************************************/ -#ifndef __BATTERY_DRIVER_H__ - #define __BATTERY_DRIVER_H__ -/*************************************************************************************************** - -***************************************************************************************************/ - -#include "board.h" - -enum ChargeState -{ - CHARGE_UNKNOWN, - CHARGE_NONE, - CHARGE_STARTED, - CHARGE_FINISHED -}; - - -#define PWR_CHARGE_FINISHED_GPIO GPIO_PIN(GPIOB, 13) // PB.13 -#define PWR_CHARGING_GPIO GPIO_PIN(GPIOB, 14) // PB.14 - -#define READ_CHARGE_FINISHED_STATE() gpio_read(PWR_CHARGE_FINISHED_GPIO) ? 1 : 0 -#define READ_CHARGING_STATE() gpio_read(PWR_CHARGING_GPIO) ? 1 : 0 - -extern void battery_charge_init(); -extern void handle_battery_charge(uint32_t last_press_time); -extern uint16_t get_battery_charge_state(); -extern uint16_t getBatteryVoltage(); // returns current battery voltage in 10mV steps - -#endif diff --git a/radio/src/targets/nv14/board.cpp b/radio/src/targets/nv14/board.cpp deleted file mode 100644 index 7adad24bf..000000000 --- a/radio/src/targets/nv14/board.cpp +++ /dev/null @@ -1,272 +0,0 @@ -/* - * Copyright (C) EdgeTX - * - * Based on code named - * opentx - https://github.com/opentx/opentx - * th9x - http://code.google.com/p/th9x - * er9x - http://code.google.com/p/er9x - * gruvin9x - http://code.google.com/p/gruvin9x - * - * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#include "hal.h" -#include "stm32_adc.h" -#include "stm32_gpio.h" -#include "stm32_spi.h" -#include "vs1053b.h" - -#include "board.h" -#include "boards/generic_stm32/module_ports.h" - -#include "hal/gpio.h" -#include "hal/adc_driver.h" -#include "hal/trainer_driver.h" -#include "hal/switch_driver.h" -#include "hal/abnormal_reboot.h" -#include "hal/watchdog_driver.h" -#include "hal/usb_driver.h" - -#include "globals.h" -#include "sdcard.h" -#include "touch.h" -#include "debug.h" - -#include "flysky_gimbal_driver.h" -#include "timers_driver.h" - -#include "lcd_driver.h" -#include "battery_driver.h" -#include "touch_driver.h" - -#include "bitmapbuffer.h" -#include "colors.h" - -#include - -// common ADC driver -extern const etx_hal_adc_driver_t _adc_driver; - -HardwareOptions hardwareOptions; - -#if defined(SEMIHOSTING) -extern "C" void initialise_monitor_handles(); -#endif - -void delay_self(int count) -{ - for (int i = 50000; i > 0; i--) - { - for (; count > 0; count--); - } -} - -static uint8_t boardGetPcbRev() -{ - gpio_init(INTMODULE_PWR_GPIO, GPIO_IN, GPIO_PIN_SPEED_LOW); - delay_ms(1); // delay to let the input settle, else it does not work properly - - // detect NV14 vs EL18 - if (gpio_read(INTMODULE_PWR_GPIO)) { - // pull-up connected: EL18 - return PCBREV_EL18; - } else { - // pull-down connected: NV14 - return PCBREV_NV14; - } -} - -static void audio_set_rst_pin(bool set) -{ - gpio_write(AUDIO_RST_GPIO, set); -} - -static void audio_set_mute_pin(bool set) -{ - gpio_write(AUDIO_MUTE_GPIO, !set); -} - -static void audioInit() -{ - static stm32_spi_t spi_dev = { - .SPIx = AUDIO_SPI, - .SCK = AUDIO_SPI_SCK_GPIO, - .MISO = AUDIO_SPI_MISO_GPIO, - .MOSI = AUDIO_SPI_MOSI_GPIO, - .CS = AUDIO_CS_GPIO, - }; - - static vs1053b_t vs1053 = { - .spi = &spi_dev, - .XDCS = AUDIO_XDCS_GPIO, - .DREQ = AUDIO_DREQ_GPIO, - .set_rst_pin = audio_set_rst_pin, - .set_mute_pin = audio_set_mute_pin, - .mute_delay_ms = AUDIO_MUTE_DELAY, - .unmute_delay_ms = AUDIO_UNMUTE_DELAY, - }; - - gpio_init(AUDIO_RST_GPIO, GPIO_OUT, 0); - gpio_init(AUDIO_MUTE_GPIO, GPIO_OUT, 0); - - vs1053b_init(&vs1053); -} - -void boardBLEarlyInit() -{ -#if defined(USB_SW_GPIO) - gpio_init(USB_SW_GPIO, GPIO_OUT, GPIO_PIN_SPEED_LOW); -#endif - - // detect NV14 vs EL18 - hardwareOptions.pcbrev = boardGetPcbRev(); -} - -static void monitorInit() -{ - gpio_init(VBUS_MONITOR_GPIO, GPIO_IN, GPIO_PIN_SPEED_LOW); -} - -void boardInit() -{ -#if defined(SEMIHOSTING) - initialise_monitor_handles(); -#endif - -#if !defined(SIMU) - // enable interrupts - __enable_irq(); -#endif - - // detect NV14 vs EL18 - hardwareOptions.pcbrev = boardGetPcbRev(); - - TRACE("\n%s board started :)", - hardwareOptions.pcbrev == PCBREV_NV14 ? - "NV14" : "EL18"); - - delay_ms(10); - TRACE("RCC->CSR = %08x", RCC->CSR); - - pwrInit(); - boardInitModulePorts(); - - gpio_init(AUDIO_RST_GPIO, GPIO_OUT, GPIO_PIN_SPEED_MEDIUM); - gpio_init(AUDIO_MUTE_GPIO, GPIO_OUT, GPIO_PIN_SPEED_MEDIUM); - - board_trainer_init(); - battery_charge_init(); - flysky_gimbal_init(); - timersInit(); - TouchInit(); - usbInit(); - - uint32_t press_start = 0; - uint32_t press_end = 0; - - if (UNEXPECTED_SHUTDOWN()) { - pwrOn(); - } else { - // prime debounce state... - uint8_t usb_state = usbPlugged(); - usb_state |= usbPlugged(); - while (usb_state) { - pwrOn(); - uint32_t now = timersGetMsTick(); - if (pwrPressed()) { - press_end = now; - if (press_start == 0) press_start = now; - if ((now - press_start) > POWER_ON_DELAY) { - break; - } - } else if (!usbPlugged()){ - delay_ms(20); - if(!usbPlugged()){ - boardOff(); - } - } else { - uint32_t press_end_touch = press_end; - if (touchPanelEventOccured()) { - touchPanelRead(); - press_end_touch = timersGetMsTick(); - } - press_start = 0; - handle_battery_charge(press_end_touch); - delay_ms(20); - press_end = 0; - } - } - } - - keysInit(); - switchInit(); - audioInit(); - monitorInit(); - adcInit(&_adc_driver); - hapticInit(); - - - #if defined(RTCLOCK) - rtcInit(); // RTC must be initialized before rambackupRestore() is called -#endif -} - -extern void rtcDisableBackupReg(); - -void boardOff() -{ - lcdOff(); - - while (pwrPressed()) { - WDG_RESET(); - } - - SysTick->CTRL = 0; // turn off systick - - // Shutdown the Haptic - hapticDone(); - - rtcDisableBackupReg(); - - if (usbPlugged()) - { - delay_ms(100); // Add a delay to wait for lcdOff - // RTC->BKP0R = SOFTRESET_REQUEST; - NVIC_SystemReset(); - } - else - { - // RTC->BKP0R = SHUTDOWN_REQUEST; - pwrOff(); - } - - - // We reach here only in forced power situations, such as hw-debugging with external power - // Enter STM32 stop mode / deep-sleep - // Code snippet from ST Nucleo PWR_EnterStopMode example -#define PDMode 0x00000000U -#if defined(PWR_CR_MRUDS) && defined(PWR_CR_LPUDS) && defined(PWR_CR_FPDS) - MODIFY_REG(PWR->CR, (PWR_CR_PDDS | PWR_CR_LPDS | PWR_CR_FPDS | PWR_CR_LPUDS | PWR_CR_MRUDS), PDMode); -#elif defined(PWR_CR_MRLVDS) && defined(PWR_CR_LPLVDS) && defined(PWR_CR_FPDS) - MODIFY_REG(PWR->CR, (PWR_CR_PDDS | PWR_CR_LPDS | PWR_CR_FPDS | PWR_CR_LPLVDS | PWR_CR_MRLVDS), PDMode); -#else - MODIFY_REG(PWR->CR, (PWR_CR_PDDS| PWR_CR_LPDS), PDMode); -#endif /* PWR_CR_MRUDS && PWR_CR_LPUDS && PWR_CR_FPDS */ - -/* Set SLEEPDEEP bit of Cortex System Control Register */ - SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk)); - - // To avoid HardFault at return address, end in an endless loop - while (1) { - - } -} diff --git a/radio/src/targets/nv14/board.h b/radio/src/targets/nv14/board.h deleted file mode 100644 index 543cf35da..000000000 --- a/radio/src/targets/nv14/board.h +++ /dev/null @@ -1,208 +0,0 @@ -/* - * Copyright (C) EdgeTX - * - * Based on code named - * opentx - https://github.com/opentx/opentx - * th9x - http://code.google.com/p/th9x - * er9x - http://code.google.com/p/er9x - * gruvin9x - http://code.google.com/p/gruvin9x - * - * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#pragma once - -#include "definitions.h" -#include "edgetx_constants.h" - -#include "board_common.h" -#include "hal.h" - -#include "hal/serial_port.h" -#include "hal/watchdog_driver.h" - -#define FLASHSIZE 0x200000 -#define FLASH_PAGESIZE 256 -#define BOOTLOADER_SIZE 0x20000 -#define FIRMWARE_ADDRESS 0x08000000 -#define FIRMWARE_LEN(fsize) (fsize - BOOTLOADER_SIZE) -#define FIRMWARE_MAX_LEN (FLASHSIZE - BOOTLOADER_SIZE) -#define APP_START_ADDRESS (uint32_t)(FIRMWARE_ADDRESS + BOOTLOADER_SIZE) - -#define MB *1024*1024 -#define LUA_MEM_EXTRA_MAX (2 MB) // max allowed memory usage for Lua bitmaps (in bytes) -#define LUA_MEM_MAX (6 MB) // max allowed memory usage for complete Lua (in bytes), 0 means unlimited - -#define BOOTLOADER_KEYS 0x42 - -extern uint16_t sessionTimer; - -#define SLAVE_MODE() (g_model.trainerData.mode == TRAINER_MODE_SLAVE) - -// Board driver -void boardInit(); -void boardOff(); - -// CPU Unique ID -#define LEN_CPU_UID (3*8+2) -void getCPUUniqueID(char * s); - -enum { - PCBREV_NV14 = 0, - PCBREV_EL18 = 1, -}; - -#define HAS_HARDWARE_OPTIONS - -typedef struct { - uint8_t pcbrev; -} HardwareOptions; - -extern HardwareOptions hardwareOptions; - -#if !defined(SIMU) - -#define INTERNAL_MODULE_OFF() \ - do { \ - if (hardwareOptions.pcbrev == PCBREV_NV14) \ - gpio_set(INTMODULE_PWR_GPIO); \ - else \ - gpio_clear(INTMODULE_PWR_GPIO); \ - } while (0) - -#define INTERNAL_MODULE_ON() \ - do { \ - if (hardwareOptions.pcbrev == PCBREV_NV14) \ - gpio_clear(INTMODULE_PWR_GPIO); \ - else \ - gpio_set(INTMODULE_PWR_GPIO); \ - } while (0) - -#define EXTERNAL_MODULE_ON() gpio_set(EXTMODULE_PWR_GPIO) -#define EXTERNAL_MODULE_OFF() gpio_clear(EXTMODULE_PWR_GPIO) - -#define BLUETOOTH_MODULE_ON() gpio_clear(BLUETOOTH_ON_GPIO) -#define BLUETOOTH_MODULE_OFF() gpio_set(BLUETOOTH_ON_GPIO) - -#else - -#define INTERNAL_MODULE_OFF() -#define INTERNAL_MODULE_ON() -#define EXTERNAL_MODULE_ON() -#define EXTERNAL_MODULE_OFF() -#define BLUETOOTH_MODULE_ON() -#define BLUETOOTH_MODULE_OFF() -#define IS_INTERNAL_MODULE_ON() (false) -#define IS_EXTERNAL_MODULE_ON() (false) - -#endif // defined(SIMU) - -#define EXTERNAL_MODULE_PWR_OFF EXTERNAL_MODULE_OFF - -#if !defined(NUM_FUNCTIONS_SWITCHES) -#define NUM_FUNCTIONS_SWITCHES 0 -#endif - -#define DEFAULT_STICK_DEADZONE 2 - -#define BATTERY_WARN 36 // 3.6V -#define BATTERY_MIN 35 // 3.5V -#define BATTERY_MAX 42 // 4.2V -#define BATTERY_DIVIDER 2942 - -#if defined(__cplusplus) && !defined(SIMU) -extern "C" { -#endif - -// Power driver -#define SOFT_PWR_CTRL -#define POWER_ON_DELAY 100 // ms -void pwrInit(); -void extModuleInit(); -uint32_t pwrCheck(); -uint32_t lowPowerCheck(); - -void pwrOn(); -void pwrSoftReboot(); -void pwrOff(); -void pwrResetHandler(); -bool pwrPressed(); -bool pwrOffPressed(); -#if defined(PWR_EXTRA_SWITCH_GPIO) - bool pwrForcePressed(); -#else - #define pwrForcePressed() false -#endif -uint32_t pwrPressedDuration();; - -const etx_serial_port_t* auxSerialGetPort(int port_nr); - -// LCD driver -void lcdSetInitalFrameBuffer(void* fbAddress); -void lcdInit(); -void lcdCopy(void * dest, void * src); - - -void lcdOff(); -void lcdOn(); - -#define lcdRefreshWait(...) - -// Backlight driver -#define BACKLIGHT_LEVEL_MAX 100 -#define BACKLIGHT_FORCED_ON BACKLIGHT_LEVEL_MAX + 1 -#define BACKLIGHT_LEVEL_MIN 1 - -extern bool boardBacklightOn; -void backlightLowInit( void ); -void backlightInit(); -void backlightEnable(uint8_t dutyCycle); -void backlightFullOn(); -bool isBacklightEnabled(); - -#define BACKLIGHT_ENABLE() \ - { \ - boardBacklightOn = true; \ - backlightEnable(BACKLIGHT_LEVEL_MAX - currentBacklightBright); \ - } - -#define BACKLIGHT_DISABLE() \ - { \ - boardBacklightOn = false; \ - backlightEnable(((g_eeGeneral.blOffBright == BACKLIGHT_LEVEL_MIN) && \ - (g_eeGeneral.backlightMode != e_backlight_mode_off)) \ - ? 0 \ - : g_eeGeneral.blOffBright); \ - } - -#if defined(__cplusplus) && !defined(SIMU) -} -#endif - -// Telemetry driver -#define INTMODULE_FIFO_SIZE 512 -#define TELEMETRY_FIFO_SIZE 512 - -// Haptic driver -void hapticInit(); -void hapticDone(); -void hapticOff(); -void hapticOn(uint32_t pwmPercent); - -// Second serial port driver -#define DEBUG_BAUDRATE 115200 -#define LUA_DEFAULT_BAUDRATE 115200 - -// Touch panel driver -bool touchPanelEventOccured(); -struct TouchState touchPanelRead(); -struct TouchState getInternalTouchState(); diff --git a/radio/src/targets/nv14/hal.h b/radio/src/targets/nv14/hal.h deleted file mode 100644 index 6b1e34435..000000000 --- a/radio/src/targets/nv14/hal.h +++ /dev/null @@ -1,449 +0,0 @@ -/* - * Copyright (C) EdgeTX - * - * Based on code named - * opentx - https://github.com/opentx/opentx - * th9x - http://code.google.com/p/th9x - * er9x - http://code.google.com/p/er9x - * gruvin9x - http://code.google.com/p/gruvin9x - * - * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#pragma once - -#define CPU_FREQ 168000000 - -// HSI is at 168Mhz (over-drive is not enabled!) -#define PERI1_FREQUENCY 42000000 -#define PERI2_FREQUENCY 84000000 -#define TIMER_MULT_APB1 2 -#define TIMER_MULT_APB2 2 - -/* Timers Allocation: - * TIM1 = Haptic - * TIM4 = Trainer - * TIM6 = Audio - * TIM7 = 2MHz counter - * - * - * TIM14 = 1ms counter - */ - -/* DMA Allocation: - DMA/Stream/Channel - 1/5/7 DAC/Audio - 2/0/0 ADC1 - 2/3/4 SDIO -*/ - - -// Trims -#define TRIMS_GPIO_REG_RHL GPIOD -#define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_7 // PD.07 -#define TRIMS_GPIO_REG_RHR GPIOG -#define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_10 // PG.10 -#define TRIMS_GPIO_REG_RVD GPIOJ -#define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_0 // PJ.00 -#define TRIMS_GPIO_REG_RVU GPIOB -#define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_15 // PB.15 - -#define KEYS_GPIO_REG_ENTER GPIOC -#define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_13 // PC.13 - -#define TRIMS_GPIO_REG_LHL GPIOH -#define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_2 // PH.02 -#define TRIMS_GPIO_REG_LHR GPIOG -#define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_2 // PG.02 -#define TRIMS_GPIO_REG_LVU GPIOH -#define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_7 // PH.07 -#define TRIMS_GPIO_REG_LVD GPIOJ -#define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_12 // PJ.12 - -#define KEYS_GPIO_REG_EXIT GPIOG -#define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_11 // PG.11 - -// Monitor pin -#define VBUS_MONITOR_GPIO GPIO_PIN(GPIOJ, 14) // PJ.14 - -// Switches -#define HARDWARE_SWITCH_A -#define STORAGE_SWITCH_A -#define HARDWARE_SWITCH_B -#define STORAGE_SWITCH_B -#define HARDWARE_SWITCH_C -#define STORAGE_SWITCH_C -#define HARDWARE_SWITCH_D -#define STORAGE_SWITCH_D -#define HARDWARE_SWITCH_E -#define STORAGE_SWITCH_E -#define HARDWARE_SWITCH_F -#define STORAGE_SWITCH_F -#define HARDWARE_SWITCH_G -#define STORAGE_SWITCH_G -#define HARDWARE_SWITCH_H -#define STORAGE_SWITCH_H - -// Index of all switches / trims -#define KEYS_GPIO_ACTIVE_HIGH -#define TRIMS_GPIO_ACTIVE_HIGH - -// ADC - -#define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_2 // PA.02 -#define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_3 // PA.03 -#define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_4 // PA.04 -#define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_5 // PA.05 - -#define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_6 // PA.06 VRA -#define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_4 // PC.04 VRB -#define ADC_GPIO_PIN_SWA LL_GPIO_PIN_1 // PB.01 -#define ADC_GPIO_PIN_SWB LL_GPIO_PIN_8 // PF.08 -#define ADC_GPIO_PIN_SWC LL_GPIO_PIN_0 // PB.00 -#define ADC_GPIO_PIN_SWD LL_GPIO_PIN_10 // PF.10 -#define ADC_GPIO_PIN_SWE LL_GPIO_PIN_0 // PC.00 -#define ADC_GPIO_PIN_SWF LL_GPIO_PIN_1 // PC.01 -#define ADC_GPIO_PIN_SWG LL_GPIO_PIN_2 // PC.02 -#define ADC_GPIO_PIN_SWH LL_GPIO_PIN_7 // PA.07 - -#define ADC_GPIO_PIN_BATT LL_GPIO_PIN_5 // PC.05 - -// FLYSKY_HALL_STICKS -// #define ADC_GPIOA_PINS_FS (GPIO_Pin_6 | GPIO_Pin_7) -#define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH \ - | ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_SWH) -#define ADC_GPIOB_PINS (ADC_GPIO_PIN_SWA | ADC_GPIO_PIN_SWC) -#define ADC_GPIOC_PINS \ - (ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_SWE | ADC_GPIO_PIN_SWF | ADC_GPIO_PIN_SWG | ADC_GPIO_PIN_BATT) -#define ADC_GPIOF_PINS (ADC_GPIO_PIN_SWB | ADC_GPIO_PIN_SWD) - -#define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_2 // ADC123_IN2 -> ADC1_IN2 -#define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_3 // ADC123_IN3 -> ADC1_IN3 -#define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_4 // ADC12_IN4 -> ADC1_IN4 -#define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_5 // ADC12_IN5 -> ADC1_IN5 - -#define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_6 // ADC12_IN6 -> ADC1_IN6 -#define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_14 // ADC12_IN14 -> ADC1_IN14 -#define ADC_CHANNEL_SWA LL_ADC_CHANNEL_9 // ADC12_IN9 -> ADC1_IN9 -#define ADC_CHANNEL_SWB LL_ADC_CHANNEL_6 // ADC3_IN6 -> ADC3_IN6 -#define ADC_CHANNEL_SWC LL_ADC_CHANNEL_8 // ADC12_IN8 -> ADC1_IN8 -#define ADC_CHANNEL_SWD LL_ADC_CHANNEL_8 // ADC3_IN8 -> ADC3_IN8 -#define ADC_CHANNEL_SWE LL_ADC_CHANNEL_10 // ADC123_IN10-> ADC1_IN10 -#define ADC_CHANNEL_SWF LL_ADC_CHANNEL_11 // ADC123_IN11-> ADC1_IN11 -#define ADC_CHANNEL_SWG LL_ADC_CHANNEL_12 // ADC123_IN12-> ADC1_IN12 -#define ADC_CHANNEL_SWH LL_ADC_CHANNEL_7 // ADC12_IN7 -> ADC1_IN7 - -#define ADC_CHANNEL_BATT LL_ADC_CHANNEL_15 // ADC12_IN15 -> ADC1_IN15 -#define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT // ADC1_IN18 - -#define ADC_MAIN ADC1 -#define ADC_EXT ADC3 -#define ADC_EXT_CHANNELS { ADC_CHANNEL_SWB, ADC_CHANNEL_SWD } -#define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_28CYCLES -#define ADC_DMA DMA2 -#define ADC_DMA_CHANNEL LL_DMA_CHANNEL_0 -#define ADC_DMA_STREAM LL_DMA_STREAM_4 -#define ADC_DMA_STREAM_IRQ DMA2_Stream4_IRQn -#define ADC_DMA_STREAM_IRQHandler DMA2_Stream4_IRQHandler - -#define ADC_EXT_DMA DMA2 -#define ADC_EXT_DMA_CHANNEL LL_DMA_CHANNEL_2 -#define ADC_EXT_DMA_STREAM LL_DMA_STREAM_0 -#define ADC_EXT_DMA_STREAM_IRQ DMA2_Stream0_IRQn -#define ADC_EXT_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler -#define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_28CYCLES -#define ADC_VREF_PREC2 330 - -#define ADC_DIRECTION \ - { 0 /*STICK1*/, 0 /*STICK2*/, 0 /*STICK3*/, 0 /*STICK4*/, \ - -1 /*POT1*/, 0 /*POT2*/, 0 /*TX_VOLTAGE*/, 0 /*TX_VBAT*/, \ - 0 /*SWA*/, 0 /*SWB*/, 0 /*SWC*/, 0 /*SWD*/, 0 /*SWE*/, \ - -1 /*SWF*/, -1 /*SWG*/, 0 /*SWH*/ \ - } - -// Power -#define PWR_SWITCH_GPIO GPIO_PIN(GPIOI, 11) // PI.11 -#define PWR_ON_GPIO GPIO_PIN(GPIOI, 14) // PI.14 - -// S.Port update connector -#define SPORT_MAX_BAUDRATE 400000 -#define SPORT_UPDATE_RCC_AHB1Periph 0 - -// Led -// #define STATUS_LEDS -#define LED_RCC_AHB1Periph RCC_AHB1Periph_GPIOI -#define LED_GPIO GPIOI -#define LED_GPIO_PIN GPIO_Pin_5 // PI.05 - -// Serial Port (DEBUG) -// We will temporarily used the PPM and the HEARTBEAT PINS -#define AUX_SERIAL_GPIO GPIOC -#define AUX_SERIAL_GPIO_PIN_TX GPIO_Pin_6 // PC.06 -#define AUX_SERIAL_GPIO_PIN_RX GPIO_Pin_7 // PC.07 -#define AUX_SERIAL_GPIO_PinSource_TX GPIO_PinSource6 -#define AUX_SERIAL_GPIO_PinSource_RX GPIO_PinSource7 -#define AUX_SERIAL_GPIO_AF GPIO_AF_USART6 -#define AUX_SERIAL_USART USART6 -#define AUX_SERIAL_USART_IRQHandler USART6_IRQHandler -#define AUX_SERIAL_USART_IRQn USART6_IRQn -#define AUX_SERIAL_TX_INVERT_GPIO GPIOE -#define AUX_SERIAL_TX_INVERT_GPIO_PIN GPIO_Pin_3 // PE.03 -#define AUX_SERIAL_RX_INVERT_GPIO GPIOI -#define AUX_SERIAL_RX_INVERT_GPIO_PIN GPIO_Pin_15 // PI.15 - -//used in BOOTLOADER -#define SERIAL_RCC_AHB1Periph 0 -#define SERIAL_RCC_APB1Periph 0 -#define AUX2_SERIAL_RCC_AHB1Periph 0 -#define AUX2_SERIAL_RCC_APB1Periph 0 -#define AUX2_SERIAL_RCC_APB2Periph 0 -#define KEYS_BACKLIGHT_RCC_AHB1Periph 0 - -// Telemetry -#define TELEMETRY_RX_REV_GPIO GPIO_PIN(GPIOJ, 8) // PJ.08 -#define TELEMETRY_TX_REV_GPIO GPIO_PIN(GPIOJ, 7) // PJ.07 -#define TELEMETRY_DIR_GPIO GPIO_PIN(GPIOJ, 13) // PJ.13 -#define TELEMETRY_SET_INPUT 1 -#define TELEMETRY_TX_GPIO GPIO_PIN(GPIOD, 5) // PD.05 -#define TELEMETRY_RX_GPIO GPIO_PIN(GPIOD, 6) // PD.06 -#define TELEMETRY_USART USART2 -#define TELEMETRY_USART_IRQn USART2_IRQn -#define TELEMETRY_DMA DMA1 -#define TELEMETRY_DMA_Stream_TX LL_DMA_STREAM_6 -#define TELEMETRY_DMA_Channel_TX LL_DMA_CHANNEL_4 -#define TELEMETRY_DMA_TX_Stream_IRQ DMA1_Stream6_IRQn -#define TELEMETRY_DMA_TX_IRQHandler DMA1_Stream6_IRQHandler -// #define TELEMETRY_DMA_Stream_RX LL_DMA_STREAM_5 -// #define TELEMETRY_DMA_Channel_RX LL_DMA_CHANNEL_4 - - -// Software IRQ (Prio 5 -> FreeRTOS compatible) -#define TELEMETRY_RX_FRAME_EXTI_LINE LL_EXTI_LINE_4 -#define USE_EXTI4_IRQ -#define EXTI4_IRQ_Priority 5 - -// USB -#define USB_RCC_AHB1Periph_GPIO RCC_AHB1Periph_GPIOA -#define USB_GPIO GPIOA -#define USB_GPIO_VBUS GPIO_PIN(GPIOA, 9) // PA.09 -#define USB_GPIO_DM GPIO_PIN(GPIOA, 11) // PA.11 -#define USB_GPIO_DP GPIO_PIN(GPIOA, 12) // PA.12 -#define USB_GPIO_AF GPIO_AF10 -#define USB_SW_GPIO GPIO_PIN(GPIOI, 10) // PI.10 - -// LCD -#define LCD_NRST_GPIO GPIO_PIN(GPIOG, 9) // PG.09 -#define LCD_SPI_CS_GPIO GPIO_PIN(GPIOE, 4) // PE.04 -#define LCD_SPI_SCK_GPIO GPIO_PIN(GPIOE, 2) // PE.02 -#define LCD_SPI_MISO_GPIO GPIO_PIN(GPIOE, 5) // PE.05 -#define LCD_SPI_MOSI_GPIO GPIO_PIN(GPIOE, 6) // PE.06 -#define LTDC_IRQ_PRIO 4 -#define DMA_SCREEN_IRQ_PRIO 6 - -// Backlight -// TODO TIM3, TIM8, TIM14, review the channel in backlight_driver.cpp according to the chosen timer -#define BACKLIGHT_GPIO GPIO_PIN(GPIOA, 15) // PA.15 -#define BACKLIGHT_TIMER TIM2 -#define BACKLIGHT_GPIO_AF GPIO_AF1 -#define BACKLIGHT_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) - -//used in BOOTLOADER -#define SERIAL_RCC_AHB1Periph 0 -#define SERIAL_RCC_APB1Periph 0 -#define ROTARY_ENCODER_RCC_APB1Periph 0 - -// SD card -#define SD_PRESENT_GPIO GPIO_PIN(GPIOH, 10) // PH.10 -#define SD_SDIO_DMA DMA2 -#define SD_SDIO_DMA_STREAM DMA2_Stream3 -#define SD_SDIO_DMA_CHANNEL LL_DMA_CHANNEL_4 -#define SD_SDIO_DMA_IRQn DMA2_Stream3_IRQn -#define SD_SDIO_DMA_IRQHANDLER DMA2_Stream3_IRQHandler -#define SD_SDIO_CLK_DIV(fq) ((48000000 / (fq)) - 2) -#define SD_SDIO_TRANSFER_CLK_DIV SD_SDIO_CLK_DIV(24000000) -#define STORAGE_USE_SDIO - -// SPI NOR Flash -#define FLASH_SPI SPI6 -#define FLASH_SPI_CS_GPIO GPIO_PIN(GPIOG, 6) // PG.06 -#define FLASH_SPI_SCK_GPIO GPIO_PIN(GPIOG, 13) // PG.13 -#define FLASH_SPI_MISO_GPIO GPIO_PIN(GPIOG, 12) // PG.12 -#define FLASH_SPI_MOSI_GPIO GPIO_PIN(GPIOG, 14) // PG.14 -#define FLASH_SPI_DMA DMA2 -#define FLASH_SPI_DMA_CHANNEL LL_DMA_CHANNEL_1 -#define FLASH_SPI_DMA_TX_STREAM LL_DMA_STREAM_5 -#define FLASH_SPI_DMA_RX_STREAM LL_DMA_STREAM_6 - -// Audio -#define AUDIO_XDCS_GPIO GPIO_PIN(GPIOH, 14) // PH.14 -#define AUDIO_CS_GPIO GPIO_PIN(GPIOH, 13) // PH.13 -#define AUDIO_DREQ_GPIO GPIO_PIN(GPIOH, 15) // PH.15 -#define AUDIO_RST_GPIO GPIO_PIN(GPIOD, 4) // PD.04 -#define AUDIO_SPI SPI1 -#define AUDIO_SPI_GPIO_AF LL_GPIO_AF_5 -#define AUDIO_SPI_SCK_GPIO GPIO_PIN(GPIOB, 3) // PB.03 -#define AUDIO_SPI_MISO_GPIO GPIO_PIN(GPIOB, 4) // PB.04 -#define AUDIO_SPI_MOSI_GPIO GPIO_PIN(GPIOB, 5) // PB.05 -#define AUDIO_MUTE_GPIO GPIO_PIN(GPIOH, 8) // PH.08 audio amp control pin -#define AUDIO_UNMUTE_DELAY 120 // ms -#define AUDIO_MUTE_DELAY 500 // ms -#define AUDIO_MUTE_POL VS1053B_MUTE_INVERTED - -// I2C Bus -#define I2C_B1 I2C1 -#define I2C_B1_SCL_GPIO GPIO_PIN(GPIOB, 8) // PB.08 -#define I2C_B1_SDA_GPIO GPIO_PIN(GPIOB, 7) // PB.07 -#define I2C_B1_GPIO_AF LL_GPIO_AF_4 -#define I2C_B1_CLK_RATE 400000 - -// Touch -#define TOUCH_I2C_BUS I2C_Bus_1 -#define TOUCH_INT_GPIO GPIO_PIN(GPIOB, 9) // PB.09 -#define TOUCH_RST_GPIO GPIO_PIN(GPIOB, 12) // PB.12 - -#define TOUCH_INT_EXTI_Line LL_EXTI_LINE_9 -#define TOUCH_INT_EXTI_Port LL_SYSCFG_EXTI_PORTB -#define TOUCH_INT_EXTI_SysCfgLine LL_SYSCFG_EXTI_LINE9 - -// TOUCH_INT_EXTI IRQ -#if !defined(USE_EXTI9_5_IRQ) - #define USE_EXTI9_5_IRQ - #define EXTI9_5_IRQ_Priority 9 -#endif - -// Haptic: TIM1_CH1 -#define HAPTIC_PWM -#define HAPTIC_GPIO GPIO_PIN(GPIOA, 8) // PA.08 -#define HAPTIC_GPIO_TIMER TIM1 -#define HAPTIC_GPIO_AF GPIO_AF1 -#define HAPTIC_TIMER_OUTPUT_ENABLE TIM_CCER_CC1E | TIM_CCER_CC1NE; -#define HAPTIC_TIMER_MODE TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1PE -#define HAPTIC_TIMER_COMPARE_VALUE HAPTIC_GPIO_TIMER->CCR1 - -// Flysky Hall Stick -#define FLYSKY_HALL_SERIAL_USART UART4 -#define FLYSKY_HALL_DMA_Channel LL_DMA_CHANNEL_4 -#define FLYSKY_HALL_SERIAL_TX_GPIO GPIO_PIN(GPIOA, 0) // PA.00 -#define FLYSKY_HALL_SERIAL_RX_GPIO GPIO_PIN(GPIOA, 1) // PA.01 -#define FLYSKY_HALL_SERIAL_USART_IRQn UART4_IRQn -#define FLYSKY_HALL_SERIAL_DMA DMA1 -#define FLYSKY_HALL_DMA_Stream_RX LL_DMA_STREAM_2 -#define FLYSKY_HALL_DMA_Stream_TX LL_DMA_STREAM_4 - -// Internal Module -#define INTMODULE_PWR_GPIO GPIO_PIN(GPIOH, 9) // PH.09 -#define INTMODULE_TX_GPIO GPIO_PIN(GPIOF, 7) // PF.07 -#define INTMODULE_RX_GPIO GPIO_PIN(GPIOF, 6) // PF.06 -#define INTMODULE_USART UART7 -#define INTMODULE_USART_IRQn UART7_IRQn -#define INTMODULE_DMA DMA1 -#define INTMODULE_DMA_STREAM LL_DMA_STREAM_1 -#define INTMODULE_DMA_STREAM_IRQ DMA1_Stream1_IRQn -#define INTMODULE_DMA_CHANNEL LL_DMA_CHANNEL_5 - -#define INTMODULE_RX_DMA DMA1 -#define INTMODULE_RX_DMA_STREAM LL_DMA_STREAM_3 -#define INTMODULE_RX_DMA_CHANNEL LL_DMA_CHANNEL_5 -// #define INTMODULE_RX_DMA_Stream_IRQn DMA1_Stream3_IRQn -// #define INTMODULE_RX_DMA_Stream_IRQHandler DMA1_Stream_IRQHandler - -#define INTMODULE_TIMER TIM3 -#define INTMODULE_TIMER_IRQn TIM3_IRQn -#define INTMODULE_TIMER_IRQHandler TIM3_IRQHandler -#define INTMODULE_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) - - -// External Module -#define EXTMODULE -#define EXTMODULE_PULSES -#define EXTMODULE_PWR_GPIO GPIO_PIN(GPIOD, 11) // PD.11 -#define EXTMODULE_PWR_FIX_GPIO GPIO_PIN(GPIOA, 2) // PA.02 -#define EXTMODULE_TX_GPIO GPIO_PIN(GPIOC, 6) // PC.06 -#define EXTMODULE_RX_GPIO GPIO_PIN(GPIOC, 7) // PC.07 -#define EXTMODULE_TIMER TIM8 -#define EXTMODULE_TIMER_TX_GPIO_AF LL_GPIO_AF_3 // TIM8_CH1 -#define EXTMODULE_TIMER_Channel LL_TIM_CHANNEL_CH1 -#define EXTMODULE_TIMER_IRQn TIM8_UP_TIM13_IRQn -#define EXTMODULE_TIMER_IRQHandler TIM8_UP_TIM13_IRQHandler -#define EXTMODULE_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2) -//USART -#define EXTMODULE_USART USART6 -#define EXTMODULE_USART_GPIO GPIOC -#define EXTMODULE_USART_GPIO_AF GPIO_AF_USART6 -#define EXTMODULE_USART_GPIO_AF_LL LL_GPIO_AF_8 -#define EXTMODULE_USART_TX_DMA DMA2 -#define EXTMODULE_USART_TX_DMA_CHANNEL LL_DMA_CHANNEL_5 -#define EXTMODULE_USART_TX_DMA_STREAM LL_DMA_STREAM_7 -#define EXTMODULE_USART_RX_DMA_CHANNEL LL_DMA_CHANNEL_5 -#define EXTMODULE_USART_RX_DMA_STREAM LL_DMA_STREAM_2 -#define EXTMODULE_USART_IRQn USART6_IRQn - -//TIMER -#define EXTMODULE_TIMER_DMA DMA2 -#define EXTMODULE_TIMER_DMA_CHANNEL LL_DMA_CHANNEL_7 -#define EXTMODULE_TIMER_DMA_STREAM LL_DMA_STREAM_1 -#define EXTMODULE_TIMER_DMA_STREAM_IRQn DMA2_Stream1_IRQn -#define EXTMODULE_TIMER_DMA_IRQHandler DMA2_Stream1_IRQHandler - -#define EXTMODULE_TX_INVERT_GPIO GPIO_PIN(GPIOE, 3) // PE.03 -#define EXTMODULE_RX_INVERT_GPIO GPIO_PIN(GPIOI, 15) // PI.15 - -// Trainer Port -#define TRAINER_GPIO GPIOD - -#define TRAINER_IN_GPIO GPIO_PIN(GPIOD, 12) // PD.12 -#define TRAINER_IN_TIMER_Channel LL_TIM_CHANNEL_CH1 - -#define TRAINER_OUT_GPIO GPIO_PIN(GPIOD, 13) // PD.13 -#define TRAINER_OUT_TIMER_Channel LL_TIM_CHANNEL_CH2 - -#define TRAINER_TIMER TIM4 -#define TRAINER_TIMER_IRQn TIM4_IRQn -#define TRAINER_TIMER_IRQHandler TIM4_IRQHandler -#define TRAINER_GPIO_AF LL_GPIO_AF_2 -#define TRAINER_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) -//ROTARY emulation for trims as buttons -#define ROTARY_ENCODER_NAVIGATION - -// Bluetooth -#define BLUETOOTH_ON_GPIO GPIO_PIN(GPIOI, 8) // PI.8 -#define BT_USART USART3 -#define BT_USART_IRQn USART3_IRQn -#define BT_GPIO_TXRX GPIOB -#define BT_TX_GPIO GPIO_PIN(GPIOB, 10) // PB.10 -#define BT_RX_GPIO GPIO_PIN(GPIOB, 11) // PB.11 -#define BT_EN_GPIO GPIO_PIN(GPIOI, 8) // PI.08 -#define BT_CONNECTED_GPIO GPIO_PIN(GPIOJ, 1) // PJ.01 -#define BT_CMD_MODE_GPIO GPIO_PIN(GPIOH, 6) // PH.06 - -// Millisecond timer -#define MS_TIMER TIM14 -#define MS_TIMER_IRQn TIM8_TRG_COM_TIM14_IRQn -#define MS_TIMER_IRQHandler TIM8_TRG_COM_TIM14_IRQHandler - -// Mixer scheduler timer -#define MIXER_SCHEDULER_TIMER TIM12 -#define MIXER_SCHEDULER_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) -#define MIXER_SCHEDULER_TIMER_IRQn TIM8_BRK_TIM12_IRQn -#define MIXER_SCHEDULER_TIMER_IRQHandler TIM8_BRK_TIM12_IRQHandler - -// SDRAM -#define SDRAM_BANK1 - -#define LCD_W 320 -#define LCD_H 480 - -#define LCD_PHYS_W 320 -#define LCD_PHYS_H 480 - -#define LCD_DEPTH 16 -#define LCD_CONTRAST_DEFAULT 20 diff --git a/radio/src/targets/nv14/haptic_driver.cpp b/radio/src/targets/nv14/haptic_driver.cpp deleted file mode 100644 index 7a9b79a5e..000000000 --- a/radio/src/targets/nv14/haptic_driver.cpp +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) EdgeTX - * - * Based on code named - * opentx - https://github.com/opentx/opentx - * th9x - http://code.google.com/p/th9x - * er9x - http://code.google.com/p/er9x - * gruvin9x - http://code.google.com/p/gruvin9x - * - * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#include "hal/gpio.h" -#include "stm32_gpio.h" -#include "stm32_timer.h" - -#include "board.h" - -void hapticOff(void) -{ - HAPTIC_TIMER_COMPARE_VALUE = 0; -} - -void hapticOn(uint32_t pwmPercent) -{ - if (pwmPercent > 100) { - pwmPercent = 100; - } - HAPTIC_TIMER_COMPARE_VALUE = pwmPercent; -} - -void hapticInit(void) -{ - gpio_init_af(HAPTIC_GPIO, HAPTIC_GPIO_AF, GPIO_PIN_SPEED_LOW); - - stm32_timer_enable_clock(HAPTIC_GPIO_TIMER); - HAPTIC_GPIO_TIMER->ARR = 100; - HAPTIC_GPIO_TIMER->PSC = (PERI2_FREQUENCY * TIMER_MULT_APB2) / 10000 - 1; - HAPTIC_GPIO_TIMER->CCMR1 = HAPTIC_TIMER_MODE; // PWM - HAPTIC_GPIO_TIMER->CCER = HAPTIC_TIMER_OUTPUT_ENABLE; - HAPTIC_GPIO_TIMER->CCR1 = 0; - HAPTIC_GPIO_TIMER->EGR = TIM_EGR_UG; - HAPTIC_GPIO_TIMER->CR1 = TIM_CR1_CEN; // counter enable - HAPTIC_GPIO_TIMER->BDTR |= TIM_BDTR_MOE; -} - -void hapticDone(void) -{ - hapticOff(); -} diff --git a/radio/src/targets/nv14/lcd_driver.cpp b/radio/src/targets/nv14/lcd_driver.cpp deleted file mode 100644 index 1b11febd8..000000000 --- a/radio/src/targets/nv14/lcd_driver.cpp +++ /dev/null @@ -1,1294 +0,0 @@ -/* - * Copyright (C) EdgeTX - * - * Based on code named - * opentx - https://github.com/opentx/opentx - * th9x - http://code.google.com/p/th9x - * er9x - http://code.google.com/p/er9x - * gruvin9x - http://code.google.com/p/gruvin9x - * - * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#include "stm32_hal_ll.h" -#include "stm32_hal.h" - -#include "edgetx_types.h" -#include "dma2d.h" -#include "hal.h" -#include "hal/gpio.h" -#include "stm32_gpio.h" -#include "delays_driver.h" -#include "debug.h" -#include "lcd.h" -#include "lcd_driver.h" - -static LTDC_HandleTypeDef hltdc; -static void* initialFrameBuffer = nullptr; - -#define GPIO_AF_LTDC GPIO_AF14 - -static volatile uint8_t _frame_addr_reloaded = 0; - -static void startLcdRefresh(lv_disp_drv_t *disp_drv, uint16_t *buffer, - const rect_t ©_area) -{ - (void)disp_drv; - (void)copy_area; - - LTDC_Layer1->CFBAR &= ~(LTDC_LxCFBAR_CFBADD); - LTDC_Layer1->CFBAR = (uint32_t)buffer; - // reload shadow registers on vertical blank - _frame_addr_reloaded = 0; - LTDC->SRCR = LTDC_SRCR_VBR; - __HAL_LTDC_ENABLE_IT(&hltdc, LTDC_IT_LI); - - // wait for reload - // TODO: replace through some smarter mechanism without busy wait - while(_frame_addr_reloaded == 0); -} - -lcdSpiInitFucPtr lcdInitFunction; -lcdSpiInitFucPtr lcdOffFunction; -lcdSpiInitFucPtr lcdOnFunction; -uint32_t lcdPixelClock; - -volatile uint8_t LCD_ReadBuffer[24] = { 0, 0 }; - -static void LCD_Delay(void) { - volatile unsigned int i; - - for (i = 0; i < 20; i++) { - ; - } -} - -enum ENUM_IO_SPEED -{ - IO_SPEED_LOW, - IO_SPEED_MID, - IO_SPEED_QUICK, - IO_SPEED_HIGH -}; - -enum ENUM_IO_MODE -{ - IO_MODE_INPUT, - IO_MODE_OUTPUT, - IO_MODE_ALTERNATE, - IO_MODE_ANALOG -}; - - -static void LCD_AF_GPIOConfig(void) -{ - /* GPIOs Configuration */ - /* - +---------------------+---------------------+------------------+------------------+ - + LCD pins assignment + - +---------------------+---------------------+------------------+------------------+ - | LCD_CLK <-> PG.07 | LCD_HSYNC <-> PI.12 | LCD_R3 <-> PJ.02 | LCD_G5 <-> PK.00 | - | LCD VSYNC <-> PI.13 | LCD_R4 <-> PJ.03 | LCD_G6 <-> PK.01 | | - | | LCD_R5 <-> PJ.04 | LCD_G7 <-> PK.02 | | - | | LCD_R6 <-> PJ.05 | LCD_B4 <-> PK.03 | | - | | LCD_R7 <-> PJ.06 | LCD_B5 <-> PK.04 | | - | | LCD_G2 <-> PJ.09 | LCD_B6 <-> PK.05 | | - | | LCD_G3 <-> PJ.10 | LCD_B7 <-> PK.06 | | - | | LCD_G4 <-> PJ.11 | LCD_DE <-> PK.07 | | - | | LCD_B3 <-> PJ.15 | | | - +---------------------+---------------------+------------------+------------------+ - */ - - // GPIOG configuration - gpio_init_af(GPIO_PIN(GPIOG, 7), GPIO_AF_LTDC, GPIO_PIN_SPEED_LOW); - - // GPIOI configuration - gpio_init_af(GPIO_PIN(GPIOI, 12), GPIO_AF_LTDC, GPIO_PIN_SPEED_LOW); - gpio_init_af(GPIO_PIN(GPIOI, 13), GPIO_AF_LTDC, GPIO_PIN_SPEED_LOW); - - // GPIOJ configuration - gpio_init_af(GPIO_PIN(GPIOJ, 2), GPIO_AF_LTDC, GPIO_PIN_SPEED_LOW); - gpio_init_af(GPIO_PIN(GPIOJ, 3), GPIO_AF_LTDC, GPIO_PIN_SPEED_LOW); - gpio_init_af(GPIO_PIN(GPIOJ, 4), GPIO_AF_LTDC, GPIO_PIN_SPEED_LOW); - gpio_init_af(GPIO_PIN(GPIOJ, 5), GPIO_AF_LTDC, GPIO_PIN_SPEED_LOW); - gpio_init_af(GPIO_PIN(GPIOJ, 6), GPIO_AF_LTDC, GPIO_PIN_SPEED_LOW); - gpio_init_af(GPIO_PIN(GPIOJ, 9), GPIO_AF_LTDC, GPIO_PIN_SPEED_LOW); - gpio_init_af(GPIO_PIN(GPIOJ, 10), GPIO_AF_LTDC, GPIO_PIN_SPEED_LOW); - gpio_init_af(GPIO_PIN(GPIOJ, 11), GPIO_AF_LTDC, GPIO_PIN_SPEED_LOW); - gpio_init_af(GPIO_PIN(GPIOJ, 15), GPIO_AF_LTDC, GPIO_PIN_SPEED_LOW); - - // GPIOK configuration - gpio_init_af(GPIO_PIN(GPIOK, 0), GPIO_AF_LTDC, GPIO_PIN_SPEED_LOW); - gpio_init_af(GPIO_PIN(GPIOK, 1), GPIO_AF_LTDC, GPIO_PIN_SPEED_LOW); - gpio_init_af(GPIO_PIN(GPIOK, 2), GPIO_AF_LTDC, GPIO_PIN_SPEED_LOW); - gpio_init_af(GPIO_PIN(GPIOK, 3), GPIO_AF_LTDC, GPIO_PIN_SPEED_LOW); - gpio_init_af(GPIO_PIN(GPIOK, 4), GPIO_AF_LTDC, GPIO_PIN_SPEED_LOW); - gpio_init_af(GPIO_PIN(GPIOK, 5), GPIO_AF_LTDC, GPIO_PIN_SPEED_LOW); - gpio_init_af(GPIO_PIN(GPIOK, 6), GPIO_AF_LTDC, GPIO_PIN_SPEED_LOW); - gpio_init_af(GPIO_PIN(GPIOK, 7), GPIO_AF_LTDC, GPIO_PIN_SPEED_LOW); -} - -static void lcdSpiConfig(void) -{ - gpio_init(LCD_SPI_SCK_GPIO, GPIO_OUT, GPIO_PIN_SPEED_LOW); - gpio_init(LCD_SPI_MOSI_GPIO, GPIO_OUT, GPIO_PIN_SPEED_LOW); - gpio_init(LCD_SPI_CS_GPIO, GPIO_OUT, GPIO_PIN_SPEED_LOW); - gpio_init(LCD_NRST_GPIO, GPIO_OUT, GPIO_PIN_SPEED_LOW); - - /* Set the chip select pin aways low */ - CLR_LCD_CS(); -} - -void lcdDelay() { - delay_01us(1); -} - -unsigned char LCD_ReadByteOnFallingEdge(void) { - unsigned int i; - unsigned char ReceiveData = 0; - - SET_LCD_DATA(); - SET_LCD_DATA_INPUT(); - - for (i = 0; i < 8; i++) { - LCD_DELAY(); - SET_LCD_CLK(); - LCD_DELAY(); - LCD_DELAY(); - ReceiveData <<= 1; - - CLR_LCD_CLK(); - LCD_DELAY(); - LCD_DELAY(); - if (READ_LCD_DATA_PIN()) { - ReceiveData |= 0x01; - } - } - - SET_LCD_DATA_OUTPUT(); - - return (ReceiveData); -} - -static void lcdWriteByte(uint8_t data_enable, uint8_t byte) { - LCD_SCK_LOW(); - lcdDelay(); - - if (data_enable) { - LCD_MOSI_HIGH(); - } else { - LCD_MOSI_LOW(); - } - - LCD_SCK_HIGH(); - lcdDelay(); - - for (int i = 0; i < 8; i++) { - LCD_SCK_LOW(); - lcdDelay(); - - if (byte & 0x80) { - LCD_MOSI_HIGH(); - } else { - LCD_MOSI_LOW(); - } - - LCD_SCK_HIGH(); - byte <<= 1; - - lcdDelay(); - } - - LCD_SCK_LOW(); -} - -unsigned char LCD_ReadByte(void) { - unsigned int i; - unsigned char ReceiveData = 0; - - SET_LCD_DATA(); - SET_LCD_DATA_INPUT(); - for (i = 0; i < 8; i++) { - CLR_LCD_CLK(); - LCD_DELAY(); - LCD_DELAY(); - ReceiveData <<= 1; - SET_LCD_CLK(); - LCD_DELAY(); - LCD_DELAY(); - if (READ_LCD_DATA_PIN()) { - ReceiveData |= 0x01; - } - } - CLR_LCD_CLK(); - SET_LCD_DATA_OUTPUT(); - return (ReceiveData); -} - -unsigned char LCD_ReadRegister(unsigned char Register) { - unsigned char ReadData = 0; - - lcdWriteByte(0, Register); - LCD_DELAY(); - LCD_DELAY(); - ReadData = LCD_ReadByte(); - return (ReadData); -} - -void lcdWriteCommand(uint8_t command) { - lcdWriteByte(0, command); -} - -void lcdWriteData(uint8_t data) { - lcdWriteByte(1, data); -} - -void LCD_HX8357D_Init(void) { -#if 0 - lcdWriteCommand(0x11); - delay_ms(200); - - lcdWriteCommand(0xB9); - lcdWriteData(0xFF); - lcdWriteData(0x83); - lcdWriteData(0x57); - - lcdWriteCommand(0xB1); - lcdWriteData(0x00); - lcdWriteData(0x14); - lcdWriteData(0x1C); - lcdWriteData(0x1C); - lcdWriteData(0xC7); - lcdWriteData(0x21); - - lcdWriteCommand(0xB3); - lcdWriteData(0x83); - lcdWriteData(0x00); - lcdWriteData(0x06); - lcdWriteData(0x06); - - lcdWriteCommand(0xB4); - lcdWriteData(0x11); - lcdWriteData(0x40); - lcdWriteData(0x00); - lcdWriteData(0x2A); - lcdWriteData(0x2A); - lcdWriteData(0x20); - lcdWriteData(0x4E); - - lcdWriteCommand(0xB5); - lcdWriteData(0x03); - lcdWriteData(0x03); - - lcdWriteCommand(0xB6); - lcdWriteData(0x38); - - lcdWriteCommand(0xC0); - lcdWriteData(0x24); - lcdWriteData(0x24); - lcdWriteData(0x00); - lcdWriteData(0x10); - lcdWriteData(0xc8); - lcdWriteData(0x08); - - lcdWriteCommand(0xC2); - lcdWriteData(0x00); - lcdWriteData(0x08); - lcdWriteData(0x04); - - lcdWriteCommand(0xCC); - lcdWriteData(0x00); - -//GAMMA 2.5" - lcdWriteCommand(0xE0); - lcdWriteData(0x00); - lcdWriteData(0x06); - lcdWriteData(0x0D); - lcdWriteData(0x18); - lcdWriteData(0x23); - lcdWriteData(0x3B); - lcdWriteData(0x45); - lcdWriteData(0x4D); - lcdWriteData(0x4D); - lcdWriteData(0x46); - lcdWriteData(0x40); - lcdWriteData(0x37); - lcdWriteData(0x34); - lcdWriteData(0x2F); - lcdWriteData(0x2B); - lcdWriteData(0x21); - lcdWriteData(0x00); - lcdWriteData(0x06); - lcdWriteData(0x0D); - lcdWriteData(0x18); - lcdWriteData(0x23); - lcdWriteData(0x3B); - lcdWriteData(0x45); - lcdWriteData(0x4D); - lcdWriteData(0x4D); - lcdWriteData(0x46); - lcdWriteData(0x40); - lcdWriteData(0x37); - lcdWriteData(0x34); - lcdWriteData(0x2F); - lcdWriteData(0x2B); - lcdWriteData(0x21); - lcdWriteData(0x00); - lcdWriteData(0x01); - - lcdWriteCommand(0x3A); - lcdWriteData(0x66); - - lcdWriteCommand(0x36); - lcdWriteData(0x08); - - lcdWriteCommand(0x29); - delay_ms(10); -#else - delay_ms(50); - lcdWriteCommand(0xB9); //EXTC - lcdWriteData(0xFF); //EXTC - lcdWriteData(0x83); //EXTC - lcdWriteData(0x57); //EXTC - delay_ms(5); - - lcdWriteCommand(0x3A); - lcdWriteData(0x65); //262k - - lcdWriteCommand(0xB3); //COLOR FORMAT - lcdWriteData(0x83); //SDO_EN,BYPASS,EPF[1:0],0,0,RM,DM //43 - - lcdWriteCommand(0xB6); // - lcdWriteData(0x5a); //VCOMDC - - lcdWriteCommand(0x35); // TE ON - lcdWriteData(0x01); - - lcdWriteCommand(0xB0); - lcdWriteData(0x68); //70Hz - - lcdWriteCommand(0xCC); // Set Panel - lcdWriteData(0x00); // - - lcdWriteCommand(0xB1); // - lcdWriteData(0x00); // - lcdWriteData(0x11); //BT - lcdWriteData(0x1C); //VSPR - lcdWriteData(0x1C); //VSNR - lcdWriteData(0x83); //AP - lcdWriteData(0x48); //FS 0xAA - - lcdWriteCommand(0xB4); // - lcdWriteData(0x02); //NW - lcdWriteData(0x40); //RTN - lcdWriteData(0x00); //DIV - lcdWriteData(0x2A); //DUM - lcdWriteData(0x2A); //DUM - lcdWriteData(0x0D); //GDON - lcdWriteData(0x78); //GDOFF 0x4F - lcdWriteCommand(0xC0); //STBA - lcdWriteData(0x50); //OPON - lcdWriteData(0x50); //OPON - lcdWriteData(0x01); // - lcdWriteData(0x3C); // - lcdWriteData(0x1E); // - lcdWriteData(0x08); //GEN - - /* - lcdWriteCommand(0xE0); // - lcdWriteData(0x02); //1 - lcdWriteData(0x06); //2 - lcdWriteData(0x09); //3 - lcdWriteData(0x1C); //4 - lcdWriteData(0x27); //5 - lcdWriteData(0x3C); //6 - lcdWriteData(0x48); //7 - lcdWriteData(0x50); //8 - lcdWriteData(0x49); //9 - lcdWriteData(0x42); //10 - lcdWriteData(0x3E); //11 - lcdWriteData(0x35); //12 - lcdWriteData(0x31); //13 - lcdWriteData(0x2A); //14 - lcdWriteData(0x28); //15 - lcdWriteData(0x03); //16 - lcdWriteData(0x02); //17 v1 - lcdWriteData(0x06); //18 - lcdWriteData(0x09); //19 - lcdWriteData(0x1C); //20 - lcdWriteData(0x27); //21 - lcdWriteData(0x3C); //22 - lcdWriteData(0x48); //23 - lcdWriteData(0x50); //24 - lcdWriteData(0x49); //25 - lcdWriteData(0x42); //26 - lcdWriteData(0x3E); //27 - lcdWriteData(0x35); //28 - lcdWriteData(0x31); //29 - lcdWriteData(0x2A); //30 - lcdWriteData(0x28); //31 - lcdWriteData(0x03); //32 - lcdWriteData(0x44); //33 - lcdWriteData(0x01); //34 - */ - lcdWriteCommand(0xE0); - lcdWriteData(0x00); - lcdWriteData(0x06); - lcdWriteData(0x0D); - lcdWriteData(0x18); - lcdWriteData(0x23); - lcdWriteData(0x3B); - lcdWriteData(0x45); - lcdWriteData(0x4D); - lcdWriteData(0x4D); - lcdWriteData(0x46); - lcdWriteData(0x40); - lcdWriteData(0x37); - lcdWriteData(0x34); - lcdWriteData(0x2F); - lcdWriteData(0x2B); - lcdWriteData(0x21); - lcdWriteData(0x00); - lcdWriteData(0x06); - lcdWriteData(0x0D); - lcdWriteData(0x18); - lcdWriteData(0x23); - lcdWriteData(0x3B); - lcdWriteData(0x45); - lcdWriteData(0x4D); - lcdWriteData(0x4D); - lcdWriteData(0x46); - lcdWriteData(0x40); - lcdWriteData(0x37); - lcdWriteData(0x34); - lcdWriteData(0x2F); - lcdWriteData(0x2B); - lcdWriteData(0x21); - lcdWriteData(0x00); - lcdWriteData(0x01); - lcdWriteCommand(0x36); - lcdWriteData(0x18); - - lcdWriteCommand(0x11); // SLPOUT - delay_ms(200); - - lcdWriteCommand(0x29); // Display On - delay_ms(25); - lcdWriteCommand(0x2C); - -#endif - -} - -void LCD_HX8357D_On(void) { - lcdWriteCommand(0x29); - lcdWriteCommand(0x22); -} - -void LCD_HX8357D_Off(void) { - lcdWriteCommand(0x22); - lcdWriteCommand(0x28); -} - -unsigned int LCD_HX8357D_ReadID(void) { - int ID = 0; - - return (ID); -} - -void LCD_ILI9481_Init(void) { - lcdWriteCommand(0x11); - delay_ms(120); - - lcdWriteCommand(0xE4); - lcdWriteData(0x0A); - - lcdWriteCommand(0xF0); - lcdWriteData(0x01); - - lcdWriteCommand(0xF3); - lcdWriteData(0x02); - lcdWriteData(0x1A); - - lcdWriteCommand(0xD0); - lcdWriteData(0x07); - lcdWriteData(0x42); - lcdWriteData(0x1B); - - lcdWriteCommand(0xD1); - lcdWriteData(0x00); - lcdWriteData(0x00); //04 - lcdWriteData(0x1A); - - lcdWriteCommand(0xD2); - lcdWriteData(0x01); - lcdWriteData(0x00); //11 - - lcdWriteCommand(0xC0); - lcdWriteData(0x10); - lcdWriteData(0x3B); // - lcdWriteData(0x00); // - lcdWriteData(0x02); - lcdWriteData(0x11); - - lcdWriteCommand(0xC5); - lcdWriteData(0x03); - - lcdWriteCommand(0xC8); - lcdWriteData(0x00); - lcdWriteData(0x01); - lcdWriteData(0x47); - lcdWriteData(0x60); - lcdWriteData(0x04); - lcdWriteData(0x16); - lcdWriteData(0x03); - lcdWriteData(0x67); - lcdWriteData(0x67); - lcdWriteData(0x06); - lcdWriteData(0x0F); - lcdWriteData(0x00); - - lcdWriteCommand(0x36); - lcdWriteData(0x08); - - lcdWriteCommand(0x3A); - lcdWriteData(0x66); //0x55=65k color, 0x66=262k color. - - lcdWriteCommand(0x2A); - lcdWriteData(0x00); - lcdWriteData(0x00); - lcdWriteData(0x01); - lcdWriteData(0x3F); - - lcdWriteCommand(0x2B); - lcdWriteData(0x00); - lcdWriteData(0x00); - lcdWriteData(0x01); - lcdWriteData(0xE0); - - lcdWriteCommand(0xB4); - lcdWriteData(0x11); - - lcdWriteCommand(0xc6); - lcdWriteData(0x82); - - delay_ms(120); - - lcdWriteCommand(0x21); - lcdWriteCommand(0x29); - lcdWriteCommand(0x2C); - -} - -void LCD_ILI9481_On(void) { - lcdWriteCommand(0x29); -} - -void LCD_ILI9481_Off(void) { - lcdWriteCommand(0x28); -} - -unsigned int LCD_ILI9481_ReadID(void) { -#if 1 - /* Have a issue here */ - return 0; -#else - int ID = 0; - int Data; - - - lcdWriteByte(0, 0xBF); - - Data = LCD_ReadByteOnFallingEdge(); - Data = LCD_ReadByteOnFallingEdge(); - ID = LCD_ReadByteOnFallingEdge(); - ID <<= 8; - ID |= LCD_ReadByteOnFallingEdge(); - Data = LCD_ReadByteOnFallingEdge(); - Data = LCD_ReadByteOnFallingEdge(); - - LCD_DELAY(); - LCD_DELAY(); - LCD_DELAY(); - - lcdWriteCommand(0xC6); - lcdWriteData(0x82); - //lcdWriteData( 0x9b ); - return (ID); -#endif -} - -void LCD_ILI9486_On(void) { - lcdWriteCommand(0x29); -} - -void LCD_ILI9486_Init(void) { - lcdWriteCommand(0XFB); - lcdWriteData(0x00); - - lcdWriteCommand(0xf2); - lcdWriteData(0x18); - lcdWriteData(0xa3); - lcdWriteData(0x12); - lcdWriteData(0x02); - lcdWriteData(0xb2); - lcdWriteData(0x12); - lcdWriteData(0xff); - lcdWriteData(0x13); - lcdWriteData(0x00); - lcdWriteCommand(0xf1); - lcdWriteData(0x36); - lcdWriteData(0x04); - lcdWriteData(0x00); - lcdWriteData(0x3c); - lcdWriteData(0x0f); - lcdWriteData(0x8f); - lcdWriteCommand(0xf8); - lcdWriteData(0x21); - lcdWriteData(0x04); - lcdWriteCommand(0xf9); - lcdWriteData(0x00); - lcdWriteData(0x08); - lcdWriteCommand(0x36); - lcdWriteData(0x18); - lcdWriteCommand(0x3a); - lcdWriteData(0x65); - lcdWriteCommand(0xc0); - lcdWriteData(0x0f); - lcdWriteData(0x0f); - lcdWriteCommand(0xc1); - lcdWriteData(0x41); - - lcdWriteCommand(0xc5); - lcdWriteData(0x00); - lcdWriteData(0x27); - lcdWriteData(0x80); - lcdWriteCommand(0xb6); - lcdWriteData(0xb2); - lcdWriteData(0x42); - lcdWriteData(0x3b); - lcdWriteCommand(0xb1); - lcdWriteData(0xb0); - lcdWriteData(0x11); - lcdWriteCommand(0xb4); - lcdWriteData(0x02); - lcdWriteCommand(0xb7); - lcdWriteData(0xC6); - - lcdWriteCommand(0xe0); - lcdWriteData(0x0f); - lcdWriteData(0x1C); - lcdWriteData(0x18); - lcdWriteData(0x0B); - lcdWriteData(0x0D); - lcdWriteData(0x06); - lcdWriteData(0x48); - lcdWriteData(0x87); - lcdWriteData(0x3A); - lcdWriteData(0x09); - lcdWriteData(0x15); - lcdWriteData(0x08); - lcdWriteData(0x0D); - lcdWriteData(0x04); - lcdWriteData(0x00); - - lcdWriteCommand(0xe1); - lcdWriteData(0x0f); - lcdWriteData(0x37); - lcdWriteData(0x34); - lcdWriteData(0x0A); - lcdWriteData(0x0B); - lcdWriteData(0x03); - lcdWriteData(0x4B); - lcdWriteData(0x31); - lcdWriteData(0x39); - lcdWriteData(0x03); - lcdWriteData(0x0F); - lcdWriteData(0x03); - lcdWriteData(0x22); - lcdWriteData(0x1D); - lcdWriteData(0x00); - - lcdWriteCommand(0x21); - lcdWriteCommand(0x11); - delay_ms(120); - lcdWriteCommand(0x28); - - LCD_ILI9486_On(); -} - -void LCD_ILI9486_Off(void) { - lcdWriteCommand(0x28); -} - -unsigned int LCD_ILI9486_ReadID(void) { - int ID = 0; - - lcdWriteCommand(0XF7); - lcdWriteData(0xA9); - lcdWriteData(0x51); - lcdWriteData(0x2C); - lcdWriteData(0x82); - lcdWriteCommand(0XB0); - lcdWriteData(0X80); - - lcdWriteCommand(0XFB); - lcdWriteData(0x10 | 0x00); - ID = LCD_ReadRegister(0xd3); - - lcdWriteCommand(0XFB); - lcdWriteData(0x10 | 0x01); - ID = LCD_ReadRegister(0xd3); - - lcdWriteCommand(0XFB); - lcdWriteData(0x10 | 0x02); - ID = LCD_ReadRegister(0xd3); - ID <<= 8; - lcdWriteCommand(0XFB); - lcdWriteData(0x10 | 0x03); - ID |= LCD_ReadRegister(0xd3); - - lcdWriteCommand(0XFB); - lcdWriteData(0x00); - - return (ID); -} - -void LCD_ILI9488_On(void) { - lcdWriteCommand(0x29); - lcdWriteCommand(0x23); //all pixels on -} - -void LCD_ILI9488_Init(void) { - lcdWriteCommand(0XFB); - lcdWriteData(0x00); - - lcdWriteCommand(0XF7); - lcdWriteData(0xA9); - lcdWriteData(0x51); - lcdWriteData(0x2C); - lcdWriteData(0x82); - - lcdWriteCommand(0xC0); - lcdWriteData(0x11); - lcdWriteData(0x09); - - lcdWriteCommand(0xC1); - lcdWriteData(0x41); - - lcdWriteCommand(0XC5); - lcdWriteData(0x00); - lcdWriteData(0x0A); - lcdWriteData(0x80); - - lcdWriteCommand(0xB1); - lcdWriteData(0xB0); - lcdWriteData(0x11); - - lcdWriteCommand(0xB4); - lcdWriteData(0x02); - - lcdWriteCommand(0xB6); - lcdWriteData(0x30); - lcdWriteData(0x02); - - lcdWriteCommand(0xB7); - lcdWriteData(0xc6); - - lcdWriteCommand(0xBE); - lcdWriteData(0x00); - lcdWriteData(0x04); - - lcdWriteCommand(0xE9); - lcdWriteData(0x00); - - lcdWriteCommand(0x36); - lcdWriteData(0x08); - - lcdWriteCommand(0x3A); - lcdWriteData(0x65); - - lcdWriteCommand(0xE0); - lcdWriteData(0x00); - lcdWriteData(0x07); - lcdWriteData(0x10); - lcdWriteData(0x09); - lcdWriteData(0x17); - lcdWriteData(0x0B); - lcdWriteData(0x41); - lcdWriteData(0x89); - lcdWriteData(0x4B); - lcdWriteData(0x0A); - lcdWriteData(0x0C); - lcdWriteData(0x0E); - lcdWriteData(0x18); - lcdWriteData(0x1B); - lcdWriteData(0x0F); - - lcdWriteCommand(0XE1); - lcdWriteData(0x00); - lcdWriteData(0x17); - lcdWriteData(0x1A); - lcdWriteData(0x04); - lcdWriteData(0x0E); - lcdWriteData(0x06); - lcdWriteData(0x2F); - lcdWriteData(0x45); - lcdWriteData(0x43); - lcdWriteData(0x02); - lcdWriteData(0x0A); - lcdWriteData(0x09); - lcdWriteData(0x32); - lcdWriteData(0x36); - lcdWriteData(0x0F); - - lcdWriteCommand(0x11); - delay_ms(120); - lcdWriteCommand(0x28); - - LCD_ILI9488_On(); -} - -void LCD_ILI9488_Off(void) { - lcdWriteCommand(0x22); //all pixels off - lcdWriteCommand(0x28); -} - -void LCD_ILI9488_ReadDevice(void) { - int Index = 0; - int Parameter = 0x80; - -#if 1 - -#if 1 - lcdWriteCommand(0XF7); - lcdWriteData(0xA9); - lcdWriteData(0x51); - lcdWriteData(0x2C); - lcdWriteData(0x82); - - lcdWriteCommand(0XB0); - lcdWriteData(0X80); - -#endif - lcdWriteCommand(0XFB); - lcdWriteData(Parameter | 0x00); - LCD_ReadBuffer[Index++] = LCD_ReadRegister(0xd3); - - //lcdWriteCommand(0X2E); - lcdWriteCommand(0XFB); - lcdWriteData(Parameter | 0x01); //Parameter2=0X88 - LCD_ReadBuffer[Index++] = LCD_ReadRegister(0xd3); - - lcdWriteCommand(0XFB); - lcdWriteData(Parameter | 0x02); //Parameter2=0X88 - LCD_ReadBuffer[Index++] = LCD_ReadRegister(0xd3); - - lcdWriteCommand(0XFB); - lcdWriteData(Parameter | 0x03); //Parameter2=0X88 - LCD_ReadBuffer[Index++] = LCD_ReadRegister(0xd3); -#endif - -#if 0 - lcdWriteCommand( 0XFB ); - lcdWriteData( Parameter|0x00 ); //Parameter3=0X94 - LCD_ReadBuffer[Index++] = LCD_ReadRegister( 0xd3 ); - lcdWriteData( Parameter|0x01 );//Parameter3=0X94 - LCD_ReadBuffer[Index++] = LCD_ReadRegister( 0xd3 ); - lcdWriteCommand( 0XFB ); - lcdWriteData( Parameter|0x02 );//Parameter3=0X94 - LCD_ReadBuffer[Index++] = LCD_ReadRegister( 0xd3 ); - - lcdWriteCommand( 0XFB ); - lcdWriteData( Parameter|0x03 );//Parameter4=0X88 - LCD_ReadBuffer[Index++] = LCD_ReadRegister( 0xd3 ); -#else - //lcdWriteCommand( 0xd0 ); - //lcdWriteData( Parameter|0x03 ); //Parameter4=0X88 - //LCD_ReadBuffer[Index++] = LCD_ReadRegister( 0xd0 ); -#endif -} - -unsigned int LCD_ILI9488_ReadID(void) { - int ID = 0; - - lcdWriteCommand(0XF7); - lcdWriteData(0xA9); - lcdWriteData(0x51); - lcdWriteData(0x2C); - lcdWriteData(0x82); - lcdWriteCommand(0XB0); - lcdWriteData(0X80); - - lcdWriteCommand(0XFB); - lcdWriteData(0x80 | 0x00); - ID = LCD_ReadRegister(0xd3); - - lcdWriteCommand(0XFB); - lcdWriteData(0x80 | 0x01); - ID = LCD_ReadRegister(0xd3); - - lcdWriteCommand(0XFB); - lcdWriteData(0x80 | 0x02); - ID = LCD_ReadRegister(0xd3); - ID <<= 8; - - lcdWriteCommand(0XFB); - lcdWriteData(0x80 | 0x03); - ID |= LCD_ReadRegister(0xd3); - - lcdWriteCommand(0XFB); - lcdWriteData(0x00); - return (ID); -} - -void LCD_ST7796S_On(void) { - lcdWriteCommand(0x29); -} - -void LCD_ST7796S_Init(void) { - delay_ms(120); - - lcdWriteCommand( 0x11 ); - delay_ms(120); - lcdWriteCommand( 0xF0 ); - lcdWriteData( 0xC3 ); - - lcdWriteCommand( 0xF0 ); - lcdWriteData( 0x96 ); - - lcdWriteCommand( 0x36 ); - lcdWriteData( 0x88 ); - - lcdWriteCommand( 0x3A ); - lcdWriteData( 0x66 ); - - //SET RGB STRAT - lcdWriteCommand (0xB0 ); //SET HS VS DE CLK 上升还是下降有效 - lcdWriteData( 0x80 ); - - lcdWriteCommand( 0xB4 ); - lcdWriteData( 0x01 ); - - lcdWriteCommand( 0xB6 ); - lcdWriteData( 0x20 ); - lcdWriteData( 0x02 ); - lcdWriteData( 0x3B ); - //SET RGB END - - lcdWriteCommand( 0xB7); - lcdWriteData( 0xC6); - - lcdWriteCommand( 0xB9 ); - lcdWriteData( 0x02 ); - lcdWriteData( 0xE0 ); - - lcdWriteCommand( 0xC0 ); - lcdWriteData( 0x80 ); - lcdWriteData( 0x65 ); - - lcdWriteCommand( 0xC1 ); - lcdWriteData( 0x0D ); - - lcdWriteCommand( 0xC2 ); - lcdWriteData( 0xA7 ); - - lcdWriteCommand( 0xC5 ); - lcdWriteData( 0x14 ); - - lcdWriteCommand( 0xE8 ); - lcdWriteData( 0x40 ); - lcdWriteData( 0x8A ); - lcdWriteData( 0x00 ); - lcdWriteData( 0x00 ); - lcdWriteData( 0x29 ); - lcdWriteData( 0x19 ); - lcdWriteData( 0xA5 ); - lcdWriteData( 0x33 ); - - lcdWriteCommand( 0xE0 ); - lcdWriteData( 0xD0 ); - lcdWriteData( 0x00 ); - lcdWriteData( 0x04 ); - lcdWriteData( 0x05 ); - lcdWriteData( 0x04 ); - lcdWriteData( 0x21 ); - lcdWriteData( 0x25 ); - lcdWriteData( 0x43 ); - lcdWriteData( 0x3F ); - lcdWriteData( 0x37 ); - lcdWriteData( 0x13 ); - lcdWriteData( 0x13 ); - lcdWriteData( 0x29 ); - lcdWriteData( 0x32 ); - - lcdWriteCommand( 0xE1 ); - lcdWriteData( 0xD0 ); - lcdWriteData( 0x04 ); - lcdWriteData( 0x06 ); - lcdWriteData( 0x09 ); - lcdWriteData( 0x06 ); - lcdWriteData( 0x03 ); - lcdWriteData( 0x25 ); - lcdWriteData( 0x32 ); - lcdWriteData( 0x3E ); - lcdWriteData( 0x18 ); - lcdWriteData( 0x15 ); - lcdWriteData( 0x15 ); - lcdWriteData( 0x2B ); - lcdWriteData( 0x30 ); - - lcdWriteCommand( 0xF0 ); - lcdWriteData( 0x3C ); - - lcdWriteCommand( 0xF0 ); - lcdWriteData( 0x69 ); - - delay_ms(120); - - lcdWriteCommand( 0x21 ); - - LCD_ST7796S_On(); -} - -void LCD_ST7796S_Off(void) { - lcdWriteCommand(0x28); -} - -unsigned int LCD_ST7796S_ReadID(void) { - unsigned int ID = 0; - - lcdWriteCommand( 0XF0 ); - lcdWriteData( 0XC3 ); - lcdWriteCommand( 0XF0 ); - lcdWriteData( 0X96 ); - - lcdWriteCommand( 0XB0 ); - lcdWriteData( 0X80 ); - - lcdWriteCommand( 0XD3 ); - - SET_LCD_DATA_INPUT(); - LCD_SCK_LOW(); - LCD_DELAY(); - LCD_DELAY(); - LCD_SCK_HIGH(); - LCD_DELAY(); - LCD_DELAY(); - - LCD_ReadByte(); - ID += (uint16_t)(LCD_ReadByte())<<8; - ID += LCD_ReadByte(); - - return (ID); - } - -static void lcdReset() { - LCD_NRST_HIGH(); - delay_ms(1); - - LCD_NRST_LOW(); // RESET(); - delay_ms(100); - - LCD_NRST_HIGH(); - delay_ms(100); -} - -void LCD_Init_LTDC() { - __HAL_RCC_LTDC_CLK_ENABLE(); - hltdc.Instance = LTDC; - - /* Configure PLLSAI prescalers for LCD */ - /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */ - /* PLLSAI_VCO Output = PLLSAI_VCO Input * lcdPixelclock * 16 = XX Mhz */ - /* PLLLCDCLK = PLLSAI_VCO Output/PLL_LTDC = PLLSAI_VCO/4 = YY Mhz */ - /* LTDC clock frequency = PLLLCDCLK / RCC_PLLSAIDivR = YY/4 = lcdPixelClock Mhz */ - uint32_t clock = (lcdPixelClock*16) / 1000000; // clock*16 in MHz - RCC_PeriphCLKInitTypeDef clkConfig; - clkConfig.PeriphClockSelection = RCC_PERIPHCLK_LTDC; - clkConfig.PLLSAI.PLLSAIN = clock; - clkConfig.PLLSAI.PLLSAIR = 4; - clkConfig.PLLSAIDivQ = 6; - clkConfig.PLLSAIDivR = RCC_PLLSAIDIVR_4; - HAL_RCCEx_PeriphCLKConfig(&clkConfig); - - /* LTDC Configuration *********************************************************/ - /* Polarity configuration */ - /* Initialize the horizontal synchronization polarity as active low */ - hltdc.Init.HSPolarity = LTDC_HSPOLARITY_AL; - /* Initialize the vertical synchronization polarity as active low */ - hltdc.Init.VSPolarity = LTDC_VSPOLARITY_AL; - /* Initialize the data enable polarity as active low */ - hltdc.Init.DEPolarity = LTDC_DEPOLARITY_AL; - /* Initialize the pixel clock polarity as input pixel clock */ - hltdc.Init.PCPolarity = LTDC_PCPOLARITY_IPC; - - /* Configure R,G,B component values for LCD background color */ - hltdc.Init.Backcolor.Red = 0; - hltdc.Init.Backcolor.Green = 0; - hltdc.Init.Backcolor.Blue = 0; - - /* Configure horizontal synchronization width */ - hltdc.Init.HorizontalSync = HSW; - /* Configure vertical synchronization height */ - hltdc.Init.VerticalSync = VSH; - /* Configure accumulated horizontal back porch */ - hltdc.Init.AccumulatedHBP = HBP; - /* Configure accumulated vertical back porch */ - hltdc.Init.AccumulatedVBP = VBP; - /* Configure accumulated active width */ - hltdc.Init.AccumulatedActiveW = LCD_PHYS_W + HBP; - /* Configure accumulated active height */ - hltdc.Init.AccumulatedActiveH = LCD_PHYS_H + VBP; - /* Configure total width */ - hltdc.Init.TotalWidth = LCD_PHYS_W + HBP + HFP; - /* Configure total height */ - hltdc.Init.TotalHeigh = LCD_PHYS_H + VBP + VFP; - - HAL_LTDC_Init(&hltdc); - - // Configure IRQ (line) - NVIC_SetPriority(LTDC_IRQn, LTDC_IRQ_PRIO); - NVIC_EnableIRQ(LTDC_IRQn); - - // Trigger on last line - HAL_LTDC_ProgramLineEvent(&hltdc, LCD_PHYS_H); - __HAL_LTDC_ENABLE_IT(&hltdc, LTDC_IT_LI); - -#if 0 - DMA2D_ITConfig(DMA2D_CR_TCIE, ENABLE); - NVIC_InitStructure.NVIC_IRQChannel = DMA2D_IRQn; - NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = DMA_SCREEN_IRQ_PRIO; - NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; /* Not used as 4 bits are used for the pr e-emption priority. */; - NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; - NVIC_Init( &NVIC_InitStructure ); - DMA2D->IFCR = (unsigned long)DMA2D_IFSR_CTCIF; -#endif -} - -void LCD_LayerInit() { - auto& layer = hltdc.LayerCfg[0]; - - /* Windowing configuration */ - layer.WindowX0 = 0; - layer.WindowX1 = LCD_PHYS_W; - layer.WindowY0 = 0; - layer.WindowY1 = LCD_PHYS_H; - - /* Pixel Format configuration*/ - layer.PixelFormat = LTDC_PIXEL_FORMAT_RGB565; - - /* Alpha constant (255 totally opaque) */ - layer.Alpha = 255; - - /* Default Color configuration (configure A,R,G,B component values) */ - layer.Backcolor.Blue = 0; - layer.Backcolor.Green = 0; - layer.Backcolor.Red = 0; - layer.Alpha0 = 0; - - /* Configure blending factors */ - layer.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA; - layer.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA; - - layer.ImageWidth = LCD_PHYS_W; - layer.ImageHeight = LCD_PHYS_H; - - /* Start Address configuration : the LCD Frame buffer is defined on SDRAM w/ Offset */ - layer.FBStartAdress = (intptr_t)initialFrameBuffer; - - /* Initialize LTDC layer 1 */ - HAL_LTDC_ConfigLayer(&hltdc, &hltdc.LayerCfg[0], 0); - - /* dithering activation */ - HAL_LTDC_EnableDither(&hltdc); -} - -extern "C" -void lcdSetInitalFrameBuffer(void* fbAddress) -{ - initialFrameBuffer = fbAddress; -} - -const char* boardLcdType = ""; - -extern "C" -void lcdInit(void) -{ - /* Configure the LCD SPI+RESET pins */ - lcdSpiConfig(); - - /* Reset the LCD --------------------------------------------------------*/ - lcdReset(); - - /* Configure the LCD Control pins */ - LCD_AF_GPIOConfig(); - - /* Send LCD initialization commands */ - if (LCD_ILI9481_ReadID() == LCD_ILI9481_ID) { - TRACE("LCD INIT: ILI9481"); - boardLcdType = "ILI9481"; - lcdInitFunction = LCD_ILI9481_Init; - lcdOffFunction = LCD_ILI9481_Off; - lcdOnFunction = LCD_ILI9481_On; - lcdPixelClock = 12000000; - } else if (LCD_ILI9486_ReadID() == LCD_ILI9486_ID) { - TRACE("LCD INIT: ILI9486"); - boardLcdType = "ILI9486"; - lcdInitFunction = LCD_ILI9486_Init; - lcdOffFunction = LCD_ILI9486_Off; - lcdOnFunction = LCD_ILI9486_On; - lcdPixelClock = 12000000; - } else if (LCD_ILI9488_ReadID() == LCD_ILI9488_ID) { - TRACE("LCD INIT: ILI9488"); - boardLcdType = "ILI9488"; - lcdInitFunction = LCD_ILI9488_Init; - lcdOffFunction = LCD_ILI9488_Off; - lcdOnFunction = LCD_ILI9488_On; - lcdPixelClock = 12000000; - } else if (LCD_HX8357D_ReadID() == LCD_HX8357D_ID) { - TRACE("LCD INIT: HX8357D"); - boardLcdType = "HX8357D"; - lcdInitFunction = LCD_HX8357D_Init; - lcdOffFunction = LCD_HX8357D_Off; - lcdOnFunction = LCD_HX8357D_On; - lcdPixelClock = 12000000; - } else { /* if (LCD_ST7796S_ReadID() == LCD_ST7796S_ID) { */ // ST7796S detection is unreliable - TRACE("LCD INIT (default): ST7796S"); - boardLcdType = "ST7796S"; - lcdInitFunction = LCD_ST7796S_Init; - lcdOffFunction = LCD_ST7796S_Off; - lcdOnFunction = LCD_ST7796S_On; - lcdPixelClock = 10000000; -/* } else { - TRACE("LCD INIT: unknown LCD controller"); - boardLcdType = "unknown";*/ - } - - lcdInitFunction(); - - LCD_Init_LTDC(); - LCD_LayerInit(); - - // Enable LCD display - __HAL_LTDC_ENABLE(&hltdc); - - lcdSetFlushCb(startLcdRefresh); -} - -extern "C" void LTDC_IRQHandler(void) -{ - // clear interrupt flag - __HAL_LTDC_CLEAR_FLAG(&hltdc, LTDC_FLAG_LI); - __HAL_LTDC_DISABLE_IT(&hltdc, LTDC_IT_LI); - _frame_addr_reloaded = 1; -} diff --git a/radio/src/targets/nv14/lcd_driver.h b/radio/src/targets/nv14/lcd_driver.h deleted file mode 100644 index 054b79902..000000000 --- a/radio/src/targets/nv14/lcd_driver.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (C) EdgeTX - * - * Based on code named - * opentx - https://github.com/opentx/opentx - * th9x - http://code.google.com/p/th9x - * er9x - http://code.google.com/p/er9x - * gruvin9x - http://code.google.com/p/gruvin9x - * - * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#pragma once - -#define HBP ( 24 ) // TODO use names from FlySky -#define VBP ( 10 ) - -#define HSW ( 4 ) -#define VSH ( 2 ) - -#define HFP ( 140 - HBP ) -#define VFP ( 22 - VBP ) - - -#define LCD_ST7796S_ID ( 0x7796 ) -#define LCD_ILI9481_ID ( 0x9481 ) -#define LCD_ILI9486_ID ( 0x9486 ) -#define LCD_ILI9488_ID ( 0x9488 ) -#define LCD_HX8357D_ID ( 0x99 ) - -#define LCD_DELAY() LCD_Delay() - -typedef void (*lcdSpiInitFucPtr)(void); -typedef unsigned int LcdReadIDFucPtr( void ); - -extern lcdSpiInitFucPtr lcdInitFunction; -extern lcdSpiInitFucPtr lcdOffFunction; -extern lcdSpiInitFucPtr lcdOnFunction; - -#define SET_IO_INPUT( PORT, PIN ) LL_GPIO_SetPinMode( PORT, PIN, LL_GPIO_MODE_INPUT ) -#define SET_IO_OUTPUT( PORT, PIN ) LL_GPIO_SetPinMode( PORT, PIN, LL_GPIO_MODE_OUTPUT ) - -#define LCD_NRST_HIGH() gpio_write(LCD_NRST_GPIO, 1) -#define LCD_NRST_LOW() gpio_write(LCD_NRST_GPIO, 0) - -#define LCD_CS_HIGH() gpio_write(LCD_SPI_CS_GPIO, 1) -#define LCD_CS_LOW() gpio_write(LCD_SPI_CS_GPIO, 0) - -#define LCD_SCK_HIGH() gpio_write(LCD_SPI_SCK_GPIO, 1) -#define LCD_SCK_LOW() gpio_write(LCD_SPI_SCK_GPIO, 0) - -#define LCD_MOSI_HIGH() gpio_write(LCD_SPI_MOSI_GPIO, 1) -#define LCD_MOSI_LOW() gpio_write(LCD_SPI_MOSI_GPIO, 0) - -#define SET_LCD_CS() LCD_CS_HIGH() -#define CLR_LCD_CS() LCD_CS_LOW() - -#define SET_LCD_CLK() LCD_SCK_HIGH() -#define CLR_LCD_CLK() LCD_SCK_LOW() - -#define SET_LCD_DATA() gpio_write(LCD_SPI_MOSI_GPIO, 1) -#define CLR_LCD_DATA() gpio_write(LCD_SPI_MOSI_GPIO, 0) -#define SET_LCD_DATA_INPUT() gpio_init(LCD_SPI_MOSI_GPIO, GPIO_IN_PU, GPIO_PIN_SPEED_LOW) -#define SET_LCD_DATA_OUTPUT() gpio_init(LCD_SPI_MOSI_GPIO, GPIO_OUT, GPIO_PIN_SPEED_LOW) -#define READ_LCD_DATA_PIN() gpio_read(LCD_SPI_MOSI_GPIO) - - - -#if 1 -#define HORIZONTAL_SYNC_WIDTH ( 4 ) -#define HORIZONTAL_BACK_PORCH ( 24 ) -#define HORIZONTAL_FRONT_PORCH ( 140 - HORIZONTAL_BACK_PORCH ) -#define VERTICAL_SYNC_HEIGHT ( 2 ) -#define VERTICAL_BACK_PORCH ( 10 ) -#define VERTICAL_FRONT_PORCH ( 22 - VERTICAL_BACK_PORCH ) -#else -#define HORIZONTAL_SYNC_WIDTH ( 4 ) -#define HORIZONTAL_BACK_PORCH ( 20 ) -#define HORIZONTAL_FRONT_PORCH ( 60 - HORIZONTAL_BACK_PORCH ) -#define VERTICAL_SYNC_HEIGHT ( 2 ) -#define VERTICAL_BACK_PORCH ( 6 ) -#define VERTICAL_FRONT_PORCH ( 14 - VERTICAL_BACK_PORCH ) -#endif diff --git a/radio/src/targets/nv14/touch_driver.cpp b/radio/src/targets/nv14/touch_driver.cpp deleted file mode 100644 index 36467e0ad..000000000 --- a/radio/src/targets/nv14/touch_driver.cpp +++ /dev/null @@ -1,509 +0,0 @@ -/* - * Copyright (C) EdgeTX - * - * Based on code named - * opentx - https://github.com/opentx/opentx - * th9x - http://code.google.com/p/th9x - * er9x - http://code.google.com/p/er9x - * gruvin9x - http://code.google.com/p/gruvin9x - * - * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#include "hal/gpio.h" -#include "hal/i2c_driver.h" -#include "stm32_gpio.h" -#include "stm32_hal_ll.h" -#include "stm32_hal.h" -#include "stm32_i2c_driver.h" -#include "stm32_gpio_driver.h" -#include "stm32_exti_driver.h" - -#include "hal.h" -#include "timers_driver.h" -#include "delays_driver.h" -#include "touch_driver.h" - -#include "debug.h" - -volatile static bool touchEventOccured; - -#define FT6x06_MAX_INSTANCE 1 - -#define TOUCH_FT6236_I2C_ADDRESS (0x70>>1) -#define TOUCH_CST836U_I2C_ADDRESS (0x15) - -enum TouchControllers {TC_NONE, TC_FT6236, TC_CST836U}; -TouchControllers touchController = TC_NONE; - -const char* boardTouchType = ""; -static tc_handle_TypeDef tc_handle = {0, 0}; - -tmr10ms_t downTime = 0; -tmr10ms_t tapTime = 0; -short tapCount = 0; -#define TAP_TIME 250 // 250 ms - -struct TouchControllerDescriptor -{ - void (*read)(uint16_t * X, uint16_t * Y, uint32_t * event); - uint8_t (*detectTouch)(); - void (*printDebugInfo)(); - uint32_t contactEvent; -}; - -static const TouchControllerDescriptor *tc = nullptr; - -static TouchState internalTouchState = {}; - -static void _cst836u_exti_isr(void) -{ - touchEventOccured = true; -} - -void I2C_Init_Radio(void) -{ - TRACE("CST836U I2C Init"); - - if (i2c_init(TOUCH_I2C_BUS) < 0) { - TRACE("CST836U ERROR: i2c_init failed"); - return; - } -} - -// void Touch_DeInit() -// { -// I2C_DeInit(I2C_B1); -// __HAL_RCC_I2C1_FORCE_RESET(); -// delay_ms(150); -// __HAL_RCC_I2C1_RELEASE_RESET(); -// } - -#define I2C_TIMEOUT_MAX 5 // 5 ms - -bool touch_i2c_read(uint8_t addr, uint8_t reg, uint8_t * data, uint8_t len) -{ - if(touchController == TC_CST836U) - { - if(stm32_i2c_master_tx(TOUCH_I2C_BUS, addr, ®, 1, 3) < 0) - return false; - delay_us(5); - if(stm32_i2c_master_rx(TOUCH_I2C_BUS, addr, data, len, I2C_TIMEOUT_MAX) < 0) - return false; - } else { - if (stm32_i2c_read(TOUCH_I2C_BUS, addr, reg, 1, data, len, I2C_TIMEOUT_MAX) < 0) - return false; - } - - return true; -} - -#if 0 -static bool touch_i2c_write(uint8_t addr, uint8_t reg, uint8_t * data, uint8_t len) -{ - if (stm32_i2c_write(TOUCH_I2C_BUS, addr, reg, 1, data, len, I2C_TIMEOUT_MAX) < 0) - return false; - - return true; -} - -static void TS_IO_Write(uint8_t addr, uint8_t reg, uint8_t data) -{ - uint8_t tryCount = 3; - while (!touch_i2c_write(addr, reg, &data, 1)) { - if (--tryCount == 0) break; - I2C_Init(); - } -} -#endif - -static uint8_t TS_IO_Read(uint8_t addr, uint8_t reg) -{ - uint8_t retult; - uint8_t tryCount = 3; - while (!touch_i2c_read(addr, reg, &retult, 1)) { - if (--tryCount == 0) break; - I2C_Init_Radio(); - } - return retult; -} - -static uint16_t TS_IO_ReadMultiple(uint8_t addr, uint8_t reg, uint8_t * buffer, uint16_t length) -{ - uint8_t tryCount = 3; - while (!touch_i2c_read(addr, reg, buffer, length)) { - if (--tryCount == 0) break; - I2C_Init_Radio(); - } - return 1; -} - -static void touch_ft6236_debug_info(void) -{ -#if defined(DEBUG) - TRACE("ft6x36: thrhld = %d", TS_IO_Read(TOUCH_FT6236_I2C_ADDRESS, TOUCH_FT6236_REG_TH_GROUP) * 4); - TRACE("ft6x36: rep rate=", TS_IO_Read(TOUCH_FT6236_I2C_ADDRESS, TOUCH_FT6236_REG_PERIODACTIVE) * 10); - TRACE("ft6x36: fw lib 0x%02X %02X", TS_IO_Read(TOUCH_FT6236_I2C_ADDRESS, TOUCH_FT6236_REG_LIB_VER_H), TS_IO_Read(TOUCH_FT6236_I2C_ADDRESS, TOUCH_FT6236_REG_LIB_VER_L)); - TRACE("ft6x36: fw v 0x%02X", TS_IO_Read(TOUCH_FT6236_I2C_ADDRESS, TOUCH_FT6236_REG_FIRMID)); - TRACE("ft6x36: CHIP ID 0x%02X", TS_IO_Read(TOUCH_FT6236_I2C_ADDRESS, TOUCH_FT6236_REG_CIPHER)); - TRACE("ft6x36: CTPM ID 0x%02X", TS_IO_Read(TOUCH_FT6236_I2C_ADDRESS, TOUCH_FT6236_REG_FOCALTECH_ID)); - TRACE("ft6x36: rel code 0x%02X", TS_IO_Read(TOUCH_FT6236_I2C_ADDRESS, TOUCH_FT6236_REG_RELEASE_CODE_ID)); -#endif -} - -/** - * @brief Return if there is touches detected or not. - * Try to detect new touches and forget the old ones (reset internal global - * variables). - * @param DeviceAddr: Device address on communication Bus. - * @retval : Number of active touches detected (can be 0, 1 or 2). - */ -static uint8_t ft6x06_TS_DetectTouch() -{ - volatile uint8_t nbTouch = 0; - - /* Read register FT6206_TD_STAT_REG to check number of touches detection */ - nbTouch = TS_IO_Read(TOUCH_FT6236_I2C_ADDRESS, FT6206_TD_STAT_REG); - nbTouch &= FT6206_TD_STAT_MASK; - if (nbTouch > FT6206_MAX_DETECTABLE_TOUCH) { - /* If invalid number of touch detected, set it to zero */ - nbTouch = 0; - } - /* Update ft6x06 driver internal global : current number of active touches */ - tc_handle.currActiveTouchNb = nbTouch; - - /* Reset current active touch index on which to work on */ - tc_handle.currActiveTouchIdx = 0; - return (nbTouch); -} - -#if 0 -/** - * @brief Get the touch detailed informations on touch number 'touchIdx' (0..1) - * This touch detailed information contains : - * - weight that was applied to this touch - * - sub-area of the touch in the touch panel - * - event of linked to the touch (press down, lift up, ...) - * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT6x06). - * @param touchIdx : Passed index of the touch (0..1) on which we want to get the - * detailed information. - * @param pWeight : Pointer to to get the weight information of 'touchIdx'. - * @param pArea : Pointer to to get the sub-area information of 'touchIdx'. - * @param pEvent : Pointer to to get the event information of 'touchIdx'. - - * @retval None. - */ -static void ft6x06_TS_GetTouchInfo(uint16_t DeviceAddr, - uint32_t touchIdx, - uint32_t * pWeight, - uint32_t * pArea, - uint32_t * pEvent) -{ - uint8_t regAddress = 0; - uint8_t dataxy[3]; - - if (touchIdx < ft6x06_handle.currActiveTouchNb) { - switch (touchIdx) { - case 0 : - regAddress = FT6206_P1_WEIGHT_REG; - break; - - case 1 : - regAddress = FT6206_P2_WEIGHT_REG; - break; - - default : - break; - - } /* end switch(touchIdx) */ - - /* Read weight, area and Event Id of touch index */ - TS_IO_ReadMultiple(DeviceAddr, regAddress, dataxy, sizeof(dataxy)); - - /* Return weight of touch index */ - *pWeight = (dataxy[0] & FT6206_TOUCH_WEIGHT_MASK) >> FT6206_TOUCH_WEIGHT_SHIFT; - /* Return area of touch index */ - *pArea = (dataxy[1] & FT6206_TOUCH_AREA_MASK) >> FT6206_TOUCH_AREA_SHIFT; - /* Return Event Id of touch index */ - *pEvent = (dataxy[2] & FT6206_TOUCH_EVT_FLAG_MASK) >> FT6206_TOUCH_EVT_FLAG_SHIFT; - - } /* of if(touchIdx < ft6x06_handle.currActiveTouchNb) */ -} -#endif - -/** - * @brief Get the touch screen X and Y positions values - * Manage multi touch thanks to touch Index global - * variable 'tc_handle.currActiveTouchIdx'. - * @param DeviceAddr: Device address on communication Bus. - * @param X: Pointer to X position value - * @param Y: Pointer to Y position value - * @retval None. - */ -static void ft6x06_TS_GetXY(uint16_t * X, uint16_t * Y, uint32_t * event) -{ - uint8_t regAddress = 0; - uint8_t dataxy[4]; - - if (tc_handle.currActiveTouchIdx < tc_handle.currActiveTouchNb) { - switch (tc_handle.currActiveTouchIdx) { - case 0 : - regAddress = FT6206_P1_XH_REG; - break; - case 1 : - regAddress = FT6206_P2_XH_REG; - break; - - default : - break; - } - - /* Read X and Y positions */ - TS_IO_ReadMultiple(TOUCH_FT6236_I2C_ADDRESS, regAddress, dataxy, sizeof(dataxy)); - /* Send back ready X position to caller */ - *X = ((dataxy[0] & FT6206_MSB_MASK) << 8) | (dataxy[1] & FT6206_LSB_MASK); - /* Send back ready Y position to caller */ - *Y = ((dataxy[2] & FT6206_MSB_MASK) << 8) | (dataxy[3] & FT6206_LSB_MASK); - - *event = (dataxy[0] & FT6206_TOUCH_EVT_FLAG_MASK) >> FT6206_TOUCH_EVT_FLAG_SHIFT; - /* - uint32_t weight; - uint32_t area; - ft6x06_TS_GetTouchInfo(DeviceAddr, ft6x06_handle.currActiveTouchIdx, &weight, &area, event); - */ - tc_handle.currActiveTouchIdx++; - } -} - -static void touch_cst836u_debug_info(void) -{ -#if defined(DEBUG) - TRACE("cst836u: fw ver 0x%02X %02X", TS_IO_Read(TOUCH_CST836U_I2C_ADDRESS, CST836U_FW_VERSION_H_REG), TS_IO_Read(TOUCH_CST836U_I2C_ADDRESS, CST836U_FW_VERSION_L_REG)); - TRACE("cst836u: module version 0x%02X", TS_IO_Read(TOUCH_CST836U_I2C_ADDRESS, CST836U_MODULE_VERSION_REG)); - TRACE("cst836u: project name 0x%02X", TS_IO_Read(TOUCH_CST836U_I2C_ADDRESS, CST836U_PROJECT_NAME_REG)); - TRACE("cst836u: chip type 0x%02X 0x%02X", TS_IO_Read(TOUCH_CST836U_I2C_ADDRESS, CST836U_CHIP_TYPE_H_REG), TS_IO_Read(TOUCH_CST836U_I2C_ADDRESS, CST836U_CHIP_TYPE_L_REG)); -#endif -} - -/** - * @brief Get the touch screen X and Y positions values - * Manage multi touch thanks to touch Index global - * variable 'tc_handle.currActiveTouchIdx'. - * @param DeviceAddr: Device address on communication Bus. - * @param X: Pointer to X position value - * @param Y: Pointer to Y position value - * @retval None. - */ -static void cst836u_TS_GetXY(uint16_t * X, uint16_t * Y, uint32_t * event) -{ - uint8_t regAddress = 0; - uint8_t dataxy[4]; - - if (tc_handle.currActiveTouchIdx < tc_handle.currActiveTouchNb) { - switch (tc_handle.currActiveTouchIdx) { - case 0 : - regAddress = CST836U_TOUCH1_XH_REG; - break; - case 1 : - regAddress = CST836U_TOUCH2_XH_REG; - break; - default : - break; - } - - /* Read X and Y positions */ - TS_IO_ReadMultiple(TOUCH_CST836U_I2C_ADDRESS, regAddress, dataxy, sizeof(dataxy)); - /* Send back ready X position to caller */ - *X = ((dataxy[0] & CST836U_MSB_MASK) << 8) | dataxy[1]; - /* Send back ready Y position to caller */ - *Y = ((dataxy[2] & CST836U_MSB_MASK) << 8) | dataxy[3]; - - *event = (dataxy[0] & CST836U_TOUCH_EVT_FLAG_MASK) >> CST836U_TOUCH_EVT_FLAG_SHIFT; - /* - uint32_t weight; - uint32_t area; - */ - tc_handle.currActiveTouchIdx++; - } -} - -/** - * @brief Return if there is touches detected or not. - * Try to detect new touches and forget the old ones (reset internal global - * variables). - * @param DeviceAddr: Device address on communication Bus. - * @retval : Number of active touches detected (can be 0, 1 or 2). - */ -static uint8_t cst836u_TS_DetectTouch() -{ - volatile uint8_t nbTouch = 0; - - /* Read register CST836U_TOUCH_NUM_REG to check number of touches detection */ - nbTouch = TS_IO_Read(TOUCH_CST836U_I2C_ADDRESS, CST836U_TOUCH_NUM_REG); - if (nbTouch > CST836U_MAX_DETECTABLE_TOUCH) { - /* If invalid number of touch detected, set it to zero */ - nbTouch = 0; - } - tc_handle.currActiveTouchNb = nbTouch; - - tc_handle.currActiveTouchIdx = 0; - return (nbTouch); -} - -void TouchReset() -{ - gpio_clear(TOUCH_RST_GPIO); - delay_ms(10); - gpio_set(TOUCH_RST_GPIO); - delay_ms(300); -} - - -static const TouchControllerDescriptor FT6236 = -{ - .read = ft6x06_TS_GetXY, - .detectTouch = ft6x06_TS_DetectTouch, - .printDebugInfo = touch_ft6236_debug_info, - .contactEvent = FT6206_TOUCH_EVT_FLAG_CONTACT -}; -static const TouchControllerDescriptor CST836U = -{ - .read = cst836u_TS_GetXY, - .detectTouch = cst836u_TS_DetectTouch, - .printDebugInfo = touch_cst836u_debug_info, - .contactEvent = CST836U_TOUCH_EVT_FLAG_CONTACT -}; - -void detectTouchController() -{ - if( stm32_i2c_is_dev_ready(TOUCH_I2C_BUS, TOUCH_CST836U_I2C_ADDRESS, 3, 5) == 0) - { - touchController = TC_CST836U; - tc = &CST836U; - boardTouchType = "CST836U"; - } else { - touchController = TC_FT6236; - tc = &FT6236; - boardTouchType = "FT6236"; - } -} - -void TouchInit(void) -{ - gpio_init(TOUCH_RST_GPIO, GPIO_OUT, GPIO_PIN_SPEED_LOW); - I2C_Init_Radio(); - TouchReset(); - detectTouchController(); - gpio_init_int(TOUCH_INT_GPIO, GPIO_IN_PU, GPIO_FALLING, _cst836u_exti_isr); - tc->printDebugInfo(); -} - -void handleTouch() -{ - unsigned short touchX; - unsigned short touchY; - uint32_t tEvent = 0; - tc->read(&touchX, &touchY, &tEvent); - -#if defined( LCD_DIRECTION ) && (LCD_DIRECTION == LCD_VERTICAL) - touchX = LCD_WIDTH - touchX; - touchY = LCD_HEIGHT - touchY; -#else - unsigned short tmp = (LCD_WIDTH - 1) - touchY; - touchY = touchX; - touchX = tmp; -#endif - if (tEvent == tc->contactEvent) { - int dx = touchX - internalTouchState.x; - int dy = touchY - internalTouchState.y; - - internalTouchState.x = touchX; - internalTouchState.y = touchY; - - if (internalTouchState.event == TE_NONE || internalTouchState.event == TE_UP || internalTouchState.event == TE_SLIDE_END) { - internalTouchState.startX = internalTouchState.x; - internalTouchState.startY = internalTouchState.y; - internalTouchState.event = TE_DOWN; - } - else if (internalTouchState.event == TE_DOWN) { - if (dx >= SLIDE_RANGE || dx <= -SLIDE_RANGE || dy >= SLIDE_RANGE || dy <= -SLIDE_RANGE) { - internalTouchState.event = TE_SLIDE; - internalTouchState.deltaX = (short) dx; - internalTouchState.deltaY = (short) dy; - } - else { - internalTouchState.event = TE_DOWN; - internalTouchState.deltaX = 0; - internalTouchState.deltaY = 0; - } - } - else if (internalTouchState.event == TE_SLIDE) { - internalTouchState.event = TE_SLIDE; //no change - internalTouchState.deltaX = (short) dx; - internalTouchState.deltaY = (short) dy; - } - - } -} - -bool touchPanelEventOccured() -{ - return touchEventOccured; -} - -TouchState touchPanelRead() -{ - if (!touchEventOccured) return internalTouchState; - - touchEventOccured = false; - - uint32_t now = timersGetMsTick(); - internalTouchState.tapCount = 0; - - if (tc->detectTouch()) { - handleTouch(); - if (internalTouchState.event == TE_DOWN && downTime == 0) { - downTime = now; - } - } else { - if (internalTouchState.event == TE_DOWN) { - internalTouchState.event = TE_UP; - if (now - downTime <= TAP_TIME) { - if (now - tapTime > TAP_TIME) { - tapCount = 1; - } else { - tapCount++; - } - internalTouchState.tapCount = tapCount; - tapTime = now; - } else { - internalTouchState.tapCount = 0; // not a tap - } - downTime = 0; - } else { - tapCount = 0; - internalTouchState.tapCount = 0; - internalTouchState.event = TE_SLIDE_END; - } - } - TouchState ret = internalTouchState; - internalTouchState.deltaX = 0; - internalTouchState.deltaY = 0; - if(internalTouchState.event == TE_UP || internalTouchState.event == TE_SLIDE_END) - internalTouchState.event = TE_NONE; - return ret; -} - -TouchState getInternalTouchState() -{ - return internalTouchState; -} diff --git a/radio/src/targets/nv14/touch_driver.h b/radio/src/targets/nv14/touch_driver.h deleted file mode 100644 index 8d3e4d8ce..000000000 --- a/radio/src/targets/nv14/touch_driver.h +++ /dev/null @@ -1,366 +0,0 @@ -/* - * Copyright (C) EdgeTX - * - * Based on code named - * opentx - https://github.com/opentx/opentx - * th9x - http://code.google.com/p/th9x - * er9x - http://code.google.com/p/er9x - * gruvin9x - http://code.google.com/p/gruvin9x - * - * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -/* - Copyright 2016 fishpepper gmail.com - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program. If not, see . - author: fishpepper gmail.com -*/ - -/** - ****************************************************************************** - * @file ft6x06.h - * @author MCD Application Team - * @version V1.0.0 - * @date 03-August-2015 - * @brief This file contains all the functions prototypes for the - * ft6x06.c IO expander driver. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2015 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ - -#pragma once - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include - -/* Set Multi-touch as non supported */ -#ifndef TS_MULTI_TOUCH_SUPPORTED - #define TS_MULTI_TOUCH_SUPPORTED 0 -#endif - -/* Set Auto-calibration as non supported */ -#ifndef TS_AUTO_CALIBRATION_SUPPORTED - #define TS_AUTO_CALIBRATION_SUPPORTED 0 -#endif - -/* Macros --------------------------------------------------------------------*/ - -/** @typedef ft6x06_handle_TypeDef - * ft6x06 Handle definition. - */ -typedef struct -{ - /* field holding the current number of simultaneous active touches */ - uint8_t currActiveTouchNb; - - /* field holding the touch index currently managed */ - uint8_t currActiveTouchIdx; - -} tc_handle_TypeDef; - - - -#define TOUCH_FT6236_MAX_TOUCH_POINTS 2 - -#define TOUCH_FT6236_REG_TH_GROUP 0x80 -#define TOUCH_FT6236_REG_PERIODACTIVE 0x88 -#define TOUCH_FT6236_REG_LIB_VER_H 0xa1 -#define TOUCH_FT6236_REG_LIB_VER_L 0xa2 -#define TOUCH_FT6236_REG_CIPHER 0xa3 -#define TOUCH_FT6236_REG_FIRMID 0xa6 -#define TOUCH_FT6236_REG_FOCALTECH_ID 0xa8 -#define TOUCH_FT6236_REG_RELEASE_CODE_ID 0xaf - -#define TOUCH_FT6236_EVENT_PRESS_DOWN 0 -#define TOUCH_FT6236_EVENT_LIFT_UP 1 -#define TOUCH_FT6236_EVENT_CONTACT 2 -#define TOUCH_FT6236_EVENT_NO_EVENT 3 - -#define TOUCH_FT6236_GESTURE_MOVE_FLAG 0x10 -#define TOUCH_FT6236_GESTURE_MOVE_UP 0x10 -#define TOUCH_FT6236_GESTURE_MOVE_RIGHT 0x14 -#define TOUCH_FT6236_GESTURE_MOVE_DOWN 0x18 -#define TOUCH_FT6236_GESTURE_MOVE_LEFT 0x1C -#define TOUCH_FT6236_GESTURE_ZOOM_IN 0x48 -#define TOUCH_FT6236_GESTURE_ZOOM_OUT 0x49 -#define TOUCH_FT6236_GESTURE_NONE 0x00 - -#define TOUCH_GESTURE_UP ((TOUCH_FT6236_GESTURE_MOVE_UP & 0x0F)+1) -#define TOUCH_GESTURE_DOWN ((TOUCH_FT6236_GESTURE_MOVE_DOWN & 0x0F)+1) -#define TOUCH_GESTURE_LEFT ((TOUCH_FT6236_GESTURE_MOVE_LEFT & 0x0F)+1) -#define TOUCH_GESTURE_RIGHT ((TOUCH_FT6236_GESTURE_MOVE_RIGHT & 0x0F)+1) -#define TOUCH_GESTURE_MOUSE_DOWN (0x80+TOUCH_FT6236_EVENT_PRESS_DOWN) -#define TOUCH_GESTURE_MOUSE_UP (0x80+TOUCH_FT6236_EVENT_LIFT_UP) -#define TOUCH_GESTURE_MOUSE_MOVE (0x80+TOUCH_FT6236_EVENT_CONTACT) -#define TOUCH_GESTURE_MOUSE_NONE (0x80+TOUCH_FT6236_EVENT_NO_EVENT) - - - - /* Maximum border values of the touchscreen pad */ -#define FT_6206_MAX_WIDTH ((uint16_t)800) /* Touchscreen pad max width */ -#define FT_6206_MAX_HEIGHT ((uint16_t)480) /* Touchscreen pad max height */ - - /* Possible values of driver functions return status */ -#define FT6206_STATUS_OK 0 -#define FT6206_STATUS_NOT_OK 1 - - /* Max detectable simultaneous touches */ -#define FT6206_MAX_DETECTABLE_TOUCH 2 - - /** - * @brief : Definitions for FT6206 I2C register addresses on 8 bit - **/ - - /* Current mode register of the FT6206 (R/W) */ -#define FT6206_DEV_MODE_REG 0x00 - - /* Possible values of FT6206_DEV_MODE_REG */ -#define FT6206_DEV_MODE_WORKING 0x00 -#define FT6206_DEV_MODE_FACTORY 0x04 - -#define FT6206_DEV_MODE_MASK 0x7 -#define FT6206_DEV_MODE_SHIFT 4 - - /* Gesture ID register */ -#define FT6206_GEST_ID_REG 0x01 - - /* Possible values of FT6206_GEST_ID_REG */ -#define FT6206_GEST_ID_NO_GESTURE 0x00 -#define FT6206_GEST_ID_MOVE_UP 0x10 -#define FT6206_GEST_ID_MOVE_RIGHT 0x14 -#define FT6206_GEST_ID_MOVE_DOWN 0x18 -#define FT6206_GEST_ID_MOVE_LEFT 0x1C -#define FT6206_GEST_ID_ZOOM_IN 0x48 -#define FT6206_GEST_ID_ZOOM_OUT 0x49 - - /* Touch Data Status register : gives number of active touch points (0..2) */ -#define FT6206_TD_STAT_REG 0x02 - - /* Values related to FT6206_TD_STAT_REG */ -#define FT6206_TD_STAT_MASK 0x0F -#define FT6206_TD_STAT_SHIFT 0x00 - - /* Values Pn_XH and Pn_YH related */ -#define FT6206_TOUCH_EVT_FLAG_PRESS_DOWN 0x00 -#define FT6206_TOUCH_EVT_FLAG_LIFT_UP 0x01 -#define FT6206_TOUCH_EVT_FLAG_CONTACT 0x02 -#define FT6206_TOUCH_EVT_FLAG_NO_EVENT 0x03 - -#define FT6206_TOUCH_EVT_FLAG_SHIFT 6 -#define FT6206_TOUCH_EVT_FLAG_MASK (3 << FT6206_TOUCH_EVT_FLAG_SHIFT) - -#define FT6206_MSB_MASK 0x0F -#define FT6206_MSB_SHIFT 0 - - /* Values Pn_XL and Pn_YL related */ -#define FT6206_LSB_MASK 0xFF -#define FT6206_LSB_SHIFT 0 - -#define FT6206_P1_XH_REG 0x03 -#define FT6206_P1_XL_REG 0x04 -#define FT6206_P1_YH_REG 0x05 -#define FT6206_P1_YL_REG 0x06 - - /* Touch Pressure register value (R) */ -#define FT6206_P1_WEIGHT_REG 0x07 - - /* Values Pn_WEIGHT related */ -#define FT6206_TOUCH_WEIGHT_MASK 0xFF -#define FT6206_TOUCH_WEIGHT_SHIFT 0 - - /* Touch area register */ -#define FT6206_P1_MISC_REG 0x08 - - /* Values related to FT6206_Pn_MISC_REG */ -#define FT6206_TOUCH_AREA_MASK (0x04 << 4) -#define FT6206_TOUCH_AREA_SHIFT 0x04 - -#define FT6206_P2_XH_REG 0x09 -#define FT6206_P2_XL_REG 0x0A -#define FT6206_P2_YH_REG 0x0B -#define FT6206_P2_YL_REG 0x0C -#define FT6206_P2_WEIGHT_REG 0x0D -#define FT6206_P2_MISC_REG 0x0E - - /* Threshold for touch detection */ -#define FT6206_TH_GROUP_REG 0x80 - - /* Values FT6206_TH_GROUP_REG : threshold related */ -#define FT6206_THRESHOLD_MASK 0xFF -#define FT6206_THRESHOLD_SHIFT 0 - - /* Filter function coefficients */ -#define FT6206_TH_DIFF_REG 0x85 - - /* Control register */ -#define FT6206_CTRL_REG 0x86 - - /* Values related to FT6206_CTRL_REG */ - - /* Will keep the Active mode when there is no touching */ -#define FT6206_CTRL_KEEP_ACTIVE_MODE 0x00 - - /* Switching from Active mode to Monitor mode automatically when there is no touching */ -#define FT6206_CTRL_KEEP_AUTO_SWITCH_MONITOR_MODE 0x01 - - /* The time period of switching from Active mode to Monitor mode when there is no touching */ -#define FT6206_TIMEENTERMONITOR_REG 0x87 - - /* Report rate in Active mode */ -#define FT6206_PERIODACTIVE_REG 0x88 - - /* Report rate in Monitor mode */ -#define FT6206_PERIODMONITOR_REG 0x89 - - /* The value of the minimum allowed angle while Rotating gesture mode */ -#define FT6206_RADIAN_VALUE_REG 0x91 - - /* Maximum offset while Moving Left and Moving Right gesture */ -#define FT6206_OFFSET_LEFT_RIGHT_REG 0x92 - - /* Maximum offset while Moving Up and Moving Down gesture */ -#define FT6206_OFFSET_UP_DOWN_REG 0x93 - - /* Minimum distance while Moving Left and Moving Right gesture */ -#define FT6206_DISTANCE_LEFT_RIGHT_REG 0x94 - - /* Minimum distance while Moving Up and Moving Down gesture */ -#define FT6206_DISTANCE_UP_DOWN_REG 0x95 - - /* Maximum distance while Zoom In and Zoom Out gesture */ -#define FT6206_DISTANCE_ZOOM_REG 0x96 - - /* High 8-bit of LIB Version info */ -#define FT6206_LIB_VER_H_REG 0xA1 - - /* Low 8-bit of LIB Version info */ -#define FT6206_LIB_VER_L_REG 0xA2 - - /* Chip Selecting */ -#define FT6206_CIPHER_REG 0xA3 - - /* Interrupt mode register (used when in interrupt mode) */ -#define FT6206_GMODE_REG 0xA4 - -#define FT6206_G_MODE_INTERRUPT_MASK 0x03 -#define FT6206_G_MODE_INTERRUPT_SHIFT 0x00 - - /* Possible values of FT6206_GMODE_REG */ -#define FT6206_G_MODE_INTERRUPT_POLLING 0x00 -#define FT6206_G_MODE_INTERRUPT_TRIGGER 0x01 - - /* Current power mode the FT6206 system is in (R) */ -#define FT6206_PWR_MODE_REG 0xA5 - - /* FT6206 firmware version */ -#define FT6206_FIRMID_REG 0xA6 - - /* FT6206 Chip identification register */ -#define FT6206_CHIP_ID_REG 0xA8 - - /* Possible values of FT6206_CHIP_ID_REG */ -#define FT6206_ID_VALUE 0x11 - - /* Release code version */ -#define FT6206_RELEASE_CODE_ID_REG 0xAF - - /* Current operating mode the FT6206 system is in (R) */ -#define FT6206_STATE_REG 0xBC - - -#define CST836U_WORK_MODE_REG 0x00 -#define CST836U_PROXIMITY_ID_REG 0x01 -#define CST836U_TOUCH_NUM_REG 0x02 -#define CST836U_TOUCH1_XH_REG 0x03 -#define CST836U_TOUCH1_XL_REG 0x04 -#define CST836U_TOUCH1_YH_REG 0x05 -#define CST836U_TOUCH1_YL_REG 0x06 - -#define CST836U_TOUCH2_XH_REG 0x09 -#define CST836U_TOUCH2_XL_REG 0x0A -#define CST836U_TOUCH2_YH_REG 0x0B -#define CST836U_TOUCH2_YL_REG 0x0C - -#define CST836U_FW_VERSION_L_REG 0xA6 -#define CST836U_FW_VERSION_H_REG 0xA7 -#define CST836U_MODULE_VERSION_REG 0xA8 -#define CST836U_PROJECT_NAME_REG 0xA9 -#define CST836U_CHIP_TYPE_L_REG 0xAA -#define CST836U_CHIP_TYPE_H_REG 0xAB -#define CST836U_CHECKSUM_L_REG 0xAC -#define CST836U_CHECKSUM_H_REG 0xAD - -#define CST836U_PROX_STATE_REG 0xB0 -#define CST836U_GES_STATE_REG 0xD0 -#define CST836U_GES_ID_REG_REG 0xD3 - -#define CST836U_MAX_DETECTABLE_TOUCH 2 - -#define CST836U_MSB_MASK 0x0F - -#define CST836U_TOUCH_EVT_FLAG_SHIFT 6 -#define CST836U_TOUCH_EVT_FLAG_MASK (3 << CST836U_TOUCH_EVT_FLAG_SHIFT) -#define CST836U_TOUCH_EVT_FLAG_CONTACT 0x02 - -#define LCD_VERTICAL ( 0x00 ) -#define LCD_HORIZONTAL ( 0x01 ) -#define LCD_DIRECTION ( LCD_VERTICAL ) - -#define LCD_WIDTH ( 320 ) -#define LCD_HEIGHT ( 480 ) - -extern void TouchInit( void ); -extern void TouchDriver( void ); - - -#ifdef __cplusplus -} -#endif diff --git a/radio/src/targets/nv14/usb_descriptor.h b/radio/src/targets/nv14/usb_descriptor.h deleted file mode 100644 index 07c39ae62..000000000 --- a/radio/src/targets/nv14/usb_descriptor.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (C) EdgeTX - * - * Based on code named - * opentx - https://github.com/opentx/opentx - * th9x - http://code.google.com/p/th9x - * er9x - http://code.google.com/p/er9x - * gruvin9x - http://code.google.com/p/gruvin9x - * - * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#pragma once - -#if (PCBREV == EL18) -#define USB_NAME "Flysky EL18" -#define USB_MANUFACTURER 'F', 'l', 'y', 's', 'k', 'y', ' ', ' ' /* 8 bytes */ -#define USB_PRODUCT 'E', 'L', '1', '8', ' ', ' ', ' ', ' ' /* 8 Bytes */ -#else -#define USB_NAME "Flysky NV14" -#define USB_MANUFACTURER 'F', 'l', 'y', 's', 'k', 'y', ' ', ' ' /* 8 bytes */ -#define USB_PRODUCT 'N', 'V', '1', '4', ' ', ' ', ' ', ' ' /* 8 Bytes */ -#endif diff --git a/radio/src/targets/pl18/CMakeLists.txt b/radio/src/targets/pl18/CMakeLists.txt index ad9cc6b72..df7625bde 100644 --- a/radio/src/targets/pl18/CMakeLists.txt +++ b/radio/src/targets/pl18/CMakeLists.txt @@ -57,7 +57,7 @@ if(PCBREV STREQUAL PL18U) set(DEFAULT_INTERNAL_MODULE FLYSKY_AFHDS3 CACHE STRING "Default internal module") elseif (PCBREV STREQUAL EL18) set(FLAVOUR el18) - add_definitions(-DRADIO_EL18 -DRADIO_NV14_FAMILY -DPCBNV14 -DUSE_HATS_AS_KEYS) + add_definitions(-DRADIO_EL18 -DRADIO_NV14_FAMILY -DUSE_HATS_AS_KEYS) set(DISK_CACHE ON) set(FLYSKY_GIMBAL ON) set(USE_VS1053B ON) @@ -68,7 +68,7 @@ elseif (PCBREV STREQUAL EL18) set(DEFAULT_INTERNAL_MODULE FLYSKY_AFHDS3 CACHE STRING "Default internal module") elseif(PCBREV STREQUAL NV14) set(FLAVOUR nv14) - add_definitions(-DRADIO_NV14 -DRADIO_NV14_FAMILY -DPCBNV14) + add_definitions(-DRADIO_NV14 -DRADIO_NV14_FAMILY) add_definitions(-DUSE_HATS_AS_KEYS -DAFHDS2_BAUDRATE=${PCB_RF_BAUD}) set(DISK_CACHE ON) set(FLYSKY_GIMBAL ON) diff --git a/radio/src/targets/simu/opentxsimulator.cpp b/radio/src/targets/simu/opentxsimulator.cpp index ccf5189ee..1ea98fa46 100644 --- a/radio/src/targets/simu/opentxsimulator.cpp +++ b/radio/src/targets/simu/opentxsimulator.cpp @@ -935,8 +935,6 @@ class OpenTxSimulatorFactory: public SimulatorFactory return Board::BOARD_TARANIS_X9LITES; #elif defined(PCBX9LITE) return Board::BOARD_TARANIS_X9LITE; -#elif defined(PCBNV14) - return Board::BOARD_FLYSKY_NV14; #elif defined(PCBPL18) return Board::BOARD_FLYSKY_PL18; #else diff --git a/radio/src/telemetry/telemetry.cpp b/radio/src/telemetry/telemetry.cpp index 76662089e..3c30afcef 100644 --- a/radio/src/telemetry/telemetry.cpp +++ b/radio/src/telemetry/telemetry.cpp @@ -129,7 +129,7 @@ rxStatStruct *getRxStatLabels() { rxStat.unit = STR_RXSTAT_UNIT_PERCENT; break; -#if defined(PCBNV14) && defined(AFHDS2) +#if defined(RADIO_NV14_FAMILY) && defined(AFHDS2) case MODULE_TYPE_FLYSKY_AFHDS2A: extern uint32_t NV14internalModuleFwVersion; diff --git a/radio/src/telemetry/telemetry_sensors.cpp b/radio/src/telemetry/telemetry_sensors.cpp index 16237c6fa..db3a3eb62 100644 --- a/radio/src/telemetry/telemetry_sensors.cpp +++ b/radio/src/telemetry/telemetry_sensors.cpp @@ -33,7 +33,7 @@ #include "ghost.h" #endif -#if defined(PCBNV14) +#if defined(RADIO_NV14_FAMILY) #include "telemetry/flysky_nv14.h" #endif @@ -553,7 +553,7 @@ int setTelemetryValue(TelemetryProtocol protocol, uint16_t id, uint8_t subId, break; #endif -#if defined(AFHDS2) && defined(PCBNV14) +#if defined(AFHDS2) && defined(RADIO_NV14_FAMILY) case PROTOCOL_TELEMETRY_FLYSKY_NV14: flySkyNv14SetDefault(index, id, subId, instance); break; diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 9b22cc3f0..12bf4d68e 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -985,7 +985,7 @@ const char STR_AUTH_FAILURE[] = TR_AUTH_FAILURE; const char STR_PROTOCOL[] = TR_PROTOCOL; const char STR_RACING_MODE[] = TR_RACING_MODE; -#if defined(PCBNV14) +#if defined(RADIO_NV14_FAMILY) ISTR(RFPOWER_AFHDS2); #endif diff --git a/radio/src/translations/bl_translations.h b/radio/src/translations/bl_translations.h index ac45c25a6..9a8a59fc1 100644 --- a/radio/src/translations/bl_translations.h +++ b/radio/src/translations/bl_translations.h @@ -37,9 +37,6 @@ #define BL_SELECT_KEY "[TR4 Dn]" #define BL_EXIT_KEY "[TR4 Up]" #endif -#elif defined(PCBNV14) - #define BL_SELECT_KEY "[R TRIM]" - #define BL_EXIT_KEY "[L TRIM]" #elif defined(RADIO_ST16) #define BL_SELECT_KEY "[ENT]" #define BL_EXIT_KEY "[EXIT]" diff --git a/radio/src/translations/cn.h b/radio/src/translations/cn.h index ae6abc66a..ee6f503b9 100644 --- a/radio/src/translations/cn.h +++ b/radio/src/translations/cn.h @@ -156,7 +156,7 @@ #define TR_SURFACE_NAMES0 "ST" #define TR_SURFACE_NAMES1 "TH" -#if defined(PCBNV14) +#if defined(PCBPL18) #define TR_RFPOWER_AFHDS2 "Default","High" #endif @@ -233,7 +233,7 @@ #endif #endif -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_ENTER "[NEXT]" #else #define TR_ENTER "[ENTER]" @@ -345,7 +345,7 @@ #define TR_SLOWUP "上行慢动作" #define TR_MIXES "混控设置" #define TR_CV "曲线" -#if defined(PCBNV14) +#if defined(PCBPL18) #define TR_GV "GV" #else #define TR_GV TR("G", "GV") diff --git a/radio/src/translations/cz.h b/radio/src/translations/cz.h index 94c1e2110..52a2797eb 100644 --- a/radio/src/translations/cz.h +++ b/radio/src/translations/cz.h @@ -166,7 +166,7 @@ #define TR_SURFACE_NAMES0 "Smě" #define TR_SURFACE_NAMES1 "Pln" -#if defined(PCBNV14) +#if defined(PCBPL18) #define TR_RFPOWER_AFHDS2 "Defaultní","Vysoký" #endif @@ -245,7 +245,7 @@ #endif #endif -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_ENTER "[DALŠÍ]" #else #define TR_ENTER "[ENTER]" @@ -358,7 +358,7 @@ #define TR_SLOWUP TR3("Zpomalení(+)", "Zpomal(\176)", "Zpomalení(\176)") #define TR_MIXES "MIXER" #define TR_CV "K" -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_GV "GP" #else #define TR_GV TR("G", "GP") diff --git a/radio/src/translations/da.h b/radio/src/translations/da.h index 73cdd9945..46f058d71 100644 --- a/radio/src/translations/da.h +++ b/radio/src/translations/da.h @@ -158,7 +158,7 @@ #define TR_SURFACE_NAMES0 "Sid" #define TR_SURFACE_NAMES1 "Gas" -#if defined(PCBNV14) +#if defined(PCBPL18) #define TR_RFPOWER_AFHDS2 "Standard","Høj" #endif @@ -235,7 +235,7 @@ #endif #endif -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_ENTER "[NÆSTE]" #else #define TR_ENTER_LONG "[ENTER LONG]" @@ -348,7 +348,7 @@ #define TR_SLOWUP TR("Langsom op", "Langsom op") #define TR_MIXES "MIX" #define TR_CV "KU" -#if defined(PCBNV14) +#if defined(PCBPL18) #define TR_GV "GV" #else #define TR_GV TR("G", "GV") diff --git a/radio/src/translations/de.h b/radio/src/translations/de.h index acdf50a87..4437b70e5 100644 --- a/radio/src/translations/de.h +++ b/radio/src/translations/de.h @@ -157,7 +157,7 @@ #define TR_SURFACE_NAMES0 "Str" #define TR_SURFACE_NAMES1 "Gas" -#if defined(PCBNV14) +#if defined(PCBPL18) #define TR_RFPOWER_AFHDS2 "Default","High" #endif @@ -236,7 +236,7 @@ #endif #endif -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_ENTER "[NEXT]" #else #define TR_ENTER "[ENTER]" @@ -350,7 +350,7 @@ #define TR_SLOWUP "Langs.Up" #define TR_MIXES "MISCHER" #define TR_CV "KV" -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_GV "GV" #else #define TR_GV TR("G", "GV") diff --git a/radio/src/translations/en.h b/radio/src/translations/en.h index 3dc5937d6..06a936313 100644 --- a/radio/src/translations/en.h +++ b/radio/src/translations/en.h @@ -159,7 +159,7 @@ #define TR_SURFACE_NAMES0 "ST" #define TR_SURFACE_NAMES1 "TH" -#if defined(PCBNV14) +#if defined(PCBPL18) #define TR_RFPOWER_AFHDS2 "Default","High" #endif @@ -236,7 +236,7 @@ #endif #endif -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_ENTER "[NEXT]" #else #define TR_ENTER_LONG "[ENTER LONG]" @@ -349,7 +349,7 @@ #define TR_SLOWUP "Slow up" #define TR_MIXES "MIXES" #define TR_CV "CV" -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_GV "GV" #else #define TR_GV TR("G", "GV") diff --git a/radio/src/translations/es.h b/radio/src/translations/es.h index 30d6ba17b..10eb865c2 100644 --- a/radio/src/translations/es.h +++ b/radio/src/translations/es.h @@ -155,7 +155,7 @@ #define TR_SURFACE_NAMES0 "ST" #define TR_SURFACE_NAMES1 "TH" -#if defined(PCBNV14) +#if defined(PCBPL18) #define TR_RFPOWER_AFHDS2 "Default","High" #endif @@ -232,7 +232,7 @@ #endif #endif -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_ENTER "[NEXT]" #else #define TR_ENTER_LONG "[ENTER LONG]" @@ -346,7 +346,7 @@ #define TR_SLOWUP "Subir lento" #define TR_MIXES "MIXES" #define TR_CV "CV" -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_GV "GV" #else #define TR_GV TR("G", "GV") diff --git a/radio/src/translations/fi.h b/radio/src/translations/fi.h index 1bf24c0df..43ceab3e4 100644 --- a/radio/src/translations/fi.h +++ b/radio/src/translations/fi.h @@ -164,7 +164,7 @@ #define TR_SURFACE_NAMES0 "ST" #define TR_SURFACE_NAMES1 "TH" -#if defined(PCBNV14) +#if defined(PCBPL18) #define TR_RFPOWER_AFHDS2 "Default","High" #endif @@ -241,7 +241,7 @@ #endif #endif -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_ENTER "[NEXT]" #else #define TR_ENTER_LONG "[ENTER LONG]" @@ -359,7 +359,7 @@ #define TR_SLOWUP "Slow Up" #define TR_MIXES "MIXER" #define TR_CV "CV" -#if defined(PCBNV14) +#if defined(PCBPL18) #define TR_GV "GV" #else #define TR_GV TR("G", "GV") diff --git a/radio/src/translations/fr.h b/radio/src/translations/fr.h index caae27b9b..78ae15d31 100644 --- a/radio/src/translations/fr.h +++ b/radio/src/translations/fr.h @@ -162,7 +162,7 @@ #define TR_SURFACE_NAMES0 "Dir" #define TR_SURFACE_NAMES1 "Gaz" -#if defined(PCBNV14) +#if defined(PCBPL18) #define TR_RFPOWER_AFHDS2 "Défaut","Haut" #endif @@ -241,7 +241,7 @@ #endif #endif -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_ENTER "[SUIVANT]" #else #define TR_ENTER_LONG "[ENTER LONG]" @@ -354,7 +354,7 @@ #define TR_SLOWUP "Ralenti haut" #define TR_MIXES "MIXEUR" #define TR_CV "CV" -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_GV "VG" #else #define TR_GV TR("G", "VG") diff --git a/radio/src/translations/he.h b/radio/src/translations/he.h index 9191be367..01ae116e8 100644 --- a/radio/src/translations/he.h +++ b/radio/src/translations/he.h @@ -163,7 +163,7 @@ #define TR_SURFACE_NAMES0 "ST" #define TR_SURFACE_NAMES1 "TH" -#if defined(PCBNV14) +#if defined(PCBPL18) #define TR_RFPOWER_AFHDS2 "Default","High" #endif @@ -240,7 +240,7 @@ #endif #endif -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_ENTER "[NEXT]" #else #define TR_ENTER_LONG "[ENTER LONG]" @@ -353,7 +353,7 @@ #define TR_SLOWUP "האט עלייה" #define TR_MIXES "מיקסים" #define TR_CV "CV" -#if defined(PCBNV14) +#if defined(PCBPL18) #define TR_GV "GV" #else #define TR_GV TR("G", "GV") diff --git a/radio/src/translations/it.h b/radio/src/translations/it.h index 86f2940ed..e545d110e 100644 --- a/radio/src/translations/it.h +++ b/radio/src/translations/it.h @@ -159,7 +159,7 @@ #define TR_SURFACE_NAMES0 "Dir" #define TR_SURFACE_NAMES1 "Mot" -#if defined(PCBNV14) +#if defined(PCBPL18) #define TR_RFPOWER_AFHDS2 "Default","Alto" #endif @@ -236,7 +236,7 @@ #endif #endif -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_ENTER "[NEXT]" #else #define TR_ENTER_LONG "[ENTER LONG]" @@ -349,7 +349,7 @@ #define TR_SLOWUP "Rall.Su" #define TR_MIXES "MIXES" #define TR_CV "CV" -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_GV "GV" #else #define TR_GV TR("G", "GV") diff --git a/radio/src/translations/jp.h b/radio/src/translations/jp.h index 7ceca09cc..4ac9aa360 100644 --- a/radio/src/translations/jp.h +++ b/radio/src/translations/jp.h @@ -158,7 +158,7 @@ #define TR_SURFACE_NAMES0 "ST" #define TR_SURFACE_NAMES1 "TH" -#if defined(PCBNV14) +#if defined(PCBPL18) #define TR_RFPOWER_AFHDS2 "初期値","高出力" #endif @@ -235,7 +235,7 @@ #endif #endif -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_ENTER "[NEXT]" #else #define TR_ENTER_LONG "[ENTER LONG]" @@ -348,7 +348,7 @@ #define TR_SLOWUP "スローアップ" #define TR_MIXES "ミキサー" #define TR_CV "CV" -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_GV "GV" #else #define TR_GV TR("G", "GV") diff --git a/radio/src/translations/ko.h b/radio/src/translations/ko.h index 16deb8dc2..ef997a568 100644 --- a/radio/src/translations/ko.h +++ b/radio/src/translations/ko.h @@ -153,7 +153,7 @@ #define TR_SURFACE_NAMES0 "스티어링" #define TR_SURFACE_NAMES1 "스로틀" -#if defined(PCBNV14) +#if defined(PCBPL18) #define TR_RFPOWER_AFHDS2 "기본","높음" #endif @@ -235,7 +235,7 @@ #endif #endif -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_ENTER "[NEXT]" #else #define TR_ENTER "[ENTER]" @@ -354,11 +354,11 @@ #define TR_MIXES "믹스" #define TR_CV "CV" -#if defined(PCBNV14) || defined(PCBPL18) -#define TR_GV "GV" -#else -#define TR_GV TR("G", "GV") -#endif + #if defined(PCBPL18) + #define TR_GV "GV" + #else + #define TR_GV TR("G", "GV") + #endif #define TR_RANGE "범위" #define TR_CENTER "중앙" diff --git a/radio/src/translations/nl.h b/radio/src/translations/nl.h index 29a4bb3e4..ef2f1fd77 100644 --- a/radio/src/translations/nl.h +++ b/radio/src/translations/nl.h @@ -156,7 +156,7 @@ #define TR_SURFACE_NAMES0 "ST" #define TR_SURFACE_NAMES1 "TH" -#if defined(PCBNV14) +#if defined(PCBPL18) #define TR_RFPOWER_AFHDS2 "Default","High" #endif @@ -233,7 +233,7 @@ #endif #endif -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_ENTER "[NEXT]" #else #define TR_ENTER_LONG "[ENTER LONG]" @@ -346,7 +346,7 @@ #define TR_SLOWUP "Langz.Up" #define TR_MIXES "MIXER" #define TR_CV "CV" -#if defined(PCBNV14) || defined(PCBPL18) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_GV "GV" #else #define TR_GV TR("G", "GV") diff --git a/radio/src/translations/pl.h b/radio/src/translations/pl.h index 1090879a4..d760f8df7 100644 --- a/radio/src/translations/pl.h +++ b/radio/src/translations/pl.h @@ -155,7 +155,7 @@ #define TR_SURFACE_NAMES0 "SK" #define TR_SURFACE_NAMES1 "Gaz" -#if defined(PCBNV14) +#if defined(PCBPL18) #define TR_RFPOWER_AFHDS2 "Default","High" #endif @@ -232,7 +232,7 @@ #endif #endif -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_ENTER "[NEXT]" #else #define TR_ENTER_LONG "[ENTER LONG]" @@ -345,7 +345,7 @@ #define TR_SLOWUP "Spowoln.(+)" #define TR_MIXES "MIKSERY" #define TR_CV "Kr" -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_GV "ZG" #else #define TR_GV TR("G", "ZG") diff --git a/radio/src/translations/pt.h b/radio/src/translations/pt.h index d22bc7b06..12347f2ac 100644 --- a/radio/src/translations/pt.h +++ b/radio/src/translations/pt.h @@ -162,7 +162,7 @@ #define TR_SURFACE_NAMES0 "Dir" #define TR_SURFACE_NAMES1 "Mot" -#if defined(PCBNV14) +#if defined(PCBPL18) #define TR_RFPOWER_AFHDS2 "Default","High" #endif @@ -239,7 +239,7 @@ #endif #endif -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_ENTER "[NEXT]" #else #define TR_ENTER_LONG "[ENTER LONG]" @@ -352,7 +352,7 @@ #define TR_SLOWUP "Lento up" #define TR_MIXES "MIXES" #define TR_CV "CV" -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_GV "GV" #else #define TR_GV TR("G", "GV") diff --git a/radio/src/translations/ru.h b/radio/src/translations/ru.h index adfeab6d0..65c6fd10d 100644 --- a/radio/src/translations/ru.h +++ b/radio/src/translations/ru.h @@ -161,7 +161,7 @@ #define TR_SURFACE_NAMES0 "ST" #define TR_SURFACE_NAMES1 "TH" -#if defined(PCBNV14) +#if defined(PCBPL18) #define TR_RFPOWER_AFHDS2 "По умолч","Высокий" #endif @@ -238,7 +238,7 @@ #endif #endif -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_ENTER "[ДАЛЕЕ]" #else #define TR_ENTER_LONG "[ВВОД ДОЛГО]" @@ -351,7 +351,7 @@ #define TR_SLOWUP "Замед вверх" #define TR_MIXES "МИКСЫ" #define TR_CV "CV" -#if defined(PCBNV14) +#if defined(PCBPL18) #define TR_GV "GV" #else #define TR_GV TR("G", "GV") diff --git a/radio/src/translations/se.h b/radio/src/translations/se.h index b90105b7f..13e600424 100644 --- a/radio/src/translations/se.h +++ b/radio/src/translations/se.h @@ -164,7 +164,7 @@ #define TR_SURFACE_NAMES0 "Rod" #define TR_SURFACE_NAMES1 "Gas" -#if defined(PCBNV14) +#if defined(PCBPL18) #define TR_RFPOWER_AFHDS2 "Default","Hög" #endif @@ -247,7 +247,7 @@ #if defined(PCBFRSKY) #define TR_ENTER_LONG "[LÅNG ENTER]" #define TR_ENTER "[ENTER]" -#elif defined(PCBNV14) || defined(PCBPL18) +#elif defined(PCBPL18) #define TR_ENTER "[NÄSTA]" #else #define TR_ENTER "[MENY]" @@ -360,7 +360,7 @@ #define TR_MIXES "MIXAR" #define TR_CV "KU" -#if defined(PCBNV14) +#if defined(PCBPL18) #define TR_GV "GV" #else #define TR_GV TR("G","GV") diff --git a/radio/src/translations/tw.h b/radio/src/translations/tw.h index 12176bf9a..c9cadad09 100644 --- a/radio/src/translations/tw.h +++ b/radio/src/translations/tw.h @@ -161,7 +161,7 @@ #define TR_SURFACE_NAMES0 "ST" #define TR_SURFACE_NAMES1 "TH" -#if defined(PCBNV14) +#if defined(PCBPL18) #define TR_RFPOWER_AFHDS2 "Default","High" #endif @@ -238,7 +238,7 @@ #endif #endif -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_ENTER "[NEXT]" #else #define TR_ENTER_LONG "[ENTER LONG]" @@ -350,7 +350,7 @@ #define TR_SLOWUP "上行慢動作" #define TR_MIXES "混控設置" #define TR_CV "曲線" -#if defined(PCBNV14) +#if defined(PCBPL18) #define TR_GV "GV" #else #define TR_GV TR("G", "GV") diff --git a/radio/src/translations/ua.h b/radio/src/translations/ua.h index ea14983f3..7be0393f6 100644 --- a/radio/src/translations/ua.h +++ b/radio/src/translations/ua.h @@ -161,7 +161,7 @@ #define TR_SURFACE_NAMES0 "ST" #define TR_SURFACE_NAMES1 "TH" -#if defined(PCBNV14) +#if defined(PCBPL18) #define TR_RFPOWER_AFHDS2 "За Замовч.","Високий" #endif @@ -238,7 +238,7 @@ #endif #endif -#if defined(PCBNV14) || defined(PCBPL18) +#if defined(PCBPL18) #define TR_ENTER "[NEXT]" #else #define TR_ENTER_LONG "[ENTER LONG]" @@ -351,7 +351,7 @@ #define TR_SLOWUP "Повільно" #define TR_MIXES "MIXES" #define TR_CV "CV" -#if defined(PCBNV14) +#if defined(PCBPL18) #define TR_GV "GV" #else #define TR_GV TR("G", "GV") diff --git a/tools/build-common.sh b/tools/build-common.sh index d5616dd21..550e675a9 100644 --- a/tools/build-common.sh +++ b/tools/build-common.sh @@ -137,12 +137,6 @@ get_target_build_options() { v16) BUILD_OPTIONS+="-DPCB=X10 -DPCBREV=V16" ;; - nv14-old) - BUILD_OPTIONS+="-DPCB=NV14" - ;; - el18-old) - BUILD_OPTIONS+="-DPCB=NV14 -DPCBREV=EL18" - ;; nv14) BUILD_OPTIONS+="-DPCB=PL18 -DPCBREV=NV14" ;;