blob: 885d9d6198f92001ce45e5b7978407d43aea1461 [file] [log] [blame]
# 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()