mirror of
https://github.com/lowobservable/coax.git
synced 2026-02-05 00:05:23 +00:00
Implement READ_MULTIPLE
This commit is contained in:
@@ -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')
|
||||
|
||||
56
pycoax/examples/10_read_multiple.py
Executable file
56
pycoax/examples/10_read_multiple.py
Executable 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}')
|
||||
Reference in New Issue
Block a user