/* * Copyright (c) 2007 Embedded Projects (http://www.embedded-projects.net) * Author: Benedikt Sauter = 1 && pin <= 19) || (pin >= 26 && pin <= 44)) { io_set_pin_direction_out(pin); return RSP_OK; } return RSP_UNKOWN_PIN; } void io_init_usb(uint8_t pin) { answer[0] = CMD_IO_INIT_PIN; answer[1] = (unsigned char)io_init(pin); answer[2] = 0; CommandAnswer(3); } uint8_t io_init_port(uint8_t port) { /* TODO implement this function */ return RSP_OK; } void io_init_port_usb(uint8_t port) { answer[0] = CMD_IO_INIT_PORT; answer[1] = (unsigned char)io_init_port(port); answer[2] = 0; CommandAnswer(3); } uint8_t io_set_port_direction_out(uint8_t port,uint8_t mask) { /* TODO switch (port) { case 1: DDRB = mask; break; case 2: DDRC = mask; break; // PC7 = /CS (output) - do we need to mask this ? case 3: DDRD = mask; break; case 4: DDRE = mask; break; // PE4 = INT4 (input) - do we need to mask this ? case 5: DDRF = mask; break; default: return RSP_UNKOWN_PIN; } */ return RSP_OK; } uint8_t io_set_port_direction_in(uint8_t port,uint8_t mask) { /* TODO implement */ return RSP_OK; } uint8_t io_set_port_direction_tri(uint8_t port,uint8_t mask) { /* TODO implement */ return RSP_OK; } void io_set_port_direction_out_usb (uint8_t port, uint8_t mask) { answer[0] = CMD_IO_PORT_DIRECTION_OUT; answer[1] = (unsigned char)io_set_port_direction_out (port, mask); answer[2] = 0; CommandAnswer(3); } void io_set_port_direction_in_usb(uint8_t port, uint8_t mask) { answer[0] = CMD_IO_PORT_DIRECTION_IN; answer[1] = (unsigned char)io_set_port_direction_in (port, mask); answer[2] = 0; CommandAnswer(3); } void io_set_port_direction_tri_usb(uint8_t port, uint8_t mask) { answer[0] = CMD_IO_PORT_DIRECTION_TRI; answer[1] = (unsigned char)io_set_port_direction_tri (port, mask); answer[2] = 0; CommandAnswer(3); } uint8_t io_set_pin_direction_out(uint8_t pin) { if((pin >= 1 && pin <= 19) || (pin >=26 && pin <=44) ) { octopus.ports[pin] = PIN_OUT; switch(pin) { case 1: OX_DDR1 |=(1<= 1 && pin <= 19) || (pin >=26 && pin <=44) ) { octopus.ports[pin] = PIN_IN; switch (pin) { case 1: OX_DDR1 &=~(1<= 1 && pin <= 19) || (pin >=26 && pin <=44) ) { octopus.ports[pin] = PIN_TRI; io_set_pin_direction_out(pin); io_set_pin(pin,1); return RSP_OK; } else { return RSP_UNKOWN_PIN; } } void io_set_pin_direction_out_usb(uint8_t pin) { answer[0] = CMD_IO_PIN_DIRECTION_OUT; answer[1] = (unsigned char)io_set_pin_direction_out(pin); answer[2] = 0; CommandAnswer(3); } void io_set_pin_direction_in_usb(uint8_t pin) { answer[0] = CMD_IO_PIN_DIRECTION_IN; answer[1] = (unsigned char)io_set_pin_direction_in(pin); answer[2] = 0; CommandAnswer(3); } void io_set_pin_direction_tri_usb(uint8_t pin) { answer[0] = CMD_IO_PIN_DIRECTION_TRI; answer[1] = (unsigned char)io_set_pin_direction_tri(pin); answer[2] = 0; CommandAnswer(3); } uint8_t io_get_port (uint8_t port, uint8_t *pvalue) { uint8_t value; *pvalue = 0; switch (port) { case 1: value = PINB; break; case 2: value = PINC; break; /* PC7 = /CS */ case 3: value = PIND; break; case 4: value = PINE; break; /* PE4 = INTR */ case 5: value = PINF; break; default: return RSP_UNKOWN_PORT; } *pvalue = value; return RSP_OK; } void io_get_port_usb (uint8_t port) { uint8_t value; answer[0] = CMD_IO_PORT_GET; answer[1] = (unsigned char)io_get_port (port, &value); answer[2] = (unsigned char)value; CommandAnswer(3); } uint8_t io_set_port(uint8_t port, uint8_t value) { switch (port) { case 1: PORTB = value; break; case 2: PORTC = value; break; // PC7 = /CS case 3: PORTD = value; break; case 4: PORTE = value; break; // PE4 = INTR case 5: PORTF = value; break; default: return RSP_UNKOWN_PIN; } return RSP_OK; } void io_set_port_usb (uint8_t port, uint8_t value) { answer[0] = CMD_IO_PORT_SET; answer[1] = (unsigned char)io_set_port (port, value); answer[2] = 0; CommandAnswer(3); } void io_set_pin_usb(uint8_t pin, uint8_t value) { answer[0] = CMD_IO_PIN_SET; answer[1] = (unsigned char)io_set_pin(pin,value); answer[2] = 0; CommandAnswer(3); } uint8_t io_set_pin(uint8_t pin, uint8_t value) { if(octopus.ports[pin] == PIN_OUT) { switch(pin) { case 1: if(value) OX_PORT1 |=(1<