1.1 --- a/test.c Wed Mar 13 15:25:27 2013 +0000
1.2 +++ b/test.c Thu Mar 14 21:41:19 2013 +0000
1.3 @@ -133,10 +133,10 @@
1.4 #define MAX_MODE_DMPULLDN 64
1.5 #define MAX_MODE_DPPULLDN 128
1.6
1.7 -#define MAX_MODE_HOST_ENABLED MAX_MODE_HOST | MAX_MODE_SEPIRQ_OFF | MAX_MODE_DMPULLDN | MAX_MODE_DPPULLDN
1.8 -#define MAX_MODE_HOST_ACTIVE MAX_MODE_HOST_ENABLED | MAX_MODE_SOFKAENAB
1.9 +#define MAX_MODE_HOST_ENABLED (MAX_MODE_HOST | MAX_MODE_SEPIRQ_OFF | MAX_MODE_DMPULLDN | MAX_MODE_DPPULLDN)
1.10 +#define MAX_MODE_HOST_ACTIVE (MAX_MODE_HOST_ENABLED | MAX_MODE_SOFKAENAB)
1.11 #define MAX_MODE_HOST_FULLSPEED MAX_MODE_HOST_ACTIVE
1.12 -#define MAX_MODE_HOST_LOWSPEED MAX_MODE_HOST_ACTIVE | MAX_MODE_LOWSPEED
1.13 +#define MAX_MODE_HOST_LOWSPEED (MAX_MODE_HOST_ACTIVE | MAX_MODE_LOWSPEED)
1.14
1.15 #define MAX_HCTL_BUSRST 1
1.16 #define MAX_HCTL_SAMPLEBUS 4
1.17 @@ -554,12 +554,14 @@
1.18 ((hrsl & MAX_HRSL_KSTATUS) && !(mode & MAX_MODE_LOWSPEED)))
1.19 {
1.20 printf("Device is low speed.\n");
1.21 - max_write(MAX_REG_MODE, MAX_MODE_HOST_LOWSPEED);
1.22 + if (max_read(MAX_REG_MODE, NULL) != MAX_MODE_HOST_LOWSPEED)
1.23 + max_write(MAX_REG_MODE, MAX_MODE_HOST_LOWSPEED);
1.24 }
1.25 else
1.26 {
1.27 printf("Device is full speed.\n");
1.28 - max_write(MAX_REG_MODE, MAX_MODE_HOST_FULLSPEED);
1.29 + if (max_read(MAX_REG_MODE, NULL) != MAX_MODE_HOST_FULLSPEED)
1.30 + max_write(MAX_REG_MODE, MAX_MODE_HOST_FULLSPEED);
1.31 }
1.32
1.33 /* Reset the device. */
1.34 @@ -612,7 +614,7 @@
1.35
1.36 max_write(MAX_REG_PERADDR, device->address);
1.37
1.38 - setup_packet(setup, USB_ENDPOINT_IN, USB_REQ_GET_DESCRIPTOR, usb_descriptor_type(type) | value, index, usb_descriptor_size(type));
1.39 + setup_packet(setup, USB_ENDPOINT_IN, USB_REQ_GET_DESCRIPTOR, usb_descriptor_type(type) | value, index, 64);
1.40 max_control(setup);
1.41 if (!max_control_input(data, &len, device))
1.42 {
1.43 @@ -939,7 +941,7 @@
1.44
1.45 /* Handle device disconnection. */
1.46
1.47 - else if ((devstate != MAX_DEVSTATE_INIT) && connection_event)
1.48 + else if ((devstate != MAX_DEVSTATE_INIT) && connection_event && !devicechanged())
1.49 {
1.50 devstate = MAX_DEVSTATE_INIT;
1.51 printf("INIT\n");