Emulate Ergodox EZ leds by LCD colors
This commit is contained in:
parent
9a4ce28683
commit
39385144e7
6 changed files with 258 additions and 45 deletions
|
@ -64,6 +64,9 @@ static visualizer_keyboard_status_t current_status = {
|
|||
.mods = 0xFF,
|
||||
.leds = 0xFFFFFFFF,
|
||||
.suspended = false,
|
||||
#ifdef VISUALIZER_USER_DATA_SIZE
|
||||
.user_data = {0}
|
||||
#endif
|
||||
};
|
||||
|
||||
static bool same_status(visualizer_keyboard_status_t* status1, visualizer_keyboard_status_t* status2) {
|
||||
|
@ -71,11 +74,19 @@ static bool same_status(visualizer_keyboard_status_t* status1, visualizer_keyboa
|
|||
status1->default_layer == status2->default_layer &&
|
||||
status1->mods == status2->mods &&
|
||||
status1->leds == status2->leds &&
|
||||
status1->suspended == status2->suspended;
|
||||
status1->suspended == status2->suspended
|
||||
#ifdef VISUALIZER_USER_DATA_SIZE
|
||||
&& memcmp(status1->user_data, status2->user_data, VISUALIZER_USER_DATA_SIZE) == 0
|
||||
#endif
|
||||
;
|
||||
}
|
||||
|
||||
static bool visualizer_enabled = false;
|
||||
|
||||
#ifdef VISUALIZER_USER_DATA_SIZE
|
||||
static uint8_t user_data[VISUALIZER_USER_DATA_SIZE];
|
||||
#endif
|
||||
|
||||
#define MAX_SIMULTANEOUS_ANIMATIONS 4
|
||||
static keyframe_animation_t* animations[MAX_SIMULTANEOUS_ANIMATIONS] = {};
|
||||
|
||||
|
@ -431,6 +442,9 @@ static DECLARE_THREAD_FUNCTION(visualizerThread, arg) {
|
|||
.mods = 0xFF,
|
||||
.leds = 0xFFFFFFFF,
|
||||
.suspended = false,
|
||||
#ifdef VISUALIZER_USER_DATA_SIZE
|
||||
.user_data = {0},
|
||||
#endif
|
||||
};
|
||||
|
||||
visualizer_state_t state = {
|
||||
|
@ -590,6 +604,12 @@ uint8_t visualizer_get_mods() {
|
|||
return mods;
|
||||
}
|
||||
|
||||
#ifdef VISUALIZER_USER_DATA_SIZE
|
||||
void visualizer_set_user_data(void* u) {
|
||||
memcpy(user_data, u, VISUALIZER_USER_DATA_SIZE);
|
||||
}
|
||||
#endif
|
||||
|
||||
void visualizer_update(uint32_t default_state, uint32_t state, uint8_t mods, uint32_t leds) {
|
||||
// Note that there's a small race condition here, the thread could read
|
||||
// a state where one of these are set but not the other. But this should
|
||||
|
@ -618,6 +638,9 @@ void visualizer_update(uint32_t default_state, uint32_t state, uint8_t mods, uin
|
|||
.leds = leds,
|
||||
.suspended = current_status.suspended,
|
||||
};
|
||||
#ifdef VISUALIZER_USER_DATA_SIZE
|
||||
memcpy(new_status.user_data, user_data, VISUALIZER_USER_DATA_SIZE);
|
||||
#endif
|
||||
if (!same_status(¤t_status, &new_status)) {
|
||||
changed = true;
|
||||
current_status = new_status;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue