diff -u --new-file --recursive --exclude-from=/tmp/cvs.exclude libgpio.orig/include/gpio.h libgpio/include/gpio.h --- libgpio.orig/include/gpio.h Tue Aug 1 01:41:26 2000 +++ libgpio/include/gpio.h Sat Aug 5 11:45:33 2000 @@ -89,6 +89,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; @@ -108,7 +115,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 @@ -272,7 +285,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 --new-file --recursive --exclude-from=/tmp/cvs.exclude libgpio.orig/libgpio/gpio.c libgpio/libgpio/gpio.c --- libgpio.orig/libgpio/gpio.c Fri Aug 4 16:37:47 2000 +++ libgpio/libgpio/gpio.c Sun Aug 6 15:43:20 2000 @@ -260,12 +263,12 @@ return (dev->ops->find_device(dev, idvendor, idproduct)); } -int gpio_usb_clear_halt (gpio_device * dev) +int gpio_usb_clear_halt (gpio_device * dev, int ep) { if (!dev->ops->clear_halt) return (GPIO_ERROR); - return (dev->ops->clear_halt(dev)); + return (dev->ops->clear_halt(dev, ep)); } int gpio_usb_msg_write (gpio_device * dev, int value, char *bytes, int size) diff -u --new-file --recursive --exclude-from=/tmp/cvs.exclude libgpio.orig/usb/libusb.c libgpio/usb/libusb.c --- libgpio.orig/usb/libusb.c Fri Aug 4 16:37:49 2000 +++ libgpio/usb/libusb.c Thu Aug 10 16:06:56 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); @@ -154,12 +157,25 @@ 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; + + gpio_debug_printf ("gpio_usb_clear_halt(ep=%x) called\n",ep); + 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; + } + if (ret) + gpio_debug_printf ("gpio_usb_clear_halt() : ioctl() returns %d\n",ret); + return (ret ? GPIO_ERROR : GPIO_OK); }