| # Copyright (c) 2011 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| """Common functions for tools and libraries related to FTDI devices. |
| """ |
| import commands |
| import ctypes |
| import ctypes.util |
| import logging |
| import optparse |
| import os |
| import sys |
| |
| import ftdi_common |
| import libftdi_for_servo |
| |
| |
| def ftdi_locate_lib(lib_name): |
| """Locate FTDI related dll path. |
| |
| TODO(tbroch) To remove in favor of ctypes.util.find_library(lib_name) once |
| release of libraries in chroot is complete. |
| |
| Args: |
| lib_name : string name of library to find |
| """ |
| paths = [] |
| paths.append(os.getcwd()) |
| if 'FTDI_LIBRARY_PATH' in os.environ: |
| paths.extend(os.environ['FTDI_LIBRARY_PATH'].split(os.pathsep)) |
| if 'LD_LIBRARY_PATH' in os.environ: |
| paths.extend(os.environ['LD_LIBRARY_PATH'].split(os.pathsep)) |
| |
| lib_ext = ".so" |
| if os.name == "posix" and sys.platform == "darwin": |
| lib_ext = ".dylib" |
| |
| for path in paths: |
| lib_path = os.path.join(path,'lib' + lib_name + lib_ext) |
| if os.path.exists(lib_path): |
| return os.path.realpath(lib_path) |
| # Try the default OS library path |
| return 'lib' + lib_name + lib_ext |
| |
| |
| def load_libs(*args): |
| """Load libraries and return dll objects. |
| |
| Calls sys.exit if unable to locate the library |
| |
| Args: |
| args : list of strings names of libraries to load |
| |
| Returns: |
| List of PyDLL objects |
| """ |
| dll_list = [] |
| for lib_name in args: |
| if lib_name == 'ftdi': |
| lib_name = libftdi_for_servo.LIB_NAME |
| |
| lib_path = ftdi_locate_lib(lib_name) |
| logging.debug("lib_path for %s is %s\n", lib_name, lib_path) |
| |
| try: |
| dll_list.append(ctypes.cdll.LoadLibrary(lib_path)) |
| except OSError,e: |
| print "-E- Unable to find library %s : %s" % (lib_name, e) |
| sys.exit(1) |
| return dll_list |
| |
| def parse_common_args(vendor=ftdi_common.DEFAULT_VID, |
| product=ftdi_common.DEFAULT_PID, interface=1, |
| serialname=None): |
| """Parse common arguments for tools related to FTDI devices. |
| |
| Args: |
| vendor : integer value of USB vendor id of FTDI device |
| product : integer value of USB vendor id of FTDI device |
| interface : integer ( 1 - 4 ) of interface on FTDI device |
| serialname: string of device serialname/number as defined in FTDI eeprom. |
| |
| Returns: |
| (values, args) where 'values' is a optparse.Values instance and 'args' is |
| the list of arguments left over after parsing options. |
| """ |
| parser = optparse.OptionParser() |
| parser.add_option("-d", "--debug", help="enable debug messages", |
| action="store_true", default=False) |
| parser.add_option("-v", "--vendor", help="vendor id of ftdi device", |
| default=vendor, type=int) |
| parser.add_option("-p", "--product", help="product id of ftdi device", |
| default=product, type=int) |
| parser.add_option("-i", "--interface", help="ftdi interface to use", |
| type=int, default=interface) |
| parser.add_option("-s", "--serialname", default=None, type=str, |
| help="device serialname stored in eeprom") |
| return parser.parse_args() |