1.1 --- a/test.c Wed Mar 13 23:33:39 2013 +0000
1.2 +++ b/test.c Thu Mar 14 00:49:41 2013 +0000
1.3 @@ -439,6 +439,7 @@
1.4 status = max_write(MAX_REG_HXFR, MAX_HXFR_SETUP);
1.5 status = max_wait_transfer(status);
1.6 hrsl = max_read(MAX_REG_HRSL, &status);
1.7 + printf("HRSL = %x\n", hrsl);
1.8 }
1.9 while ((hrsl & MAX_HRSL_HRSLT) && (--timer));
1.10
1.11 @@ -480,6 +481,16 @@
1.12 max_write(MAX_REG_USBCTL, 0);
1.13 }
1.14
1.15 +void busreset()
1.16 +{
1.17 + max_write(MAX_REG_HCTL, MAX_HCTL_BUSRST);
1.18 +}
1.19 +
1.20 +bool bus_is_reset()
1.21 +{
1.22 + return !(max_read(MAX_REG_HCTL, NULL) & MAX_HCTL_BUSRST);
1.23 +}
1.24 +
1.25 uint8_t check()
1.26 {
1.27 uint8_t oscillator;
1.28 @@ -628,7 +639,7 @@
1.29 }
1.30 max_control_status(true);
1.31
1.32 - if (len >= usb_descriptor_size(type))
1.33 + if ((initial && (len >= 8)) || (len >= usb_descriptor_size(type)))
1.34 return data;
1.35 else
1.36 {
1.37 @@ -657,10 +668,7 @@
1.38 if (desc != NULL)
1.39 {
1.40 device->max_packet_size = device->desc.bMaxPacketSize0;
1.41 -
1.42 - /* Reset the device. */
1.43 -
1.44 - max_write(MAX_REG_HCTL, MAX_HCTL_BUSRST);
1.45 + busreset();
1.46 return true;
1.47 }
1.48
1.49 @@ -948,16 +956,14 @@
1.50
1.51 else if ((devstate == MAX_DEVSTATE_CONNECTED) && frame_event && !(--framecount))
1.52 {
1.53 - /* Reset the device. */
1.54 -
1.55 - max_write(MAX_REG_HCTL, MAX_HCTL_BUSRST);
1.56 + busreset();
1.57 devstate = MAX_DEVSTATE_START;
1.58 printf("START\n");
1.59 }
1.60
1.61 /* Handle device reset initiation. */
1.62
1.63 - else if ((devstate == MAX_DEVSTATE_START) && bus_event)
1.64 + else if ((devstate == MAX_DEVSTATE_START) && bus_event && bus_is_reset())
1.65 {
1.66 devstate = MAX_DEVSTATE_RESET;
1.67 framecount = 200;
1.68 @@ -983,7 +989,7 @@
1.69
1.70 /* Handle second reset initiation. */
1.71
1.72 - else if ((devstate == MAX_DEVSTATE_INSPECTED) && bus_event)
1.73 + else if ((devstate == MAX_DEVSTATE_INSPECTED) && bus_event && bus_is_reset())
1.74 {
1.75 devstate = MAX_DEVSTATE_RESET_AGAIN;
1.76 framecount = 200;