X-Git-Url: https://defiant.homedns.org/gitweb/?p=ros_wild_thumper.git;a=blobdiff_plain;f=scripts%2Fi2c.py;h=79a7356161e355a984cf7b01b6a688c8ff36ab72;hp=c597c85b150e042d33d5cd51d24a69044a30c1b3;hb=e8c2719dce145ad9f2a451849c722ca06c8ef1a6;hpb=6bbe85b249210dd265f51cfde4288530d9bb05fb diff --git a/scripts/i2c.py b/scripts/i2c.py index c597c85..79a7356 100755 --- a/scripts/i2c.py +++ b/scripts/i2c.py @@ -1,84 +1,7 @@ #!/usr/bin/env python # -*- coding: iso-8859-15 -*- -import threading -import inspect -import os -import logging -import struct -from ctypes import * -from time import sleep - -DEBUG=0 -logger = logging.getLogger(__name__) - -class i2c: - libc = CDLL("libc.so.6") - I2C_SLAVE = 0x0703 # Use this slave address - __single = None - __lock = threading.Lock() - __parent_owner = None - - def __init__(self, addr): - with i2c.__lock: - count = 0 - while(i2c.__single): - parent = inspect.stack()[1][3] - count += 1 - sleep(0.001) - if DEBUG: - if count > 10: - parent_owner = "%s (%d), %s()" % (self.__parent_owner[1], self.__parent_owner[2], self.__parent_owner[3]) - logger.warning("Error: (%s) I2C blocked %fs by %s!", parent, count*0.001, parent_owner) - i2c.__parent_owner = inspect.stack()[1] - i2c.__single = True - self.dev = i2c.libc.open("/dev/i2c-2", os.O_RDWR) - if self.dev < 0: - raise IOError("open") - err = i2c.libc.ioctl(self.dev, i2c.I2C_SLAVE, addr>>1) - if err < 0: - raise IOError("ioctl") - - def write(self, s): - num_write = i2c.libc.write(self.dev, s, len(s)) - if num_write != len(s): - self.close() - raise IOError("write: %d" % (num_write)) - - def read(self, num): - buf = create_string_buffer(num) - num_read = i2c.libc.read(self.dev, buf, num) - if num_read != num: - self.close() - raise IOError("read: %d" % (num_read)) - return buf.raw - - def close(self): - if self.dev: - i2c.libc.close(self.dev) - self.dev = None - #i2c.__parent_owner = None - i2c.__single = None - - def __del__(self): - self.close() - - -def i2c_write_reg(addr, reg, buf): - dev = i2c(addr) - s = struct.pack(">B", reg) + buf - dev.write(s) - dev.close() - - -def i2c_read_reg(addr, reg, num=1): - dev = i2c(addr) - s = struct.pack(">B", reg) - dev.write(s) - s = dev.read(num) - dev.close() - return s - +from pyshared.i2c import * if __name__ == "__main__": import struct