completely redid PWM: Now calculate 'microprograms', i.e. pairs of
[moodlight.git] / ledframing.c
1 /* $Id: ledframing.c,v 1.1 2010/07/10 09:28:52 simimeie Exp $
2  * Functions for led "animations"
3  */
4
5 #include <avr/io.h>
6 #include <avr/interrupt.h>
7 #include <string.h>
8 #include "ledframing.h"
9 #include "ledpwm.h"
10 #include "console.h"
11
12 static uint8_t framesused;
13 static uint8_t currentframe;
14 static struct frame framebuffer[MAX_FRAMES];
15
16 void ledframing_init() {
17   framesused = currentframe = 0;
18 }
19
20 uint8_t addframe_frame(struct frame fr) {
21   if ((framesused + 1) >= MAX_FRAMES) { /* Out of memory */
22     return 0;
23   }
24   if (fr.action > MAX_ACTION) { /* Invalid / unknown action */
25     return 0;
26   }
27   
28   framebuffer[framesused] = fr;
29   framesused++;
30   
31   return 1;
32 }
33
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 */
36     return 0;
37   }
38   
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;
44   framesused++;
45   
46   return 1;
47 }
48
49 uint8_t addframe_strobe(uint16_t duration, uint16_t onticks, uint16_t offticks) {
50   if ((framesused + 1) >= MAX_FRAMES) { /* Out of memory */
51     return 0;
52   }
53   
54   framebuffer[framesused].action = ACTION_STROBE;
55   framebuffer[framesused].duration = duration;
56   framebuffer[framesused].strobe.onticks = onticks;
57   framebuffer[framesused].strobe.offticks = offticks;
58   framesused++;
59   
60   return 1;
61 }
62
63 struct frame * getnextframe(void) {
64   if (currentframe < framesused) {
65     currentframe++;
66     return &framebuffer[currentframe - 1];
67   }
68   /* No frames left */
69   return NULL;
70 }
71
72 void resetframes() {
73   framesused = currentframe = 0;
74 }
This page took 0.06823 seconds and 3 git commands to generate.