DukeUSB

d2xx ports of Future Technology Devices International (FTDI) D2XX direct USB driver to several languages. FTDI chips are used in a variety of USB products such as serial converters and dongles.

Python Usage examples

The PyUSB API follows similar guidelines as the D2XX driver, however the behavior has been modified where necessary to fit the Python programming style.

# import the PyUSB module
import d2xx

# list devices by description, returns tuple of attached devices description strings
d = d2xx.listDevices(d2xx.OPEN_BY_DESCRIPTION)
print d

# list devices by serial, returns tuple of attached devices serial strings
d = d2xx.listDevices() # implicit d2xx.OPEN_BY_SERIAL_NUMBER
print d

h = d2xx.open(0)
print h

# read eeprom
print h.eeRead()

# get queue status
print h.getQueueStatus()

# set RX/TX timeouts
h.setTimeouts(1000,1000)

# write bytes (serial mode)
print h.write('Hello world!\r\n")

# read bytes (serial mode)
print h.read(5)

# ----------

Java Usage examples

  1. Import the classes.
    import jd2xx.JD2XX;
    import jd2xx.JD2XXInputStream;
    import jd2xx.JD2XXOutputStream;
    
  2. Create a JD2XX object. It will attempt to load FTDI's ftd2xx DLL so it must be in your PATH.
    JD2XX jd = new JD2XX();
    
  3. List devices by serial number.
    Object[] devs = jd.listDevicesBySerialNumber();
    for (int i=0; i<devs.length; ++i)
      System.out.println(devs[i]);
    
  4. List devices by description.
    devs = jd.listDevicesByDescription();
    for (int i=0; i<devs.length; ++i)
      System.out.println(devs[i]);
    
  5. List devices by port location.
    devs = jd.listDevicesByLocation();
    for (int i=0; i<devs.length; ++i)
      System.out.println(
        Integer.toHexString((Integer)devs[i])
      );
    
  6. Open a device using its index.
    jd.open(0);
    
  7. Configure thy device.
    jd.setBaudRate(38400);
    jd.setDataCharacteristics(
      8, JD2XX.STOP_BITS_1, JD2XX.PARITY_NONE
    );
    jd.setFlowControl(
      JD2XX.FLOW_NONE, 0, 0
    );
    jd.setTimeouts(1000, 1000);
    
  8. Send a message.
    String msg = "Hello Duke.";
    msg += "The message is 'Fiat experimentum in corpore vili'";
    int ret = jd.write(msg.getBytes());
    System.out.println(ret + " bytes sent.");
    
  9. Receive data.
    byte[] rd = jd.read(10);
    System.out.println(new String(rd));
    
  10. Read device configuration EEPROM.
    ProgramData pd = jd.eeRead();
    System.out.println(pd.toString());
    
  11. Java dudes do it with streams.
    JD2XXInputStream ins = new JD2XXInputStream(jd);
    JD2XXOutputStream outs = new JD2XXOutputStream(jd);
    ...
    byte[] data = new byte[DATA_SIZE];
    int ret = ins.read(data);
    data = processData(data);
    outs.write(data);
    
  12. Finally, be polite.
    ins.close();
    outs.jd2xx.close();
    outs.close();
    

Copyright 2005 Pablo Bleyer Kocik