aboutsummaryrefslogtreecommitdiff
path: root/main/ws2812b_writer.c
blob: fc3c7776a39ca7e541353f920df406cc0fdb3512 (plain) (blame)
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
#include "ws2812b_writer.h"

#include <stdlib.h>
#include <string.h>

#define SIZE 300

void calculate_colors(
    ws_params_t* ws_params,
    ws2812b_buffer_t* buffer)
{
  /* RACE Conditions for sure. Need to fix that. */
  ws2812b_rgb_t color = {0};
  if (!strcmp(ws_params->color, "black\n")) {
  } else if (!strcmp(ws_params->color, "green\n")) {
    color.g = 255;
  } else if (!strcmp(ws_params->color, "red\n")) {
    color.r = 255;
  } else if (!strcmp(ws_params->color, "blue\n")) {
    color.b = 255;
  } else if (!strcmp(ws_params->color, "yellow\n")) {
    color.r = 255;
    color.g = 255;
  } else if (!strcmp(ws_params->color, "magenta\n")) {
    color.r = 255;
  color.b = 255;
  } else if (!strcmp(ws_params->color, "teal\n")) {
    color.g = 255;
    color.b = 255;
  } else {
    color.r = 128;
    color.g = 128;
    color.b = 128;
  }

  int i;
  for (i = 0; i < SIZE; ++i) {
    ws2812b_buffer_set_color(buffer, i, &color);
  }
}

portTASK_FUNCTION(ws2812b_write_task, params)
{
  ws_params_t* ws_params = (ws_params_t*) params;

  strcpy(ws_params->color, "red\n");

  ws2812b_buffer_t* buffer = ws2812b_new_buffer(SIZE);
  for (;;) {
    calculate_colors(ws_params, buffer);
    ws2812b_write(ws_params->drv, buffer);
    vTaskDelay(10 / portTICK_PERIOD_MS);
  }
}