Appiko
led_seq.c
1 
7 #include "led_seq.h"
8 #include "boards.h"
9 
10 #define LED_STRUCT1(name, count) const struct { \
11  uint16_t red[count]; \
12  } __attribute__((packed)) name
13 
14 #define LED_STRUCT2(name, count) const struct { \
15  uint16_t red[count]; \
16  uint16_t green[count]; \
17  } __attribute__((packed)) name
18 
19 LED_STRUCT2(ramp_offset_seq, 5) = {
20  {0, 0, 1000, 1000, 0},
21  {0, 1000, 1000, 0, 0}
22 };
23 const uint16_t ramp_offset_duration[] = { 0, 2000, 2000, 2000, 2000, 8000 };
24 
25 LED_STRUCT1(red_pulse_seq, 6) = {
26  {0, 1000, 1000, 0, 200, 0}
27 };
28 const uint16_t red_pulse_duration[] = { 0, 2000, 2000, 2000, 500, 500, 7000 };
29 
30 LED_STRUCT2(orange_wave_seq, 3) = {
31  {0, 1000, 0},
32  {0, 1000, 0}
33 };
34 const uint16_t orange_wave_duration[] = { 0, 2500, 2500, 5000 };
35 
36 LED_STRUCT2(dual_freq_seq, 5) = {
37  {0, 1000, 0, 1000, 0},
38  {0, 500, 1000, 500, 0}
39 };
40 const uint16_t dual_freq_duration[] = { 0, 2000, 2000, 2000, 2000, 8000 };
41 
42 LED_STRUCT1(pir_pulse_seq, 4) = {
43  {0, 1000, 1000, 0}
44 };
45 const uint16_t pir_pulse_duration[] = { 0, 25, 250, 25, 300 };
46 
47 LED_STRUCT2(green_wave_seq, 5) = {
48  {0, 0, 0, 0, 0},
49  {0, 1000, 200, 0, 0}
50 };
51 const uint16_t green_wave_duration[] = { 0, 1000, 1000, 2000, 1000, 5000 };
52 
53 const uint32_t led_num_len[] = {2, 1, 2, 2, 1, 2};
54 const uint32_t led_seq_len[] = {5, 6, 3, 5, 4, 5};
55 const uint16_t * const led_seq_ptr[] = {(uint16_t *) &ramp_offset_seq, (uint16_t *) &red_pulse_seq, (uint16_t *) &orange_wave_seq, (uint16_t *) &dual_freq_seq, (uint16_t *) &pir_pulse_seq, (uint16_t *) &green_wave_seq };
56 const uint16_t * const led_seq_duration_ptr[] = { ramp_offset_duration, red_pulse_duration, orange_wave_duration, dual_freq_duration, pir_pulse_duration, green_wave_duration };
57 
58 const uint32_t led_pin_num[LED_COLOR_MAX] = {LED_RED, LED_GREEN};
59 
60 const uint32_t * const led_seq_get_pin_ptr(void)
61 {
62  return led_pin_num;
63 }
64 
65 uint32_t led_seq_get_pin_num(led_sequences seq)
66 {
67  return led_num_len[seq];
68 }
69 
70 uint32_t led_seq_get_seg_len(led_sequences seq)
71 {
72  return led_seq_len[seq];
73 }
74 
75 uint16_t * led_seq_get_seq_color_ptr(led_sequences seq, led_seq_color color)
76 {
77  return ((uint16_t *)(led_seq_ptr[seq] + color*led_seq_len[seq]));
78 }
79 
80 uint16_t * led_seq_get_seq_duration_ptr(led_sequences seq)
81 {
82  return (uint16_t *) led_seq_duration_ptr[seq];
83 }
84