From 7d4a6ffd32f7adf39fcfad9deee9b633de82c9ee Mon Sep 17 00:00:00 2001 From: Daniel Havlik Date: Mon, 8 Oct 2012 23:38:34 +0200 Subject: [PATCH 1/4] move code into egg --- .../Adafruit_PWM_Servo_Driver.py | 68 +------------------ .../ada.pca9685/CHANGES.txt | 9 +++ .../ada.pca9685/CONTRIBUTORS.txt | 2 + .../ada.pca9685/README.txt | 14 ++++ .../ada.pca9685/setup.py | 43 ++++++++++++ .../ada.pca9685/src/ada/__init__.py | 1 + .../ada.pca9685/src/ada/pca9685/9685.py | 67 ++++++++++++++++++ .../ada.pca9685/src/ada/pca9685/__init__.py | 1 + .../src/ada/pca9685/i2c.py} | 0 Adafruit_PWM_Servo_Driver/i2c.py | 1 + 10 files changed, 139 insertions(+), 67 deletions(-) mode change 100644 => 120000 Adafruit_PWM_Servo_Driver/Adafruit_PWM_Servo_Driver.py create mode 100644 Adafruit_PWM_Servo_Driver/ada.pca9685/CHANGES.txt create mode 100644 Adafruit_PWM_Servo_Driver/ada.pca9685/CONTRIBUTORS.txt create mode 100644 Adafruit_PWM_Servo_Driver/ada.pca9685/README.txt create mode 100644 Adafruit_PWM_Servo_Driver/ada.pca9685/setup.py create mode 100644 Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/__init__.py create mode 100644 Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/pca9685/9685.py create mode 100644 Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/pca9685/__init__.py rename Adafruit_PWM_Servo_Driver/{Adafruit_I2C.py => ada.pca9685/src/ada/pca9685/i2c.py} (100%) create mode 120000 Adafruit_PWM_Servo_Driver/i2c.py diff --git a/Adafruit_PWM_Servo_Driver/Adafruit_PWM_Servo_Driver.py b/Adafruit_PWM_Servo_Driver/Adafruit_PWM_Servo_Driver.py deleted file mode 100644 index 76ab5137..00000000 --- a/Adafruit_PWM_Servo_Driver/Adafruit_PWM_Servo_Driver.py +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/python - -import time -import math -from Adafruit_I2C import Adafruit_I2C - -# ============================================================================ -# Adafruit PCA9685 16-Channel PWM Servo Driver -# ============================================================================ - -class PWM : - i2c = None - - # Registers/etc. - __SUBADR1 = 0x02 - __SUBADR2 = 0x03 - __SUBADR3 = 0x04 - __MODE1 = 0x00 - __PRESCALE = 0xFE - __LED0_ON_L = 0x06 - __LED0_ON_H = 0x07 - __LED0_OFF_L = 0x08 - __LED0_OFF_H = 0x09 - __ALLLED_ON_L = 0xFA - __ALLLED_ON_H = 0xFB - __ALLLED_OFF_L = 0xFC - __ALLLED_OFF_H = 0xFD - - def __init__(self, address=0x40, debug=False): - self.i2c = Adafruit_I2C(address) - self.address = address - self.debug = debug - if (self.debug): - print "Reseting PCA9685" - self.i2c.write8(self.__MODE1, 0x00) - - def setPWMFreq(self, freq): - "Sets the PWM frequency" - prescaleval = 25000000.0 # 25MHz - prescaleval /= 4096.0 # 12-bit - prescaleval /= float(freq) - prescaleval -= 1.0 - if (self.debug): - print "Setting PWM frequency to %d Hz" % freq - print "Estimated pre-scale: %d" % prescaleval - prescale = math.floor(prescaleval + 0.5) - if (self.debug): - print "Final pre-scale: %d" % prescale - - oldmode = self.i2c.readU8(self.__MODE1); - newmode = (oldmode & 0x7F) | 0x10 # sleep - self.i2c.write8(self.__MODE1, newmode) # go to sleep - self.i2c.write8(self.__PRESCALE, int(math.floor(prescale))) - self.i2c.write8(self.__MODE1, oldmode) - time.sleep(0.005) - self.i2c.write8(self.__MODE1, oldmode | 0x80) - - def setPWM(self, channel, on, off): - "Sets a single PWM channel" - self.i2c.write8(self.__LED0_ON_L+4*channel, on & 0xFF) - self.i2c.write8(self.__LED0_ON_H+4*channel, on >> 8) - self.i2c.write8(self.__LED0_OFF_L+4*channel, off & 0xFF) - self.i2c.write8(self.__LED0_OFF_H+4*channel, off >> 8) - - - - diff --git a/Adafruit_PWM_Servo_Driver/Adafruit_PWM_Servo_Driver.py b/Adafruit_PWM_Servo_Driver/Adafruit_PWM_Servo_Driver.py new file mode 120000 index 00000000..6d73b5c7 --- /dev/null +++ b/Adafruit_PWM_Servo_Driver/Adafruit_PWM_Servo_Driver.py @@ -0,0 +1 @@ +ada.pca9685/src/ada/pca9685/9685.py \ No newline at end of file diff --git a/Adafruit_PWM_Servo_Driver/ada.pca9685/CHANGES.txt b/Adafruit_PWM_Servo_Driver/ada.pca9685/CHANGES.txt new file mode 100644 index 00000000..d487f9fd --- /dev/null +++ b/Adafruit_PWM_Servo_Driver/ada.pca9685/CHANGES.txt @@ -0,0 +1,9 @@ +Changelog +========= + +0.1-dev (unreleased) +-------------------- + +- Initialize egg. + +- Move existing Python code into egg, add symlinks. diff --git a/Adafruit_PWM_Servo_Driver/ada.pca9685/CONTRIBUTORS.txt b/Adafruit_PWM_Servo_Driver/ada.pca9685/CONTRIBUTORS.txt new file mode 100644 index 00000000..8f3b4261 --- /dev/null +++ b/Adafruit_PWM_Servo_Driver/ada.pca9685/CONTRIBUTORS.txt @@ -0,0 +1,2 @@ +Daniel Havlik, Egg-packaging +Adafruit Industries, Code/Cool hardware diff --git a/Adafruit_PWM_Servo_Driver/ada.pca9685/README.txt b/Adafruit_PWM_Servo_Driver/ada.pca9685/README.txt new file mode 100644 index 00000000..4290c29b --- /dev/null +++ b/Adafruit_PWM_Servo_Driver/ada.pca9685/README.txt @@ -0,0 +1,14 @@ +.. contents:: + +Introduction +============ + +This is a Library supporting the Adafruit PWM Servo Driver. (PCA9685 +Breakout). + +The code requires python-smbus to be installed on the system. + +For further documentation see +. + diff --git a/Adafruit_PWM_Servo_Driver/ada.pca9685/setup.py b/Adafruit_PWM_Servo_Driver/ada.pca9685/setup.py new file mode 100644 index 00000000..373fa68a --- /dev/null +++ b/Adafruit_PWM_Servo_Driver/ada.pca9685/setup.py @@ -0,0 +1,43 @@ +from setuptools import setup, find_packages +import os + +version = '0.1' + +long_description = ( + open('README.txt').read() + + '\n' + + 'Contributors\n' + '============\n' + + '\n' + + open('CONTRIBUTORS.txt').read() + + '\n' + + open('CHANGES.txt').read() + + '\n') + +setup(name='ada.pca9685', + version=version, + description="Python library for interfacing the "Adafruit" PCA9685 16-Channel 12-bit PWM/Servo Driver.", + long_description=long_description, + # Get more strings from + # http://pypi.python.org/pypi?%3Aaction=list_classifiers + classifiers=[ + "Programming Language :: Python", + ], + keywords='', + author='Daniel Havlik', + author_email='nielow@gmail.com', + url='https://github.com/dhavlik/Adafruit-Raspberry-Pi-Python-Code', + license='bsd', + packages=find_packages('src'), + package_dir = {'': 'src'}, + namespace_packages=['ada'], + include_package_data=True, + zip_safe=False, + install_requires=[ + 'setuptools', + # -*- Extra requirements: -*- + ], + entry_points=""" + # -*- Entry points: -*- + """, + ) diff --git a/Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/__init__.py b/Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/__init__.py new file mode 100644 index 00000000..de40ea7c --- /dev/null +++ b/Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/__init__.py @@ -0,0 +1 @@ +__import__('pkg_resources').declare_namespace(__name__) diff --git a/Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/pca9685/9685.py b/Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/pca9685/9685.py new file mode 100644 index 00000000..ee4ce553 --- /dev/null +++ b/Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/pca9685/9685.py @@ -0,0 +1,67 @@ +#!/usr/bin/python + +import time +import math +from i2c import Adafruit_I2C + +# ============================================================================ +# Adafruit PCA9685 16-Channel PWM Servo Driver +# ============================================================================ + +class PWM : + i2c = None + + # Registers/etc. + __SUBADR1 = 0x02 + __SUBADR2 = 0x03 + __SUBADR3 = 0x04 + __MODE1 = 0x00 + __PRESCALE = 0xFE + __LED0_ON_L = 0x06 + __LED0_ON_H = 0x07 + __LED0_OFF_L = 0x08 + __LED0_OFF_H = 0x09 + __ALLLED_ON_L = 0xFA + __ALLLED_ON_H = 0xFB + __ALLLED_OFF_L = 0xFC + __ALLLED_OFF_H = 0xFD + + def __init__(self, address=0x40, debug=False): + self.i2c = Adafruit_I2C(address) + self.address = address + self.debug = debug + if (self.debug): + print "Reseting PCA9685" + self.i2c.write8(self.__MODE1, 0x00) + + def setPWMFreq(self, freq): + "Sets the PWM frequency" + prescaleval = 25000000.0 # 25MHz + prescaleval /= 4096.0 # 12-bit + prescaleval /= float(freq) + prescaleval -= 1.0 + if (self.debug): + print "Setting PWM frequency to %d Hz" % freq + print "Estimated pre-scale: %d" % prescaleval + prescale = math.floor(prescaleval + 0.5) + if (self.debug): + print "Final pre-scale: %d" % prescale + + oldmode = self.i2c.readU8(self.__MODE1); + newmode = (oldmode & 0x7F) | 0x10 # sleep + self.i2c.write8(self.__MODE1, newmode) # go to sleep + self.i2c.write8(self.__PRESCALE, int(math.floor(prescale))) + self.i2c.write8(self.__MODE1, oldmode) + time.sleep(0.005) + self.i2c.write8(self.__MODE1, oldmode | 0x80) + + def setPWM(self, channel, on, off): + "Sets a single PWM channel" + self.i2c.write8(self.__LED0_ON_L+4*channel, on & 0xFF) + self.i2c.write8(self.__LED0_ON_H+4*channel, on >> 8) + self.i2c.write8(self.__LED0_OFF_L+4*channel, off & 0xFF) + self.i2c.write8(self.__LED0_OFF_H+4*channel, off >> 8) + + + + diff --git a/Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/pca9685/__init__.py b/Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/pca9685/__init__.py new file mode 100644 index 00000000..e2cbd538 --- /dev/null +++ b/Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/pca9685/__init__.py @@ -0,0 +1 @@ +#init diff --git a/Adafruit_PWM_Servo_Driver/Adafruit_I2C.py b/Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/pca9685/i2c.py similarity index 100% rename from Adafruit_PWM_Servo_Driver/Adafruit_I2C.py rename to Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/pca9685/i2c.py diff --git a/Adafruit_PWM_Servo_Driver/i2c.py b/Adafruit_PWM_Servo_Driver/i2c.py new file mode 120000 index 00000000..8462843f --- /dev/null +++ b/Adafruit_PWM_Servo_Driver/i2c.py @@ -0,0 +1 @@ +ada.pca9685/src/ada/pca9685/i2c.py \ No newline at end of file From 4852514d6e5e146e3e6f02c0f67ded4b2d969985 Mon Sep 17 00:00:00 2001 From: Daniel Havlik Date: Mon, 8 Oct 2012 23:46:10 +0200 Subject: [PATCH 2/4] Allow to use another bus port in the PWM class. --- .../ada.pca9685/src/ada/pca9685/9685.py | 7 +++++-- .../ada.pca9685/src/ada/pca9685/i2c.py | 3 ++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/pca9685/9685.py b/Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/pca9685/9685.py index ee4ce553..7911be03 100644 --- a/Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/pca9685/9685.py +++ b/Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/pca9685/9685.py @@ -26,8 +26,11 @@ class PWM : __ALLLED_OFF_L = 0xFC __ALLLED_OFF_H = 0xFD - def __init__(self, address=0x40, debug=False): - self.i2c = Adafruit_I2C(address) + def __init__(self, address=0x40, bus=DEFAULT, debug=False): + params = dict(address=address) + if bus != DEFAULT: + params['bus'] = bus + self.i2c = Adafruit_I2C(**params) self.address = address self.debug = debug if (self.debug): diff --git a/Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/pca9685/i2c.py b/Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/pca9685/i2c.py index dd2dfa76..3c161327 100755 --- a/Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/pca9685/i2c.py +++ b/Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/pca9685/i2c.py @@ -8,7 +8,8 @@ class Adafruit_I2C : - def __init__(self, address, bus=smbus.SMBus(0), debug=False): + def __init__(self, address, bus_id=0, debug=False): + bus = smbus.SMBus(bus_id) self.address = address self.bus = bus self.debug = debug From e26e23a821a1b157d83736650142ab7e434c7935 Mon Sep 17 00:00:00 2001 From: Daniel Havlik Date: Mon, 8 Oct 2012 23:58:56 +0200 Subject: [PATCH 3/4] PEP8, move constants out of class, allow to use another port without importing smbus. --- .../ada.pca9685/src/ada/pca9685/9685.py | 118 +++++++++--------- 1 file changed, 58 insertions(+), 60 deletions(-) diff --git a/Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/pca9685/9685.py b/Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/pca9685/9685.py index 7911be03..325ebce5 100644 --- a/Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/pca9685/9685.py +++ b/Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/pca9685/9685.py @@ -1,70 +1,68 @@ -#!/usr/bin/python +#coding:utf8 -import time +import i2c import math -from i2c import Adafruit_I2C - -# ============================================================================ -# Adafruit PCA9685 16-Channel PWM Servo Driver -# ============================================================================ - -class PWM : - i2c = None - - # Registers/etc. - __SUBADR1 = 0x02 - __SUBADR2 = 0x03 - __SUBADR3 = 0x04 - __MODE1 = 0x00 - __PRESCALE = 0xFE - __LED0_ON_L = 0x06 - __LED0_ON_H = 0x07 - __LED0_OFF_L = 0x08 - __LED0_OFF_H = 0x09 - __ALLLED_ON_L = 0xFA - __ALLLED_ON_H = 0xFB - __ALLLED_OFF_L = 0xFC - __ALLLED_OFF_H = 0xFD +import time - def __init__(self, address=0x40, bus=DEFAULT, debug=False): - params = dict(address=address) - if bus != DEFAULT: - params['bus'] = bus - self.i2c = Adafruit_I2C(**params) - self.address = address - self.debug = debug - if (self.debug): - print "Reseting PCA9685" - self.i2c.write8(self.__MODE1, 0x00) +DEFAULT = [] - def setPWMFreq(self, freq): - "Sets the PWM frequency" - prescaleval = 25000000.0 # 25MHz - prescaleval /= 4096.0 # 12-bit - prescaleval /= float(freq) - prescaleval -= 1.0 - if (self.debug): - print "Setting PWM frequency to %d Hz" % freq - print "Estimated pre-scale: %d" % prescaleval - prescale = math.floor(prescaleval + 0.5) - if (self.debug): - print "Final pre-scale: %d" % prescale +SUBADR1 = 0x02 +SUBADR2 = 0x03 +SUBADR3 = 0x04 +MODE1 = 0x00 +PRESCALE = 0xFE +LED0_ON_L = 0x06 +LED0_ON_H = 0x07 +LED0_OFF_L = 0x08 +LED0_OFF_H = 0x09 +ALLLED_ON_L = 0xFA +ALLLED_ON_H = 0xFB +ALLLED_OFF_L = 0xFC +ALLLED_OFF_H = 0xFD - oldmode = self.i2c.readU8(self.__MODE1); - newmode = (oldmode & 0x7F) | 0x10 # sleep - self.i2c.write8(self.__MODE1, newmode) # go to sleep - self.i2c.write8(self.__PRESCALE, int(math.floor(prescale))) - self.i2c.write8(self.__MODE1, oldmode) - time.sleep(0.005) - self.i2c.write8(self.__MODE1, oldmode | 0x80) - def setPWM(self, channel, on, off): - "Sets a single PWM channel" - self.i2c.write8(self.__LED0_ON_L+4*channel, on & 0xFF) - self.i2c.write8(self.__LED0_ON_H+4*channel, on >> 8) - self.i2c.write8(self.__LED0_OFF_L+4*channel, off & 0xFF) - self.i2c.write8(self.__LED0_OFF_H+4*channel, off >> 8) +class PWM(object): + """API for interfacing an PCA9685.""" + i2c = None + def __init__(self, address=0x40, bus=DEFAULT, debug=False): + params = dict(address=address, bus=bus) + if bus == DEFAULT: + # Urks: Use default bus specified in Adafruit_I2C.__init__ + # signature. + # Better refactor the I2C class to take only port number. + del params['bus'] + self.i2c = i2c.Adafruit_I2C(**params) + self.address = address + self.debug = debug + if (self.debug): + print "Reseting PCA9685" + self.i2c.write8(MODE1, 0x00) + def setPWMFreq(self, freq): + """Sets the PWM frequency.""" + prescaleval = 25000000.0 # 25MHz + prescaleval /= 4096.0 # 12-bit + prescaleval /= float(freq) + prescaleval -= 1.0 + if (self.debug): + print "Setting PWM frequency to %d Hz" % freq + print "Estimated pre-scale: %d" % prescaleval + prescale = math.floor(prescaleval + 0.5) + if (self.debug): + print "Final pre-scale: %d" % prescale + oldmode = self.i2c.readU8(MODE1) + newmode = (oldmode & 0x7F) | 0x10 # sleep + self.i2c.write8(MODE1, newmode) # go to sleep + self.i2c.write8(PRESCALE, int(math.floor(prescale))) + self.i2c.write8(MODE1, oldmode) + time.sleep(0.005) + self.i2c.write8(MODE1, oldmode | 0x80) + def setPWM(self, channel, on, off): + """Sets a single PWM channel.""" + self.i2c.write8(LED0_ON_L + 4 * channel, on & 0xFF) + self.i2c.write8(LED0_ON_H + 4 * channel, on >> 8) + self.i2c.write8(LED0_OFF_L + 4 * channel, off & 0xFF) + self.i2c.write8(LED0_OFF_H + 4 * channel, off >> 8) From 5563fad12e4f73c8f777e9c80feb1c1ee7fa0dec Mon Sep 17 00:00:00 2001 From: Daniel Havlik Date: Tue, 9 Oct 2012 00:06:53 +0200 Subject: [PATCH 4/4] pep8 --- .../ada.pca9685/src/ada/pca9685/i2c.py | 179 +++++++++--------- 1 file changed, 94 insertions(+), 85 deletions(-) diff --git a/Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/pca9685/i2c.py b/Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/pca9685/i2c.py index 3c161327..89b27c32 100755 --- a/Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/pca9685/i2c.py +++ b/Adafruit_PWM_Servo_Driver/ada.pca9685/src/ada/pca9685/i2c.py @@ -1,96 +1,105 @@ -#!/usr/bin/python +#coding:utf8 -import smbus -# =========================================================================== -# Adafruit_I2C Base Class -# =========================================================================== +import smbus -class Adafruit_I2C : - def __init__(self, address, bus_id=0, debug=False): - bus = smbus.SMBus(bus_id) - self.address = address - self.bus = bus - self.debug = debug +class Adafruit_I2C(object): + """I2C Communication.""" + def __init__(self, address, bus=smbus.SMBus(0), debug=False): + self.address = address + self.bus = bus + self.debug = debug - def reverseByteOrder(self, data): - "Reverses the byte order of an int (16-bit) or long (32-bit) value" - # Courtesy Vishal Sapre - dstr = hex(data)[2:].replace('L','') - byteCount = len(dstr[::2]) - val = 0 - for i, n in enumerate(range(byteCount)): - d = data & 0xFF - val |= (d << (8 * (byteCount - i - 1))) - data >>= 8 - return val + def reverseByteOrder(self, data): + "Reverses the byte order of an int (16-bit) or long (32-bit) value" + # Courtesy Vishal Sapre + dstr = hex(data)[2:].replace('L', '') + byteCount = len(dstr[::2]) + val = 0 + for i, n in enumerate(range(byteCount)): + d = data & 0xFF + val |= (d << (8 * (byteCount - i - 1))) + data >>= 8 + return val - def write8(self, reg, value): - "Writes an 8-bit value to the specified register/address" - try: - self.bus.write_byte_data(self.address, reg, value) - if (self.debug): - print("I2C: Wrote 0x%02X to register 0x%02X" % (value, reg)) - except IOError, err: - print "Error accessing 0x%02X: Check your I2C address" % self.address - return -1 + def write8(self, reg, value): + "Writes an 8-bit value to the specified register/address" + try: + self.bus.write_byte_data(self.address, reg, value) + if self.debug: + print("I2C: Wrote 0x%02X to register 0x%02X" % (value, reg)) + except IOError, err: + print "Error accessing 0x%02X: Check your I2C address" % ( + self.address) + return -1 - def writeList(self, reg, list): - "Writes an array of bytes using I2C format" - try: - self.bus.write_i2c_block_data(self.address, reg, list) - except IOError, err: - print "Error accessing 0x%02X: Check your I2C address" % self.address - return -1 + def writeList(self, reg, list): + "Writes an array of bytes using I2C format" + try: + self.bus.write_i2c_block_data(self.address, reg, list) + except IOError, err: + print "Error accessing 0x%02X: Check your I2C address" % ( + self.address) + return -1 - def readU8(self, reg): - "Read an unsigned byte from the I2C device" - try: - result = self.bus.read_byte_data(self.address, reg) - if (self.debug): - print "I2C: Device 0x%02X returned 0x%02X from reg 0x%02X" % (self.address, result & 0xFF, reg) - return result - except IOError, err: - print "Error accessing 0x%02X: Check your I2C address" % self.address - return -1 + def readU8(self, reg): + "Read an unsigned byte from the I2C device" + try: + result = self.bus.read_byte_data(self.address, reg) + if self.debug: + print "I2C: Device 0x%02X returned 0x%02X from reg 0x%02X" % ( + self.address, result & 0xFF, reg) + return result + except IOError, err: + print "Error accessing 0x%02X: Check your I2C address" % ( + self.address) + return -1 - def readS8(self, reg): - "Reads a signed byte from the I2C device" - try: - result = self.bus.read_byte_data(self.address, reg) - if (self.debug): - print "I2C: Device 0x%02X returned 0x%02X from reg 0x%02X" % (self.address, result & 0xFF, reg) - if (result > 127): - return result - 256 - else: - return result - except IOError, err: - print "Error accessing 0x%02X: Check your I2C address" % self.address - return -1 + def readS8(self, reg): + "Reads a signed byte from the I2C device" + try: + result = self.bus.read_byte_data(self.address, reg) + if self.debug: + print "I2C: Device 0x%02X returned 0x%02X from reg 0x%02X" % ( + self.address, result & 0xFF, reg) + if (result > 127): + return result - 256 + else: + return result + except IOError, err: + print "Error accessing 0x%02X: Check your I2C address" % ( + self.address) + return -1 - def readU16(self, reg): - "Reads an unsigned 16-bit value from the I2C device" - try: - hibyte = self.bus.read_byte_data(self.address, reg) - result = (hibyte << 8) + self.bus.read_byte_data(self.address, reg+1) - if (self.debug): - print "I2C: Device 0x%02X returned 0x%04X from reg 0x%02X" % (self.address, result & 0xFFFF, reg) - return result - except IOError, err: - print "Error accessing 0x%02X: Check your I2C address" % self.address - return -1 + def readU16(self, reg): + "Reads an unsigned 16-bit value from the I2C device" + try: + hibyte = self.bus.read_byte_data(self.address, reg) + result = (hibyte << 8) + \ + self.bus.read_byte_data(self.address, reg + 1) + if self.debug: + print "I2C: Device 0x%02X returned 0x%04X from reg 0x%02X" % ( + self.address, result & 0xFFFF, reg) + return result + except IOError, err: + print "Error accessing 0x%02X: Check your I2C address" % ( + self.address) + return -1 - def readS16(self, reg): - "Reads a signed 16-bit value from the I2C device" - try: - hibyte = self.bus.read_byte_data(self.address, reg) - if (hibyte > 127): - hibyte -= 256 - result = (hibyte << 8) + self.bus.read_byte_data(self.address, reg+1) - if (self.debug): - print "I2C: Device 0x%02X returned 0x%04X from reg 0x%02X" % (self.address, result & 0xFFFF, reg) - return result - except IOError, err: - print "Error accessing 0x%02X: Check your I2C address" % self.address - return -1 + def readS16(self, reg): + "Reads a signed 16-bit value from the I2C device" + try: + hibyte = self.bus.read_byte_data(self.address, reg) + if (hibyte > 127): + hibyte -= 256 + result = (hibyte << 8) + \ + self.bus.read_byte_data(self.address, reg + 1) + if self.debug: + print "I2C: Device 0x%02X returned 0x%04X from reg 0x%02X" % ( + self.address, result & 0xFFFF, reg) + return result + except IOError, err: + print "Error accessing 0x%02X: Check your I2C address" % ( + self.address) + return -1