[pyar] portando un dispositivo HID de windows a linux con pyusb 1.0a

Marcos Wolff wmarcos en gmail.com
Jue Dic 16 15:12:50 ART 2010


Buenas,

Ya postié antes sobre el tema pero ahora tengo más información por ahí
alguno me puede ayudar mejor:

Estoy portando un dispositivo hid de windows a linux (esta hecho con un
micro controlador PIC 18F2550) acá está el código que corre en el pic:

https://docs.google.com/Doc?id=dfpfb3rg_129g425rzg8

Acá tengo la salida del comando lsusb -vv para ese dispositivo:

https://docs.google.com/Doc?docid=0AWpXTkcnmmy9ZGZwZmIzcmdfMTI3ZnB4cnFnaGM&hl=en&authkey=CICHl_QP

El funcionamiento del dispositivo es simple. Cuando se le mandan 3 bytes
(por ejemplo 0x00 0x03 0x00) responde con 5 bytes de información.

Yo trato de leer el dispositivo con este cógido:

#configuration
import usb.core
dev = usb.core.find(idVendor=1240,idProduct=32)
if dev is None:
    raise ValueError('Device not found')
interface = dev.get_interface_altsetting()
if dev.is_kernel_driver_active(interface.bInterfaceNumber) is True:
        dev.detach_kernel_driver(interface.bInterfaceNumber)
dev.set_configuration()
dev.reset()

#communication code
msg = [0x02,0x03,0x00]
print dev.write(1, msg)
print dev.read(0x81, 5)

Pero me devuelve:

Traceback (most recent call last):
  File "prueba.py", line 27, in <module>
    print dev.read(0x81, 5)
  File "/home/administrador/pyusb-1.0.0-a0/usb/core.py", line 624, in read
    self.__get_timeout(timeout)
  File "/home/administrador/pyusb-1.0.0-a0/usb/_debug.py", line 53, in
do_trace
    return f(*args, **named_args)
  File "/home/administrador/pyusb-1.0.0-a0/usb/backend/libusb10.py", line
501, in intr_read
    timeout)
  File "/home/administrador/pyusb-1.0.0-a0/usb/backend/libusb10.py", line
581, in __read
    timeout))
  File "/home/administrador/pyusb-1.0.0-a0/usb/backend/libusb10.py", line
353, in _check
    raise USBError(_str_error[retval.value])
*usb.core.USBError: Operation timed out*

Esto es lo que reporta el sniffer usb de linux:

e0d6bc00 2973571448 S Co:034:00 s 00 09 0001 0000 0000 0
e0d6bc00 2973572014 C Co:034:00 0 0
e0d6bc00 2973576064 S Co:001:00 s 23 03 0004 0003 0000 0
f70c9c80 2973586652 C Ii:001:01 0 1 = 08
f70c9c80 2973586663 S Ii:001:01 -115 2 <
e0d6bc00 2973640041 C Co:001:00 0 0
e2168e80 2973696046 S Ci:001:00 s a3 00 0000 0003 0004 4 <
e2168e80 2973696059 C Ci:001:00 0 4 = 03011000
e2168e80 2973752042 S Co:001:00 s 23 01 0014 0003 0000 0
e2168e80 2973752048 C Co:001:00 0 0
e2168e80 2973752068 S Ci:000:00 s 80 06 0100 0000 0040 64 <
e2168e80 2973753001 C Ci:000:00 0 18 = 12011001 00000040 d8042000 00010102
0001
e2168e80 2973753041 S Co:001:00 s 23 03 0004 0003 0000 0
f70c9c80 2973779666 C Ii:001:01 0 1 = 08
f70c9c80 2973779679 S Ii:001:01 -115 2 <
e2168e80 2973816044 C Co:001:00 0 0
cb1fea80 2973872047 S Ci:001:00 s a3 00 0000 0003 0004 4 <
cb1fea80 2973872060 C Ci:001:00 0 4 = 03011000
d0878900 2973928050 S Co:001:00 s 23 01 0014 0003 0000 0
d0878900 2973928061 C Co:001:00 0 0
d0878900 2973928067 S Co:000:00 s 00 05 0022 0000 0000 0
d0878900 2973928997 C Co:000:00 0 0
d0878900 2973948060 S Ci:034:00 s 80 06 0100 0000 0012 18 <
d0878900 2973948998 C Ci:034:00 0 18 = 12011001 00000040 d8042000 00010102
0001
d0878900 2973949047 S Ci:034:00 s 80 06 0200 0000 0029 41 <
d0878900 2973950990 C Ci:034:00 0 41 = 09022900 010100c0 32090400 00020300
00000921 00010001 22200007 05810308
d0878900 2973951033 S Co:034:00 s 00 09 0001 0000 0000 0
d0878900 2973952991 C Co:034:00 0 0
d0878c00 2973954730 S Io:034:01 -115 3 = *020300    <---- paquete con la
info que le mandé al dispositivo*
d0878c00 2973955993 C Io:034:01 0 3 >
ec6fac00 2973957082 S Ii:034:01 -115 5 <
ec6fac00 2974957983 C Ii:034:01 -2 0


Acá dejo un log de un sniffer en windows. con una transacción exitosa:

https://docs.google.com/Doc?docid=0AWpXTkcnmmy9ZGZwZmIzcmdfMTMwZnBudjlyaGY&hl=en&authkey=CKTd6osJ

Fijense como escribe en el endpoint 1 y lee en el 0x81 sin problemas,
mientras que en linux me da un error


Alguna pista de lo que puede estar pasando ??

Muchas gracias a todos!
Marcos.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20101216/a7b04532/attachment.html>


More information about the pyar mailing list