diff options
Diffstat (limited to 'openpcd/firmware/src/os/led.c')
-rw-r--r-- | openpcd/firmware/src/os/led.c | 85 |
1 files changed, 0 insertions, 85 deletions
diff --git a/openpcd/firmware/src/os/led.c b/openpcd/firmware/src/os/led.c deleted file mode 100644 index 8c34c6c..0000000 --- a/openpcd/firmware/src/os/led.c +++ /dev/null @@ -1,85 +0,0 @@ - -#include <sys/types.h> -#include <errno.h> -#include <lib_AT91SAM7.h> -#include <openpcd.h> -#include "../openpcd.h" -#include <os/usb_handler.h> -#include <os/req_ctx.h> -#include <os/dbgu.h> - -static int led2port(int led) -{ - if (led == 1) - return OPENPCD_PIO_LED1; - else if (led == 2) - return OPENPCD_PIO_LED2; - else - return 0; -} - -void led_switch(int led, int on) -{ - int port = led2port(led); - - if (port == -1) - return; - - if (on) - AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, port); - else - AT91F_PIO_SetOutput(AT91C_BASE_PIOA, port); -} - -int led_get(int led) -{ - int port = led2port(led); - - if (port == -1) - return -1; - - 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) - led_switch(led, 0); - else - led_switch(led, 1); - - return !on; -} - -static int led_usb_rx(struct req_ctx *rctx) -{ - struct openpcd_hdr *poh = (struct openpcd_hdr *) &rctx->rx.data[0]; - int ret = 1; - - switch (poh->cmd) { - case OPENPCD_CMD_SET_LED: - DEBUGP("SET LED(%u,%u) ", poh->reg, poh->val); - led_switch(poh->reg, poh->val); - break; - default: - DEBUGP("UNKNOWN "); - ret = -EINVAL; - break; - } - req_ctx_put(rctx); - return 1; -} - -void led_init(void) -{ - AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, OPENPCD_PIO_LED1); - AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, OPENPCD_PIO_LED2); - led_switch(1, 0); - led_switch(2, 0); - - usb_hdlr_register(&led_usb_rx, OPENPCD_CMD_CLS_LED); -} |