#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);
}