def process_call(self, address_byte, command_bytes, data_bytes, is_using_pec): readlength = 2 if is_using_pec: readlength += 1 readback = array('B', [0] * readlength) result = aa_i2c_write_read(self.handle, address_byte[0], AA_I2C_NO_FLAGS, array('B', command_bytes + data_bytes), readback) status = result[0] num_written = result[1] num_read = result[3] if (status != AA_OK): raise RuntimeError('Transaction returned with error status: ' + aardvark_i2c_status_strings[status]) assert num_written == (len(command_bytes) + len(data_bytes)) assert num_read == readlength if not is_using_pec: readback_bytes = bytes(readback) return readback_bytes # if using pec readback_bytes = bytes(readback[0:-1]) readback_pec = readback[-1] expected_pec = pec( writify_address(address_byte) + command_bytes + data_bytes + readify_address(address_byte) + readback_bytes) assert expected_pec == readback_pec return readback_bytes
def receive_byte(self, address_byte, is_using_pec): readlength = 1 if is_using_pec: readlength += 1 readback = array('B', [0] * readlength) result = aa_i2c_read_ext(self.handle, address_byte[0], AA_I2C_NO_FLAGS, readback) status = result[0] num_read = result[2] if (status != AA_OK): raise RuntimeError('Transaction returned with error status: ' + aardvark_i2c_status_strings[status]) if not is_using_pec: readback_bytes = bytes(readback) return readback_bytes # if using pec readback_bytes = bytes(readback[0:-1]) readback_pec = readback[-1] expected_pec = pec(readify_address(address_byte) + readback_bytes) assert expected_pec == readback_pec return readback_bytes
def block_process_call(self, address_byte, command_bytes, data_bytes, is_using_pec): address_wr = writify_address(address_byte) address_rd = readify_address(address_byte) size_byte = bytes([len(data_bytes)]) if(is_using_pec): pec_str = '[pec]' else: pec_str = '' print(dryrun_preamble + 'process_call : ' + byte_transmission_str(address_wr) + byte_transmission_str(command_bytes) + byte_transmission_str(size_byte) + byte_transmission_str(data_bytes) + byte_transmission_str(address_rd) + '[rxdata][rxdata]' + pec_str) return bytes([0, 1, 2, 3])
def receive_byte(self, address_byte, is_using_pec): address_rd = readify_address(address_byte) if(is_using_pec): pec_str = '[pec]' else: pec_str = '' print(dryrun_preamble + 'receive_byte' + byte_transmission_str(address_rd) + '[rxdata]' + pec_str) return bytes([0])
def read_block(self, address_byte, command_bytes, is_using_pec): address_wr = writify_address(address_byte) address_rd = readify_address(address_byte) if(is_using_pec): pec_str = '[pec]' else: pec_str = '' print(dryrun_preamble + 'read_byte : ' + byte_transmission_str(address_wr) + byte_transmission_str(command_bytes) + byte_transmission_str(address_rd) + '[size_byte][rxdata .... ]' + pec_str) return bytes([0, 1, 2, 3])
def block_process_call(self, address_byte, command_bytes, data_bytes, is_using_pec): if (is_using_PEC): # EXTRA1 flag means read extra byte # beyond returned size byte (for pec) flag = AA_I2C_SIZED_READ_EXTRA1 else: flag = AA_I2C_SIZED_READ readbuffersize = 255 readback = array('B', [0] * readbuffersize) result = aa_i2c_write_read(self.handle, address_byte[0], flag, array('B', command_bytes + data_bytes), readback) status = result[0] num_written = result[1] # num_read = result[3] if (status != AA_OK): raise RuntimeError('Transaction returned with error status: ' + aardvark_i2c_status_strings[status]) assert num_written == (len(command_bytes) + len(data_bytes)) readback_size = readback[0] readback_bytes = bytes(readback[1:readback_size]) if not is_using_pec: return readback_bytes # if using pec readback_pec = readback[readback_size + 1] expected_pec = pec( writify_address(address_byte) + command_bytes + data_bytes + readify_address(address_byte) + bytes([readback_size]) + readback_bytes) assert expected_pec == readback_pec return readback_bytes