summaryrefslogtreecommitdiff
path: root/spectro/usbio_ox.c
diff options
context:
space:
mode:
authorJörg Frings-Fürst <debian@jff-webhosting.net>2017-11-25 10:16:00 +0100
committerJörg Frings-Fürst <debian@jff-webhosting.net>2017-11-25 10:16:00 +0100
commitf6b8e0eae4374f339487a33e3e4fe5462d5816e1 (patch)
tree5f5f764fd6cda404b2ad6e85762c03fce3a335db /spectro/usbio_ox.c
parent615ab5513e79c4abc5bbe5c993587785b6a1738b (diff)
New upstream version 2.0.0upstream/2.0.0
Diffstat (limited to 'spectro/usbio_ox.c')
-rwxr-xr-x[-rw-r--r--]spectro/usbio_ox.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/spectro/usbio_ox.c b/spectro/usbio_ox.c
index 2b09955..3923d6d 100644..100755
--- a/spectro/usbio_ox.c
+++ b/spectro/usbio_ox.c
@@ -457,12 +457,20 @@ char **pnames /* List of process names to try and kill before opening */
(*pluginref)->Stop(pluginref);
IODestroyPlugInInterface(pluginref); // this stops IOServices though ??
+ /* This can fail if the device has multiple interfaces, and */
+ /* one of them is grabbed by a system interface (i.e. debug serial port) */
+ /* So soft fail, and rely on ep use to fail for invalid interface */
if ((rv = (*(p->usbd->interfaces[i]))->USBInterfaceOpen(
p->usbd->interfaces[i])) != kIOReturnSuccess) {
- a1loge(p->log, rv, "usb_open_port: USBInterfaceOpen failed with 0x%x\n",rv);
+#ifdef NEVER
+ a1loge(p->log, rv, "usb_open_port: USBInterfaceOpen %d failed with 0x%x\n",i, rv);
IOObjectRelease(ioit);
cleanup_device(p);
return ICOM_SYS;
+#else
+ a1logw(p->log, "usb_open_port: USBInterfaceOpen %d failed with 0x%x\n",i,rv);
+ continue;
+#endif
}
/* Get the end point details, and set reference to pipe no and interfece ix */
@@ -580,6 +588,9 @@ static int icoms_usb_transaction(
a1logd(p->log, 8, "icoms_usb_transaction: req type 0x%x ep 0x%x size %d\n",ttype,endpoint,length);
+ if (transferred != NULL)
+ *transferred = 0;
+
if (ttype != icom_usb_trantype_interrutpt
&& ttype != icom_usb_trantype_bulk) {
/* We only handle interrupt & bulk, not control */