summaryrefslogtreecommitdiff
path: root/src/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel')
-rw-r--r--src/kernel/ao.h2
-rw-r--r--src/kernel/ao_led.h202
-rw-r--r--src/kernel/ao_task.c1
-rw-r--r--src/kernel/ao_task.h2
4 files changed, 203 insertions, 4 deletions
diff --git a/src/kernel/ao.h b/src/kernel/ao.h
index 9c0c8604..1b269d73 100644
--- a/src/kernel/ao.h
+++ b/src/kernel/ao.h
@@ -230,7 +230,7 @@ ao_cmd_filter(void);
#include <ao_beep.h>
#endif
-#if LEDS_AVAILABLE
+#if LEDS_AVAILABLE || HAS_LED
#include <ao_led.h>
#endif
diff --git a/src/kernel/ao_led.h b/src/kernel/ao_led.h
index 803f85b3..5d982ca6 100644
--- a/src/kernel/ao_led.h
+++ b/src/kernel/ao_led.h
@@ -26,7 +26,7 @@
#define AO_LED_NONE 0
#ifndef AO_LED_TYPE
-#define AO_LED_TYPE uint8_t
+#define AO_LED_TYPE uint32_t
#endif
/* Turn on the specified LEDs */
@@ -55,6 +55,204 @@ ao_led_for(AO_LED_TYPE colors, uint16_t ticks);
/* Initialize the LEDs */
void
-ao_led_init(AO_LED_TYPE enable);
+ao_led_init(void);
+
+#ifdef LED_0_PORT
+#define AO_LED_0 (1 << 0)
+#else
+#define AO_LED_0 0
+#endif
+#ifdef LED_1_PORT
+#define AO_LED_1 (1 << 1)
+#else
+#define AO_LED_1 0
+#endif
+#ifdef LED_2_PORT
+#define AO_LED_2 (1 << 2)
+#else
+#define AO_LED_2 0
+#endif
+#ifdef LED_3_PORT
+#define AO_LED_3 (1 << 3)
+#else
+#define AO_LED_3 0
+#endif
+#ifdef LED_4_PORT
+#define AO_LED_4 (1 << 4)
+#else
+#define AO_LED_4 0
+#endif
+#ifdef LED_5_PORT
+#define AO_LED_5 (1 << 5)
+#else
+#define AO_LED_5 0
+#endif
+#ifdef LED_6_PORT
+#define AO_LED_6 (1 << 6)
+#else
+#define AO_LED_6 0
+#endif
+#ifdef LED_7_PORT
+#define AO_LED_7 (1 << 7)
+#else
+#define AO_LED_7 0
+#endif
+#ifdef LED_8_PORT
+#define AO_LED_8 (1 << 8)
+#else
+#define AO_LED_8 0
+#endif
+#ifdef LED_9_PORT
+#define AO_LED_9 (1 << 9)
+#else
+#define AO_LED_9 0
+#endif
+#ifdef LED_10_PORT
+#define AO_LED_10 (1 << 10)
+#else
+#define AO_LED_10 0
+#endif
+#ifdef LED_11_PORT
+#define AO_LED_11 (1 << 11)
+#else
+#define AO_LED_11 0
+#endif
+#ifdef LED_12_PORT
+#define AO_LED_12 (1 << 12)
+#else
+#define AO_LED_12 0
+#endif
+#ifdef LED_13_PORT
+#define AO_LED_13 (1 << 13)
+#else
+#define AO_LED_13 0
+#endif
+#ifdef LED_14_PORT
+#define AO_LED_14 (1 << 14)
+#else
+#define AO_LED_14 0
+#endif
+#ifdef LED_15_PORT
+#define AO_LED_15 (1 << 15)
+#else
+#define AO_LED_15 0
+#endif
+#ifdef LED_16_PORT
+#define AO_LED_16 (1 << 16)
+#else
+#define AO_LED_16 0
+#endif
+#ifdef LED_17_PORT
+#define AO_LED_17 (1 << 17)
+#else
+#define AO_LED_17 0
+#endif
+#ifdef LED_18_PORT
+#define AO_LED_18 (1 << 18)
+#else
+#define AO_LED_18 0
+#endif
+#ifdef LED_19_PORT
+#define AO_LED_19 (1 << 19)
+#else
+#define AO_LED_19 0
+#endif
+#ifdef LED_20_PORT
+#define AO_LED_20 (1 << 20)
+#else
+#define AO_LED_20 0
+#endif
+#ifdef LED_21_PORT
+#define AO_LED_21 (1 << 21)
+#else
+#define AO_LED_21 0
+#endif
+#ifdef LED_22_PORT
+#define AO_LED_22 (1 << 22)
+#else
+#define AO_LED_22 0
+#endif
+#ifdef LED_23_PORT
+#define AO_LED_23 (1 << 23)
+#else
+#define AO_LED_23 0
+#endif
+#ifdef LED_24_PORT
+#define AO_LED_24 (1 << 24)
+#else
+#define AO_LED_24 0
+#endif
+#ifdef LED_25_PORT
+#define AO_LED_25 (1 << 25)
+#else
+#define AO_LED_25 0
+#endif
+#ifdef LED_26_PORT
+#define AO_LED_26 (1 << 26)
+#else
+#define AO_LED_26 0
+#endif
+#ifdef LED_27_PORT
+#define AO_LED_27 (1 << 27)
+#else
+#define AO_LED_27 0
+#endif
+#ifdef LED_28_PORT
+#define AO_LED_28 (1 << 28)
+#else
+#define AO_LED_28 0
+#endif
+#ifdef LED_29_PORT
+#define AO_LED_29 (1 << 29)
+#else
+#define AO_LED_29 0
+#endif
+#ifdef LED_30_PORT
+#define AO_LED_30 (1 << 30)
+#else
+#define AO_LED_30 0
+#endif
+#ifdef LED_31_PORT
+#define AO_LED_31 (1 << 31)
+#else
+#define AO_LED_31 0
+#endif
+
+#define AO_LEDS_AVAILABLE (AO_LED_0 | \
+ AO_LED_1 | \
+ AO_LED_2 | \
+ AO_LED_3 | \
+ AO_LED_4 | \
+ AO_LED_5 | \
+ AO_LED_6 | \
+ AO_LED_7 | \
+ AO_LED_8 | \
+ AO_LED_9 | \
+ AO_LED_10 | \
+ AO_LED_11 | \
+ AO_LED_12 | \
+ AO_LED_13 | \
+ AO_LED_14 | \
+ AO_LED_15 | \
+ AO_LED_16 | \
+ AO_LED_17 | \
+ AO_LED_18 | \
+ AO_LED_19 | \
+ AO_LED_20 | \
+ AO_LED_21 | \
+ AO_LED_22 | \
+ AO_LED_23 | \
+ AO_LED_24 | \
+ AO_LED_25 | \
+ AO_LED_26 | \
+ AO_LED_27 | \
+ AO_LED_28 | \
+ AO_LED_29 | \
+ AO_LED_30 | \
+ AO_LED_31)
+
+#ifndef LEDS_AVAILABLE
+#define LEDS_AVAILABLE AO_LEDS_AVAILABLE
+#endif
#endif /* _AO_LED_H_ */
diff --git a/src/kernel/ao_task.c b/src/kernel/ao_task.c
index 4f7072cb..dc5c1913 100644
--- a/src/kernel/ao_task.c
+++ b/src/kernel/ao_task.c
@@ -569,4 +569,5 @@ ao_start_scheduler(void)
ao_arch_start_scheduler();
#endif
ao_yield();
+ __builtin_unreachable();
}
diff --git a/src/kernel/ao_task.h b/src/kernel/ao_task.h
index ffeb7313..f3789fa2 100644
--- a/src/kernel/ao_task.h
+++ b/src/kernel/ao_task.h
@@ -134,7 +134,7 @@ ao_task_info(void);
/* Start the scheduler. This will not return */
void
-ao_start_scheduler(void);
+ao_start_scheduler(void) __attribute__((noreturn));
#if HAS_TASK_QUEUE
void