- add eepromdata.h
[moodlight.git] / ledframing.c
CommitLineData
9d076ea0 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
12static uint8_t framesused;
13static uint8_t currentframe;
14static struct frame framebuffer[MAX_FRAMES];
15
16void ledframing_init() {
17 framesused = currentframe = 0;
18}
19
20uint8_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
34uint8_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
49uint8_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
63struct frame * getnextframe(void) {
64 if (currentframe < framesused) {
65 currentframe++;
66 return &framebuffer[currentframe - 1];
67 }
68 /* No frames left */
69 return NULL;
70}
71
72void resetframes() {
73 framesused = currentframe = 0;
74}
This page took 0.044991 seconds and 4 git commands to generate.