Switch from GPLv2 to GPLv2+
[fw/altos] / src / drivers / ao_seven_segment.c
index b3b5f87827ad4370062b6ad3dc0429e2c6e3cf2d..d2e1248f70f61e12f9fc3dee48005700ca5f8f8c 100644 (file)
@@ -3,7 +3,8 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY; without even the implied warranty of
  *
  */
 
+#ifndef SEVEN_SEGMENT_DEBUG
+#define SEVEN_SEGMENT_DEBUG 0
+#endif
+
 static const uint8_t ao_segments[] = {
-       (1 << AO_SEGMENT_0) |
-       (1 << AO_SEGMENT_1) |
-       (1 << AO_SEGMENT_2) |
-       (0 << AO_SEGMENT_3) |
-       (1 << AO_SEGMENT_4) |
-       (1 << AO_SEGMENT_5) |
-       (1 << AO_SEGMENT_6),            /* 0 */
-
-       (0 << AO_SEGMENT_0) |
-       (0 << AO_SEGMENT_1) |
-       (1 << AO_SEGMENT_2) |
-       (0 << AO_SEGMENT_3) |
-       (0 << AO_SEGMENT_4) |
-       (1 << AO_SEGMENT_5) |
-       (0 << AO_SEGMENT_6),            /* 1 */
-
-       (1 << AO_SEGMENT_0) |
-       (0 << AO_SEGMENT_1) |
-       (1 << AO_SEGMENT_2) |
-       (1 << AO_SEGMENT_3) |
-       (1 << AO_SEGMENT_4) |
-       (0 << AO_SEGMENT_5) |
-       (1 << AO_SEGMENT_6),            /* 2 */
-
-       (1 << AO_SEGMENT_0) |
-       (0 << AO_SEGMENT_1) |
-       (1 << AO_SEGMENT_2) |
-       (1 << AO_SEGMENT_3) |
-       (0 << AO_SEGMENT_4) |
-       (1 << AO_SEGMENT_5) |
-       (1 << AO_SEGMENT_6),            /* 3 */
-
-       (0 << AO_SEGMENT_0) |
-       (1 << AO_SEGMENT_1) |
-       (1 << AO_SEGMENT_2) |
-       (1 << AO_SEGMENT_3) |
-       (0 << AO_SEGMENT_4) |
-       (1 << AO_SEGMENT_5) |
-       (0 << AO_SEGMENT_6),            /* 4 */
-
-       (1 << AO_SEGMENT_0) |
-       (1 << AO_SEGMENT_1) |
-       (0 << AO_SEGMENT_2) |
-       (1 << AO_SEGMENT_3) |
-       (0 << AO_SEGMENT_4) |
-       (1 << AO_SEGMENT_5) |
-       (1 << AO_SEGMENT_6),            /* 5 */
-
-       (1 << AO_SEGMENT_0) |
-       (1 << AO_SEGMENT_1) |
-       (0 << AO_SEGMENT_2) |
-       (1 << AO_SEGMENT_3) |
-       (1 << AO_SEGMENT_4) |
-       (1 << AO_SEGMENT_5) |
-       (1 << AO_SEGMENT_6),            /* 6 */
-
-       (1 << AO_SEGMENT_0) |
-       (0 << AO_SEGMENT_1) |
-       (1 << AO_SEGMENT_2) |
-       (0 << AO_SEGMENT_3) |
-       (0 << AO_SEGMENT_4) |
-       (1 << AO_SEGMENT_5) |
-       (0 << AO_SEGMENT_6),            /* 7 */
-
-       (1 << AO_SEGMENT_0) |
-       (1 << AO_SEGMENT_1) |
-       (1 << AO_SEGMENT_2) |
-       (1 << AO_SEGMENT_3) |
-       (1 << AO_SEGMENT_4) |
-       (1 << AO_SEGMENT_5) |
-       (1 << AO_SEGMENT_6),            /* 8 */
-
-       (1 << AO_SEGMENT_0) |
-       (1 << AO_SEGMENT_1) |
-       (1 << AO_SEGMENT_2) |
-       (1 << AO_SEGMENT_3) |
-       (0 << AO_SEGMENT_4) |
-       (1 << AO_SEGMENT_5) |
-       (1 << AO_SEGMENT_6),            /* 9 */
-
-       (1 << AO_SEGMENT_0) |
-       (1 << AO_SEGMENT_1) |
-       (1 << AO_SEGMENT_2) |
-       (1 << AO_SEGMENT_3) |
-       (1 << AO_SEGMENT_4) |
-       (1 << AO_SEGMENT_5) |
-       (0 << AO_SEGMENT_6),            /* A */
-
-       (0 << AO_SEGMENT_0) |
-       (1 << AO_SEGMENT_1) |
-       (0 << AO_SEGMENT_2) |
-       (1 << AO_SEGMENT_3) |
-       (1 << AO_SEGMENT_4) |
-       (1 << AO_SEGMENT_5) |
-       (1 << AO_SEGMENT_6),            /* b */
-
-       (1 << AO_SEGMENT_0) |
-       (1 << AO_SEGMENT_1) |
-       (0 << AO_SEGMENT_2) |
-       (0 << AO_SEGMENT_3) |
-       (1 << AO_SEGMENT_4) |
-       (0 << AO_SEGMENT_5) |
-       (1 << AO_SEGMENT_6),            /* c */
-
-       (0 << AO_SEGMENT_0) |
-       (0 << AO_SEGMENT_1) |
-       (1 << AO_SEGMENT_2) |
-       (1 << AO_SEGMENT_3) |
-       (1 << AO_SEGMENT_4) |
-       (1 << AO_SEGMENT_5) |
-       (1 << AO_SEGMENT_6),            /* d */
-
-       (1 << AO_SEGMENT_0) |
-       (1 << AO_SEGMENT_1) |
-       (0 << AO_SEGMENT_2) |
-       (1 << AO_SEGMENT_3) |
-       (1 << AO_SEGMENT_4) |
-       (0 << AO_SEGMENT_5) |
-       (1 << AO_SEGMENT_6),            /* E */
-
-       (1 << AO_SEGMENT_0) |
-       (1 << AO_SEGMENT_1) |
-       (0 << AO_SEGMENT_2) |
-       (1 << AO_SEGMENT_3) |
-       (1 << AO_SEGMENT_4) |
-       (0 << AO_SEGMENT_5) |
-       (0 << AO_SEGMENT_6),            /* F */
+       (1 << 0) |
+       (1 << 1) |
+       (1 << 2) |
+       (0 << 3) |
+       (1 << 4) |
+       (1 << 5) |
+       (1 << 6),               /* 0 */
+
+       (0 << 0) |
+       (0 << 1) |
+       (1 << 2) |
+       (0 << 3) |
+       (0 << 4) |
+       (1 << 5) |
+       (0 << 6),               /* 1 */
+
+       (1 << 0) |
+       (0 << 1) |
+       (1 << 2) |
+       (1 << 3) |
+       (1 << 4) |
+       (0 << 5) |
+       (1 << 6),               /* 2 */
+
+       (1 << 0) |
+       (0 << 1) |
+       (1 << 2) |
+       (1 << 3) |
+       (0 << 4) |
+       (1 << 5) |
+       (1 << 6),               /* 3 */
+
+       (0 << 0) |
+       (1 << 1) |
+       (1 << 2) |
+       (1 << 3) |
+       (0 << 4) |
+       (1 << 5) |
+       (0 << 6),               /* 4 */
+
+       (1 << 0) |
+       (1 << 1) |
+       (0 << 2) |
+       (1 << 3) |
+       (0 << 4) |
+       (1 << 5) |
+       (1 << 6),               /* 5 */
+
+       (1 << 0) |
+       (1 << 1) |
+       (0 << 2) |
+       (1 << 3) |
+       (1 << 4) |
+       (1 << 5) |
+       (1 << 6),               /* 6 */
+
+       (1 << 0) |
+       (0 << 1) |
+       (1 << 2) |
+       (0 << 3) |
+       (0 << 4) |
+       (1 << 5) |
+       (0 << 6),               /* 7 */
+
+       (1 << 0) |
+       (1 << 1) |
+       (1 << 2) |
+       (1 << 3) |
+       (1 << 4) |
+       (1 << 5) |
+       (1 << 6),               /* 8 */
+
+       (1 << 0) |
+       (1 << 1) |
+       (1 << 2) |
+       (1 << 3) |
+       (0 << 4) |
+       (1 << 5) |
+       (1 << 6),               /* 9 */
+
+       (1 << 0) |
+       (1 << 1) |
+       (1 << 2) |
+       (1 << 3) |
+       (1 << 4) |
+       (1 << 5) |
+       (0 << 6),               /* A */
+
+       (0 << 0) |
+       (1 << 1) |
+       (0 << 2) |
+       (1 << 3) |
+       (1 << 4) |
+       (1 << 5) |
+       (1 << 6),               /* b */
+
+       (1 << 0) |
+       (1 << 1) |
+       (0 << 2) |
+       (0 << 3) |
+       (1 << 4) |
+       (0 << 5) |
+       (1 << 6),               /* c */
+
+       (0 << 0) |
+       (0 << 1) |
+       (1 << 2) |
+       (1 << 3) |
+       (1 << 4) |
+       (1 << 5) |
+       (1 << 6),               /* d */
+
+       (1 << 0) |
+       (1 << 1) |
+       (0 << 2) |
+       (1 << 3) |
+       (1 << 4) |
+       (0 << 5) |
+       (1 << 6),               /* E */
+
+       (1 << 0) |
+       (1 << 1) |
+       (0 << 2) |
+       (1 << 3) |
+       (1 << 4) |
+       (0 << 5) |
+       (0 << 6),               /* F */
 };
 
+
 void
-ao_seven_segment_set(uint8_t digit, uint8_t value)
+ao_seven_segment_direct(uint8_t digit, uint8_t segments)
 {
        uint8_t s;
+
+       for (s = 0; s <= 7; s++)
+               ao_lcd_set(digit, s, !!(segments & (1 << s)));
+       ao_lcd_flush();
+}
+
+void
+ao_seven_segment_set(uint8_t digit, uint8_t value)
+{
        uint8_t segments;
 
        if (value == AO_SEVEN_SEGMENT_CLEAR)
@@ -177,12 +192,9 @@ ao_seven_segment_set(uint8_t digit, uint8_t value)
 
                /* Check for decimal point */
                if (value & 0x10)
-                       segments |= (1 << AO_SEGMENT_7);
+                       segments |= (1 << 7);
        }
-
-       for (s = 0; s <= 7; s++)
-               ao_lcd_set(digit, s, !!(segments & (1 << s)));
-       ao_lcd_flush();
+       ao_seven_segment_direct(digit, segments);
 }
 
 void
@@ -192,7 +204,7 @@ ao_seven_segment_clear(void)
 }
 
 
-#if 0
+#if SEVEN_SEGMENT_DEBUG
 static void
 ao_seven_segment_show(void)
 {
@@ -214,7 +226,7 @@ static const struct ao_cmds ao_seven_segment_cmds[] = {
 void
 ao_seven_segment_init(void)
 {
-#if 0
+#if SEVEN_SEGMENT_DEBUG
        ao_cmd_register(ao_seven_segment_cmds);
 #endif
 }