1.1 --- a/Makefile Wed Mar 13 16:13:55 2013 +0000
1.2 +++ b/Makefile Wed Mar 13 17:11:10 2013 +0000
1.3 @@ -13,7 +13,7 @@
1.4 ARCH = mipsel-openwrt-linux
1.5 CC = $(ARCH)-gcc
1.6
1.7 -CFLAGS = -g -Wall -fPIC -march=mips32 -I$(LIBUBB)/include # -DDEBUG=1
1.8 +CFLAGS = -g -Wall -fPIC -march=mips32 -I$(LIBUBB)/include # -DDEBUG_EVENTS=1 # -DDEBUG=1
1.9 LDFLAGS = -lubb -L$(LIBUBB) #-static #-L$(SYSLIBS)
1.10
1.11 TARGET = test
2.1 --- a/test.c Wed Mar 13 16:13:55 2013 +0000
2.2 +++ b/test.c Wed Mar 13 17:11:10 2013 +0000
2.3 @@ -137,10 +137,10 @@
2.4 #define MAX_MODE_DMPULLDN 64
2.5 #define MAX_MODE_DPPULLDN 128
2.6
2.7 -#define MAX_MODE_HOST_ENABLED MAX_MODE_HOST | MAX_MODE_SEPIRQ_OFF | MAX_MODE_DMPULLDN | MAX_MODE_DPPULLDN
2.8 -#define MAX_MODE_HOST_ACTIVE MAX_MODE_HOST_ENABLED | MAX_MODE_SOFKAENAB
2.9 +#define MAX_MODE_HOST_ENABLED (MAX_MODE_HOST | MAX_MODE_SEPIRQ_OFF | MAX_MODE_DMPULLDN | MAX_MODE_DPPULLDN)
2.10 +#define MAX_MODE_HOST_ACTIVE (MAX_MODE_HOST_ENABLED | MAX_MODE_SOFKAENAB)
2.11 #define MAX_MODE_HOST_FULLSPEED MAX_MODE_HOST_ACTIVE
2.12 -#define MAX_MODE_HOST_LOWSPEED MAX_MODE_HOST_ACTIVE | MAX_MODE_LOWSPEED
2.13 +#define MAX_MODE_HOST_LOWSPEED (MAX_MODE_HOST_ACTIVE | MAX_MODE_LOWSPEED)
2.14
2.15 #define MAX_HCTL_BUSRST 1
2.16 #define MAX_HCTL_SAMPLEBUS 4
2.17 @@ -558,12 +558,14 @@
2.18 ((hrsl & MAX_HRSL_KSTATUS) && !(mode & MAX_MODE_LOWSPEED)))
2.19 {
2.20 printf("Device is low speed.\n");
2.21 - max_write(MAX_REG_MODE, MAX_MODE_HOST_LOWSPEED);
2.22 + if (max_read(MAX_REG_MODE, NULL) != MAX_MODE_HOST_LOWSPEED)
2.23 + max_write(MAX_REG_MODE, MAX_MODE_HOST_LOWSPEED);
2.24 }
2.25 else
2.26 {
2.27 printf("Device is full speed.\n");
2.28 - max_write(MAX_REG_MODE, MAX_MODE_HOST_FULLSPEED);
2.29 + if (max_read(MAX_REG_MODE, NULL) != MAX_MODE_HOST_FULLSPEED)
2.30 + max_write(MAX_REG_MODE, MAX_MODE_HOST_FULLSPEED);
2.31 }
2.32
2.33 return true;
2.34 @@ -918,7 +920,7 @@
2.35 connection_event = status & MAX_HIRQ_CONDETIRQ;
2.36 frame_event = status & MAX_HIRQ_FRAMEIRQ;
2.37
2.38 - #ifdef DEBUG
2.39 + #ifdef DEBUG_EVENTS
2.40 if (bus_event) printf("Bus ");
2.41 if (data_event) printf("Data ");
2.42 if (suspended_event) printf("Suspended ");
2.43 @@ -942,18 +944,13 @@
2.44
2.45 /* Handle device connection. */
2.46
2.47 - else if ((devstate == MAX_DEVSTATE_CONNECTED) && frame_event)
2.48 + else if ((devstate == MAX_DEVSTATE_CONNECTED) && frame_event && !(--framecount))
2.49 {
2.50 - if (framecount)
2.51 - framecount--;
2.52 - else
2.53 - {
2.54 - /* Reset the device. */
2.55 + /* Reset the device. */
2.56
2.57 - max_write(MAX_REG_HCTL, MAX_HCTL_BUSRST);
2.58 - devstate = MAX_DEVSTATE_START;
2.59 - printf("START\n");
2.60 - }
2.61 + max_write(MAX_REG_HCTL, MAX_HCTL_BUSRST);
2.62 + devstate = MAX_DEVSTATE_START;
2.63 + printf("START\n");
2.64 }
2.65
2.66 /* Handle device reset initiation. */
2.67 @@ -968,11 +965,9 @@
2.68 /* Handle device reset completion, getting device details and
2.69 resetting the device again. */
2.70
2.71 - else if ((devstate == MAX_DEVSTATE_RESET) && frame_event)
2.72 + else if ((devstate == MAX_DEVSTATE_RESET) && frame_event && !(--framecount))
2.73 {
2.74 - if (framecount)
2.75 - framecount--;
2.76 - else if (!max_init_device(&device))
2.77 + if (!max_init_device(&device))
2.78 printf("FAILED: RESET -> INSPECTED\n");
2.79 else
2.80 {
2.81 @@ -992,11 +987,9 @@
2.82
2.83 /* Handle second reset completion, setting the address. */
2.84
2.85 - else if ((devstate == MAX_DEVSTATE_RESET_AGAIN) && frame_event)
2.86 + else if ((devstate == MAX_DEVSTATE_RESET_AGAIN) && frame_event && !(--framecount))
2.87 {
2.88 - if (framecount)
2.89 - framecount--;
2.90 - else if (!max_complete_device(&device))
2.91 + if (!max_complete_device(&device))
2.92 printf("FAILED: RESET_AGAIN -> ADDRESSING\n");
2.93 else
2.94 {
2.95 @@ -1009,22 +1002,17 @@
2.96
2.97 /* Post-addressing. */
2.98
2.99 - else if ((devstate == MAX_DEVSTATE_ADDRESSING) && frame_event)
2.100 + else if ((devstate == MAX_DEVSTATE_ADDRESSING) && frame_event && !(--framecount))
2.101 {
2.102 - if (framecount)
2.103 - framecount--;
2.104 - else
2.105 - {
2.106 - usb_show_languages(max_get_descriptor(&device, USB_DT_STRING, 0, 0, false));
2.107 - usb_show_configuration(max_get_descriptor(&device, USB_DT_CONFIG, 0, 0, false));
2.108 - devstate = MAX_DEVSTATE_READY;
2.109 - printf("READY\n");
2.110 - }
2.111 + usb_show_languages(max_get_descriptor(&device, USB_DT_STRING, 0, 0, false));
2.112 + usb_show_configuration(max_get_descriptor(&device, USB_DT_CONFIG, 0, 0, false));
2.113 + devstate = MAX_DEVSTATE_READY;
2.114 + printf("READY\n");
2.115 }
2.116
2.117 /* Handle device disconnection. */
2.118
2.119 - else if ((devstate != MAX_DEVSTATE_INIT) && connection_event)
2.120 + else if ((devstate != MAX_DEVSTATE_INIT) && connection_event && !devicechanged())
2.121 {
2.122 devstate = MAX_DEVSTATE_INIT;
2.123 printf("INIT\n");