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(green_pulse_seq, 7) = {
20  {0, 0, 0, 0, 0, 0, 0},
21  {0, 1000, 0, 1000, 0, 1000, 0}
22 };
23 const uint16_t green_pulse_duration[] = { 0, 100, 100, 100, 100, 100, 100, 600 };
24 
25 LED_STRUCT2(detect_sync_seq, 4) = {
26  {0, 0, 0, 0},
27  {0, 1000, 1000, 0}
28 };
29 const uint16_t detect_sync_duration[] = { 0, 250, 500, 250, 1000 };
30 
31 LED_STRUCT1(detect_pulse_seq, 4) = {
32  {0, 1000, 1000, 0}
33 };
34 const uint16_t detect_pulse_duration[] = { 0, 250, 500, 250, 1000 };
35 
36 LED_STRUCT2(ramp_offset_seq, 5) = {
37  {0, 0, 1000, 1000, 0},
38  {0, 1000, 1000, 0, 0}
39 };
40 const uint16_t ramp_offset_duration[] = { 0, 2000, 2000, 2000, 2000, 8000 };
41 
42 LED_STRUCT1(red_pulse_seq, 7) = {
43  {0, 1000, 0, 1000, 0, 1000, 0}
44 };
45 const uint16_t red_pulse_duration[] = { 0, 100, 100, 100, 100, 100, 100, 600 };
46 
47 LED_STRUCT2(orange_wave_seq, 3) = {
48  {0, 1000, 0},
49  {0, 1000, 0}
50 };
51 const uint16_t orange_wave_duration[] = { 0, 2500, 2500, 5000 };
52 
53 LED_STRUCT2(orange_pulse_seq, 7) = {
54  {0, 1000, 0, 1000, 0, 1000, 0},
55  {0, 1000, 0, 1000, 0, 1000, 0}
56 };
57 const uint16_t orange_pulse_duration[] = { 0, 100, 100, 100, 100, 100, 100, 600 };
58 
59 LED_STRUCT1(detect_window_seq, 2) = {
60  {0, 0}
61 };
62 const uint16_t detect_window_duration[] = { 0, 500, 500 };
63 
64 LED_STRUCT2(dual_freq_seq, 5) = {
65  {0, 1000, 0, 1000, 0},
66  {0, 500, 1000, 500, 0}
67 };
68 const uint16_t dual_freq_duration[] = { 0, 2000, 2000, 2000, 2000, 8000 };
69 
70 LED_STRUCT2(green_wave_seq, 5) = {
71  {0, 0, 0, 0, 0},
72  {0, 1000, 200, 0, 0}
73 };
74 const uint16_t green_wave_duration[] = { 0, 1000, 1000, 2000, 1000, 5000 };
75 
76 const uint32_t led_num_len[] = {2, 2, 1, 2, 1, 2, 2, 1, 2, 2};
77 const uint32_t led_seq_len[] = {7, 4, 4, 5, 7, 3, 7, 2, 5, 5};
78 const uint16_t * const led_seq_ptr[] = {(uint16_t *) &green_pulse_seq, (uint16_t *) &detect_sync_seq, (uint16_t *) &detect_pulse_seq, (uint16_t *) &ramp_offset_seq, (uint16_t *) &red_pulse_seq, (uint16_t *) &orange_wave_seq, (uint16_t *) &orange_pulse_seq, (uint16_t *) &detect_window_seq, (uint16_t *) &dual_freq_seq, (uint16_t *) &green_wave_seq };
79 const uint16_t * const led_seq_duration_ptr[] = { green_pulse_duration, detect_sync_duration, detect_pulse_duration, ramp_offset_duration, red_pulse_duration, orange_wave_duration, orange_pulse_duration, detect_window_duration, dual_freq_duration, green_wave_duration };
80 
81 const uint32_t led_pin_num[LED_COLOR_MAX] = {LED_RED, LED_GREEN};
82 
83 const uint32_t * const led_seq_get_pin_ptr(void)
84 {
85  return led_pin_num;
86 }
87 
88 uint32_t led_seq_get_pin_num(led_sequences seq)
89 {
90  return led_num_len[seq];
91 }
92 
93 uint32_t led_seq_get_seg_len(led_sequences seq)
94 {
95  return led_seq_len[seq];
96 }
97 
98 uint16_t * led_seq_get_seq_color_ptr(led_sequences seq, led_seq_color color)
99 {
100  return ((uint16_t *)(led_seq_ptr[seq] + color*led_seq_len[seq]));
101 }
102 
103 uint16_t * led_seq_get_seq_duration_ptr(led_sequences seq)
104 {
105  return (uint16_t *) led_seq_duration_ptr[seq];
106 }
107