state = self.update_io()
return state & (1 << dPinToBit[pin])
- def mode_i2c(self, bEnablePower=False, bEnablePullup=False):
+ def mode_i2c(self, bEnablePower=False, bEnablePullup=False, iSpeedkHz=100):
if self.command(chr(0x2), 4) != "I2C1":
raise Exception()
- # 100kHz
- ret = self.command(chr(0b01100010), 1)
+ dSpeeds = {
+ 5: 0x0,
+ 50: 0x1,
+ 100: 0x2,
+ 400: 0x3,
+ }
+ if iSpeedkHz not in dSpeeds.keys():
+ raise Exception("Invalid I2C speed")
+ ret = self.command(chr(0b01100000 | dSpeeds[iSpeedkHz]), 1)
if ord(ret) != 0x1:
raise Exception()
def i2c_write(self, addr, reg, s):
# 1. Write
# command (1) | number of write bytes (2) | number of read bytes (2) | bytes to write (0..)
- msg = struct.pack(">BHHBB%ds" % len(s), 0x08, 2+len(s), 0, addr<<1, reg, s)
+ msg = struct.pack(">BHHBB%ds" % len(s), 0x08, 2+len(s), 0, addr, reg, s)
ret = self.command(msg, 1)
if ord(ret[0]) != 0x1:
self.i2c_write(addr, reg, "")
# command (1) | number of write bytes (2) | number of read bytes (2) | bytes to write (0..)
- msg = struct.pack(">BHHB", 0x08, 1, num_read, (addr<<1) | 0x1)
+ msg = struct.pack(">BHHB", 0x08, 1, num_read, addr | 0x1)
ret = self.command(msg, 1 + num_read)
if ord(ret[0]) != 0x1:
def i2c_search(self):
for i in range(128):
- msg = struct.pack(">BHHB", 0x08, 1, 1, i<<1)
+ msg = struct.pack(">BHHB", 0x08, 1, 1, i)
ret = self.command(msg, 1)
if ord(ret) == 0x1:
print "Found I2C Addr: 0x%x" % (i & ~0x1)