diff options
| author | Aleksa Vučković <56649122+aleksav013@users.noreply.github.com> | 2023-03-10 22:55:42 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-10 22:55:42 +0000 |
| commit | 01905c85caf85f658e6efff8672d873e7a5fd8ad (patch) | |
| tree | 2782af11a61f1f3f828d568019174d67a9fed26f /src/draw.c | |
| parent | 30a0aafd0feb6615b17bd226ba82010a6aaeb20b (diff) | |
| parent | f6ebc8903c51435cccfc95915f75d96f73f16fa7 (diff) | |
vladin deo
Diffstat (limited to 'src/draw.c')
| -rw-r--r-- | src/draw.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/draw.c b/src/draw.c new file mode 100644 index 0000000..a927e9c --- /dev/null +++ b/src/draw.c @@ -0,0 +1,52 @@ +#include "draw.h" +#include "config.h" +#include <string.h> + +void send_raw_data(uint8_t data[9]) +{ + gpio_put(LATCH_PIN, 0); + for (size_t i = 0; i < 9; i++) { + for (size_t j = 0; j < 8; j++) + { + gpio_put(DATA_PIN, data[map[i]] & (1 << j)); + gpio_put(CLOCK_PIN, 0); + gpio_put(CLOCK_PIN, 1); + } + } + gpio_put(LATCH_PIN, 1); +} + +void send_data(uint8_t floor, uint64_t on_floor) +{ + uint8_t data[9]; + data[0] = floor; + memcpy(&data[1], &on_floor, 8); + send_raw_data(data); +} + +void cube_set_led(uint64_t data[8], uint8_t x, uint8_t y, uint8_t z, bool value) +{ + uint64_t mask = 1LL << (y * 8 + x); + if (value != (bool)(data[z] & mask)) + data[z] ^= mask; +} + +int64_t zero_byte(alarm_id_t id, void* user_data) +{ + memset(user_data, 0, 1); + return 0; +} + +void draw(uint64_t data[8], uint32_t time) +{ + volatile uint8_t ind = 1; + add_alarm_in_ms(time, (void*)zero_byte, (void*)&ind, false); + + while (ind) { + for (size_t i = 0; i < 8; i++) { + send_data((1 << i), data[i]); + sleep_ms(1); + } + tight_loop_contents(); + } +} |
