From 8ea55ff76f56601215b22f0ca5db1e7fdaca31ce Mon Sep 17 00:00:00 2001 From: Nate Soares Date: Wed, 3 Jan 2018 16:12:07 -0800 Subject: [PATCH 1/6] added prev_mode --- src/Kaleidoscope-LEDControl.cpp | 10 ++++++++++ src/Kaleidoscope-LEDControl.h | 1 + 2 files changed, 11 insertions(+) diff --git a/src/Kaleidoscope-LEDControl.cpp b/src/Kaleidoscope-LEDControl.cpp index 8f217e0d..b955892d 100644 --- a/src/Kaleidoscope-LEDControl.cpp +++ b/src/Kaleidoscope-LEDControl.cpp @@ -34,6 +34,16 @@ void LEDControl::next_mode(void) { return set_mode(mode); } +void LEDControl::prev_mode(void) { + mode--; + + if (mode >= LED_MAX_MODES || !modes[mode]) { + return set_mode(0); + } + + return set_mode(mode); +} + void LEDControl::set_mode(uint8_t mode_) { if (mode_ >= LED_MAX_MODES) diff --git a/src/Kaleidoscope-LEDControl.h b/src/Kaleidoscope-LEDControl.h index 7addcb3a..dcaf6fb9 100644 --- a/src/Kaleidoscope-LEDControl.h +++ b/src/Kaleidoscope-LEDControl.h @@ -90,6 +90,7 @@ class LEDControl : public KaleidoscopePlugin { void begin(void) final; static void next_mode(void); + static void prev_mode(void); static void setup(void); static void update(void) { if (modes[mode]) From 4d82db1f972968a3fade39d80e8ca0fb1d8e7bc4 Mon Sep 17 00:00:00 2001 From: Nate Soares Date: Wed, 3 Jan 2018 20:33:03 -0800 Subject: [PATCH 2/6] better wrap-around --- src/Kaleidoscope-LEDControl.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/Kaleidoscope-LEDControl.cpp b/src/Kaleidoscope-LEDControl.cpp index b955892d..3a9a0d53 100644 --- a/src/Kaleidoscope-LEDControl.cpp +++ b/src/Kaleidoscope-LEDControl.cpp @@ -35,13 +35,15 @@ void LEDControl::next_mode(void) { } void LEDControl::prev_mode(void) { - mode--; - - if (mode >= LED_MAX_MODES || !modes[mode]) { - return set_mode(0); + if (mode == 0) { + // wrap around + mode = LED_MAX_MODES; + // then count down until reaching a valid mode + while (mode > 0 && !modes[mode]) mode--; + } else { + mode--; } - - return set_mode(mode); + set_mode(mode); } void From e3f112affc62f2c51fc0b31bc40808a1a96324c9 Mon Sep 17 00:00:00 2001 From: Nate Soares Date: Thu, 4 Jan 2018 10:21:30 -0800 Subject: [PATCH 3/6] fixed bug in wrap-around --- src/Kaleidoscope-LEDControl.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Kaleidoscope-LEDControl.cpp b/src/Kaleidoscope-LEDControl.cpp index 3a9a0d53..21cbfca6 100644 --- a/src/Kaleidoscope-LEDControl.cpp +++ b/src/Kaleidoscope-LEDControl.cpp @@ -37,13 +37,14 @@ void LEDControl::next_mode(void) { void LEDControl::prev_mode(void) { if (mode == 0) { // wrap around - mode = LED_MAX_MODES; + mode = LED_MAX_MODES - 1; // then count down until reaching a valid mode while (mode > 0 && !modes[mode]) mode--; } else { mode--; } - set_mode(mode); + + return set_mode(mode); } void From e2d8866392cc020585fe77f2f584bc86e4cd2ff4 Mon Sep 17 00:00:00 2001 From: Nate Soares Date: Tue, 9 Jan 2018 06:11:50 -0800 Subject: [PATCH 4/6] added Key_LEDEffectPrevious --- src/Kaleidoscope-LEDControl.cpp | 8 ++++++-- src/Kaleidoscope-LEDControl.h | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Kaleidoscope-LEDControl.cpp b/src/Kaleidoscope-LEDControl.cpp index 21cbfca6..b7855c57 100644 --- a/src/Kaleidoscope-LEDControl.cpp +++ b/src/Kaleidoscope-LEDControl.cpp @@ -130,8 +130,12 @@ Key LEDControl::eventHandler(Key mappedKey, byte row, byte col, uint8_t keyState if (mappedKey.flags != (SYNTHETIC | IS_INTERNAL | LED_TOGGLE)) return mappedKey; - if (keyToggledOn(keyState)) - next_mode(); + if (keyToggledOn(keyState)) { + if (mappedKey == Key_LEDEffectNext) + next_mode(); + else + prev_mode(); + } return Key_NoKey; } diff --git a/src/Kaleidoscope-LEDControl.h b/src/Kaleidoscope-LEDControl.h index dcaf6fb9..a0f1327d 100644 --- a/src/Kaleidoscope-LEDControl.h +++ b/src/Kaleidoscope-LEDControl.h @@ -7,6 +7,7 @@ #define LED_TOGGLE B00000001 // Synthetic, internal #define Key_LEDEffectNext (Key) { 0, KEY_FLAGS | SYNTHETIC | IS_INTERNAL | LED_TOGGLE } +#define Key_LEDEffectPrevious (Key) { 1, KEY_FLAGS | SYNTHETIC | IS_INTERNAL | LED_TOGGLE } namespace kaleidoscope { /** Base class for LED modes. From 795ef6c1f822401f0c370aae051acba48edcb74b Mon Sep 17 00:00:00 2001 From: Nate Soares Date: Tue, 9 Jan 2018 06:14:41 -0800 Subject: [PATCH 5/6] compare the keyCode instead of the whole key struct --- src/Kaleidoscope-LEDControl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Kaleidoscope-LEDControl.cpp b/src/Kaleidoscope-LEDControl.cpp index b7855c57..6f9b8be4 100644 --- a/src/Kaleidoscope-LEDControl.cpp +++ b/src/Kaleidoscope-LEDControl.cpp @@ -131,7 +131,7 @@ Key LEDControl::eventHandler(Key mappedKey, byte row, byte col, uint8_t keyState return mappedKey; if (keyToggledOn(keyState)) { - if (mappedKey == Key_LEDEffectNext) + if (mappedKey.keyCode == 0) next_mode(); else prev_mode(); From 4572cccd67cb4246170233f07082d4e7f360804c Mon Sep 17 00:00:00 2001 From: Nate Soares Date: Tue, 9 Jan 2018 08:00:28 -0800 Subject: [PATCH 6/6] effect hook only triggers on known Key_LEDEffect* keys --- src/Kaleidoscope-LEDControl.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Kaleidoscope-LEDControl.cpp b/src/Kaleidoscope-LEDControl.cpp index 6f9b8be4..73b80b92 100644 --- a/src/Kaleidoscope-LEDControl.cpp +++ b/src/Kaleidoscope-LEDControl.cpp @@ -131,10 +131,11 @@ Key LEDControl::eventHandler(Key mappedKey, byte row, byte col, uint8_t keyState return mappedKey; if (keyToggledOn(keyState)) { - if (mappedKey.keyCode == 0) + if (mappedKey == Key_LEDEffectNext) { next_mode(); - else + } else if (mappedKey == Key_LEDEffectPrevious) { prev_mode(); + } } return Key_NoKey;