libftdi-git Archives

Subject: A library to talk to FTDI chips branch, master, updated. v1.2-4-gd160863

From: libftdi-git@xxxxxxxxxxxxxxxxxxxxxxx
To: libftdi-git@xxxxxxxxxxxxxxxxxxxxxxx
Date: Wed, 14 Jan 2015 17:19:56 +0100 (CET)
The branch, master has been updated
       via  d160863c527c8a3fdf1e821a64c59192a2fc2150 (commit)
      from  de3da328335f1dd7e55bf251f900123d4e0a0785 (commit)


- Log -----------------------------------------------------------------
commit d160863c527c8a3fdf1e821a64c59192a2fc2150
Author: Rodney Sinclair <rodney@xxxxxxxxxxxxxx>
Date:   Wed Jan 14 17:19:42 2015 +0100

    Add cbus python example code

-----------------------------------------------------------------------

Summary of changes:
 python/examples/CMakeLists.txt |    2 +-
 python/examples/cbus.py        |  173 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 174 insertions(+), 1 deletions(-)
 create mode 100644 python/examples/cbus.py

diff --git a/python/examples/CMakeLists.txt b/python/examples/CMakeLists.txt
index bca7daf..b4ed93d 100644
--- a/python/examples/CMakeLists.txt
+++ b/python/examples/CMakeLists.txt
@@ -1,4 +1,4 @@
-install ( FILES simple.py complete.py
+install ( FILES simple.py complete.py cbus.py
           DESTINATION share/libftdi/examples
           PERMISSIONS OWNER_READ GROUP_READ WORLD_READ 
         )
diff --git a/python/examples/cbus.py b/python/examples/cbus.py
new file mode 100644
index 0000000..18d8ab5
--- /dev/null
+++ b/python/examples/cbus.py
@@ -0,0 +1,173 @@
+#!/usr/bin/python2
+"""
+Copyright 2015, Sinclair R.F., Inc.
+
+This program is distributed under the GPL, version 2.
+
+Demonstrate how to configure the FT230X USB UART bridge as follows:
+  max_power     500 mA
+  CBUS3         Drive 1 (accomodate PCB error)
+"""
+
+import sys
+
+# Need to install libftdi for the following to work (see README.txt)
+import ftdi1 as ftdi
+
+# Define class for displaying errors.
+class ErrorMsg(Exception):
+  def __init__(self,message):
+    self.message = message;
+  def __str__(self):
+    return self.message;
+
+# Function to convert CBUSH values to human-readable strings
+def cbush_string(value):
+  if value == ftdi.CBUSH_AWAKE:
+    return 'AWAKE'
+  if value == ftdi.CBUSH_BAT_DETECT:
+    return 'BAT_DETECT'
+  if value == ftdi.CBUSH_BAT_DETECT_NEG:
+    return 'BAT_DETECT_NEG'
+  if value == ftdi.CBUSH_BB_RD:
+    return 'BB_RD'
+  if value == ftdi.CBUSH_BB_WR:
+    return 'BB_WR'
+  if value == ftdi.CBUSH_CLK15:
+    return 'CLK15'
+  if value == ftdi.CBUSH_CLK30:
+    return 'CLK30'
+  if value == ftdi.CBUSH_CLK7_5:
+    return 'CLK7_5'
+  if value == ftdi.CBUSH_DRIVE_0:
+    return 'DRIVE_0'
+  if value == ftdi.CBUSH_DRIVE1:
+    return 'DRIVE_1'
+  if value == ftdi.CBUSH_I2C_RXF:
+    return 'I2C_RXF'
+  if value == ftdi.CBUSH_I2C_TXE:
+    return 'I2C_TXE'
+  if value == ftdi.CBUSH_IOMODE:
+    return 'IOMODE'
+  if value == ftdi.CBUSH_PWREN:
+    return 'PWREN'
+  if value == ftdi.CBUSH_RXLED:
+    return 'RXLED'
+  if value == ftdi.CBUSH_SLEEP:
+    return 'SLEEP'
+  if value == ftdi.CBUSH_TIME_STAMP:
+    return 'TIME_STAMP'
+  if value == ftdi.CBUSH_TRISTATE:
+    return 'TRISTATE'
+  if value == ftdi.CBUSH_TXDEN:
+    return 'TXDEN'
+  if value == ftdi.CBUSH_TXLED:
+    return 'TXLED'
+  if value == ftdi.CBUSH_TXRXLED:
+    return 'TXRXLED'
+  if value == ftdi.CBUSH_VBUS_SENSE:
+    return 'VBUS_SENSE'
+  return 'UNKNOWN'
+
+# Surround the program with a try ... except clause.
+try:
+
+  # Allocate and inialize an ftdi context.
+  ftdic = ftdi.new()
+  if ftdic == 0:
+    raise ErrorMsg('ftdi.new() failed')
+
+  # List all the FT230X devices.
+  nDevices, devlist = ftdi.usb_find_all(ftdic, 0x0403, 0x6015)
+  if nDevices < 0:
+    raise ErrorMsg('ftdi.usb_find_all error = %s' % 
ftdi.get_error_string(ftdic));
+  elif nDevices == 0:
+    raise ErrorMsg('No FT230X devices found');
+  elif nDevices != 1:
+    raise ErrorMsg('More than one FT230X device found');
+
+  # Display the identified single FT230X device.
+  ret, manufacturer, description, serial = ftdi.usb_get_strings(ftdic, 
devlist.dev)
+  if ret < 0:
+    raise ErrorMsg('ftdi.usb_get_strings error = %s' % 
ftdi.get_error_string(ftdic))
+  print 'manufacturer="%s" description="%s" serial="%s"' % (manufacturer, 
description, serial)
+
+  # Open the identified single FT230X device.
+  ret = ftdi.usb_open_desc(ftdic, 0x0403, 0x6015, description, serial);
+  if ret < 0:
+    raise ErrorMsg('ftdi.usb_open_desc error = %s' % 
ftdi.get_error_string(ftdic))
+
+  # Read the chip id.
+  ret, chipid = ftdi.read_chipid(ftdic)
+  if ret < 0:
+    raise ErrorMsg('ftdi.read_chipid error = %s' % 
ftdi.get_error_string(ftdic))
+  print 'chip id=0x%08X' % (chipid % 2**32)
+
+  # Read the EEPROM
+  ret = ftdi.read_eeprom(ftdic);
+  if ret < 0:
+    raise ErrorMsg('ftdi.read_eeprom error = %s' % 
ftdi.get_error_string(ftdic))
+
+  # Get a read-only copy of the EEPROM
+  if True:
+    eeprom_size = ftdic.eeprom.size
+    ret, eeprom_buf = ftdi.get_eeprom_buf(ftdic, eeprom_size)
+    if ret < 0:
+      raise ErrorMsg('ftdi.get_eeprom_buf error = %s' % 
ftdi.get_error_string(ftdic))
+    for i in range(0,eeprom_size,16):
+      sys.stdout.write('%04x:  ' % i)
+      for j in range(16):
+        sys.stdout.write('%02x ' % ord(eeprom_buf[i+j]))
+        if j in (7,15,):
+          sys.stdout.write(' ')
+      for j in range(16):
+        x = eeprom_buf[i+j]
+        if 32 <= ord(x) <= 0x7E:
+          sys.stdout.write(x)
+        else:
+          sys.stdout.write('.')
+      sys.stdout.write('\n');
+
+  # Read and display the EEPROM (in human readable format)
+  ret = ftdi.eeprom_decode(ftdic, 1);
+  if ret < 0:
+    raise ErrorMsg('ftdi.eeprom_decode error = %s' % 
ftdi.get_error_string(ftdic))
+
+  # Set the maximum power to 500mA.
+  print 'initial max_power = %dmA' % ftdic.eeprom.max_power
+  ftdic.eeprom.max_power = 500
+  print 'new max_power = %dmA' % ftdic.eeprom.max_power
+
+  # Set CBUS3 to DRIVE_1 (the board needs to be reworked to use PWREN# and 
BCD#)
+  ret, value = ftdi.get_eeprom_value(ftdic,ftdi.CBUS_FUNCTION_3)
+  if ret < 0:
+    raise ErrorMsg('ftdi.get_eeprom_value error = %s' % 
ftdi.get_error_string(ftdic))
+  print 'initial CBUS3 = %d (%s)' % (value,cbush_string(value),)
+  ret = ftdi.set_eeprom_value(ftdic,ftdi.CBUS_FUNCTION_3,ftdi.CBUSH_DRIVE1)
+  if ret < 0:
+    raise ErrorMsg('ftdi.set_eeprom_value error = %s' % 
ftdi.get_error_string(ftdic))
+  ret, value = ftdi.get_eeprom_value(ftdic,ftdi.CBUS_FUNCTION_3)
+  if ret < 0:
+    raise ErrorMsg('ftdi.get_eeprom_value error = %s' % 
ftdi.get_error_string(ftdic))
+  print 'new CBUS3 = %d (%s)' % (value,cbush_string(value),)
+
+  # Write the new EEPROM settings.
+  if False:
+    ret = ftdi.eeprom_build(ftdic)
+    if ret < 0:
+      raise ErrorMsg('ftdi.eeprom_build error = %s' % 
ftdi.get_error_string(ftdic))
+    ret = ftdi.write_eeprom(ftdic)
+    if ret < 0:
+      raise ErrorMsg('ftdi.write_eeprom error = %s' % 
ftdi.get_error_string(ftdic))
+    print 'EEPROM write succeeded'
+  else:
+    print 'EEPROM write not attempted'
+
+  # Close the ftdi context.
+  ret = ftdi.usb_close(ftdic);
+  if ret < 0:
+    raise ErrorMsg('ftdi.usb_close error = %s' % ftdi.get_error_string(ftdic));
+
+except ErrorMsg, msg:
+  print >> sys.stderr, 'FATAL ERROR:  ' + str(msg);
+  exit(1);


hooks/post-receive
-- 
A library to talk to FTDI chips

--
libftdi-git - see http://www.intra2net.com/en/developer/libftdi for details.
To unsubscribe send a mail to libftdi-git+unsubscribe@xxxxxxxxxxxxxxxxxxxxxxx   

Current Thread
  • A library to talk to FTDI chips branch, master, updated. v1.2-4-gd160863, libftdi-git <=