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 #define NR_OF_PATTERNS 11
19 const uint8_t patterns[NR_OF_PATTERNS*${member["length"]*3}] PROGMEM = {
21 % for i in range(member["length"]):
25 // TEMPLATE CODE //////////////////////////////////////
27 % for i in range(member["length"]):
28 <% foo=int(i*6/member["length"]) %>
29 <% r=i-foo*member["length"]/6 %>
32 ${r*6/member["length"]}*255,
36 ${1-r*6/member["length"]}*255,
43 ${r*6/member["length"]}*255,
47 ${1-r*6/member["length"]}*255,
51 ${r*6/member["length"]}*255,
58 ${1-r*6/member["length"]}*255,
63 // TEMPLATE CODE //////////////////////////////////////
66 % for i in range(member["length"]):
75 // TEMPLATE CODE //////////////////////////////////////
77 // blaue/gruene wuerstchen
78 % for i in range(member["length"]):
87 // TEMPLATE CODE //////////////////////////////////////
89 // rote lange wuerstchen
90 % for i in range(member["length"]):
99 // TEMPLATE CODE //////////////////////////////////////
101 // rote lange wuerstchen
102 % for i in range(member["length"]):
111 // TEMPLATE CODE //////////////////////////////////////
113 // kleiner weisser pupsi
115 % for i in range(member["length"]):
124 // TEMPLATE CODE //////////////////////////////////////
126 // kleiner blauer pupsi
128 % for i in range(member["length"]):
136 // TEMPLATE CODE //////////////////////////////////////
138 // kleiner gruener pupsi
140 % for i in range(member["length"]):
149 // TEMPLATE CODE //////////////////////////////////////
151 // kleiner roter pupsi
153 % for i in range(member["length"]):
162 // TEMPLATE CODE //////////////////////////////////////
165 % for i in range(member["length"]):
176 //% for i in range(member["length"]):
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});
198 void callback_get_${modulevar("pattern")} (const comm_callback_descriptor* cb, void* argbuf_end){
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]);
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"]};
223 void ${init_function()}(void){
225 memcpy_PF(${modulevar("buffer")}, patterns+(${member["length"]*3}*index), ${member["length"]*3});