# HG changeset patch # User Paul Boddie # Date 1363297279 0 # Node ID 8193c22e9aefbe30cd2b0d66dd32e83217964396 # Parent 75e240b97a8f2386d38cbfc54858e0c04a45c8a6 Fixed the mode macros and introduced better disconnection testing. Reverted the setup packet length parameter change. diff -r 75e240b97a8f -r 8193c22e9aef test.c --- a/test.c Wed Mar 13 15:25:27 2013 +0000 +++ b/test.c Thu Mar 14 21:41:19 2013 +0000 @@ -133,10 +133,10 @@ #define MAX_MODE_DMPULLDN 64 #define MAX_MODE_DPPULLDN 128 -#define MAX_MODE_HOST_ENABLED MAX_MODE_HOST | MAX_MODE_SEPIRQ_OFF | MAX_MODE_DMPULLDN | MAX_MODE_DPPULLDN -#define MAX_MODE_HOST_ACTIVE MAX_MODE_HOST_ENABLED | MAX_MODE_SOFKAENAB +#define MAX_MODE_HOST_ENABLED (MAX_MODE_HOST | MAX_MODE_SEPIRQ_OFF | MAX_MODE_DMPULLDN | MAX_MODE_DPPULLDN) +#define MAX_MODE_HOST_ACTIVE (MAX_MODE_HOST_ENABLED | MAX_MODE_SOFKAENAB) #define MAX_MODE_HOST_FULLSPEED MAX_MODE_HOST_ACTIVE -#define MAX_MODE_HOST_LOWSPEED MAX_MODE_HOST_ACTIVE | MAX_MODE_LOWSPEED +#define MAX_MODE_HOST_LOWSPEED (MAX_MODE_HOST_ACTIVE | MAX_MODE_LOWSPEED) #define MAX_HCTL_BUSRST 1 #define MAX_HCTL_SAMPLEBUS 4 @@ -554,12 +554,14 @@ ((hrsl & MAX_HRSL_KSTATUS) && !(mode & MAX_MODE_LOWSPEED))) { printf("Device is low speed.\n"); - max_write(MAX_REG_MODE, MAX_MODE_HOST_LOWSPEED); + if (max_read(MAX_REG_MODE, NULL) != MAX_MODE_HOST_LOWSPEED) + max_write(MAX_REG_MODE, MAX_MODE_HOST_LOWSPEED); } else { printf("Device is full speed.\n"); - max_write(MAX_REG_MODE, MAX_MODE_HOST_FULLSPEED); + if (max_read(MAX_REG_MODE, NULL) != MAX_MODE_HOST_FULLSPEED) + max_write(MAX_REG_MODE, MAX_MODE_HOST_FULLSPEED); } /* Reset the device. */ @@ -612,7 +614,7 @@ max_write(MAX_REG_PERADDR, device->address); - setup_packet(setup, USB_ENDPOINT_IN, USB_REQ_GET_DESCRIPTOR, usb_descriptor_type(type) | value, index, usb_descriptor_size(type)); + setup_packet(setup, USB_ENDPOINT_IN, USB_REQ_GET_DESCRIPTOR, usb_descriptor_type(type) | value, index, 64); max_control(setup); if (!max_control_input(data, &len, device)) { @@ -939,7 +941,7 @@ /* Handle device disconnection. */ - else if ((devstate != MAX_DEVSTATE_INIT) && connection_event) + else if ((devstate != MAX_DEVSTATE_INIT) && connection_event && !devicechanged()) { devstate = MAX_DEVSTATE_INIT; printf("INIT\n");