diff options
| -rw-r--r-- | visualizer.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/visualizer.c b/visualizer.c index 0e587221f..c24073405 100644 --- a/visualizer.c +++ b/visualizer.c | |||
| @@ -25,6 +25,9 @@ SOFTWARE. | |||
| 25 | #include "visualizer.h" | 25 | #include "visualizer.h" |
| 26 | #include "config.h" | 26 | #include "config.h" |
| 27 | #include <string.h> | 27 | #include <string.h> |
| 28 | #ifdef PROTOCOL_CHIBIOS | ||
| 29 | #include "ch.h" | ||
| 30 | #endif | ||
| 28 | 31 | ||
| 29 | #ifdef LCD_ENABLE | 32 | #ifdef LCD_ENABLE |
| 30 | #include "gfx.h" | 33 | #include "gfx.h" |
| @@ -67,7 +70,6 @@ static bool same_status(visualizer_keyboard_status_t* status1, visualizer_keyboa | |||
| 67 | status1->suspended == status2->suspended; | 70 | status1->suspended == status2->suspended; |
| 68 | } | 71 | } |
| 69 | 72 | ||
| 70 | static GSourceHandle layer_changed_event; | ||
| 71 | static bool visualizer_enabled = false; | 73 | static bool visualizer_enabled = false; |
| 72 | 74 | ||
| 73 | #define MAX_SIMULTANEOUS_ANIMATIONS 4 | 75 | #define MAX_SIMULTANEOUS_ANIMATIONS 4 |
| @@ -185,8 +187,8 @@ static bool update_keyframe_animation(keyframe_animation_t* animation, visualize | |||
| 185 | animation->first_update_of_frame = false; | 187 | animation->first_update_of_frame = false; |
| 186 | } | 188 | } |
| 187 | 189 | ||
| 188 | int wanted_sleep = animation->need_update ? 10 : animation->time_left_in_frame; | 190 | systemticks_t wanted_sleep = animation->need_update ? gfxMillisecondsToTicks(10) : (unsigned)animation->time_left_in_frame; |
| 189 | if ((unsigned)wanted_sleep < *sleep_time) { | 191 | if (wanted_sleep < *sleep_time) { |
| 190 | *sleep_time = wanted_sleep; | 192 | *sleep_time = wanted_sleep; |
| 191 | } | 193 | } |
| 192 | 194 | ||
| @@ -345,7 +347,7 @@ static DECLARE_THREAD_FUNCTION(visualizerThread, arg) { | |||
| 345 | 347 | ||
| 346 | GListener event_listener; | 348 | GListener event_listener; |
| 347 | geventListenerInit(&event_listener); | 349 | geventListenerInit(&event_listener); |
| 348 | geventAttachSource(&event_listener, layer_changed_event, 0); | 350 | geventAttachSource(&event_listener, (GSourceHandle)¤t_status, 0); |
| 349 | 351 | ||
| 350 | visualizer_keyboard_status_t initial_status = { | 352 | visualizer_keyboard_status_t initial_status = { |
| 351 | .default_layer = 0xFFFFFFFF, | 353 | .default_layer = 0xFFFFFFFF, |
| @@ -435,6 +437,16 @@ static DECLARE_THREAD_FUNCTION(visualizerThread, arg) { | |||
| 435 | } | 437 | } |
| 436 | } | 438 | } |
| 437 | dprintf("Update took %d, last delta %d, sleep_time %d\n", update_delta, delta, sleep_time); | 439 | dprintf("Update took %d, last delta %d, sleep_time %d\n", update_delta, delta, sleep_time); |
| 440 | #ifdef PROTOCOL_CHIBIOS | ||
| 441 | // The gEventWait function really takes milliseconds, even if the documentation says ticks. | ||
| 442 | // Unfortunately there's no generic ugfx conversion from system time to milliseconds, | ||
| 443 | // so let's do it in a platform dependent way. | ||
| 444 | |||
| 445 | // On windows the system ticks is the same as milliseconds anyway | ||
| 446 | if (sleep_time != TIME_INFINITE) { | ||
| 447 | sleep_time = ST2MS(sleep_time); | ||
| 448 | } | ||
| 449 | #endif | ||
| 438 | geventEventWait(&event_listener, sleep_time); | 450 | geventEventWait(&event_listener, sleep_time); |
| 439 | } | 451 | } |
| 440 | #ifdef LCD_ENABLE | 452 | #ifdef LCD_ENABLE |
| @@ -473,7 +485,7 @@ void visualizer_init(void) { | |||
| 473 | 485 | ||
| 474 | void update_status(bool changed) { | 486 | void update_status(bool changed) { |
| 475 | if (changed) { | 487 | if (changed) { |
| 476 | GSourceListener* listener = geventGetSourceListener(layer_changed_event, NULL); | 488 | GSourceListener* listener = geventGetSourceListener((GSourceHandle)¤t_status, NULL); |
| 477 | if (listener) { | 489 | if (listener) { |
| 478 | geventSendEvent(listener); | 490 | geventSendEvent(listener); |
| 479 | } | 491 | } |
