ben-arduino-usb

Changeset

31:8193c22e9aef
2013-03-14 Paul Boddie raw files shortlog changelog graph Fixed the mode macros and introduced better disconnection testing. Reverted the setup packet length parameter change.
test.c (file)
     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");