From: Marcos W. <wm...@gm...> - 2010-12-15 14:48:08
|
Hey Santiago, I've tried sending control messages but either the devices does not use it or I cannot construct them correctly, for example, here I've tried to send a GET_REPORT (the one that keyboard and mises use to communicate according to HID especification) message: # 0x91 and 0x01 for a GET_REPORT control message dev.ctrl_transfer(0x91, 0x01,0,0,data) also tried with other control messages, but everything return a pipe error like before. I found an implementation of a credit card reader in python 1.0 here http://www.micahcarrick.com/credit-card-reader-pyusb.html it seems pritty simple. I don't know why I cannot make it work :(. Although with the instruction: dev.write(1,data) the devices seems to be processing the information, I just cannot harvest the response for some reason. right now I got stuck sending data to the device but with response full of zeros, as it is shown in the link below: https://docs.google.com/Doc?id=dfpfb3rg_126jsh78vfv&authkey=CIPQmpoB here is the output of the lsusb -vv command: https://docs.google.com/Doc?id=dfpfb3rg_127fpxrqghc&authkey=CICHl_QP Thanks for keep throwing ideas ! Marcos On Tue, Dec 14, 2010 at 6:37 PM, Santiago Palomino Sanchez-Manjavacas < sp...@gm...> wrote: > It was a long time since I worked with the usb, but I recall the endpoints > are unidirectional. I think trying to read from an output shall return some > kind of error. You can try to find out which of the two operations (r/w) is > working first. You can try to find out if the device accepts the writes by > sending commands whose consequences can be observed by looking at the usb > device. > > I also remember having to deal with the control endpoints before using the > regular endpoints. That was done in the following way when I used a device > running the porus stack: > > porusBLKI(self.devh,bc) > print "Waiting for BITX (or IDLE).." > while porusSTAT(self.devh)==3: pass > print "Got BITX, now receiving .." > rndbuf=self.rxChain(1) *<=== This is just doing a read, but I sent > a control message to the device first.* > > > def porusBLKO(devh,length): > devh.controlMsg(0x41,4,[],length) > > def porusBLKI(devh,length): > devh.controlMsg(0x41,3,[],length) > > def porusTMOI(devh,length,c): > devh.controlMsg(0x41,7,[c],length) > > > def porusSTAT(devh): > buf=devh.controlMsg(0xC1, 5, 1)[0] > if buf<0: buf+=256 > return buf > > I do not know if all devices require control messages before accessing the > endpoints, but that device did. > > Good luck with it. > > > > On Tue, Dec 14, 2010 at 20:31, Marcos Wolff <wm...@gm...> wrote: > >> 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 >>>>>> >>>>>> >>>>> >>>> >>> >> >> >> ------------------------------------------------------------------------------ >> 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 > > |