diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/usbrelay-v0.1/ao_pins.h | 6 | ||||
| -rw-r--r-- | src/usbrelay-v0.1/ao_usbrelay.c | 18 | 
2 files changed, 21 insertions, 3 deletions
| diff --git a/src/usbrelay-v0.1/ao_pins.h b/src/usbrelay-v0.1/ao_pins.h index ed60486d..e760c21b 100644 --- a/src/usbrelay-v0.1/ao_pins.h +++ b/src/usbrelay-v0.1/ao_pins.h @@ -66,6 +66,12 @@  #define LEDS_AVAILABLE		(AO_LED_RED|AO_LED_GREEN) +/* RELAY */ + +#define RELAY_PORT		0 +#define RELAY_PIN		3 +#define RELAY_BIT		(1 << RELAY_PIN) +  /* Kludge the SPI driver to not configure any   * pin for SCK or MOSI   */ diff --git a/src/usbrelay-v0.1/ao_usbrelay.c b/src/usbrelay-v0.1/ao_usbrelay.c index 5f4bf963..879094b5 100644 --- a/src/usbrelay-v0.1/ao_usbrelay.c +++ b/src/usbrelay-v0.1/ao_usbrelay.c @@ -19,16 +19,25 @@  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);  	} @@ -43,9 +52,10 @@ ao_relay_select(void) __reentrant          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[] = { @@ -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); | 
