X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=src%2Fusbrelay-v0.1%2Fao_usbrelay.c;h=946f4b12985b66cc8567ea84e8c39859c3063074;hp=5f4bf9632467f47a1828b28bbd67409521001b4a;hb=6aeb000899ad7f22e92b487b5891664554bc4d33;hpb=acaad70e3db8f0b6ae45ca8309833db57bdf5ca2 diff --git a/src/usbrelay-v0.1/ao_usbrelay.c b/src/usbrelay-v0.1/ao_usbrelay.c index 5f4bf963..946f4b12 100644 --- a/src/usbrelay-v0.1/ao_usbrelay.c +++ b/src/usbrelay-v0.1/ao_usbrelay.c @@ -3,7 +3,8 @@ * * 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; version 2 of the License. + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of @@ -19,36 +20,45 @@ uint8_t relay_output; +void +ao_relay_init(void) +{ + lpc_scb.sysahbclkctrl |= (1 << LPC_SCB_SYSAHBCLKCTRL_GPIO); + lpc_gpio.dir[RELAY_PORT] |= RELAY_BIT; +} + // switch relay to selected output, turn correct LED on as a side effect static void ao_relay_control(uint8_t output) { switch (output) { case 1: + lpc_gpio.pin[RELAY_PORT] |= RELAY_BIT; ao_led_on(AO_LED_RED); ao_led_off(AO_LED_GREEN); break; default: + lpc_gpio.pin[RELAY_PORT] &= ~RELAY_BIT; ao_led_off(AO_LED_RED); ao_led_on(AO_LED_GREEN); } } static void -ao_relay_select(void) __reentrant +ao_relay_select(void) { uint8_t output; - ao_cmd_decimal(); + output = ao_cmd_decimal(); if (ao_cmd_status != ao_cmd_success) return; - output = ao_cmd_lex_i; - - printf ("Relay control not implemented yet, %u selected\n", output); - ao_relay_control(output); + if (output > 1) + printf ("Invalid relay position %u\n", output); + else + ao_relay_control(output); } -static __code struct ao_cmds ao_relay_cmds[] = { +static const struct ao_cmds ao_relay_cmds[] = { { ao_relay_select, "R \0Select relay output" }, { 0, NULL } }; @@ -66,6 +76,8 @@ main(void) ao_led_init(LEDS_AVAILABLE); + ao_relay_init(); + // initialize to default output relay_output = 0; ao_relay_control(relay_output);