import serial
import struct
+import threading
dPinToBit = {
"POWER": 6,
# http://dangerousprototypes.com/docs/SPI_(binary)
class BP:
def __init__(self, sDevice):
+ self.lock = threading.Lock()
self.pSerial = serial.Serial(sDevice, baudrate=115200, timeout=0.1)
self.mode_bit_bang()
self.io_state = 0
self.io_dir = 0
def command(self, cmd, num_read):
- self.pSerial.write(cmd)
- return self.pSerial.read(num_read)
+ with self.lock:
+ self.pSerial.write(cmd)
+ return self.pSerial.read(num_read)
def mode_bit_bang(self):
for i in range(20):
if ord(ret) != 0x1:
raise Exception()
+ def i2c_ping(self, addr):
+ # 1. Write
+ # command (1) | number of write bytes (2) | number of read bytes (2) | bytes to write (0..)
+ msg = struct.pack(">BHHB", 0x08, 1, 0, addr)
+ ret = self.command(msg, 1)
+
+ if ord(ret[0]) != 0x1:
+ raise Exception("I2C ping failed")
+
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..)
def i2c_read(self, addr, reg, num_read):
# set reg
- self.i2c_write(addr, reg, "")
+ if reg != None:
+ 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 | 0x1)