From a06e813ca1ae96432ef069970fd9919863a0cf22 Mon Sep 17 00:00:00 2001 From: liquidraver <504870+liquidraver@users.noreply.github.com> Date: Thu, 23 Jul 2026 14:46:58 +0200 Subject: [PATCH] swap 2tap with 5tap --- zephcore/ARCHITECTURE.md | 5 +++-- zephcore/boards/example_board/board.overlay | 4 ++-- zephcore/boards/nrf52840/gat562_30s/gat562_30s.dts | 4 ++-- .../nrf52840/heltec_t114/heltec_t114_nrf52840.dts | 4 ++-- zephcore/boards/nrf52840/muziworks_r1neo/README.md | 4 ++-- .../muziworks_r1neo/muziworks_r1neo_nrf52840.dts | 4 ++-- .../nrf52840/rak_wismesh_tag/rak_wismesh_tag.dts | 4 ++-- .../boards/nrf52840/t1000_e/t1000_e_nrf52840.dts | 4 ++-- .../boards/nrf52840/thinknode_m3/thinknode_m3.dts | 4 ++-- .../boards/nrf52840/thinknode_m6/thinknode_m6.dts | 4 ++-- .../wio_tracker_l1/wio_tracker_l1_nrf52840.dts | 4 ++-- zephcore/helpers/ui-button/ui_task.c | 8 ++++---- zephcore/helpers/ui-joystick/joystick_defs.h | 4 ++-- zephcore/helpers/ui-joystick/joystick_ui_task.cpp | 12 +++++++++++- 14 files changed, 40 insertions(+), 29 deletions(-) diff --git a/zephcore/ARCHITECTURE.md b/zephcore/ARCHITECTURE.md index 4f03848..8f53d8b 100644 --- a/zephcore/ARCHITECTURE.md +++ b/zephcore/ARCHITECTURE.md @@ -760,9 +760,10 @@ Shutdown. Single button; tap-count → key-code mapping comes from the board's devicetree `tap-codes` (up to 5). Typical mapping: - 1 tap → Page next -- 2 taps → Flood advert +- 2 taps → LED heartbeat toggle - 3 taps → Buzzer toggle -- 4 taps → GPS toggle (immediate, no delay) +- 4 taps → GPS toggle +- 5 taps → Flood advert (immediate, no delay) ### 8.4 Buzzer diff --git a/zephcore/boards/example_board/board.overlay b/zephcore/boards/example_board/board.overlay index f6f9183..82cef01 100644 --- a/zephcore/boards/example_board/board.overlay +++ b/zephcore/boards/example_board/board.overlay @@ -678,10 +678,10 @@ * * /* Multi-tap action mapping (standard ZephCore assignment): * * 1 tap (400ms wait) → KEY_1 = page next - * * 2 taps (400ms wait) → KEY_B = flood advert + * * 2 taps (400ms wait) → KEY_B = LED heartbeat toggle * * 3 taps (400ms wait) → KEY_D = buzzer mute toggle * * 4 taps (400ms wait) → KEY_C = GPS on/off - * * 5 taps (immediate) → KEY_E = LED heartbeat toggle */ + * * 5 taps (immediate) → KEY_E = flood advert */ * user_btn_multitap { * compatible = "zephcore,input-multi-tap"; * input-codes = ; diff --git a/zephcore/boards/nrf52840/gat562_30s/gat562_30s.dts b/zephcore/boards/nrf52840/gat562_30s/gat562_30s.dts index 0d1d5af..dd6c506 100644 --- a/zephcore/boards/nrf52840/gat562_30s/gat562_30s.dts +++ b/zephcore/boards/nrf52840/gat562_30s/gat562_30s.dts @@ -70,8 +70,8 @@ * back button is a single GPIO whose tap-count/hold is decoded by the * filters below — same scheme as the Wio Tracker L1: * 1 tap -> KEY_1 (back/cancel) long hold -> KEY_POWER - * 2 taps -> KEY_B (advert) 3 -> KEY_D (buzzer) - * 4 taps -> KEY_C (GPS) 5 -> KEY_E (LED) + * 2 taps -> KEY_B (LED) 3 -> KEY_D (buzzer) + * 4 taps -> KEY_C (GPS) 5 -> KEY_E (advert) * (NFC pins P0.09/P0.10 are freed for GPIO by nfct-pins-as-gpios above.) */ buttons: buttons { diff --git a/zephcore/boards/nrf52840/heltec_t114/heltec_t114_nrf52840.dts b/zephcore/boards/nrf52840/heltec_t114/heltec_t114_nrf52840.dts index b11fe2e..7a2c4b9 100644 --- a/zephcore/boards/nrf52840/heltec_t114/heltec_t114_nrf52840.dts +++ b/zephcore/boards/nrf52840/heltec_t114/heltec_t114_nrf52840.dts @@ -56,10 +56,10 @@ /* Input filter: user button multi-tap detection * 1 tap (400ms wait) → KEY_1 = page next on TFT - * 2 taps (400ms wait) → KEY_B = flood advert + * 2 taps (400ms wait) → KEY_B = LED heartbeat toggle * 3 taps (400ms wait) → KEY_D = buzzer mute toggle * 4 taps (400ms wait) → KEY_C = GPS on/off - * 5 taps (immediate) → KEY_E = LED heartbeat toggle */ + * 5 taps (immediate) → KEY_E = flood advert */ user_btn_multitap { compatible = "zephcore,input-multi-tap"; /* No 'input' phandle — listen to ALL devices. diff --git a/zephcore/boards/nrf52840/muziworks_r1neo/README.md b/zephcore/boards/nrf52840/muziworks_r1neo/README.md index 82935e8..ba1f303 100644 --- a/zephcore/boards/nrf52840/muziworks_r1neo/README.md +++ b/zephcore/boards/nrf52840/muziworks_r1neo/README.md @@ -79,8 +79,8 @@ No QSPI external flash — contacts and channels live in internal flash. - **Long-press = real power-off.** Hold the button ≥1 s: the buzzer plays the shutdown melody, the radio and GNSS are parked, then the latch drops and the board is genuinely off (not a ~1 µA System OFF doze). Press again to boot. -- **Multi-tap actions:** 2 taps = flood advert, 3 = buzzer mute toggle, - 4 = GPS on/off, 5 = LED heartbeat toggle. A single tap maps to "page next", +- **Multi-tap actions:** 2 taps = LED heartbeat toggle, 3 = buzzer mute toggle, + 4 = GPS on/off, 5 = flood advert. A single tap maps to "page next", which is a no-op here since there is no display. - **NFC pins** (P0.09/P0.10) are freed via `nfct-pins-as-gpios`; they are NC on this board. Harmless, and consistent with the other RAK-based boards. diff --git a/zephcore/boards/nrf52840/muziworks_r1neo/muziworks_r1neo_nrf52840.dts b/zephcore/boards/nrf52840/muziworks_r1neo/muziworks_r1neo_nrf52840.dts index 868bd0d..fd464bc 100644 --- a/zephcore/boards/nrf52840/muziworks_r1neo/muziworks_r1neo_nrf52840.dts +++ b/zephcore/boards/nrf52840/muziworks_r1neo/muziworks_r1neo_nrf52840.dts @@ -83,10 +83,10 @@ /* Input filter: multi-tap on the short-press output. * 1 tap (400ms wait) → KEY_1 = page next (no-op, board has no display) - * 2 taps (400ms wait) → KEY_B = flood advert + * 2 taps (400ms wait) → KEY_B = LED heartbeat toggle * 3 taps (400ms wait) → KEY_D = buzzer mute toggle * 4 taps (400ms wait) → KEY_C = GPS on/off - * 5 taps (immediate) → KEY_E = LED heartbeat toggle */ + * 5 taps (immediate) → KEY_E = flood advert */ user_btn_multitap { compatible = "zephcore,input-multi-tap"; /* No 'input' phandle — listen to ALL devices. diff --git a/zephcore/boards/nrf52840/rak_wismesh_tag/rak_wismesh_tag.dts b/zephcore/boards/nrf52840/rak_wismesh_tag/rak_wismesh_tag.dts index 26e3d9b..546ddd0 100644 --- a/zephcore/boards/nrf52840/rak_wismesh_tag/rak_wismesh_tag.dts +++ b/zephcore/boards/nrf52840/rak_wismesh_tag/rak_wismesh_tag.dts @@ -93,10 +93,10 @@ /* Input filter: multi-tap * 1 tap → KEY_1 = (reserved / next page if display added) - * 2 taps → KEY_B = flood advert + * 2 taps → KEY_B = LED heartbeat toggle * 3 taps → KEY_D = buzzer mute toggle * 4 taps → KEY_C = GPS on/off - * 5 taps → KEY_E = LED heartbeat toggle */ + * 5 taps → KEY_E = flood advert */ user_btn_multitap { compatible = "zephcore,input-multi-tap"; input-codes = ; diff --git a/zephcore/boards/nrf52840/t1000_e/t1000_e_nrf52840.dts b/zephcore/boards/nrf52840/t1000_e/t1000_e_nrf52840.dts index a75ba22..32f2c1c 100644 --- a/zephcore/boards/nrf52840/t1000_e/t1000_e_nrf52840.dts +++ b/zephcore/boards/nrf52840/t1000_e/t1000_e_nrf52840.dts @@ -74,10 +74,10 @@ /* Input filter: user button multi-tap detection * 1 tap (400ms wait) → KEY_1 = page next (no-op without display) - * 2 taps (400ms wait) → KEY_B = flood advert + * 2 taps (400ms wait) → KEY_B = LED heartbeat toggle * 3 taps (400ms wait) → KEY_D = buzzer mute toggle * 4 taps (400ms wait) → KEY_C = GPS on/off - * 5 taps (immediate) → KEY_E = LED heartbeat toggle */ + * 5 taps (immediate) → KEY_E = flood advert */ user_btn_multitap { compatible = "zephcore,input-multi-tap"; /* No 'input' phandle — listen to ALL devices. diff --git a/zephcore/boards/nrf52840/thinknode_m3/thinknode_m3.dts b/zephcore/boards/nrf52840/thinknode_m3/thinknode_m3.dts index 6fab616..cad1a56 100644 --- a/zephcore/boards/nrf52840/thinknode_m3/thinknode_m3.dts +++ b/zephcore/boards/nrf52840/thinknode_m3/thinknode_m3.dts @@ -80,10 +80,10 @@ /* Multi-tap detection * 1 tap → KEY_1 = page next - * 2 taps → KEY_B = flood advert + * 2 taps → KEY_B = LED heartbeat toggle * 3 taps → KEY_D = buzzer mute toggle * 4 taps → KEY_C = GPS on/off - * 5 taps → KEY_E = LED heartbeat toggle */ + * 5 taps → KEY_E = flood advert */ user_btn_multitap { compatible = "zephcore,input-multi-tap"; input-codes = ; diff --git a/zephcore/boards/nrf52840/thinknode_m6/thinknode_m6.dts b/zephcore/boards/nrf52840/thinknode_m6/thinknode_m6.dts index 5853725..a76a9e6 100644 --- a/zephcore/boards/nrf52840/thinknode_m6/thinknode_m6.dts +++ b/zephcore/boards/nrf52840/thinknode_m6/thinknode_m6.dts @@ -79,10 +79,10 @@ /* Multi-tap detection * 1 tap → KEY_1 = page next - * 2 taps → KEY_B = flood advert + * 2 taps → KEY_B = LED heartbeat toggle * 3 taps → KEY_D = buzzer mute toggle * 4 taps → KEY_C = GPS on/off - * 5 taps → KEY_E = LED heartbeat toggle */ + * 5 taps → KEY_E = flood advert */ user_btn_multitap { compatible = "zephcore,input-multi-tap"; input-codes = ; diff --git a/zephcore/boards/nrf52840/wio_tracker_l1/wio_tracker_l1_nrf52840.dts b/zephcore/boards/nrf52840/wio_tracker_l1/wio_tracker_l1_nrf52840.dts index 45a7019..5b9d3c1 100644 --- a/zephcore/boards/nrf52840/wio_tracker_l1/wio_tracker_l1_nrf52840.dts +++ b/zephcore/boards/nrf52840/wio_tracker_l1/wio_tracker_l1_nrf52840.dts @@ -101,10 +101,10 @@ /* Input filter: user button multi-tap detection * 1 tap (400ms wait) → KEY_1 = page next on OLED - * 2 taps (400ms wait) → KEY_B = flood advert + * 2 taps (400ms wait) → KEY_B = LED heartbeat toggle * 3 taps (400ms wait) → KEY_D = buzzer mute toggle * 4 taps (400ms wait) → KEY_C = GPS on/off - * 5 taps (immediate) → KEY_E = LED heartbeat toggle */ + * 5 taps (immediate) → KEY_E = flood advert */ user_btn_multitap { compatible = "zephcore,input-multi-tap"; /* No 'input' phandle — listen to ALL devices. diff --git a/zephcore/helpers/ui-button/ui_task.c b/zephcore/helpers/ui-button/ui_task.c index 8fdea15..f4d46cc 100644 --- a/zephcore/helpers/ui-button/ui_task.c +++ b/zephcore/helpers/ui-button/ui_task.c @@ -636,8 +636,8 @@ static void ui_input_cb(struct input_event *evt, void *user_data) break; case INPUT_KEY_B: - /* Double tap (400ms delayed): flood advert */ - action_flood_advert(); + /* Double tap (400ms delayed): toggle LED heartbeat */ + action_leds_toggle(); break; case INPUT_KEY_D: @@ -651,8 +651,8 @@ static void ui_input_cb(struct input_event *evt, void *user_data) break; case INPUT_KEY_E: - /* Quintuple tap (immediate): toggle LED heartbeat */ - action_leds_toggle(); + /* Quintuple tap (immediate): flood advert */ + action_flood_advert(); break; /* ===== Longpress output ===== */ diff --git a/zephcore/helpers/ui-joystick/joystick_defs.h b/zephcore/helpers/ui-joystick/joystick_defs.h index b633770..2790baa 100644 --- a/zephcore/helpers/ui-joystick/joystick_defs.h +++ b/zephcore/helpers/ui-joystick/joystick_defs.h @@ -55,10 +55,10 @@ /* Global action keys emitted by multi tap filter, handled in loop(). * Kept above 0xF0 so they stay clear of the printable range — see the * key-space contract above. */ -#define KEY_FLOOD_ADVERT ((char)0xF5) /* INPUT_KEY_B: 2 taps → flood advert (unused) */ +#define KEY_FLOOD_ADVERT ((char)0xF5) /* INPUT_KEY_E: 5 taps → flood advert */ #define KEY_BUZZ_TOGGLE ((char)0xF6) /* INPUT_KEY_D: 3 taps → buzzer mute toggle */ #define KEY_GPS_TOGGLE ((char)0xF7) /* INPUT_KEY_C: 4 taps → GPS on/off */ -#define KEY_LED_TOGGLE ((char)0xF8) /* INPUT_KEY_E: 5 taps → LED heartbeat toggle */ +#define KEY_LED_TOGGLE ((char)0xF8) /* INPUT_KEY_B: 2 taps → LED heartbeat toggle */ /* ===== Layout constants (calibrated for 128x64 OLED, 6x8 font) ===== */ /* All hard-coded offsets from old Arduino code are preserved here. diff --git a/zephcore/helpers/ui-joystick/joystick_ui_task.cpp b/zephcore/helpers/ui-joystick/joystick_ui_task.cpp index 5fb0272..6b7279a 100644 --- a/zephcore/helpers/ui-joystick/joystick_ui_task.cpp +++ b/zephcore/helpers/ui-joystick/joystick_ui_task.cpp @@ -468,9 +468,10 @@ static void joystick_ui_input_cb(struct input_event *evt, void *user_data) case INPUT_KEY_PAGEDOWN:key = KEY_NEXT; break; case INPUT_KEY_F2: key = KEY_ENTER_LONG; break; /* Multi tap outputs from input_multi_tap filter */ + case INPUT_KEY_B: key = KEY_LED_TOGGLE; break; /* 2 taps */ case INPUT_KEY_D: key = KEY_BUZZ_TOGGLE; break; /* 3 taps */ case INPUT_KEY_C: key = KEY_GPS_TOGGLE; break; /* 4 taps */ - case INPUT_KEY_E: key = KEY_LED_TOGGLE; break; /* 5 taps */ + case INPUT_KEY_E: key = KEY_FLOOD_ADVERT; break; /* 5 taps */ default: break; } @@ -879,6 +880,15 @@ void JoystickUITask::loop() } else if (key == KEY_LED_TOGGLE) { toggleLeds(); consumed = true; + } else if (key == KEY_FLOOD_ADVERT) { + /* Canonical scoped path: honors prefs.path_hash_mode and the + * default transport scope (same as the Advert menu item). */ + if (_mesh && _mesh->sendSelfAdvert(true)) { + showAlert("Advert flood sent", 1000); + } else { + showAlert("Advert failed", 1000); + } + consumed = true; } if (!consumed && _curr) { _curr->handleInput(key);