diff -u --recursive --new-file libgpio.orig/include/gpio.h libgpio/include/gpio.h --- libgpio.orig/include/gpio.h Fri Sep 15 14:53:50 2000 +++ libgpio/include/gpio.h Fri Sep 15 14:54:44 2000 @@ -100,6 +100,13 @@ } gpio_device_settings; +#ifdef GPIO_USB +enum { + GPIO_USB_IN_ENDPOINT, + GPIO_USB_OUT_ENDPOINT +}; +#endif + struct gpio_device; typedef struct gpio_device gpio_device; @@ -120,7 +127,7 @@ #ifdef GPIO_USB /* for USB devices */ int (*find_device)(gpio_device * dev, int idvendor, int idproduct); - int (*clear_halt) (gpio_device * dev); + int (*clear_halt) (gpio_device * dev, int ep); int (*msg_write) (gpio_device * dev, int value, char *bytes, int size); int (*msg_read) (gpio_device * dev, int value, char *bytes, int size); #endif @@ -297,7 +304,7 @@ #ifdef GPIO_USB /* must port libusb to other platforms for this to drop-in */ int gpio_usb_find_device (gpio_device * dev, int idvendor, int idproduct); - int gpio_usb_clear_halt (gpio_device * dev); + int gpio_usb_clear_halt (gpio_device * dev, int ep); int gpio_usb_msg_write (gpio_device * dev, int value, char *bytes, int size); int gpio_usb_msg_read (gpio_device * dev, int value, char *bytes, int size); #endif diff -u --recursive --new-file libgpio.orig/libgpio/gpio.c libgpio/libgpio/gpio.c --- libgpio.orig/libgpio/gpio.c Fri Sep 15 14:53:50 2000 +++ libgpio/libgpio/gpio.c Fri Sep 15 14:54:44 2000 @@ -386,7 +386,7 @@ idvendor, idproduct, retval < 0? "error":"ok"); return (retval); } -int gpio_usb_clear_halt (gpio_device * dev) +int gpio_usb_clear_halt (gpio_device * dev, int ep) { int retval; @@ -396,7 +396,7 @@ return (GPIO_ERROR); } - retval = dev->ops->clear_halt(dev); + retval = dev->ops->clear_halt(dev, ep); gpio_debug_printf(GPIO_DEBUG_LOW, dev->debug_level, "gpio_usb_clear_halt: clear_halt %s", retval < 0? "error":"ok"); return (retval); diff -u --recursive --new-file libgpio.orig/usb/libusb.c libgpio/usb/libusb.c --- libgpio.orig/usb/libusb.c Fri Sep 15 14:53:50 2000 +++ libgpio/usb/libusb.c Fri Sep 15 14:56:09 2000 @@ -45,7 +45,7 @@ int gpio_usb_set_pin(gpio_device * dev, int pin, int level); int gpio_usb_update(gpio_device * dev); -int gpio_usb_clear_halt_lib(gpio_device * dev); +int gpio_usb_clear_halt_lib(gpio_device * dev, int ep); int gpio_usb_msg_read_lib(gpio_device * dev, int value, char *bytes, int size); int gpio_usb_msg_write_lib(gpio_device * dev, int value, char *bytes, int size); int gpio_usb_find_device_lib(gpio_device *dev, int idvendor, int idproduct); @@ -162,13 +162,23 @@ return gpio_usb_open(dev); } -int gpio_usb_clear_halt_lib(gpio_device * dev) +int +gpio_usb_clear_halt_lib(gpio_device * dev, int ep) { - if (usb_clear_halt(dev->device_handle, dev->settings.usb.inep) - || usb_clear_halt(dev->device_handle, dev->settings.usb.outep)) - return GPIO_ERROR; - else - return GPIO_OK; + int ret=0; + + switch (ep) { + case GPIO_USB_IN_ENDPOINT : + ret=usb_clear_halt(dev->device_handle, dev->settings.usb.inep); + break; + case GPIO_USB_OUT_ENDPOINT : + ret=usb_clear_halt(dev->device_handle, dev->settings.usb.outep); + break; + default: + fprintf(stderr,"gpio_usb_clear_halt: bad EndPoint argument\n"); + return GPIO_ERROR; + } + return (ret ? GPIO_ERROR : GPIO_OK); } int gpio_usb_write(gpio_device * dev, char *bytes, int size)