From: Marcos W. <wm...@gm...> - 2010-12-14 19:32:15
|
update: If I use the same endpoint for reading and writing it works but returns just 0s :( #prueba.py 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() msg = '\x02\x03\x00' dev.write(1, msg, 0) ret = dev.read(1, len(msg), 0) print ret msg: [1, 3, 0] ret: array('B', [0, 0, 0, 0, 0]) On Tue, Dec 14, 2010 at 4:06 PM, Marcos Wolff <wm...@gm...> wrote: > Hi again, > > Did a little more research. I found out the console command lsusb -vv to > analyze the device, runned it, got this: > > Bus 002 Device 030: ID 04d8:0020 Microchip Technology, Inc. > Device Descriptor: > bLength 18 > bDescriptorType 1 > bcdUSB 1.10 > bDeviceClass 0 (Defined at Interface level) > bDeviceSubClass 0 > bDeviceProtocol 0 > bMaxPacketSize0 64 > idVendor 0x04d8 Microchip Technology, Inc. > idProduct 0x0020 > bcdDevice 1.00 > iManufacturer 1 DZE > iProduct 2 CDI TEST v1.0 > iSerial 0 > bNumConfigurations 1 > Configuration Descriptor: > bLength 9 > bDescriptorType 2 > wTotalLength 41 > bNumInterfaces 1 > bConfigurationValue 1 > iConfiguration 0 > bmAttributes 0xc0 > Self Powered > MaxPower 100mA > Interface Descriptor: > bLength 9 > bDescriptorType 4 > bInterfaceNumber 0 > bAlternateSetting 0 > bNumEndpoints 2 > bInterfaceClass 3 Human Interface Device > bInterfaceSubClass 0 No Subclass > bInterfaceProtocol 0 None > iInterface 0 > HID Device Descriptor: > bLength 9 > bDescriptorType 33 > bcdHID 1.00 > bCountryCode 0 Not supported > bNumDescriptors 1 > bDescriptorType 34 Report > wDescriptorLength 32 > Report Descriptors: > ** UNAVAILABLE ** > Endpoint Descriptor: > bLength 7 > bDescriptorType 5 > * bEndpointAddress 0x81 EP 1 IN* > bmAttributes 3 > Transfer Type Interrupt > Synch Type None > Usage Type Data > wMaxPacketSize 0x0008 1x 8 bytes > bInterval 1 > Endpoint Descriptor: > bLength 7 > bDescriptorType 5 > * bEndpointAddress 0x01 EP 1 OUT* > bmAttributes 3 > Transfer Type Interrupt > Synch Type None > Usage Type Data > wMaxPacketSize 0x0008 1x 8 bytes > bInterval 10 > Device Status: 0x0001 > Self Powered > > ----------------------------- > > so I modified the script to use those endpoints: > > #prueba.py > > 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() > > msg = '\x02\x03\x00' > dev.write(1, msg, 0) > ret = dev.read(0x81, len(msg), 0) > print ret > > Now the device start blinking its leds like it's working but I get: > > Traceback (most recent call last): > File "prueba.py", line 27, in <module> > ret = dev.read(0x81, len(msg), 0) > 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* > > Tried changing the timeout value and didn't work :(. > > Any ideas ? > > Thanks ! > > On Tue, Dec 14, 2010 at 3:32 PM, Marcos Wolff <wm...@gm...> wrote: > >> Follow-up: Santiago: >> >> Also found the method doesn't exists in pyusb 1.0 apparently it manages >> interface claiming automatically. >> >> source: >> http://www.mail-archive.com/pyu...@li.../msg00374.html >> >> On Tue, Dec 14, 2010 at 3:30 PM, Marcos Wolff <wm...@gm...> wrote: >> >>> Hi Santiago, >>> >>> Following this tutorial it doesn't seem to be needed: >>> >>> http://pyusb.sourceforge.net/docs/1.0/tutorial.htm#talk-to-me-honey >>> >>> Anyway I've tried (kind of desperate here) and didn't work :( >>> >>> thank for the quick answer ! >>> >>> >>> On Tue, Dec 14, 2010 at 3:18 PM, Santiago Palomino Sanchez-Manjavacas < >>> sp...@gm...> wrote: >>> >>>> missing claimInterface() before using the control endpoint? >>>> >>>> Just a guess >>>> >>>> On Tue, Dec 14, 2010 at 18:54, Marcos Wolff <wm...@gm...> wrote: >>>> >>>>> Hi everyone, >>>>> >>>>> I'm having trouble comunicating with a custom made (from a PIC 18f4550 >>>>> micro-controller) HID device. Nowadays is used with windows and the default >>>>> HID driver in vb6 but I would like to port it to linux (ubuntu 10.10) and >>>>> pyusb (1.0a). >>>>> >>>>> The device is simple, when it receives 3 bytes via HID it responses 3 >>>>> bytes back with data. The people who made it told me that everything is >>>>> handled via end point 0 and default config). >>>>> >>>>> As I want to port it to linux I read this tutorial >>>>> http://pyusb.sourceforge.net/docs/1.0/tutorial.html and tried to >>>>> communicate via default config endpoint configuration: >>>>> >>>>> #prueba.py >>>>> >>>>> import usb.core >>>>> >>>>> #busco dispositivo >>>>> 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() >>>>> >>>>> #mensaje de 3 bytes >>>>> msg = '\x02\x03\x00' >>>>> >>>>> #bmRequestType y bRequest as said in >>>>> 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) >>>>> >>>>> >>>>> and I get this error which I don't fully understand: >>>>> >>>>> Traceback (most recent call last): >>>>> File "ejemplo.py", line 39, in <module> >>>>> print 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* >>>>> >>>>> Could someone guide me ? help me see what I'm doing wrong ? >>>>> >>>>> Thanks in advance ! >>>>> Marcos. >>>>> >>>>> >>>>> PD: I tried to sniff usb ports with this tutorial >>>>> http://biot.com/blog/usb-sniffing-on-linux but nothing seems to be >>>>> happening excepto when I reset the device. >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> ------------------------------------------------------------------------------ >>>>> Lotusphere 2011 >>>>> Register now for Lotusphere 2011 and learn how >>>>> to connect the dots, take your collaborative environment >>>>> to the next level, and enter the era of Social Business. >>>>> http://p.sf.net/sfu/lotusphere-d2d >>>>> _______________________________________________ >>>>> pyusb-users mailing list >>>>> pyu...@li... >>>>> https://lists.sourceforge.net/lists/listinfo/pyusb-users >>>>> >>>>> >>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> Lotusphere 2011 >>>> Register now for Lotusphere 2011 and learn how >>>> to connect the dots, take your collaborative environment >>>> to the next level, and enter the era of Social Business. >>>> http://p.sf.net/sfu/lotusphere-d2d >>>> _______________________________________________ >>>> pyusb-users mailing list >>>> pyu...@li... >>>> https://lists.sourceforge.net/lists/listinfo/pyusb-users >>>> >>>> >>> >> > |