diff --git a/softusb-input/main.c b/softusb-input/main.c index 40f877e..0bf60ac 100644 --- a/softusb-input/main.c +++ b/softusb-input/main.c @@ -26,6 +26,9 @@ #include "host.h" #include "crc.h" +#define print_string(s) (void) (s) +#define dump_hex(x, y) (void) (x) + enum { USB_PID_OUT = 0xe1, USB_PID_IN = 0x69, @@ -163,6 +166,7 @@ static const char out_reply[] PROGMEM = "IN reply:\n"; static char control_transfer(unsigned char addr, struct setup_packet *p, char out, unsigned char *payload, int maxlen) { + unsigned char usb_token[3]; unsigned char usb_buffer[11]; char toggle; char rxlen; @@ -172,13 +176,15 @@ static char control_transfer(unsigned char addr, struct setup_packet *p, char ou toggle = 0; /* send SETUP token */ - make_usb_token(USB_PID_SETUP, addr, usb_buffer); - usb_tx(usb_buffer, 3); + make_usb_token(USB_PID_SETUP, addr, usb_token); /* send setup packet */ usb_buffer[0] = get_data_token(&toggle); memcpy(&usb_buffer[1], p, 8); usb_crc16(&usb_buffer[1], 8, &usb_buffer[9]); +wio8(SIE_SEL_TX, 3); + usb_tx(usb_token, 3); usb_tx(usb_buffer, 11); +wio8(SIE_SEL_TX, 2); /* get ACK token from device */ rxlen = usb_rx(usb_buffer, 11); if((rxlen != 1) || (usb_buffer[0] != USB_PID_ACK)) { @@ -619,8 +625,8 @@ static void sof() unsigned char usb_buffer[3]; mask = 0; - if(port_a.full_speed && (port_a.state > PORT_STATE_BUS_RESET)) - mask |= 0x01; +// if(port_a.full_speed && (port_a.state > PORT_STATE_BUS_RESET)) +// mask |= 0x01; if(port_b.full_speed && (port_b.state > PORT_STATE_BUS_RESET)) mask |= 0x02; if(mask != 0) { @@ -636,8 +642,8 @@ static void keepalive() unsigned char mask; mask = 0; - if(!port_a.full_speed && (port_a.state == PORT_STATE_RESET_WAIT)) - mask |= 0x01; +// if(!port_a.full_speed && (port_a.state == PORT_STATE_RESET_WAIT)) +// mask |= 0x01; if(!port_b.full_speed && (port_b.state == PORT_STATE_RESET_WAIT)) mask |= 0x02; if(mask != 0) { @@ -681,13 +687,17 @@ int main() for(i=0;i<128;i++) asm("nop"); +#if 0 wio8(SIE_SEL_RX, 0); wio8(SIE_SEL_TX, 0x01); port_service(&port_a, 'A'); +#endif +#if 1 wio8(SIE_SEL_RX, 1); wio8(SIE_SEL_TX, 0x02); port_service(&port_b, 'B'); +#endif /* set RX speed for new detected devices */ set_rx_speed(); diff --git a/softusb-input/navre.ld b/softusb-input/navre.ld index 652f554..4ec1578 100644 --- a/softusb-input/navre.ld +++ b/softusb-input/navre.ld @@ -3,7 +3,7 @@ OUTPUT_FORMAT("elf32-avr","elf32-avr","elf32-avr") OUTPUT_ARCH(avr:2) MEMORY { - text (rx) : ORIGIN = 0, LENGTH = 8K + text (rx) : ORIGIN = 0, LENGTH = 4K data (rw!x) : ORIGIN = 0, LENGTH = 32K } SECTIONS