aboutsummaryrefslogtreecommitdiff
path: root/quantum/visualizer/visualizer.c
diff options
context:
space:
mode:
authorFred Sundvik <fsundvik@gmail.com>2017-04-02 01:31:04 +0300
committerFred Sundvik <fsundvik@gmail.com>2017-04-09 18:34:59 +0300
commit39385144e7dc3337e623cdc8147b4a441f22fd62 (patch)
treec553b85bbd7c0754296f999e83647ac7b779a22d /quantum/visualizer/visualizer.c
parent9a4ce28683b667ab67d48d92196bab7e277d4800 (diff)
downloadqmk_firmware-39385144e7dc3337e623cdc8147b4a441f22fd62.tar.gz
qmk_firmware-39385144e7dc3337e623cdc8147b4a441f22fd62.zip
Emulate Ergodox EZ leds by LCD colors
Diffstat (limited to 'quantum/visualizer/visualizer.c')
-rw-r--r--quantum/visualizer/visualizer.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/quantum/visualizer/visualizer.c b/quantum/visualizer/visualizer.c
index 62ebebcee..bff0df494 100644
--- a/quantum/visualizer/visualizer.c
+++ b/quantum/visualizer/visualizer.c
@@ -64,6 +64,9 @@ static visualizer_keyboard_status_t current_status = {
64 .mods = 0xFF, 64 .mods = 0xFF,
65 .leds = 0xFFFFFFFF, 65 .leds = 0xFFFFFFFF,
66 .suspended = false, 66 .suspended = false,
67#ifdef VISUALIZER_USER_DATA_SIZE
68 .user_data = {0}
69#endif
67}; 70};
68 71
69static bool same_status(visualizer_keyboard_status_t* status1, visualizer_keyboard_status_t* status2) { 72static 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
71 status1->default_layer == status2->default_layer && 74 status1->default_layer == status2->default_layer &&
72 status1->mods == status2->mods && 75 status1->mods == status2->mods &&
73 status1->leds == status2->leds && 76 status1->leds == status2->leds &&
74 status1->suspended == status2->suspended; 77 status1->suspended == status2->suspended
78#ifdef VISUALIZER_USER_DATA_SIZE
79 && memcmp(status1->user_data, status2->user_data, VISUALIZER_USER_DATA_SIZE) == 0
80#endif
81 ;
75} 82}
76 83
77static bool visualizer_enabled = false; 84static bool visualizer_enabled = false;
78 85
86#ifdef VISUALIZER_USER_DATA_SIZE
87static uint8_t user_data[VISUALIZER_USER_DATA_SIZE];
88#endif
89
79#define MAX_SIMULTANEOUS_ANIMATIONS 4 90#define MAX_SIMULTANEOUS_ANIMATIONS 4
80static keyframe_animation_t* animations[MAX_SIMULTANEOUS_ANIMATIONS] = {}; 91static keyframe_animation_t* animations[MAX_SIMULTANEOUS_ANIMATIONS] = {};
81 92
@@ -431,6 +442,9 @@ static DECLARE_THREAD_FUNCTION(visualizerThread, arg) {
431 .mods = 0xFF, 442 .mods = 0xFF,
432 .leds = 0xFFFFFFFF, 443 .leds = 0xFFFFFFFF,
433 .suspended = false, 444 .suspended = false,
445#ifdef VISUALIZER_USER_DATA_SIZE
446 .user_data = {0},
447#endif
434 }; 448 };
435 449
436 visualizer_state_t state = { 450 visualizer_state_t state = {
@@ -590,6 +604,12 @@ uint8_t visualizer_get_mods() {
590 return mods; 604 return mods;
591} 605}
592 606
607#ifdef VISUALIZER_USER_DATA_SIZE
608void visualizer_set_user_data(void* u) {
609 memcpy(user_data, u, VISUALIZER_USER_DATA_SIZE);
610}
611#endif
612
593void visualizer_update(uint32_t default_state, uint32_t state, uint8_t mods, uint32_t leds) { 613void visualizer_update(uint32_t default_state, uint32_t state, uint8_t mods, uint32_t leds) {
594 // Note that there's a small race condition here, the thread could read 614 // Note that there's a small race condition here, the thread could read
595 // a state where one of these are set but not the other. But this should 615 // 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
618 .leds = leds, 638 .leds = leds,
619 .suspended = current_status.suspended, 639 .suspended = current_status.suspended,
620 }; 640 };
641#ifdef VISUALIZER_USER_DATA_SIZE
642 memcpy(new_status.user_data, user_data, VISUALIZER_USER_DATA_SIZE);
643#endif
621 if (!same_status(&current_status, &new_status)) { 644 if (!same_status(&current_status, &new_status)) {
622 changed = true; 645 changed = true;
623 current_status = new_status; 646 current_status = new_status;