Does PyUSB raise any exception? If so, what's the message? If not, has all the data written?
Wander 2008/3/19, Mike Holloway <[EMAIL PROTECTED]>: > Hi all, > > I'm very new to this list, so hello all! > I'm just starting out using python, my background is lamp. > > I have a Prolific Technologies bridged usb cable that I wish to talk to > using pyusb and libusb, I've tried following examples and compiling my > own code but I'm really struggling getting it to work. > > I'm trying to send a sequence of letters to the cable, for them to > reappear on the other side. I've been trying to use bulkWrite and > bulkRead methods but I'm not sure I'm using them right. There's also > controlMethod, but I'm not sure what that is used for. > > Can anyone help get me started, I'm concerned mostly with the > communication, I reckon I could actually get somewhere if I can just > nail the first bit, here's my code so far: > > * Cheers in advance, Mike. > > > import usb > import sys > import os > import time > from array import array > > class DeviceDescriptor: > def __init__(self, vendor_id, product_id, interface_id) : > self.vendor_id = vendor_id > self.product_id = product_id > self.interface_id = interface_id > > def get_device(self) : > buses = usb.busses() > for bus in buses : > for device in bus.devices : > if device.idVendor == self.vendor_id : > if device.idProduct == self.product_id : > return device > return None > > class XFPS(): > VENDOR_ID = 0x067B #: Vendor Id > PRODUCT_ID = 0x0000 #: Product Id for the bridged usb cable > INTERFACE_ID = 0 #: The interface we use to talk to the device > BULK_IN_EP = 0x83 #: Endpoint for Bulk reads > BULK_OUT_EP = 0x02 #: Endpoint for Bulk writes > PACKET_LENGTH = 0x40 #: 64 bytes > > device_descriptor = DeviceDescriptor(VENDOR_ID, \ > PRODUCT_ID, INTERFACE_ID) > > def __init__(self,) : > # The actual device (PyUSB object) > self.device = self.device_descriptor.get_device() > # Handle that is used to communicate with device. Setup in L{open} > self.handle = None > > def open(self) : > self.device = self.device_descriptor.get_device() > if not self.device: > print >> sys.stderr, "Cable isn't plugged in" > try: > self.handle = self.device.open() > self.handle.claimInterface(self.device_descriptor.interface_id) > except usb.USBError, err: > print >> sys.stderr, err > > def close(self): > """ Release device interface """ > try: > self.handle.reset() > self.handle.releaseInterface() > except Exception, err: > print >> sys.stderr, err > self.handle, self.device = None, None > > def my_bulk_write(self): > A = chr(0x75) # u > B = chr(0x69) # i > X = chr(0x6F) # o > Y = chr(0x70) # p > LB = chr(0x6C) # l > RB = chr(0x6B) # k > LT = chr(0x68) # h > RT = chr(0x6A) # j > > S = chr(0x32) > s = chr(0x73) > > self.close() > self.open() > > msg = [A,B,A,B,A,B,A,B] > #help(self.handle.bulkWrite) > help(self.handle.interruptWrite) > sent_bytes = self.handle.interruptWrite(XFPS.BULK_OUT_EP,msg,1000) > print sent_bytes > if sent_bytes: > read_bytes = self.handle.interruptRead(0x81,sent_bytes); > print read_bytes > > xfps = XFPS() > xfps.open() > xfps.my_bulk_write() > > > Device info: > ------------ > > Full Speed device @ 3 (0x1D100000): > ............................................. Composite device from > Prolific Technology, Inc. > Device Descriptor > Descriptor Version Number: 0x0100 > Device Class: 0 (Composite) > Device Subclass: 0 > Device Protocol: 0 > Device MaxPacketSize: 8 > Device VendorID/ProductID: 0x067B/0x0000 (Prolific > Technology, Inc.) > Device Version Number: 0x0000 > Number of Configurations: 1 > Manufacturer String: 1 "Prolific Technology Inc." > Product String: 0 (none) > Serial Number String: 0 (none) > Configuration Descriptor > Length (and contents): 39 > Raw Descriptor (hex) 0000: 09 02 27 00 01 01 00 A0 32 > 09 04 00 00 03 FF 00 > Raw Descriptor (hex) 0010: 00 00 07 05 81 03 01 00 01 > 07 05 02 02 40 00 00 > Raw Descriptor (hex) 0020: 07 05 83 02 40 00 00 > Number of Interfaces: 1 > Configuration Value: 1 > Attributes: 0xA0 (bus-powered, remote wakeup) > MaxPower: 100 ma > Interface #0 - Vendor-specific > Alternate Setting 0 > Number of Endpoints 3 > Interface Class: 255 (Vendor-specific) > Interface Subclass; 0 (Vendor-specific) > Interface Protocol: 0 > Endpoint 0x81 - Interrupt Input > Address: 0x81 (IN) > Attributes: 0x03 (Interrupt no synchronization data > endpoint) > Max Packet Size: 1 > Polling Interval: 1 ms > Endpoint 0x02 - Bulk Output > Address: 0x02 (OUT) > Attributes: 0x02 (Bulk no synchronization data endpoint) > Max Packet Size: 64 > Polling Interval: 0 ms > Endpoint 0x83 - Bulk Input > Address: 0x83 (IN) > Attributes: 0x02 (Bulk no synchronization data endpoint) > Max Packet Size: 64 > Polling Interval: 0 ms > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > Pyusb-users mailing list > Pyusb-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/pyusb-users > ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ Pyusb-users mailing list Pyusb-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/pyusb-users