Skip to content

Commit 6d793f9

Browse files
authored
feat(firmware): add a special function to trigger key lock (#7565)
1 parent a0c1aa7 commit 6d793f9

73 files changed

Lines changed: 826 additions & 605 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎companion/src/firmwares/customfunctiondata.cpp‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ QString CustomFunctionData::funcToString(const AssignFunc func, const ModelData
122122
return tr("Racing Mode");
123123
else if (func == FuncDisableTouch)
124124
return tr("Disable Touch");
125+
else if (func == FuncDisableKeys)
126+
return tr("Disable Keys");
125127
else if (func == FuncSetScreen)
126128
return tr("Set Main Screen");
127129
else if (func == FuncDisableAudioAmp)
@@ -491,6 +493,7 @@ bool CustomFunctionData::isParamAvailable() const
491493
FuncBindExternalModule,
492494
FuncRacingMode,
493495
FuncDisableTouch,
496+
FuncDisableKeys,
494497
FuncDisableAudioAmp
495498
};
496499

‎companion/src/firmwares/customfunctiondata.h‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ enum AssignFunc {
6868
FuncBindExternalModule,
6969
FuncRacingMode,
7070
FuncDisableTouch,
71+
FuncDisableKeys,
7172
FuncSetScreen,
7273
FuncDisableAudioAmp,
7374
FuncRGBLed,

‎companion/src/firmwares/edgetx/yaml_customfunctiondata.cpp‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ static const YamlLookupTable customFnLut = {
6464
{ FuncRGBLed, "RGB_LED" },
6565
{ FuncLCDtoVideo, "LCD_TO_VIDEO" },
6666
{ FuncPushCustomSwitch1, "PUSH_CUST_SWITCH" },
67+
{ FuncDisableKeys, "DISABLE_KEYS" },
6768
};
6869

6970
static const YamlLookupTable trainerLut = {

‎radio/src/cfn_sort.cpp‎

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
// This file is auto-generated via cfn_sorter.sh. Do not edit.
2323

2424
#include "dataconstants.h"
25+
#include "hal_keys_lock.h"
2526

2627
Functions cfn_sorted[] = {
2728
#if defined(TRANSLATIONS_CN)
@@ -62,6 +63,9 @@ Functions cfn_sorted[] = {
6263
/* 暂停背景音乐 */ FUNC_BACKGND_MUSIC_PAUSE,
6364
/* 振动 */ FUNC_HAPTIC,
6465
/* LUA脚本 */ FUNC_PLAY_SCRIPT,
66+
#if defined(KEYS_LOCK_KEY1) && defined(KEYS_LOCK_KEY2)
67+
/* No Keys */ FUNC_DISABLE_KEYS,
68+
#endif
6569
#if defined(FUNCTION_SWITCHES)
6670
/* Push CS */ FUNC_PUSH_CUST_SWITCH,
6771
#endif
@@ -89,6 +93,9 @@ Functions cfn_sorted[] = {
8993
/* ModuleBind */ FUNC_BIND,
9094
/* Nastav */ FUNC_ADJUST_GVAR,
9195
/* Nastavit Failsafe */ FUNC_SET_FAILSAFE,
96+
#if defined(KEYS_LOCK_KEY1) && defined(KEYS_LOCK_KEY2)
97+
/* No Keys */ FUNC_DISABLE_KEYS,
98+
#endif
9299
#if !OLED_SCREEN
93100
/* Podsvětlení */ FUNC_BACKLIGHT,
94101
#endif
@@ -129,6 +136,9 @@ Functions cfn_sorted[] = {
129136
/* Lua skript */ FUNC_PLAY_SCRIPT,
130137
/* Lydstyrke */ FUNC_VOLUME,
131138
/* Modul tilslut */ FUNC_BIND,
139+
#if defined(KEYS_LOCK_KEY1) && defined(KEYS_LOCK_KEY2)
140+
/* No Keys */ FUNC_DISABLE_KEYS,
141+
#endif
132142
/* Nulstil */ FUNC_RESET,
133143
/* Overskriv */ FUNC_OVERRIDE_CHANNEL,
134144
/* RGB lys */ FUNC_RGB_LED,
@@ -179,6 +189,9 @@ Functions cfn_sorted[] = {
179189
#endif
180190
/* Lua-Skript */ FUNC_PLAY_SCRIPT,
181191
/* ModuleBind */ FUNC_BIND,
192+
#if defined(KEYS_LOCK_KEY1) && defined(KEYS_LOCK_KEY2)
193+
/* No Keys */ FUNC_DISABLE_KEYS,
194+
#endif
182195
/* RacingMode */ FUNC_RACING_MODE,
183196
/* RangeCheck */ FUNC_RANGECHECK,
184197
/* RGB LED */ FUNC_RGB_LED,
@@ -219,6 +232,9 @@ Functions cfn_sorted[] = {
219232
#if !OLED_SCREEN
220233
/* Luz Fondo */ FUNC_BACKLIGHT,
221234
#endif
235+
#if defined(KEYS_LOCK_KEY1) && defined(KEYS_LOCK_KEY2)
236+
/* No Keys */ FUNC_DISABLE_KEYS,
237+
#endif
222238
#if defined(COLORLCD)
223239
/* No Touch */ FUNC_DISABLE_TOUCH,
224240
#endif
@@ -257,6 +273,9 @@ Functions cfn_sorted[] = {
257273
#endif
258274
/* Lua Script */ FUNC_PLAY_SCRIPT,
259275
/* ModuleBind */ FUNC_BIND,
276+
#if defined(KEYS_LOCK_KEY1) && defined(KEYS_LOCK_KEY2)
277+
/* No Keys */ FUNC_DISABLE_KEYS,
278+
#endif
260279
#if defined(COLORLCD)
261280
/* No Touch */ FUNC_DISABLE_TOUCH,
262281
#endif
@@ -301,6 +320,9 @@ Functions cfn_sorted[] = {
301320
/* Luminosité */ FUNC_BACKLIGHT,
302321
#endif
303322
/* Musique */ FUNC_BACKGND_MUSIC,
323+
#if defined(KEYS_LOCK_KEY1) && defined(KEYS_LOCK_KEY2)
324+
/* No Keys */ FUNC_DISABLE_KEYS,
325+
#endif
304326
#if defined(COLORLCD)
305327
/* Non Tactile */ FUNC_DISABLE_TOUCH,
306328
#endif
@@ -336,6 +358,9 @@ Functions cfn_sorted[] = {
336358
#endif
337359
/* Lua Script */ FUNC_PLAY_SCRIPT,
338360
/* ModuleBind */ FUNC_BIND,
361+
#if defined(KEYS_LOCK_KEY1) && defined(KEYS_LOCK_KEY2)
362+
/* No Keys */ FUNC_DISABLE_KEYS,
363+
#endif
339364
/* Override */ FUNC_OVERRIDE_CHANNEL,
340365
/* Play Track */ FUNC_PLAY_TRACK,
341366
/* Play Value */ FUNC_PLAY_VALUE,
@@ -390,6 +415,9 @@ Functions cfn_sorted[] = {
390415
/* Modo Racing */ FUNC_RACING_MODE,
391416
/* Musica Sf */ FUNC_BACKGND_MUSIC,
392417
/* Musica Sf || */ FUNC_BACKGND_MUSIC_PAUSE,
418+
#if defined(KEYS_LOCK_KEY1) && defined(KEYS_LOCK_KEY2)
419+
/* No Keys */ FUNC_DISABLE_KEYS,
420+
#endif
393421
#if defined(FUNCTION_SWITCHES)
394422
/* Premi CS */ FUNC_PUSH_CUST_SWITCH,
395423
#endif
@@ -421,6 +449,9 @@ Functions cfn_sorted[] = {
421449
/* LCD to Video */ FUNC_LCD_TO_VIDEO,
422450
#endif
423451
/* LUAスクリプト */ FUNC_PLAY_SCRIPT,
452+
#if defined(KEYS_LOCK_KEY1) && defined(KEYS_LOCK_KEY2)
453+
/* No Keys */ FUNC_DISABLE_KEYS,
454+
#endif
424455
#if defined(FUNCTION_SWITCHES)
425456
/* Push CS */ FUNC_PUSH_CUST_SWITCH,
426457
#endif
@@ -459,6 +490,9 @@ Functions cfn_sorted[] = {
459490
/* LCD -> 비디오 출력 */ FUNC_LCD_TO_VIDEO,
460491
#endif
461492
/* Lua 스크립트 실행 */ FUNC_PLAY_SCRIPT,
493+
#if defined(KEYS_LOCK_KEY1) && defined(KEYS_LOCK_KEY2)
494+
/* No Keys */ FUNC_DISABLE_KEYS,
495+
#endif
462496
/* RGB LED */ FUNC_RGB_LED,
463497
/* SD 로그 저장 */ FUNC_LOGS,
464498
/* 값 재생 */ FUNC_PLAY_VALUE,
@@ -515,6 +549,9 @@ Functions cfn_sorted[] = {
515549
#endif
516550
/* Lua Script */ FUNC_PLAY_SCRIPT,
517551
/* ModuleBind */ FUNC_BIND,
552+
#if defined(KEYS_LOCK_KEY1) && defined(KEYS_LOCK_KEY2)
553+
/* No Keys */ FUNC_DISABLE_KEYS,
554+
#endif
518555
#if defined(COLORLCD)
519556
/* No Touch */ FUNC_DISABLE_TOUCH,
520557
#endif
@@ -557,6 +594,9 @@ Functions cfn_sorted[] = {
557594
/* ModuleBind */ FUNC_BIND,
558595
/* Muz. tła */ FUNC_BACKGND_MUSIC,
559596
/* Muz. tła || */ FUNC_BACKGND_MUSIC_PAUSE,
597+
#if defined(KEYS_LOCK_KEY1) && defined(KEYS_LOCK_KEY2)
598+
/* No Keys */ FUNC_DISABLE_KEYS,
599+
#endif
560600
#if defined(COLORLCD)
561601
/* No Touch */ FUNC_DISABLE_TOUCH,
562602
#endif
@@ -605,6 +645,9 @@ Functions cfn_sorted[] = {
605645
/* LuzFundo */ FUNC_BACKLIGHT,
606646
#endif
607647
/* ModCorrida */ FUNC_RACING_MODE,
648+
#if defined(KEYS_LOCK_KEY1) && defined(KEYS_LOCK_KEY2)
649+
/* No Keys */ FUNC_DISABLE_KEYS,
650+
#endif
608651
#if defined(COLORLCD)
609652
/* No Touch */ FUNC_DISABLE_TOUCH,
610653
#endif
@@ -632,6 +675,9 @@ Functions cfn_sorted[] = {
632675
/* LCD в видео */ FUNC_LCD_TO_VIDEO,
633676
#endif
634677
/* Lua скрипт */ FUNC_PLAY_SCRIPT,
678+
#if defined(KEYS_LOCK_KEY1) && defined(KEYS_LOCK_KEY2)
679+
/* No Keys */ FUNC_DISABLE_KEYS,
680+
#endif
635681
/* Play Value */ FUNC_PLAY_VALUE,
636682
/* RGB подсветка */ FUNC_RGB_LED,
637683
/* SD логи */ FUNC_LOGS,
@@ -690,6 +736,9 @@ Functions cfn_sorted[] = {
690736
/* Lås */ FUNC_OVERRIDE_CHANNEL,
691737
/* Lärare */ FUNC_TRAINER,
692738
/* Musik */ FUNC_BACKGND_MUSIC,
739+
#if defined(KEYS_LOCK_KEY1) && defined(KEYS_LOCK_KEY2)
740+
/* No Keys */ FUNC_DISABLE_KEYS,
741+
#endif
693742
/* Parkoppla modul */ FUNC_BIND,
694743
/* Pausa musik */ FUNC_BACKGND_MUSIC_PAUSE,
695744
/* Range check */ FUNC_RANGECHECK,
@@ -714,6 +763,9 @@ Functions cfn_sorted[] = {
714763
/* Återställ */ FUNC_RESET,
715764
#elif defined(TRANSLATIONS_TW)
716765
/* Lua腳本 */ FUNC_PLAY_SCRIPT,
766+
#if defined(KEYS_LOCK_KEY1) && defined(KEYS_LOCK_KEY2)
767+
/* No Keys */ FUNC_DISABLE_KEYS,
768+
#endif
717769
#if defined(FUNCTION_SWITCHES)
718770
/* Push CS */ FUNC_PUSH_CUST_SWITCH,
719771
#endif
@@ -793,6 +845,9 @@ Functions cfn_sorted[] = {
793845
/* LCD to Video */ FUNC_LCD_TO_VIDEO,
794846
#endif
795847
/* Lua Скрипт */ FUNC_PLAY_SCRIPT,
848+
#if defined(KEYS_LOCK_KEY1) && defined(KEYS_LOCK_KEY2)
849+
/* No Keys */ FUNC_DISABLE_KEYS,
850+
#endif
796851
#if defined(FUNCTION_SWITCHES)
797852
/* Push CS */ FUNC_PUSH_CUST_SWITCH,
798853
#endif
@@ -816,6 +871,9 @@ Functions cfn_sorted[] = {
816871
#endif
817872
/* Lua Script */ FUNC_PLAY_SCRIPT,
818873
/* ModuleBind */ FUNC_BIND,
874+
#if defined(KEYS_LOCK_KEY1) && defined(KEYS_LOCK_KEY2)
875+
/* No Keys */ FUNC_DISABLE_KEYS,
876+
#endif
819877
#if defined(COLORLCD)
820878
/* No Touch */ FUNC_DISABLE_TOUCH,
821879
#endif

‎radio/src/dataconstants.h‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -739,6 +739,7 @@ enum Functions {
739739
#if defined(FUNCTION_SWITCHES) || defined(CFN_ONLY)
740740
FUNC_PUSH_CUST_SWITCH,
741741
#endif
742+
FUNC_DISABLE_KEYS,
742743
FUNC_TEST, // MUST remain last
743744
#if defined(DEBUG)
744745
FUNC_MAX SKIP

‎radio/src/edgetx.h‎

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,12 +151,19 @@ void memswap(void * a, void * b, uint8_t size);
151151

152152
struct CustomFunctionsContext {
153153
MASK_FUNC_TYPE activeFunctions;
154+
MASK_FUNC_TYPE activeUIFunctions;
154155
MASK_CFN_TYPE activeSwitches;
156+
MASK_CFN_TYPE activeUISwitches;
155157
tmr10ms_t lastFunctionTime[MAX_SPECIAL_FUNCTIONS];
156158

157159
inline bool isFunctionActive(uint8_t func)
158160
{
159-
return activeFunctions & ((MASK_FUNC_TYPE)1 << func);
161+
return (activeFunctions | activeUIFunctions) & ((MASK_FUNC_TYPE)1 << func);
162+
}
163+
164+
inline bool isFunctionSwitchActive(uint8_t functionIdx)
165+
{
166+
return (activeSwitches | activeUISwitches) & ((MASK_CFN_TYPE)1 << functionIdx);
160167
}
161168

162169
void reset()
@@ -421,7 +428,6 @@ inline bool isMixActive(uint8_t mix)
421428
enum FunctionsActive {
422429
FUNCTION_TRAINER_STICK1,
423430
FUNCTION_TRAINER_CHANNELS = FUNCTION_TRAINER_STICK1 + MAX_STICKS,
424-
FUNCTION_INSTANT_TRIM,
425431
FUNCTION_VARIO,
426432
FUNCTION_LOGS,
427433
FUNCTION_BACKGND_MUSIC,
@@ -431,6 +437,7 @@ enum FunctionsActive {
431437
FUNCTION_DISABLE_TOUCH,
432438
FUNCTION_DISABLE_AUDIO_AMP,
433439
FUNCTION_VOLUME,
440+
FUNCTION_DISABLE_KEYS,
434441
};
435442

436443
#define VARIO_FREQUENCY_ZERO 700/*Hz*/
@@ -445,6 +452,7 @@ inline bool isFunctionActive(uint8_t func)
445452
return globalFunctionsContext.isFunctionActive(func) || modelFunctionsContext.isFunctionActive(func);
446453
}
447454
void evalFunctions(CustomFunctionData * functions, CustomFunctionsContext & functionsContext);
455+
void evalUIFunctions(CustomFunctionData * functions, CustomFunctionsContext & functionsContext);
448456
inline void customFunctionsReset()
449457
{
450458
globalFunctionsContext.reset();

0 commit comments

Comments
 (0)