Skip to content

Commit b116151

Browse files
committed
feat: add 6th button support and fix its initialization
1 parent 62de753 commit b116151

7 files changed

Lines changed: 124 additions & 10 deletions

File tree

html/locales/de.json

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@
6161
"button2": "Play/Pause-Taste (Btn2)",
6262
"button3": "Drehimpulsgeber-Taste (Btn3)",
6363
"button4": "Btn4-Taste",
64-
"button5": "Btn5-Taste"
64+
"button5": "Btn5-Taste",
65+
"button6": "Btn6-Taste"
6566
},
6667
"multibuttons": {
6768
"title": "Multi-Taster Zuordnungen",
@@ -70,16 +71,22 @@
7071
"03": "0+3 (Next + Drehimpulsgeber)",
7172
"04": "0+4 (Next + Btn4)",
7273
"05": "0+5 (Next + Btn5)",
74+
"06": "0+6 (Next + Btn6)",
7375
"12": "1+2 (Prev + Play/Pause)",
7476
"13": "1+3 (Prev + Drehimpulsgeber)",
7577
"14": "1+4 (Prev + Btn4)",
7678
"15": "1+5 (Prev + Btn5)",
79+
"16": "1+6 (Prev + Btn6)",
7780
"23": "2+3 (Play/Pause + Drehimpulsgeber)",
7881
"24": "2+4 (Play/Pause + Btn4)",
7982
"25": "2+5 (Play/Pause + Btn5)",
83+
"26": "2+6 (Play/Pause + Btn6)",
8084
"34": "3+4 (Drehimpulsgeber + Btn4)",
8185
"35": "3+5 (Drehimpulsgeber + Btn5)",
82-
"45": "4+5 (Btn4 + Btn5)"
86+
"36": "3+6 (Drehimpulsgeber + Btn6)",
87+
"45": "4+5 (Btn4 + Btn5)",
88+
"46": "4+6 (Btn4 + Btn6)",
89+
"56": "5+6 (Btn5 + Btn6)"
8390
},
8491
"rotary": {
8592
"title": "Drehimpulsgeber",

html/locales/en.json

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,26 +61,34 @@
6161
"button2": "Play/Pause-Button (Btn2)",
6262
"button3": "Encoder-Button (Btn3)",
6363
"button4": "Btn4-Button",
64-
"button5": "Btn5-Button"
65-
},
66-
"multibuttons": {
67-
"title": "Multi-button assignments",
64+
"button5": "Btn5-Button",
65+
"button6": "Btn6-Button"
66+
},
67+
"multibuttons": {
68+
"title": "Multi-Button Assignments",
6869
"01": "0+1 (Next + Prev)",
6970
"02": "0+2 (Next + Play/Pause)",
7071
"03": "0+3 (Next + Encoder)",
7172
"04": "0+4 (Next + Btn4)",
7273
"05": "0+5 (Next + Btn5)",
74+
"06": "0+6 (Next + Btn6)",
7375
"12": "1+2 (Prev + Play/Pause)",
7476
"13": "1+3 (Prev + Encoder)",
7577
"14": "1+4 (Prev + Btn4)",
7678
"15": "1+5 (Prev + Btn5)",
79+
"16": "1+6 (Prev + Btn6)",
7780
"23": "2+3 (Play/Pause + Encoder)",
7881
"24": "2+4 (Play/Pause + Btn4)",
7982
"25": "2+5 (Play/Pause + Btn5)",
83+
"26": "2+6 (Play/Pause + Btn6)",
8084
"34": "3+4 (Encoder + Btn4)",
8185
"35": "3+5 (Encoder + Btn5)",
82-
"45": "4+5 (Btn4 + Btn5)"
83-
},
86+
"36": "3+6 (Encoder + Btn6)",
87+
"45": "4+5 (Btn4 + Btn5)",
88+
"46": "4+6 (Btn4 + Btn6)",
89+
"56": "5+6 (Btn5 + Btn6)"
90+
},
91+
8492
"rotary": {
8593
"title": "Rotary encoder",
8694
"reverse": "Reverse direction of rotation"

html/management.html

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1329,6 +1329,12 @@ <h5 class="modal-title" data-i18n="tools.nvs.erase.title"></h5>
13291329
class="form-control form-select"></select><br>
13301330
<label for="cmdselect_long_5" data-i18n="settingsex.buttons.long"></label>:&nbsp;<select
13311331
id="cmdselect_long_5" class="form-control form-select"></select><br><br>
1332+
<legend class="fs-5" data-i18n="settingsex.buttons.button6"></legend>
1333+
<label for="cmdselect_short_6"
1334+
data-i18n="settingsex.buttons.short"></label>:&nbsp;<select id="cmdselect_short_6"
1335+
class="form-control form-select"></select><br>
1336+
<label for="cmdselect_long_6" data-i18n="settingsex.buttons.long"></label>:&nbsp;<select
1337+
id="cmdselect_long_6" class="form-control form-select"></select><br><br>
13321338
</fieldset>
13331339
<fieldset>
13341340
<legend class="w-auto" data-i18n="settingsex.multibuttons.title"></legend><br>
@@ -1347,6 +1353,9 @@ <h5 class="modal-title" data-i18n="tools.nvs.erase.title"></h5>
13471353
<label for="cmdselect_multi_05"
13481354
data-i18n="settingsex.multibuttons.05"></label>:&nbsp;<select
13491355
id="cmdselect_multi_05" class="form-control form-select"></select><br>
1356+
<label for="cmdselect_multi_06"
1357+
data-i18n="settingsex.multibuttons.06"></label>:&nbsp;<select
1358+
id="cmdselect_multi_06" class="form-control form-select"></select><br>
13501359
<label for="cmdselect_multi_12"
13511360
data-i18n="settingsex.multibuttons.12"></label>:&nbsp;<select
13521361
id="cmdselect_multi_12" class="form-control form-select"></select><br>
@@ -1359,6 +1368,9 @@ <h5 class="modal-title" data-i18n="tools.nvs.erase.title"></h5>
13591368
<label for="cmdselect_multi_15"
13601369
data-i18n="settingsex.multibuttons.15"></label>:&nbsp;<select
13611370
id="cmdselect_multi_15" class="form-control form-select"></select><br>
1371+
<label for="cmdselect_multi_16"
1372+
data-i18n="settingsex.multibuttons.16"></label>:&nbsp;<select
1373+
id="cmdselect_multi_16" class="form-control form-select"></select><br>
13621374
<label for="cmdselect_multi_23"
13631375
data-i18n="settingsex.multibuttons.23"></label>:&nbsp;<select
13641376
id="cmdselect_multi_23" class="form-control form-select"></select><br>
@@ -1368,15 +1380,27 @@ <h5 class="modal-title" data-i18n="tools.nvs.erase.title"></h5>
13681380
<label for="cmdselect_multi_25"
13691381
data-i18n="settingsex.multibuttons.25"></label>:&nbsp;<select
13701382
id="cmdselect_multi_25" class="form-control form-select"></select><br>
1383+
<label for="cmdselect_multi_26"
1384+
data-i18n="settingsex.multibuttons.26"></label>:&nbsp;<select
1385+
id="cmdselect_multi_26" class="form-control form-select"></select><br>
13711386
<label for="cmdselect_multi_34"
13721387
data-i18n="settingsex.multibuttons.34"></label>:&nbsp;<select
13731388
id="cmdselect_multi_34" class="form-control form-select"></select><br>
13741389
<label for="cmdselect_multi_35"
13751390
data-i18n="settingsex.multibuttons.35"></label>:&nbsp;<select
13761391
id="cmdselect_multi_35" class="form-control form-select"></select><br>
1392+
<label for="cmdselect_multi_36"
1393+
data-i18n="settingsex.multibuttons.36"></label>:&nbsp;<select
1394+
id="cmdselect_multi_36" class="form-control form-select"></select><br>
13771395
<label for="cmdselect_multi_45"
13781396
data-i18n="settingsex.multibuttons.45"></label>:&nbsp;<select
13791397
id="cmdselect_multi_45" class="form-control form-select"></select><br>
1398+
<label for="cmdselect_multi_46"
1399+
data-i18n="settingsex.multibuttons.46"></label>:&nbsp;<select
1400+
id="cmdselect_multi_46" class="form-control form-select"></select><br>
1401+
<label for="cmdselect_multi_56"
1402+
data-i18n="settingsex.multibuttons.56"></label>:&nbsp;<select
1403+
id="cmdselect_multi_56" class="form-control form-select"></select><br>
13801404
</fieldset>
13811405
</div>
13821406
</span>
@@ -2587,27 +2611,35 @@ <h5 class="modal-title" data-i18n="tools.nvs.erase.title"></h5>
25872611
document.getElementById("cmdselect_short_3").value = buttonSettings.short3;
25882612
document.getElementById("cmdselect_short_4").value = buttonSettings.short4;
25892613
document.getElementById("cmdselect_short_5").value = buttonSettings.short5;
2614+
document.getElementById("cmdselect_short_6").value = buttonSettings.short6;
25902615
document.getElementById("cmdselect_long_0").value = buttonSettings.long0;
25912616
document.getElementById("cmdselect_long_1").value = buttonSettings.long1;
25922617
document.getElementById("cmdselect_long_2").value = buttonSettings.long2;
25932618
document.getElementById("cmdselect_long_3").value = buttonSettings.long3;
25942619
document.getElementById("cmdselect_long_4").value = buttonSettings.long4;
25952620
document.getElementById("cmdselect_long_5").value = buttonSettings.long5;
2621+
document.getElementById("cmdselect_long_6").value = buttonSettings.long6;
25962622
document.getElementById("cmdselect_multi_01").value = buttonSettings.multi01;
25972623
document.getElementById("cmdselect_multi_02").value = buttonSettings.multi02;
25982624
document.getElementById("cmdselect_multi_03").value = buttonSettings.multi03;
25992625
document.getElementById("cmdselect_multi_04").value = buttonSettings.multi04;
26002626
document.getElementById("cmdselect_multi_05").value = buttonSettings.multi05;
2627+
document.getElementById("cmdselect_multi_06").value = buttonSettings.multi06;
26012628
document.getElementById("cmdselect_multi_12").value = buttonSettings.multi12;
26022629
document.getElementById("cmdselect_multi_13").value = buttonSettings.multi13;
26032630
document.getElementById("cmdselect_multi_14").value = buttonSettings.multi14;
26042631
document.getElementById("cmdselect_multi_15").value = buttonSettings.multi15;
2632+
document.getElementById("cmdselect_multi_16").value = buttonSettings.multi16;
26052633
document.getElementById("cmdselect_multi_23").value = buttonSettings.multi23;
26062634
document.getElementById("cmdselect_multi_24").value = buttonSettings.multi24;
26072635
document.getElementById("cmdselect_multi_25").value = buttonSettings.multi25;
2636+
document.getElementById("cmdselect_multi_26").value = buttonSettings.multi26;
26082637
document.getElementById("cmdselect_multi_34").value = buttonSettings.multi34;
26092638
document.getElementById("cmdselect_multi_35").value = buttonSettings.multi35;
2639+
document.getElementById("cmdselect_multi_36").value = buttonSettings.multi36;
26102640
document.getElementById("cmdselect_multi_45").value = buttonSettings.multi45;
2641+
document.getElementById("cmdselect_multi_46").value = buttonSettings.multi46;
2642+
document.getElementById("cmdselect_multi_56").value = buttonSettings.multi56;
26112643
}
26122644
// battery
26132645
let batSettings = settings.battery;
@@ -2959,27 +2991,35 @@ <h5 class="modal-title" data-i18n="tools.nvs.erase.title"></h5>
29592991
short3: Number(document.getElementById("cmdselect_short_3").value),
29602992
short4: Number(document.getElementById("cmdselect_short_4").value),
29612993
short5: Number(document.getElementById("cmdselect_short_5").value),
2994+
short6: Number(document.getElementById("cmdselect_short_6").value),
29622995
long0: Number(document.getElementById("cmdselect_long_0").value),
29632996
long1: Number(document.getElementById("cmdselect_long_1").value),
29642997
long2: Number(document.getElementById("cmdselect_long_2").value),
29652998
long3: Number(document.getElementById("cmdselect_long_3").value),
29662999
long4: Number(document.getElementById("cmdselect_long_4").value),
29673000
long5: Number(document.getElementById("cmdselect_long_5").value),
3001+
long6: Number(document.getElementById("cmdselect_long_6").value),
29683002
multi01: Number(document.getElementById("cmdselect_multi_01").value),
29693003
multi02: Number(document.getElementById("cmdselect_multi_02").value),
29703004
multi03: Number(document.getElementById("cmdselect_multi_03").value),
29713005
multi04: Number(document.getElementById("cmdselect_multi_04").value),
29723006
multi05: Number(document.getElementById("cmdselect_multi_05").value),
3007+
multi06: Number(document.getElementById("cmdselect_multi_06").value),
29733008
multi12: Number(document.getElementById("cmdselect_multi_12").value),
29743009
multi13: Number(document.getElementById("cmdselect_multi_13").value),
29753010
multi14: Number(document.getElementById("cmdselect_multi_14").value),
29763011
multi15: Number(document.getElementById("cmdselect_multi_15").value),
3012+
multi16: Number(document.getElementById("cmdselect_multi_16").value),
29773013
multi23: Number(document.getElementById("cmdselect_multi_23").value),
29783014
multi24: Number(document.getElementById("cmdselect_multi_24").value),
29793015
multi25: Number(document.getElementById("cmdselect_multi_25").value),
3016+
multi26: Number(document.getElementById("cmdselect_multi_26").value),
29803017
multi34: Number(document.getElementById("cmdselect_multi_34").value),
29813018
multi35: Number(document.getElementById("cmdselect_multi_35").value),
3019+
multi36: Number(document.getElementById("cmdselect_multi_36").value),
29823020
multi45: Number(document.getElementById("cmdselect_multi_45").value),
3021+
multi46: Number(document.getElementById("cmdselect_multi_46").value),
3022+
multi56: Number(document.getElementById("cmdselect_multi_56").value),
29833023
},
29843024
"rotary": {
29853025
reverse: $('#rotaryReverse').prop('checked')

src/Button.cpp

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,14 @@ bool gButtonInitComplete = false;
4545
#elif (BUTTON_5 >= 100 && BUTTON_5 <= 115)
4646
#define EXPANDER_5_ENABLE
4747
#endif
48+
#if (BUTTON_6 >= 0 && BUTTON_6 <= MAX_GPIO)
49+
#define BUTTON_6_ENABLE
50+
#elif (BUTTON_6 >= 100 && BUTTON_6 <= 115)
51+
#define EXPANDER_6_ENABLE
52+
#endif
4853

4954
// Allocate gButtons in PSRAM if available
50-
EXT_RAM_BSS_ATTR t_button gButtons[7]; // next + prev + pplay + rotEnc + button4 + button5 + dummy-button
55+
EXT_RAM_BSS_ATTR t_button gButtons[8]; // next + prev + pplay + rotEnc + button4 + button5 + button6 + dummy-button
5156
uint8_t gShutdownButton = 99; // Helper used for Neopixel: stores button-number of shutdown-button
5257
uint16_t gLongPressTime = 0;
5358

@@ -85,6 +90,8 @@ void Button_Init() {
8590
gShutdownButton = 4;
8691
#elif (defined(BUTTON_5_ENABLE) || defined(EXPANDER_5_ENABLE)) && (BUTTON_5_LONG == CMD_SLEEPMODE)
8792
gShutdownButton = 5;
93+
#elif (defined(BUTTON_6_ENABLE) || defined(EXPANDER_6_ENABLE)) && (BUTTON_6_LONG == CMD_SLEEPMODE)
94+
gShutdownButton = 6;
8895
#endif
8996
#endif
9097

@@ -131,6 +138,13 @@ void Button_Init() {
131138
pinMode(BUTTON_5, INPUT_PULLUP);
132139
}
133140
#endif
141+
#ifdef BUTTON_6_ENABLE
142+
if (BUTTON_6_ACTIVE_STATE) {
143+
pinMode(BUTTON_6, INPUT);
144+
} else {
145+
pinMode(BUTTON_6, INPUT_PULLUP);
146+
}
147+
#endif
134148

135149
// Create 1000Hz-HW-Timer (currently only used for buttons)
136150
Button_TimerSemaphore = xSemaphoreCreateBinary();
@@ -166,6 +180,9 @@ static void Button_ReadAllStates(void) {
166180
#if defined(BUTTON_5_ENABLE) || defined(EXPANDER_5_ENABLE)
167181
gButtons[5].currentState = Port_Read(BUTTON_5) ^ BUTTON_5_ACTIVE_STATE;
168182
#endif
183+
#if defined(BUTTON_6_ENABLE) || defined(EXPANDER_6_ENABLE)
184+
gButtons[6].currentState = Port_Read(BUTTON_6) ^ BUTTON_6_ACTIVE_STATE;
185+
#endif
169186
}
170187

171188
// Update press/release state for a single button with debouncing
@@ -228,16 +245,22 @@ static const struct {
228245
{0, 3, "btnMulti03", BUTTON_MULTI_03},
229246
{0, 4, "btnMulti04", BUTTON_MULTI_04},
230247
{0, 5, "btnMulti05", BUTTON_MULTI_05},
248+
{0, 6, "btnMulti06", BUTTON_MULTI_06},
231249
{1, 2, "btnMulti12", BUTTON_MULTI_12},
232250
{1, 3, "btnMulti13", BUTTON_MULTI_13},
233251
{1, 4, "btnMulti14", BUTTON_MULTI_14},
234252
{1, 5, "btnMulti15", BUTTON_MULTI_15},
253+
{1, 6, "btnMulti16", BUTTON_MULTI_16},
235254
{2, 3, "btnMulti23", BUTTON_MULTI_23},
236255
{2, 4, "btnMulti24", BUTTON_MULTI_24},
237256
{2, 5, "btnMulti25", BUTTON_MULTI_25},
257+
{2, 6, "btnMulti26", BUTTON_MULTI_26},
238258
{3, 4, "btnMulti34", BUTTON_MULTI_34},
239259
{3, 5, "btnMulti35", BUTTON_MULTI_35},
260+
{3, 6, "btnMulti36", BUTTON_MULTI_36},
240261
{4, 5, "btnMulti45", BUTTON_MULTI_45},
262+
{4, 6, "btnMulti46", BUTTON_MULTI_46},
263+
{5, 6, "btnMulti56", BUTTON_MULTI_56},
241264
};
242265

243266
// Check for multi-button combinations and execute corresponding action
@@ -266,6 +289,7 @@ static const struct {
266289
{"btnShort3", "btnLong3", BUTTON_3_SHORT, BUTTON_3_LONG},
267290
{"btnShort4", "btnLong4", BUTTON_4_SHORT, BUTTON_4_LONG},
268291
{"btnShort5", "btnLong5", BUTTON_5_SHORT, BUTTON_5_LONG},
292+
{"btnShort6", "btnLong6", BUTTON_6_SHORT, BUTTON_6_LONG},
269293
};
270294

271295
// Handle a single button's short/long press action
@@ -318,7 +342,7 @@ void Button_DoButtonActions(void) {
318342
}
319343

320344
unsigned long currentTimestamp = millis();
321-
for (uint8_t i = 0; i < 7; i++) {
345+
for (uint8_t i = 0; i < 8; i++) {
322346
if (gButtons[i].isPressed) {
323347
Button_HandleSinglePress(i, currentTimestamp);
324348
}

0 commit comments

Comments
 (0)