diff options
-rw-r--r-- | firmware/src/os/led.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/firmware/src/os/led.c b/firmware/src/os/led.c index 96ffecc..2a57558 100644 --- a/firmware/src/os/led.c +++ b/firmware/src/os/led.c @@ -26,6 +26,11 @@ #include <os/req_ctx.h> #include <os/dbgu.h> +static const int ledport[] = { + [1] = OPENPCD_PIO_LED1, + [2] = OPENPCD_PIO_LED2, +}; + static int led2port(int led) { if (led == 1) @@ -38,11 +43,12 @@ static int led2port(int led) void led_switch(int led, int on) { - int port = led2port(led); - - if (port == -1) + int port; + + if (led < 1 || led > 2) return; + port = ledport[led]; if (on) AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, port); else @@ -51,19 +57,21 @@ void led_switch(int led, int on) int led_get(int led) { - int port = led2port(led); + int port; - if (port == -1) + if (led < 1 || led > 2) return -1; + port = ledport[led]; + return !(AT91F_PIO_GetOutputDataStatus(AT91C_BASE_PIOA) & port); } int led_toggle(int led) { int on = led_get(led); - if (on == -1) - return -1; + if (on < 0) + return on; if (on) led_switch(led, 0); |