[tuxdroid-svn] r713 - daemon/trunk/libs
Status: Beta
Brought to you by:
ks156
From: jaguarondi <c2m...@c2...> - 2007-11-19 16:10:04
|
Author: jaguarondi Date: 2007-11-19 17:09:54 +0100 (Mon, 19 Nov 2007) New Revision: 713 Modified: daemon/trunk/libs/USBDaemon_usb.c Log: * Added some log messages when libusb fails. * Decreased the timeout when requesting status. Modified: daemon/trunk/libs/USBDaemon_usb.c =================================================================== --- daemon/trunk/libs/USBDaemon_usb.c 2007-11-19 15:15:06 UTC (rev 712) +++ daemon/trunk/libs/USBDaemon_usb.c 2007-11-19 16:09:54 UTC (rev 713) @@ -22,6 +22,7 @@ #include <stdio.h> #include <errno.h> +#include <assert.h> #include "USBDaemon_usb.h" #include "USBDaemon_globals.h" @@ -69,7 +70,7 @@ static struct usb_dev_handle *usb_open_TuxDroid(struct usb_device *tux_dev) { usb_dev_handle *tux_hdl; - int error; + int ret; /* Open usb device */ tux_hdl = usb_open(tux_dev); @@ -86,17 +87,19 @@ if (usb_set_configuration(tux_hdl, 1) < 0) { log_debug("Couldn't set config 1: %s (%d)\n"\ - " Another module may have claimed an interface "\ - "already, see dmesg|tail.", strerror(errno), errno); + " Another module may have claimed the interface "\ + "already, see dmesg|tail. This isn't an error, most of "\ + "the time snd_usb_audio is already connected to the audio "\ + "interfaces of the dongle.", strerror(errno), errno); } /* Claim device interface */ - error = usb_claim_interface(tux_hdl, TUX_INTERFACE); - if (error != 0) + ret = usb_claim_interface(tux_hdl, TUX_INTERFACE); + if (ret != 0) { /*usb_detach_kernel_driver_np(tux_hdl, TUX_INTERFACE); */ - error = usb_claim_interface(tux_hdl, TUX_INTERFACE); - if (error != 0) + ret = usb_claim_interface(tux_hdl, TUX_INTERFACE); + if (ret != 0) { log_error("Can't claim interface: %s (%d)", strerror(errno), errno); return NULL; @@ -191,8 +194,13 @@ */ int usb_write_TuxDroid(const void *buf, size_t size) { - return usb_interrupt_write(tux_handle, TUX_WRITE_EP, (char *)buf, size, - TUX_WRITE_TIMEOUT); + int ret; + ret = usb_interrupt_write(tux_handle, TUX_WRITE_EP, (char *)buf, size, + TUX_WRITE_TIMEOUT); + if (ret <=0) + log_error("USB: can't write on device: %s (%d)", + strerror(errno), errno); + return ret; } /** @@ -205,8 +213,13 @@ */ int usb_read_TuxDroid(void *buf, size_t size) { - return usb_interrupt_read(tux_handle, TUX_READ_EP, (char *)buf, size, + int ret; + ret = usb_interrupt_read(tux_handle, TUX_READ_EP, (char *)buf, size, TUX_READ_TIMEOUT); + if (ret <=0) + log_error("USB: can't read on device: %s (%d)", + strerror(errno), errno); + return ret; } /** @@ -232,6 +245,8 @@ return; idx = usb_read_TuxDroid(data, sizeof(data)); + /* XXX in case of error, we should probably try reading again later, not + * reissue a write. */ if (idx <= 0) return; @@ -276,24 +291,24 @@ return ACK_CMD_DONGLE_NOT_PRESENT; /* Send data */ - cmd_status_flag = 1; idx = usb_write_TuxDroid(data, TUX_SEND_LENGTH); if (idx <= 0) return ACK_CMD_TIMEOUT; log_debug("CMD: %.2x %.2x %.2x %.2x", data[0], data[1], data[2], data[3]); + cmd_status_flag = 1; counter = 0; csf = cmd_status_flag; while (csf) { + usleep(5000); usb_get_status_TuxDroid(); csf = cmd_status_flag; counter++; - usleep(10000); - if (counter == 15) + if (counter == 5) { - log_debug("CMD: -> ! TIMEOUT"); + log_debug("CMD: -> ! TIMEOUT"); return ACK_CMD_TIMEOUT; } } |