1.1 --- a/test.c Wed Mar 13 16:13:55 2013 +0000
1.2 +++ b/test.c Wed Mar 13 17:11:10 2013 +0000
1.3 @@ -137,10 +137,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 @@ -558,12 +558,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 return true;
1.34 @@ -918,7 +920,7 @@
1.35 connection_event = status & MAX_HIRQ_CONDETIRQ;
1.36 frame_event = status & MAX_HIRQ_FRAMEIRQ;
1.37
1.38 - #ifdef DEBUG
1.39 + #ifdef DEBUG_EVENTS
1.40 if (bus_event) printf("Bus ");
1.41 if (data_event) printf("Data ");
1.42 if (suspended_event) printf("Suspended ");
1.43 @@ -942,18 +944,13 @@
1.44
1.45 /* Handle device connection. */
1.46
1.47 - else if ((devstate == MAX_DEVSTATE_CONNECTED) && frame_event)
1.48 + else if ((devstate == MAX_DEVSTATE_CONNECTED) && frame_event && !(--framecount))
1.49 {
1.50 - if (framecount)
1.51 - framecount--;
1.52 - else
1.53 - {
1.54 - /* Reset the device. */
1.55 + /* Reset the device. */
1.56
1.57 - max_write(MAX_REG_HCTL, MAX_HCTL_BUSRST);
1.58 - devstate = MAX_DEVSTATE_START;
1.59 - printf("START\n");
1.60 - }
1.61 + max_write(MAX_REG_HCTL, MAX_HCTL_BUSRST);
1.62 + devstate = MAX_DEVSTATE_START;
1.63 + printf("START\n");
1.64 }
1.65
1.66 /* Handle device reset initiation. */
1.67 @@ -968,11 +965,9 @@
1.68 /* Handle device reset completion, getting device details and
1.69 resetting the device again. */
1.70
1.71 - else if ((devstate == MAX_DEVSTATE_RESET) && frame_event)
1.72 + else if ((devstate == MAX_DEVSTATE_RESET) && frame_event && !(--framecount))
1.73 {
1.74 - if (framecount)
1.75 - framecount--;
1.76 - else if (!max_init_device(&device))
1.77 + if (!max_init_device(&device))
1.78 printf("FAILED: RESET -> INSPECTED\n");
1.79 else
1.80 {
1.81 @@ -992,11 +987,9 @@
1.82
1.83 /* Handle second reset completion, setting the address. */
1.84
1.85 - else if ((devstate == MAX_DEVSTATE_RESET_AGAIN) && frame_event)
1.86 + else if ((devstate == MAX_DEVSTATE_RESET_AGAIN) && frame_event && !(--framecount))
1.87 {
1.88 - if (framecount)
1.89 - framecount--;
1.90 - else if (!max_complete_device(&device))
1.91 + if (!max_complete_device(&device))
1.92 printf("FAILED: RESET_AGAIN -> ADDRESSING\n");
1.93 else
1.94 {
1.95 @@ -1009,22 +1002,17 @@
1.96
1.97 /* Post-addressing. */
1.98
1.99 - else if ((devstate == MAX_DEVSTATE_ADDRESSING) && frame_event)
1.100 + else if ((devstate == MAX_DEVSTATE_ADDRESSING) && frame_event && !(--framecount))
1.101 {
1.102 - if (framecount)
1.103 - framecount--;
1.104 - else
1.105 - {
1.106 - usb_show_languages(max_get_descriptor(&device, USB_DT_STRING, 0, 0, false));
1.107 - usb_show_configuration(max_get_descriptor(&device, USB_DT_CONFIG, 0, 0, false));
1.108 - devstate = MAX_DEVSTATE_READY;
1.109 - printf("READY\n");
1.110 - }
1.111 + usb_show_languages(max_get_descriptor(&device, USB_DT_STRING, 0, 0, false));
1.112 + usb_show_configuration(max_get_descriptor(&device, USB_DT_CONFIG, 0, 0, false));
1.113 + devstate = MAX_DEVSTATE_READY;
1.114 + printf("READY\n");
1.115 }
1.116
1.117 /* Handle device disconnection. */
1.118
1.119 - else if ((devstate != MAX_DEVSTATE_INIT) && connection_event)
1.120 + else if ((devstate != MAX_DEVSTATE_INIT) && connection_event && !devicechanged())
1.121 {
1.122 devstate = MAX_DEVSTATE_INIT;
1.123 printf("INIT\n");