diff --git a/pycoax/coax/protocol.py b/pycoax/coax/protocol.py index 55b6516..942db04 100644 --- a/pycoax/coax/protocol.py +++ b/pycoax/coax/protocol.py @@ -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') diff --git a/pycoax/examples/10_read_multiple.py b/pycoax/examples/10_read_multiple.py new file mode 100755 index 0000000..61f82f9 --- /dev/null +++ b/pycoax/examples/10_read_multiple.py @@ -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}')