fix(ump): поддержать индексное чтение записей ПМ67
This commit is contained in:
@@ -68,17 +68,20 @@ FIELDS = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def request(controller: int, function: int, address: int, value: int) -> bytes:
|
def request(controller: int, function: int, address: int, value: int, *, record_words: int = WORDS) -> bytes:
|
||||||
if not 0 <= controller <= 255 or not 0 <= value <= 65535:
|
if not 0 <= controller <= 255 or not 0 <= value <= 65535:
|
||||||
raise ValueError('Недопустимый адрес контроллера или значение')
|
raise ValueError('Недопустимый адрес контроллера или значение')
|
||||||
|
if record_words not in (40, 42):
|
||||||
|
raise ValueError('Неверный размер записи логгера')
|
||||||
|
capacity = {40: 800, 42: 760}[record_words]
|
||||||
if function == 3:
|
if function == 3:
|
||||||
valid = ((address == BASE and value == 16) or
|
valid = ((address == BASE and value == 16) or
|
||||||
(address == DATA and 1 <= value <= 120 and (value % WORDS == 0 or value in (42, 84))) or (address == LIVE and value == 124) or (address == EMU_CONTROL and value == 4)
|
(address == DATA and 1 <= value <= 120 and (value % WORDS == 0 or value in (42, 84))) or (address == LIVE and value == 124) or (address == EMU_CONTROL and value == 4)
|
||||||
or (address == FAST_CAPABILITY and value == 4)
|
or (address == FAST_CAPABILITY and value == 4)
|
||||||
or (FAST_DATA <= address < FAST_DATA + CAPACITY * WORDS
|
or (FAST_DATA <= address < FAST_DATA + capacity * record_words
|
||||||
and (address - FAST_DATA) % WORDS == 0
|
and (address - FAST_DATA) % record_words == 0
|
||||||
and 1 <= value <= 120 and value % WORDS == 0
|
and 1 <= value <= 120 and value % record_words == 0
|
||||||
and address + value <= FAST_DATA + CAPACITY * WORDS))
|
and address + value <= FAST_DATA + capacity * record_words))
|
||||||
else:
|
else:
|
||||||
valid = function == 6 and (address in (BASE, BASE + 1, BASE + 2, BASE + 3) or
|
valid = function == 6 and (address in (BASE, BASE + 1, BASE + 2, BASE + 3) or
|
||||||
(address == EMU_CONTROL + 2 and value in (0, 1)))
|
(address == EMU_CONTROL + 2 and value in (0, 1)))
|
||||||
|
|||||||
Reference in New Issue
Block a user