M lib-pheripherals/src/mzapo_rgb_led.c => lib-pheripherals/src/mzapo_rgb_led.c +4 -2
  
@@ 1,6 1,7 @@
 #include "mzapo_rgb_led.h"
 #include <stdlib.h>
 #include <time.h>
+#include <stdio.h>
 
 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;
 
M text-viewer/src/text_viewer.c => text-viewer/src/text_viewer.c +15 -2
  
@@ 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);