aboutsummaryrefslogtreecommitdiff
path: root/spaghetti-monster
diff options
context:
space:
mode:
authorSelene ToyKeeper2019-09-06 04:38:00 -0600
committerSelene ToyKeeper2019-09-06 04:38:00 -0600
commit7851656847738192e0e12cfe77861ba58d98cf6f (patch)
treeabe34d61f48402f93fd954fb4759a6d9cd231a01 /spaghetti-monster
parentfixed attiny13 builds (diff)
downloadanduril-7851656847738192e0e12cfe77861ba58d98cf6f.tar.gz
anduril-7851656847738192e0e12cfe77861ba58d98cf6f.tar.bz2
anduril-7851656847738192e0e12cfe77861ba58d98cf6f.zip
added button LED support to D4v2
(in a way which doesn't break backward compatibility... ... but it really needs some refactoring to reduce code duplication)
Diffstat (limited to 'spaghetti-monster')
-rw-r--r--spaghetti-monster/anduril/anduril.c33
-rw-r--r--spaghetti-monster/anduril/cfg-emisar-d4v2.h4
-rw-r--r--spaghetti-monster/fsm-misc.c23
-rw-r--r--spaghetti-monster/fsm-misc.h6
-rw-r--r--spaghetti-monster/fsm-ramping.c3
5 files changed, 64 insertions, 5 deletions
diff --git a/spaghetti-monster/anduril/anduril.c b/spaghetti-monster/anduril/anduril.c
index 8ab66f5..5032dcd 100644
--- a/spaghetti-monster/anduril/anduril.c
+++ b/spaghetti-monster/anduril/anduril.c
@@ -2257,7 +2257,13 @@ void rgb_led_update(uint8_t mode, uint8_t arg) {
// turn off aux LEDs when battery is empty
// (but if voltage==0, that means we just booted and don't know yet)
uint8_t volts = voltage; // save a few bytes by caching volatile value
- if ((volts) && (volts < VOLTAGE_LOW)) { rgb_led_set(0); return; }
+ if ((volts) && (volts < VOLTAGE_LOW)) {
+ rgb_led_set(0);
+ #ifdef USE_BUTTON_LED
+ button_led_set(0);
+ #endif
+ return;
+ }
uint8_t pattern = (mode>>4); // off, low, high, blinking, ... more?
uint8_t color = mode & 0x0f;
@@ -2307,17 +2313,34 @@ void rgb_led_update(uint8_t mode, uint8_t arg) {
frame = (frame + 1) % sizeof(animation);
pattern = animation[frame];
}
+ uint8_t result;
+ #ifdef USE_BUTTON_LED
+ uint8_t button_led_result;
+ #endif
switch (pattern) {
case 0: // off
- rgb_led_set(0);
+ result = 0;
+ #ifdef USE_BUTTON_LED
+ button_led_result = 0;
+ #endif
break;
case 1: // low
- rgb_led_set(actual_color);
+ result = actual_color;
+ #ifdef USE_BUTTON_LED
+ button_led_result = 1;
+ #endif
break;
- case 2: // high
- rgb_led_set(actual_color << 1);
+ default: // high
+ result = (actual_color << 1);
+ #ifdef USE_BUTTON_LED
+ button_led_result = 2;
+ #endif
break;
}
+ rgb_led_set(result);
+ #ifdef USE_BUTTON_LED
+ button_led_set(button_led_result);
+ #endif
}
#endif
diff --git a/spaghetti-monster/anduril/cfg-emisar-d4v2.h b/spaghetti-monster/anduril/cfg-emisar-d4v2.h
index b83c65c..d0d2cf6 100644
--- a/spaghetti-monster/anduril/cfg-emisar-d4v2.h
+++ b/spaghetti-monster/anduril/cfg-emisar-d4v2.h
@@ -4,7 +4,11 @@
// this light has three aux LED channels: R, G, B
#define USE_AUX_RGB_LEDS
+// it also has an independent LED in the button
+#define USE_BUTTON_LED
// the aux LEDs are front-facing, so turn them off while main LEDs are on
+// TODO: the whole "indicator LED" thing needs to be refactored into
+// "aux LED(s)" and "button LED(s)" since they work a bit differently
#ifdef USE_INDICATOR_LED_WHILE_RAMPING
#undef USE_INDICATOR_LED_WHILE_RAMPING
#endif
diff --git a/spaghetti-monster/fsm-misc.c b/spaghetti-monster/fsm-misc.c
index 8e88cbd..18dc7c5 100644
--- a/spaghetti-monster/fsm-misc.c
+++ b/spaghetti-monster/fsm-misc.c
@@ -147,6 +147,29 @@ void indicator_led_auto() {
*/
#endif // USE_INDICATOR_LED
+#ifdef USE_BUTTON_LED
+// TODO: Refactor this and RGB LED function to merge code and save space
+void button_led_set(uint8_t lvl) {
+ switch (lvl) {
+ case 0: // LED off
+ BUTTON_LED_DDR &= 0xff ^ (1 << BUTTON_LED_PIN);
+ BUTTON_LED_PUE &= 0xff ^ (1 << BUTTON_LED_PIN);
+ BUTTON_LED_PORT &= 0xff ^ (1 << BUTTON_LED_PIN);
+ break;
+ case 1: // LED low
+ BUTTON_LED_DDR &= 0xff ^ (1 << BUTTON_LED_PIN);
+ BUTTON_LED_PUE |= (1 << BUTTON_LED_PIN);
+ BUTTON_LED_PORT |= (1 << BUTTON_LED_PIN);
+ break;
+ default: // LED high
+ BUTTON_LED_DDR |= (1 << BUTTON_LED_PIN);
+ BUTTON_LED_PUE |= (1 << BUTTON_LED_PIN);
+ BUTTON_LED_PORT |= (1 << BUTTON_LED_PIN);
+ break;
+ }
+}
+#endif
+
#ifdef USE_AUX_RGB_LEDS
void rgb_led_set(uint8_t value) {
// value: 0b00BBGGRR
diff --git a/spaghetti-monster/fsm-misc.h b/spaghetti-monster/fsm-misc.h
index a39d31a..66d31ba 100644
--- a/spaghetti-monster/fsm-misc.h
+++ b/spaghetti-monster/fsm-misc.h
@@ -43,10 +43,16 @@ uint8_t blink(uint8_t num, uint8_t speed);
*/
#ifdef USE_INDICATOR_LED
+// FIXME: Remove this, replace with button_led()
// lvl: 0=off, 1=low, 2=high
void indicator_led(uint8_t lvl);
#endif
+#ifdef USE_BUTTON_LED
+// lvl: 0=off, 1=low, 2=high
+void button_led_set(uint8_t lvl);
+#endif
+
#ifdef USE_AUX_RGB_LEDS
// value: 0b00BBGGRR
// each pair of bits: 0=off, 1=low, 2=high
diff --git a/spaghetti-monster/fsm-ramping.c b/spaghetti-monster/fsm-ramping.c
index efa07e4..37c8073 100644
--- a/spaghetti-monster/fsm-ramping.c
+++ b/spaghetti-monster/fsm-ramping.c
@@ -46,6 +46,9 @@ void set_level(uint8_t level) {
#endif
#ifdef USE_AUX_RGB_LEDS
rgb_led_set(0);
+ #ifdef USE_BUTTON_LED
+ button_led_set((level > 0) + (level > MAX_1x7135));
+ #endif
#endif
}
#endif
If you find this content useful please consider a small donation via bitcoin: bitcoin:1mxKyQsHHugqRxPKgwaA7wUwJEGCNthn2?amount=0.001&message=Donation Scraping git contents via cgit is very resource intensive. The continued hosting of these git repositories is entirely financed by your bitcoin contributions. For donations of a least 1 mBTC you include your IP address in the message of your bitcoin donation. This will remove this message in the future for requests from your IP, which will significantly reduce token usage. In any case, any contributions to bitcoin address 1mxKyQsHHugqRxPKgwaA7wUwJEGCNthn2 are very welcome. Thanks in advance for you contribution to a self-sustaining ecosystem.