]> defiant.homedns.org Git - ros_wild_thumper.git/blobdiff - scripts/i2c.py
add self_test script
[ros_wild_thumper.git] / scripts / i2c.py
index 4522c5ff52e0c5b8a999f9213f5bd48c76c53c62..79a7356161e355a984cf7b01b6a688c8ff36ab72 100755 (executable)
@@ -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