Modified some modules to work with the new generator
[cerebrum.git] / avr / ws2801-patterns.c.tp
blobe7d50ad625c909012c61136d739a4c02015ac585
1 /*
2  Copyright (C) 2012 jaseg <s@jaseg.de>
4  This program is free software; you can redistribute it and/or
5  modify it under the terms of the GNU General Public License
6  version 3 as published by the Free Software Foundation.
7  */
9 #include <avr/io.h>
10 #include <util/delay.h>
11 #include <avr/pgmspace.h>
13 #include "spi.h"
15 ${modulevar("buffer", "uint8_t", "{}B".format(member["length"]*3), array=member["length"]*3)};
16 //   B     G     R
17 #define NR_OF_PATTERNS 11
19 const uint8_t patterns[NR_OF_PATTERNS*${member["length"]*3}] PROGMEM = {
21 % for i in range(member["length"]):
22     0x00, 0x00, 0x00,
23 % endfor
25 // TEMPLATE CODE //////////////////////////////////////
27 % for i in range(member["length"]):
28 <% foo=int(i*6/member["length"]) %>
29 <% r=i-foo*member["length"]/6 %>
30 % if foo == 0:
31         0xFF,
32         ${r*6/member["length"]}*255,
33         0x00,
34 % endif
35 % if foo == 1:
36         ${1-r*6/member["length"]}*255,
37         0xFF,
38         0x00,
39 % endif
40 % if foo == 2:
41         0x00,
42         0xFF,
43         ${r*6/member["length"]}*255,
44 % endif
45 % if foo == 3:
46         0x00,
47         ${1-r*6/member["length"]}*255,
48         0xFF,
49 % endif
50 % if foo == 4:
51         ${r*6/member["length"]}*255,
52         0x00,
53         0xFF,
54 % endif
55 % if foo == 5:
56         0xFF,
57         0x00,
58         ${1-r*6/member["length"]}*255,
59 % endif
60 % endfor
63 // TEMPLATE CODE //////////////////////////////////////
64 // gruene wuerstchen
66 % for i in range(member["length"]):
67 % if i % 64 < 32:
68     0x00, 0xFF, 0x00,
69 % else:
70     0x00, 0x00, 0x00,
71 % endif
72 % endfor
75 // TEMPLATE CODE //////////////////////////////////////
77 // blaue/gruene wuerstchen
78 % for i in range(member["length"]):
79 % if (i+1) % 64 < 32:
80     0x00, 0xFF, 0x00,
81 % else:
82     0xFF, 0x00, 0x00,
83 % endif
84 % endfor
87 // TEMPLATE CODE //////////////////////////////////////
89 // rote lange wuerstchen
90 % for i in range(member["length"]):
91 % if i % 128 < 64:
92     0xFF, 0x00, 0x00,
93 % else:
94     0x00, 0x00, 0x00,
95 % endif
96 % endfor
99 // TEMPLATE CODE //////////////////////////////////////
101 // rote lange wuerstchen
102 % for i in range(member["length"]):
103 % if i % 128 < 64:
104     0x00, 0x00, 0xFF,
105 % else:
106     0x00, 0x00, 0x00,
107 % endif
108 % endfor
111 // TEMPLATE CODE //////////////////////////////////////
113 // kleiner weisser pupsi
115 % for i in range(member["length"]):
116 % if i % 256 < 16:
117         0xFF, 0xFF, 0xFF,
118 % else:
119     0x00, 0x00, 0x00,
120 % endif
121 % endfor
124 // TEMPLATE CODE //////////////////////////////////////
126 // kleiner blauer pupsi
128 % for i in range(member["length"]):
129 % if i % 256 < 16:
130         0xFF, 0x00, 0x00,
131 % else:
132     0x00, 0x00, 0x00,
133 % endif
134 % endfor
136 // TEMPLATE CODE //////////////////////////////////////
138 // kleiner gruener pupsi
140 % for i in range(member["length"]):
141 % if i % 256 < 16:
142         0x00, 0xFF, 0x00,
143 % else:
144     0x00, 0x00, 0x00,
145 % endif
146 % endfor
149 // TEMPLATE CODE //////////////////////////////////////
151 // kleiner roter pupsi
153 % for i in range(member["length"]):
154 % if i % 256 < 16:
155         0x00, 0x00, 0xFF,
156 % else:
157     0x00, 0x00, 0x00,
158 % endif
159 % endfor
162 // TEMPLATE CODE //////////////////////////////////////
163 // notbeleuchtung
165 % for i in range(member["length"]):
166 % if i % 32 < 4:
167     0x00, 0x24, 0x24,
168 % else:
169     0x00, 0x00, 0x00,
170 % endif
171 % endfor
174 // notbeleuchtung
176 //% for i in range(member["length"]):
177 //% if i % 32 < 4:
178     //0x00, 0x24, 0x24,
179 //% else:
180     //0x00, 0x00, 0x00,
181 //% endif
182 //% endfor
186 //--- CALLBACK REGISTRATION DO NOT REMOVE ---
187 //${modulevar("pattern", None, "B", callbacks=((True, "global_argbuf", "ARGBUF_SIZE"), (True, "global_argbuf", "ARGBUF_SIZE")))}
188 //--- CALLBACK REGISTRATION DO NOT REMOVE ---
189 void callback_set_${modulevar("pattern")} (const comm_callback_descriptor* cb, void* argbuf_end){
190     uint8_t pattern=((uint8_t*)cb->argbuf)[0];
191     if (pattern < NR_OF_PATTERNS) {
192         memcpy_PF(${modulevar("buffer")}, patterns+(${member["length"]*3}*pattern), ${member["length"]*3});
193     }
194     uart_putc(0x00);
195     uart_putc(0x00);
198 void callback_get_${modulevar("pattern")} (const comm_callback_descriptor* cb, void* argbuf_end){
199     uart_putc(0x00);
200     uart_putc(0x00);
203 ${modulevar("offset", "int16_t", "h")} = 0;
204 ${modulevar("speed", "int8_t", "b")} = 2;
206 void ${loop_function()}(void){
207         for(uint16_t i=0; i<${member["length"]}; i++){
208                 uint16_t j=${modulevar("offset")}+i;
209                 if(j>=${member["length"]})
210                         j-=${member["length"]};
211                 spi_transfer(${modulevar("buffer")}[j*3]);
212                 spi_transfer(${modulevar("buffer")}[j*3+1]);
213                 spi_transfer(${modulevar("buffer")}[j*3+2]);
214         }
215         ${modulevar("offset")}+=${modulevar("speed")};
216         if(${modulevar("offset")}>=${member["length"]})
217                 ${modulevar("offset")}-=${member["length"]};
218     if(${modulevar("offset")}<0)
219         ${modulevar("offset")}+=${member["length"]};
220         _delay_us(1000);
223 void ${init_function()}(void){
224     uint8_t index = 1;
225     memcpy_PF(${modulevar("buffer")}, patterns+(${member["length"]*3}*index), ${member["length"]*3});