diff --git a/src/kaleidoscope/event_handlers.h b/src/kaleidoscope/event_handlers.h
index 86c21db9..4bd8b38c 100644
--- a/src/kaleidoscope/event_handlers.h
+++ b/src/kaleidoscope/event_handlers.h
@@ -161,6 +161,14 @@
_CURRENT_IMPLEMENTATION, __NL__ \
_NOT_ABORTABLE, __NL__ \
(), (), ##__VA_ARGS__) __NL__ \
+ /* Called when the LED mode changes. If one needs to know what */ __NL__ \
+ /* from and what to the mode changed, they should track that */ __NL__ \
+ /* themselves. */ __NL__ \
+ OPERATION(onLEDModeChange, __NL__ \
+ 1, __NL__ \
+ _CURRENT_IMPLEMENTATION, __NL__ \
+ _NOT_ABORTABLE, __NL__ \
+ (), (), ##__VA_ARGS__) __NL__ \
/* Called before reporting our state to the host. This is the */ __NL__ \
/* last point in a cycle where a plugin can alter what gets */ __NL__ \
/* reported to the host. */ __NL__ \
@@ -219,6 +227,10 @@
OP(onLayerChange, 1) __NL__ \
END(onLayerChange, 1) __NL__ \
__NL__ \
+ START(onLEDModeChange, 1) __NL__ \
+ OP(onLEDModeChange, 1) __NL__ \
+ END(onLEDModeChange, 1) __NL__ \
+ __NL__ \
START(beforeReportingState, 1) __NL__ \
OP(beforeReportingState, 1) __NL__ \
END(beforeReportingState, 1) __NL__ \
diff --git a/src/kaleidoscope/hooks.h b/src/kaleidoscope/hooks.h
index 4e154f49..abc6d5f1 100644
--- a/src/kaleidoscope/hooks.h
+++ b/src/kaleidoscope/hooks.h
@@ -33,6 +33,10 @@ extern void handleKeyswitchEvent(kaleidoscope::Key mappedKey, KeyAddr key_addr,
DEPRECATED(ROW_COL_FUNC) extern void handleKeyswitchEvent(kaleidoscope::Key mappedKey, byte row, byte col, uint8_t keyState);
namespace kaleidoscope {
+namespace plugin {
+// Forward declaration to enable friend declarations.
+class LEDControl;
+}
// Forward declaration to enable friend declarations.
class Layer_;
@@ -55,6 +59,7 @@ class Hooks {
// and Hooks::afterEachCycle.
friend class Kaleidoscope_;
friend class ::kaleidoscope::Layer_;
+ friend class ::kaleidoscope::plugin::LEDControl;
// ::handleKeyswitchEvent(...) calls Hooks::onKeyswitchEvent.
friend void ::handleKeyswitchEvent(kaleidoscope::Key mappedKey,
diff --git a/src/kaleidoscope/plugin/LEDControl.cpp b/src/kaleidoscope/plugin/LEDControl.cpp
index 9dc3b931..a5390072 100644
--- a/src/kaleidoscope/plugin/LEDControl.cpp
+++ b/src/kaleidoscope/plugin/LEDControl.cpp
@@ -68,6 +68,8 @@ LEDControl::set_mode(uint8_t mode_) {
cur_led_mode_ = LEDModeManager::getLEDMode(mode_id);
refreshAll();
+
+ kaleidoscope::Hooks::onLEDModeChange();
}
void LEDControl::activate(LEDModeInterface *plugin) {
diff --git a/src/kaleidoscope/plugin/PersistentLEDMode.cpp b/src/kaleidoscope/plugin/PersistentLEDMode.cpp
index 6480143b..312dbd85 100644
--- a/src/kaleidoscope/plugin/PersistentLEDMode.cpp
+++ b/src/kaleidoscope/plugin/PersistentLEDMode.cpp
@@ -33,8 +33,8 @@ EventHandlerResult PersistentLEDMode::onSetup() {
Kaleidoscope.storage().get(settings_base_, cached_mode_index_);
// If the index is max, assume an uninitialized EEPROM, and don't set the LED
- // mode. We don't change the cached index here, `afterEachCycle()` will do
- // that at the end of he cycle anyway.
+ // mode. We don't change the cached index here, `onLEDModeChange()` will do
+ // that whenever a led mode change happens.
if (cached_mode_index_ != 0xff)
return EventHandlerResult::OK;
@@ -43,7 +43,7 @@ EventHandlerResult PersistentLEDMode::onSetup() {
return EventHandlerResult::OK;
}
-EventHandlerResult PersistentLEDMode::afterEachCycle() {
+EventHandlerResult PersistentLEDMode::onLEDModeChange() {
if (cached_mode_index_ == ::LEDControl.get_mode_index())
return EventHandlerResult::OK;
diff --git a/src/kaleidoscope/plugin/PersistentLEDMode.h b/src/kaleidoscope/plugin/PersistentLEDMode.h
index 511c8939..07bc5c31 100644
--- a/src/kaleidoscope/plugin/PersistentLEDMode.h
+++ b/src/kaleidoscope/plugin/PersistentLEDMode.h
@@ -16,11 +16,6 @@
* this program. If not, see .
*/
-/* NOTE: This plugin is a workaround. It allows us to (optionally) save the LED
- * mode to storage, and restore it on next boot, without having a way to hook
- * into led mode change events. Once we can hook into that, this plugin shall be
- * reworked to use it instead of keeping `afterEachCycle()` busy. */
-
#pragma once
#include
@@ -33,7 +28,7 @@ class PersistentLEDMode: public kaleidoscope::Plugin {
PersistentLEDMode() {}
EventHandlerResult onSetup();
- EventHandlerResult afterEachCycle();
+ EventHandlerResult onLEDModeChange();
private:
static uint16_t settings_base_;
static uint8_t cached_mode_index_;