From 246babf25b65859b3d4a95b376afa912ba550c39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Boh=C3=A1=C4=8Dek?= Date: Fri, 25 Jun 2021 18:52:20 +0200 Subject: [PATCH] fix: text viewer blink rgb leds when scroll past line --- lib-pheripherals/src/mzapo_rgb_led.c | 6 ++++-- text-viewer/src/text_viewer.c | 17 +++++++++++++++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/lib-pheripherals/src/mzapo_rgb_led.c b/lib-pheripherals/src/mzapo_rgb_led.c index 7e97fe9dcb1ff0a77e6ab21fc546b6392920b769..e8a405c2fe2a28d133caeb3c719f5c4357045683 100644 --- a/lib-pheripherals/src/mzapo_rgb_led.c +++ b/lib-pheripherals/src/mzapo_rgb_led.c @@ -1,6 +1,7 @@ #include "mzapo_rgb_led.h" #include #include +#include mzapo_rgb_led_t rgb_led_create(unsigned char *mem_base) { mzapo_rgb_led_t rgb_led = { @@ -17,6 +18,7 @@ mzapo_rgb_led_t rgb_led_create(unsigned char *mem_base) { void rgb_led_set(mzapo_rgb_led_t *rgb_led, mzapo_rgb_leds_t id, uint8_t r, uint8_t g, uint8_t b) { if (rgb_led->mem_base != NULL) { + rgb_led->states[id].timeout_ms = 0; rgb_led_pixel_t *pixel = (rgb_led_pixel_t*)((void *)rgb_led->mem_base + id * 4); (pixel)->red = r; (pixel)->green = g; @@ -57,8 +59,8 @@ void rgb_led_update(mzapo_rgb_led_t *rgb_led) { if (rgb_led->states[i].timeout_ms != 0) { struct timespec set_time = rgb_led->states[i].set_time; uint32_t diff = (((now.tv_sec - set_time.tv_sec) * 1000) + - (now.tv_nsec - set_time.tv_nsec)) / - 1000000; + (now.tv_nsec - set_time.tv_nsec) / 1000000); + printf("%u\r\n", diff); if (diff >= rgb_led->states[i].timeout_ms) { rgb_led->states[i].timeout_ms = 0; diff --git a/text-viewer/src/text_viewer.c b/text-viewer/src/text_viewer.c index 8cdea20d5764d3269c3c2110164f0742e182283e..e602d27523d72e2db1a179c2f1668bba7695e673 100644 --- a/text-viewer/src/text_viewer.c +++ b/text-viewer/src/text_viewer.c @@ -267,16 +267,29 @@ void text_viewer_start_loop(text_viewer_t *text_viewer) { // main loop text_viewer->running = true; + uint32_t prev_lines_scrolled = 0; while (text_viewer->running) { commands_check_input(&commands); gui_update(&text_viewer->gui); gui_render(&text_viewer->gui); + rgb_led_update(text_viewer->pheripherals.rgb_leds); + uint32_t lines_scrolled = gui_text_view_get_lines_scrolled(text_view); ledstrip_turn_on(text_viewer->pheripherals.ledstrip, - ((double)gui_text_view_get_lines_scrolled(text_view) / - text_viewer->multiline_text->lines_count) * LED_STRIP_COUNT, + ((double) lines_scrolled / + text_viewer->multiline_text->lines_count) * + LED_STRIP_COUNT, 1); + + if (lines_scrolled != prev_lines_scrolled) { + rgb_led_set_timeout(text_viewer->pheripherals.rgb_leds, LED_LEFT, 0, 100, + 100, 150); + rgb_led_set_timeout(text_viewer->pheripherals.rgb_leds, LED_RIGHT, 0, 100, + 100, 150); + + prev_lines_scrolled = lines_scrolled; + } } ledstrip_clear(text_viewer->pheripherals.ledstrip);