def write_reg_raw(self, addr, enc_val): addr = protocol.get_addr_for_reg(addr) b = bytearray([protocol.REG_WRITE_REQUEST, addr, 0, 0]) self.dev.spi_master_single_write(b) log.debug("reg w req: addr: {:3} val: {}".format( addr, utils.fmt_enc_val(enc_val))) self.dev.spi_master_single_write(enc_val)
def write_reg_raw(self, addr, enc_val, do_log=True): addr = protocol.get_addr_for_reg(addr) b = bytearray([protocol.REG_WRITE_REQUEST, addr, 0, 0]) self.dev.spi_master_single_write(b) if do_log: log.debug("reg w req: addr: 0x{:02x} val: {}".format(addr, fmt_enc_val(enc_val))) self.dev.spi_master_single_write(enc_val)
def read_reg_raw(self, addr): addr = protocol.get_addr_for_reg(addr) b = bytearray([protocol.REG_READ_REQUEST, addr, 0, 0]) self.dev.spi_master_single_write(b) enc_val = self.dev.spi_master_single_read(4) log.debug("reg r res: addr: {:3} val: {}".format( addr, utils.fmt_enc_val(enc_val))) return enc_val
def _handshake(self): self._write_reg("main_control", "stop", expect_response=False) exp_addr = protocol.get_addr_for_reg("main_control") exp_enc_val = protocol.encode_reg_val("main_control", "stop") exp_reg_val = protocol.UnpackedRegVal(exp_addr, exp_enc_val) exp_packet = protocol.UnpackedRegWriteResponse(exp_reg_val) exp_frame = protocol.insert_packet_into_frame(exp_packet) self._link.recv_until(exp_frame) idn_reg = self._read_reg("product_id") if idn_reg != protocol.EXPECTED_ID: raise ClientError("unexpected product id")
def _handshake(self): self._write_reg("main_control", "stop", expect_response=False) exp_addr = protocol.get_addr_for_reg("main_control") exp_enc_val = protocol.encode_reg_val("main_control", "stop") exp_reg_val = protocol.RegVal(exp_addr, exp_enc_val) exp_packet = protocol.RegWriteResponse(exp_reg_val) exp_frame = protocol.insert_packet_into_frame(exp_packet) self._link.recv_until(exp_frame) idn_reg = self._read_reg("product_id") possible_ids = [product.id for product in protocol.PRODUCTS] if idn_reg not in possible_ids: raise ClientError("unexpected product id")
def _write_reg_raw(self, addr, enc_val, expect_response=True): addr = protocol.get_addr_for_reg(addr) rrv = protocol.UnpackedRegVal(addr, enc_val) req = protocol.UnpackedRegWriteRequest(rrv) self._send_packet(req) log.debug("sent reg w req: addr: {:3} val: {}".format(addr, self._fmt_enc_val(enc_val))) if expect_response: res = self._recv_packet() if not isinstance(res, protocol.UnpackedRegWriteResponse): raise ClientError("got unexpected packet (expected reg write response)") if res.reg_val != rrv: raise ClientError("reg write failed") log.debug("recv reg w res: ok")
def _read_reg_raw(self, addr): addr = protocol.get_addr_for_reg(addr) req = protocol.UnpackedRegReadRequest(addr) self._send_packet(req) log.debug("sent reg r req: addr: {:3}".format(addr)) res = self._recv_packet() if not isinstance(res, protocol.UnpackedRegReadResponse): raise ClientError("got unexpected type of frame") enc_val = res.reg_val.val log.debug("recv reg r res: addr: {:3} val: {}".format(addr, self._fmt_enc_val(enc_val))) return enc_val
def test_unpack_stream_data_segment(): rv_addr = ptcl.get_addr_for_reg(test_mode_reg) rv_enc_val = ptcl.encode_reg_val(test_mode_reg, 123) rvs = [ptcl.RegVal(rv_addr, rv_enc_val)] buffer = bytearray(b'\x12\x34\x56') unp_stream_data = ptcl.StreamData(rvs, buffer) pkd_stream_data_segment = bytearray() pkd_stream_data_segment.append(ptcl.STREAM_BUFFER) pkd_stream_data_segment.extend(b"\x03\x00") pkd_stream_data_segment.extend(buffer) pkd_stream_data_segment.append(ptcl.STREAM_RESULT_INFO) pkd_stream_data_segment.extend(b"\x05\x00") pkd_stream_data_segment.append(rv_addr) pkd_stream_data_segment.extend(rv_enc_val) unpacked = ptcl.unpack_stream_data_segment(pkd_stream_data_segment) assert unpacked == unp_stream_data
def _write_reg_raw(self, addr, enc_val): addr = protocol.get_addr_for_reg(addr) self.__cmd_proc("write_reg_raw", addr, enc_val)
def _read_reg_raw(self, addr): addr = protocol.get_addr_for_reg(addr) enc_val = self.__cmd_proc("read_reg_raw", addr) return enc_val
def read_buf_raw(self, addr, size): addr = protocol.get_addr_for_reg(addr) buffer = self.__cmd_proc("read_buf_raw", addr, size) return buffer
def test_get_addr_for_reg(): assert ptcl.get_addr_for_reg(test_reg) == test_reg.addr assert ptcl.get_addr_for_reg(123) == 123