summaryrefslogtreecommitdiff
path: root/src/display.cc
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2016-01-26 19:52:54 +0100
committerDaniel Friesel <derf@finalrewind.org>2016-01-26 19:52:54 +0100
commitce235210b76332493ee5c78bded63fb5b69ff6d3 (patch)
treeea47e5c775409b88f4e5b870aa807e2c84692e7f /src/display.cc
parent0e8a263587c91fe0b8bf177ec94a49c207eef4cf (diff)
preliminary animation support
Diffstat (limited to 'src/display.cc')
-rw-r--r--src/display.cc63
1 files changed, 40 insertions, 23 deletions
diff --git a/src/display.cc b/src/display.cc
index 0767c4f..f3d48da 100644
--- a/src/display.cc
+++ b/src/display.cc
@@ -61,27 +61,37 @@ void Display::update() {
if (need_update) {
need_update = 0;
- for (i = 0; i < 7; i++) {
- disp_buf[i] = disp_buf[i+1];
- }
-
- glyph_addr = (uint8_t *)pgm_read_ptr(&font[display.data_buf[str_pos]]);
- glyph_len = pgm_read_byte(&glyph_addr[0]);
- char_pos++;
-
- if (char_pos > glyph_len) {
- char_pos = 0;
- str_pos++;
- }
-
- if (display.data_buf[str_pos] == 0) {
- str_pos = 0;
- }
-
- if (char_pos == 0) {
- disp_buf[7] = 0xff; // whitespace
- } else {
- disp_buf[7] = ~pgm_read_byte(&glyph_addr[char_pos]);
+ if (mode == TEXT) {
+ for (i = 0; i < 7; i++) {
+ disp_buf[i] = disp_buf[i+1];
+ }
+
+ glyph_addr = (uint8_t *)pgm_read_ptr(&font[display.data_buf[str_pos]]);
+ glyph_len = pgm_read_byte(&glyph_addr[0]);
+ char_pos++;
+
+ if (char_pos > glyph_len) {
+ char_pos = 0;
+ str_pos++;
+ }
+
+ if (display.data_buf[str_pos] == 0) {
+ str_pos = 0;
+ }
+
+ if (char_pos == 0) {
+ disp_buf[7] = 0xff; // whitespace
+ } else {
+ disp_buf[7] = ~pgm_read_byte(&glyph_addr[char_pos]);
+ }
+ } else if (mode == ANIMATION) {
+ for (i = 0; i < 8; i++) {
+ disp_buf[i] = ~display.data_buf[str_pos+i];
+ }
+ str_pos += 8;
+ if (str_pos == 32) {
+ str_pos = 0;
+ }
}
}
}
@@ -94,9 +104,16 @@ void Display::reset()
char_pos = -1;
}
-void Display::show(text t)
+void Display::show(text_t text)
+{
+ mode = TEXT;
+ show(text.str);
+}
+
+void Display::show(animation_t anim)
{
- show(t.str);
+ mode = ANIMATION;
+ show(anim.data);
}
void Display::show(uint8_t *str)