def raw_i2c_write_and_read(self, data, nread): data = to_bytes(data) cmd = struct.pack('>BHH', 0x08, len(data), nread) + data self.serial.send(cmd) res = self.serial.recv_fixed_size(1) if res[0] == 0: return None return self.serial.recv_fixed_size(nread)
def spi_write_and_read_fast(self, write=b'', nread=0): cmd = 0b00000100 write = to_bytes(write) full_cmd = struct.pack('>BHH', cmd, len(write), nread) + write self.serial.send(full_cmd) res = self.serial.recv_fixed_size(1) if res[0] == 0: return None return self.serial.recv_fixed_size(nread)
def spi_write_and_read(self, write=None, nread=None): cmd = 0b00010000 if write is None: write=bytearray([0]*nread) write = to_bytes(write) if nread is None: nread = len(write) assert nread >= 1 and nread <=16, nread cmd += nread - 1 self.serial.send(bytearray([cmd] + write)) return self.serial.recv_fixed_size(nread)
def i2c_write(self, addr, data): write_cmd = self.i2c_write_addr(addr) + to_bytes(data) if self.raw_i2c_write_and_read(write_cmd, 0) is None: return False return True
def normalize_cmd(self, cmd): return to_bytes(cmd)
def tobytes(self): self.v = to_bytes(self.v) return self