On Fri, Mar 10, 2006 at 01:39:55PM +0100, VictorSanchez2 wrote:
> > Ojalá logres que te funcione. Ya que salga voy a juntar todo esto y 
> > hacer un README para que lo incluyan en pilot-link.
>
> Volveré a intentarlo a ver si hacemos que funcione. Gracias por todo.

¿Todavía andas con este problema? En la lista de pilot-link-dev acaba
de llegar un parche relacionado a no-sé-que problema que afecta a la
T|X y la LifeDrive. Te anexo el parche, a ver si te sirve.

----- Forwarded message from Daniel Gollub <[EMAIL PROTECTED]> -----

Subject: LiveDrive-issue fix for libusb connection
From: Daniel Gollub <[EMAIL PROTECTED]>
Date: Mon, 3 Jul 2006 17:39:09 +0200
To: pilot-link Development List <[EMAIL PROTECTED]>
Organization: SUSE Linux Products GmbH
X-gnu-designs.com-MailScanner: Found to be clean, Found to be clean
Reply-To: pilot-link Development List <[EMAIL PROTECTED]>
X-MailScanner-From: [EMAIL PROTECTED]

Hi,

i have written a small fix for the "LiveDrive"-issue, which was discussed few 
days ago in #pilot-link channel. Now i am able to sync the Palm T|X without 
re-plugging the device. The problem is that the device is listed in the 
known_devices table but doesn't fail in USB_configure_device and is listing 
until the device disappears, when the hotsync starts => sync fails.

The fix lets USB_poll() skip the known devices which are unconfigured and 
avoid that USB_poll() is only called once by u_wait_for_device(). So 
USB_poll() is called until the device appears again and gets successfully 
configured.

Debug output is also attachted, if somebody is interested.

Tested with Palm T|X.

best regards,
Daniel

--- pilot-link-0.12.0/libpisock/libusb.c
+++ pilot-link-0.12.0/libpisock/libusb.c
@@ -138,6 +138,11 @@
                        USB_in_endpoint = USB_out_endpoint = 0xFF;
 
                        ret = USB_configure_device (data, &input_endpoint, 
&output_endpoint);
+                       if (ret < 0) {
+                               LOG((PI_DBG_DEV, PI_DBG_LVL_DEBUG, "%s: USB 
configure failed for familar device: 0x%04x 0x%04x. (LifeDrive issue?!)\n", 
__FILE__, dev->descriptor.idVendor, dev->descriptor.idProduct));
+                               usb_close(USB_handle);
+                               continue;
+                       }
 
                        for (i = 0; i < 
dev->config[0].interface[0].altsetting[0].bNumEndpoints; i++) {
                                struct usb_endpoint_descriptor *endpoint;
--- pilot-link-0.12.0/libpisock/usb.c
+++ pilot-link-0.12.0/libpisock/usb.c
@@ -951,6 +951,9 @@
        } else {
                /* other devices will either accept or deny this generic call */
                ret = USB_configure_generic (dev, input_pipe, output_pipe);
+               if (ret < 0) {
+                       return -1;
+               }
        }
 
        /* query bytes available. Not that we really care,
@@ -962,6 +965,8 @@
                ret = dev->impl.control_request (dev, 0xc2, 
GENERIC_REQUEST_BYTES_AVAILABLE, 0, 0, &ba[0], 2, 0);
                if (ret < 0) {
                        LOG((PI_DBG_DEV, PI_DBG_LVL_ERR, "usb: 
GENERIC_REQUEST_BYTES_AVAILABLE failed (err=%08x)\n", ret));
+                       /* configuration have to fail to skip this device - or 
LiveDrive(?) devices will hang */
+                       return -1;
                }
                LOG((PI_DBG_DEV, PI_DBG_LVL_DEBUG, 
"GENERIC_REQUEST_BYTES_AVAILABLE returns 0x%02x%02x\n", ba[0], ba[1]));
        }
@@ -1017,6 +1022,7 @@
 USB_configure_generic (pi_usb_data_t *dev, u_int8_t *input_pipe, u_int8_t 
*output_pipe)
 {
        int i, ret;
+       int hotsync = 0;
        palm_ext_connection_info_t ci;
        u_int32_t flags = dev->dev.flags;
 
@@ -1031,6 +1037,9 @@
                        LOG((PI_DBG_DEV, PI_DBG_LVL_DEBUG, "\t[%d] 
endpoint_info=%d\n", i, ci.connections[i].endpoint_info));
                        if (!memcmp(ci.connections[i].port_function_id, "cnys", 
4)) {
 
+                               /* found hotsync port */
+                               hotsync = 1;
+
                                /* 'sync': we found the pipes to use for 
synchronization force
                                   find_interfaces to select this one rather 
than another one */
                                if (ci.endpoint_numbers_different) {
@@ -1046,6 +1055,11 @@
                                }
                        }
                }
+
+               if (!hotsync) {
+                       LOG((PI_DBG_DEV, PI_DBG_LVL_ERR, "usb: 
PALM_GET_EXT_CONNECTION_INFORMATION - no hotsync port found.\n", ret));
+                       return -1;
+               }
        }
 
        if (flags & USB_INIT_TAPWAVE) {


----- End forwarded message -----

-- 
Rodrigo Gallardo
GPG-Fingerprint: 7C81 E60C 442E 8FBC D975  2F49 0199 8318 ADC9 BC28


-- 
Rodrigo Gallardo
GPG-Fingerprint: 7C81 E60C 442E 8FBC D975  2F49 0199 8318 ADC9 BC28

Attachment: signature.asc
Description: Digital signature

Reply via email to