diff options
Diffstat (limited to 'quantum/visualizer/visualizer.c')
| -rw-r--r-- | quantum/visualizer/visualizer.c | 25 |
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 | ||
| 69 | static bool same_status(visualizer_keyboard_status_t* status1, visualizer_keyboard_status_t* status2) { | 72 | 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 | |||
| 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 | ||
| 77 | static bool visualizer_enabled = false; | 84 | static bool visualizer_enabled = false; |
| 78 | 85 | ||
| 86 | #ifdef VISUALIZER_USER_DATA_SIZE | ||
| 87 | static uint8_t user_data[VISUALIZER_USER_DATA_SIZE]; | ||
| 88 | #endif | ||
| 89 | |||
| 79 | #define MAX_SIMULTANEOUS_ANIMATIONS 4 | 90 | #define MAX_SIMULTANEOUS_ANIMATIONS 4 |
| 80 | static keyframe_animation_t* animations[MAX_SIMULTANEOUS_ANIMATIONS] = {}; | 91 | static 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 | ||
| 608 | void visualizer_set_user_data(void* u) { | ||
| 609 | memcpy(user_data, u, VISUALIZER_USER_DATA_SIZE); | ||
| 610 | } | ||
| 611 | #endif | ||
| 612 | |||
| 593 | void visualizer_update(uint32_t default_state, uint32_t state, uint8_t mods, uint32_t leds) { | 613 | void 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(¤t_status, &new_status)) { | 644 | if (!same_status(¤t_status, &new_status)) { |
| 622 | changed = true; | 645 | changed = true; |
| 623 | current_status = new_status; | 646 | current_status = new_status; |
