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

ref: 247d0c106cc3c32caef42a555948bb0b8cd32ff6 CTU-FEE-B0B35APO-Semestral-project/lib-pheripherals/src/mzapo_led_strip.c -rw-r--r-- 1.3 KiB
247d0c10 — František Boháček fix: floating point exception 3 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include "mzapo_led_strip.h"
#include <stdlib.h>

mzapo_ledstrip_t ledstrip_create(volatile uint32_t *mem_base) {
  mzapo_ledstrip_t ledstrip = {
      .mem_base = mem_base,
      .load = 0,
      .on_index = 0xFF,
      .on_around_index = 0
  };

  return ledstrip;
}

void ledstrip_write(mzapo_ledstrip_t *ledstrip) {
  if (ledstrip->mem_base != NULL) {
    *ledstrip->mem_base = ledstrip->strip;
  }
}

void ledstrip_clear(mzapo_ledstrip_t *ledstrip) {
  ledstrip->strip = 0;
  ledstrip->load = 0;
  ledstrip->on_around_index = 0;
  ledstrip->on_index = 0xFF;

  ledstrip_write(ledstrip);
}

void ledstrip_turn_on(mzapo_ledstrip_t *ledstrip, uint8_t index,
                      uint8_t around) {
  ledstrip->on_index = index;
  ledstrip->on_around_index = around;
  ledstrip->strip = 0;
  index -= around;

  for (int i = 0; i < around * 2 + 1; i++) {
    uint8_t led_strip_i = i + index;
    if (led_strip_i >= LED_STRIP_COUNT) {
      continue;
    }

    ledstrip->strip |= 1 << (LED_STRIP_COUNT - 1 - led_strip_i);
  }

  ledstrip_write(ledstrip);
}

void ledstrip_progress_bar_step(mzapo_ledstrip_t *ledstrip, int8_t steps) {
  ledstrip->strip = 0;
  ledstrip->load = steps;
  ledstrip->on_index = 0xFF;
  ledstrip->on_around_index = 0;

  for (int i = 0; i < ledstrip->load; i++) {
    ledstrip->strip |= 1 << (LED_STRIP_COUNT - 1 - i);
  }

  ledstrip_write(ledstrip);
}
Do not follow this link