~ruther/CTU-FEE-B0B35APO-Semestral-project

246babf25b65859b3d4a95b376afa912ba550c39 — František Boháček 4 years ago 8cf349b
fix: text viewer blink rgb leds when scroll past line
2 files changed, 19 insertions(+), 4 deletions(-)

M lib-pheripherals/src/mzapo_rgb_led.c
M text-viewer/src/text_viewer.c
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);