1
0
Fork 0

Emulate Ergodox EZ leds by LCD colors

This commit is contained in:
Fred Sundvik 2017-04-02 01:31:04 +03:00
parent 9a4ce28683
commit 39385144e7
6 changed files with 258 additions and 45 deletions

View file

@ -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(&current_status, &new_status)) {
changed = true;
current_status = new_status;