[pyar] Pyusb + hid en linux

Marcos Wolff wmarcos en gmail.com
Mar Dic 14 14:38:09 ART 2010


Hola a todos,

Estoy teniendo un inconveniente con pyusb y el manejo de un dispositivo usb
hid (en realidad es una placa hecha manual con un microcontrolador PIC
18F4550)

A la cual bajo windows se comunican enviandole a través del driver HID 3
bytes de información y este devuelve otros 3 bytes como respuesta.

Yo quiero lograr comunicarme via pyusb en linux para portar este dispositivo
(ubuntu 10.10 pyusb 1.0a) y realizo lo siguiente (según este tutorial
http://pyusb.sourceforge.net/docs/1.0/tutorial.html ):

#prueba.py

import usb.core

#busco dispositivo
dev = usb.core.find(idVendor=1240,idProduct=32)
if dev is None:
    raise ValueError('Device not found')

#desactivo el driver del kernel
interface = dev.get_interface_altsetting()
if dev.is_kernel_driver_active(interface.bInterfaceNumber) is True:
        print "fuck, chau driver"
        dev.detach_kernel_driver(interface.bInterfaceNumber)
else:
        print "no esta activo el driver del kernel"

#comunicacion con el dispositivo
dev.set_configuration()

#mensaje de 3 bytes
msg = '\x02\x03\x00'

#los parametros bmRequestType y bRequest lo configure segun las
especificaciones del endpoint estandar de control usb
http://www.jungo.com/st/support/documentation/windriver/811/wdusb_man_mhtml/node55.html#usb_standard_dev_req_codes
 )

dev.ctrl_transfer(0x40, 0x02, 0, 0, msg)


y obtengo este error:

Traceback (most recent call last):
  File "prueba.py", line 26, in <module>
    dev.ctrl_transfer(0x40, 0x02, 0, 0, msg)
  File "/home/administrador/pyusb-1.0.0-a0/usb/core.py", line 668, in
ctrl_transfer
    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
538, in ctrl_transfer
    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: Pipe error*

Según la gente que lo construyó ellos se comunican via endpoint 0, es decir,
con mensajes de control. Tengo entendido que por más que el dispositivo este
identificado como HID debería poder comunicarme via mensajes de control en
el endpoint 0, no ?

Alguno me sabrá guiar para ver que es lo que estoy haciendo mal ?

Muchas gracias !
Marcos.

PD: traté de sniffear el usb con este tutorial
http://biot.com/blog/usb-sniffing-on-linux pero no aparece nada en el bus
excepto cuando reinicio el dispositivo.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20101214/c1ef3cdb/attachment.html>


More information about the pyar mailing list