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

Reply via email to