Implement READ_MULTIPLE

This commit is contained in:
Andrew Kay
2019-12-22 14:59:42 -06:00
parent 99e660ce71
commit ff2a2de575
2 changed files with 64 additions and 5 deletions

View File

@@ -232,9 +232,12 @@ def read_data(interface, **kwargs):
return _execute_read_command(interface, command_word, **kwargs)
def read_multiple(interface):
def read_multiple(interface, **kwargs):
"""Execute a READ_MULTIPLE command."""
raise NotImplementedError
command_word = _pack_command_word(Command.READ_MULTIPLE)
return _execute_read_command(interface, command_word, 32,
validate_response_length=False, **kwargs)
def reset(interface):
"""Execute a RESET command."""
@@ -299,15 +302,15 @@ def diagnostic_reset(interface):
raise NotImplementedError
def _execute_read_command(interface, command_word, response_length=1,
allow_trta_response=False, trta_value=None,
unpack_data_words=True, **kwargs):
validate_response_length=True, allow_trta_response=False,
trta_value=None, unpack_data_words=True, **kwargs):
"""Execute a standard read command."""
response = interface.execute(command_word, response_length=response_length, **kwargs)
if allow_trta_response and len(response) == 1 and response[0] == 0:
return trta_value
if len(response) != response_length:
if validate_response_length and len(response) != response_length:
(_, command) = _unpack_command_word(command_word)
raise ProtocolError(f'Expected {response_length} word {command.name} response')

View File

@@ -0,0 +1,56 @@
#!/usr/bin/env python
import sys
import time
from serial import Serial
sys.path.append('..')
from coax import Interface1, SecondaryControl, read_address_counter_hi, read_address_counter_lo, read_multiple, load_address_counter_hi, load_address_counter_lo, load_secondary_control, write_data
print('Opening serial port...')
with Serial('/dev/ttyUSB0', 115200) as serial:
print('Sleeping to allow interface time to wake up...')
time.sleep(3)
interface = Interface1(serial)
print('Resetting interface...')
version = interface.reset()
print(f'Firmware version is {version}')
load_address_counter_hi(interface, 0)
load_address_counter_lo(interface, 80)
write_data(interface, bytes.fromhex('a7 84 8b 8b 8e 33 00 96 8e 91 8b 83 19'))
load_address_counter_hi(interface, 0)
load_address_counter_lo(interface, 81)
print('READ_MULTIPLE...')
print(read_multiple(interface))
hi = read_address_counter_hi(interface)
lo = read_address_counter_lo(interface)
print(f'hi = {hi}, lo = {lo}')
load_address_counter_hi(interface, 0)
load_address_counter_lo(interface, 81)
print('LOAD_SECONDARY_CONTROL big')
load_secondary_control(interface, SecondaryControl(big=True))
print('READ_MULTIPLE...')
print(read_multiple(interface))
hi = read_address_counter_hi(interface)
lo = read_address_counter_lo(interface)
print(f'hi = {hi}, lo = {lo}')