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.
10 #include <util/delay.h>
11 #include <avr/pgmspace.h>
15 ${modulevar("buffer", "uint8_t", "{}B".format(member["length"]*3), array=member["length"]*3)};
17 % for [name, start, len] in member.get("segments", []):
18 //CAUTION Despite this being a comment, the module variable registration template call is still handled.
19 //${modulevar("buffer_"+name, None, "{}B".format(len*3),
20 callbacks=(("generic_getter_callback", modulevar("buffer")+'+'+str(start*3), len*3),
21 (None, modulevar("buffer")+'+'+str(start*3), len*3)))};
24 #define NR_OF_PATTERNS 11
26 const uint8_t patterns[NR_OF_PATTERNS*${member["length"]*3}] PROGMEM = {
28 % for i in range(member["length"]):
32 // TEMPLATE CODE //////////////////////////////////////
34 % for i in range(member["length"]):
35 <% foo=int(i*6/member["length"]) %>
36 <% r=i-foo*member["length"]/6 %>
39 ${r*6/member["length"]}*255,
43 ${1-r*6/member["length"]}*255,
50 ${r*6/member["length"]}*255,
54 ${1-r*6/member["length"]}*255,
58 ${r*6/member["length"]}*255,
65 ${1-r*6/member["length"]}*255,
70 // TEMPLATE CODE //////////////////////////////////////
73 % for i in range(member["length"]):
82 // TEMPLATE CODE //////////////////////////////////////
84 // blaue/gruene wuerstchen
85 % for i in range(member["length"]):
94 // TEMPLATE CODE //////////////////////////////////////
96 // rote lange wuerstchen
97 % for i in range(member["length"]):
106 // TEMPLATE CODE //////////////////////////////////////
108 // rote lange wuerstchen
109 % for i in range(member["length"]):
118 // TEMPLATE CODE //////////////////////////////////////
120 // kleiner weisser pupsi
122 % for i in range(member["length"]):
131 // TEMPLATE CODE //////////////////////////////////////
133 // kleiner blauer pupsi
135 % for i in range(member["length"]):
143 // TEMPLATE CODE //////////////////////////////////////
145 // kleiner gruener pupsi
147 % for i in range(member["length"]):
156 // TEMPLATE CODE //////////////////////////////////////
158 // kleiner roter pupsi
160 % for i in range(member["length"]):
169 // TEMPLATE CODE //////////////////////////////////////
172 % for i in range(member["length"]):
183 //% for i in range(member["length"]):
193 //--- CALLBACK REGISTRATION DO NOT REMOVE ---
194 //${modulevar("pattern", None, "B", callbacks=((True, "global_argbuf", "ARGBUF_SIZE"), (True, "global_argbuf", "ARGBUF_SIZE")))}
195 //--- CALLBACK REGISTRATION DO NOT REMOVE ---
196 void ${setter("pattern")} (const comm_callback_descriptor* cb, void* argbuf_end){
197 uint8_t pattern=((uint8_t*)cb->argbuf)[0];
198 if (pattern < NR_OF_PATTERNS) {
199 memcpy_PF(${modulevar("buffer")}, patterns+(${member["length"]*3}*pattern), ${member["length"]*3});
205 void ${getter("pattern")} (const comm_callback_descriptor* cb, void* argbuf_end){
210 ${modulevar("offset", "int16_t", "h")} = 0;
211 ${modulevar("speed", "int8_t", "b")} = ${member.get("speed", 2)};
213 void ${loop_function()}(void){
214 for(uint16_t i=0; i<${member["length"]}; i++){
215 uint16_t j=${modulevar("offset")}+i;
216 if(j>=${member["length"]})
217 j-=${member["length"]};
218 spi_transfer(${modulevar("buffer")}[j*3]);
219 spi_transfer(${modulevar("buffer")}[j*3+1]);
220 spi_transfer(${modulevar("buffer")}[j*3+2]);
222 ${modulevar("offset")}+=${modulevar("speed")};
223 if(${modulevar("offset")}>=${member["length"]})
224 ${modulevar("offset")}-=${member["length"]};
225 if(${modulevar("offset")}<0)
226 ${modulevar("offset")}+=${member["length"]};
230 void ${init_function()}(void){
232 memcpy_PF(${modulevar("buffer")}, patterns+(${member["length"]*3}*index), ${member["length"]*3});