Add lots more aoview UI bits
[fw/altos] / ao_led.c
index c46e2eba29379481c18b1d4df0f710df765d5d38..6c698b4be42192b6532f9278d617c4230743d64f 100644 (file)
--- a/ao_led.c
+++ b/ao_led.c
@@ -3,8 +3,7 @@
  *
  * 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; either version 2 of the License, or
- * (at your option) any later version.
+ * the Free Software Foundation; version 2 of the License.
  *
  * This program is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY; without even the implied warranty of
 
 #include "ao.h"
 
-void
-ao_led_init(void)
-{
-       P1SEL &= ~3;
-       P1 &= ~3;
-       P1DIR |= 3;
-}
+#define AO_LED_ALL     (AO_LED_GREEN|AO_LED_RED)
+
+__pdata uint8_t ao_led_enable;
 
 void
 ao_led_on(uint8_t colors)
 {
-       P1 |= colors;
+       P1 |= (colors & ao_led_enable);
 }
 
 void
 ao_led_off(uint8_t colors)
 {
-       P1 &= ~colors;
+       P1 &= ~(colors & ao_led_enable);
 }
 
 void
 ao_led_set(uint8_t colors)
 {
-       P1 = (P1 & ~3) | colors;
+       P1 = (P1 & ~(ao_led_enable)) | (colors & ao_led_enable);
 }
 
 void
-ao_led_for(uint8_t colors, uint16_t ticks)
+ao_led_toggle(uint8_t colors)
+{
+       P1 ^= (colors & ao_led_enable);
+}
+
+void
+ao_led_for(uint8_t colors, uint16_t ticks) __reentrant
 {
        ao_led_on(colors);
        ao_delay(ticks);
        ao_led_off(colors);
 }
 
+void
+ao_led_init(uint8_t enable)
+{
+       ao_led_enable = enable;
+       P1SEL &= ~enable;
+       P1 &= ~enable;
+       P1DIR |= enable;
+}