1 /* $Id: ledframing.c,v 1.1 2010/07/10 09:28:52 simimeie Exp $
2 * Functions for led "animations"
6 #include <avr/interrupt.h>
8 #include "ledframing.h"
12 static uint8_t framesused;
13 static uint8_t currentframe;
14 static struct frame framebuffer[MAX_FRAMES];
16 void ledframing_init() {
17 framesused = currentframe = 0;
20 uint8_t addframe_frame(struct frame fr) {
21 if ((framesused + 1) >= MAX_FRAMES) { /* Out of memory */
24 if (fr.action > MAX_ACTION) { /* Invalid / unknown action */
28 framebuffer[framesused] = fr;
34 uint8_t addframe_fade(uint16_t duration, uint8_t red, uint8_t green, uint8_t blue) {
35 if ((framesused + 1) >= MAX_FRAMES) { /* Out of memory */
39 framebuffer[framesused].action = ACTION_FADE;
40 framebuffer[framesused].duration = duration;
41 framebuffer[framesused].rgb.re = red;
42 framebuffer[framesused].rgb.gr = green;
43 framebuffer[framesused].rgb.bl = blue;
49 uint8_t addframe_strobe(uint16_t duration, uint16_t onticks, uint16_t offticks) {
50 if ((framesused + 1) >= MAX_FRAMES) { /* Out of memory */
54 framebuffer[framesused].action = ACTION_STROBE;
55 framebuffer[framesused].duration = duration;
56 framebuffer[framesused].strobe.onticks = onticks;
57 framebuffer[framesused].strobe.offticks = offticks;
63 struct frame * getnextframe(void) {
64 if (currentframe < framesused) {
66 return &framebuffer[currentframe - 1];
73 framesused = currentframe = 0;