Example #1
0
    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
Example #2
0
    def write_block(self, address_byte, command_bytes, data_bytes,
                    is_using_pec):

        size_byte = bytes([len(data_bytes)])
        if (is_using_pec):
            pecout = bytes([
                pec(
                    writify_address(address_byte) + command_bytes + size_byte +
                    data_bytes)
            ])
            writeout = array('B',
                             command_bytes + size_byte + data_byte + pecout)
        else:
            writeout = array('B', command_bytes + size_byte + data_byte)

        result = aa_i2c_write_ext(self.handle, address_byte[0],
                                  AA_I2C_NO_FLAGS, writeout)

        status = result[0]
        num_written = result[1]

        if (status != AA_OK):
            raise RuntimeError('Transaction returned with error status: ' +
                               aardvark_i2c_status_strings[status])

        assert num_written == len(writeout)
Example #3
0
    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])
Example #4
0
    def send_byte(self,
                  address_byte,
                  data_byte,
                  is_using_pec):

        address_wr = writify_address(address_byte)

        if(is_using_pec):
            pec_byte = bytes([pec(address_wr + data_byte)])
            pec_str = byte_transmission_str(pec_byte)
        else:
            pec_str = ''

        print(dryrun_preamble +
              'send_byte' +
              byte_transmission_str(address_wr) +
              byte_transmission_str(data_byte) +
              pec_str)
Example #5
0
    def write_word(self,
                   address_byte,
                   command_bytes,
                   data_bytes,
                   is_using_pec):

        address_wr = writify_address(address_byte)

        if(is_using_pec):
            pec_byte = bytes([pec(address_wr + command_bytes + data_bytes)])
            pec_str = byte_transmission_str(pec_byte)
        else:
            pec_str = ''

        print(dryrun_preamble +
              'write_word' +
              byte_transmission_str(address_wr) +
              byte_transmission_str(command_bytes) +
              byte_transmission_str(data_bytes) +
              pec_str)
Example #6
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])
Example #7
0
    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