Добавить поддержку GAS 167 и УМП, улучшить обмен по CAN и последовательному порту
This commit is contained in:
@@ -16,6 +16,7 @@ from __future__ import annotations
|
||||
|
||||
from . import can_transport as tr
|
||||
from protocan import protocan as pc
|
||||
from protocan.gas_167 import assigned_metadata
|
||||
from . import balsam_can
|
||||
|
||||
#: Расшифровка поля LEC регистра CAN_ESR.
|
||||
@@ -64,8 +65,27 @@ def decode_frame(frame: tr.Frame) -> pc.Decoded:
|
||||
decoded_balsam = balsam_can.decode(
|
||||
frame.can_id, frame.data, ide=frame.ide, rtr=frame.rtr)
|
||||
if decoded_balsam is not None:
|
||||
decoded_balsam.fields.append(("Автоопределение", "Balsam 167: идентификатор legacy CAN"))
|
||||
return decoded_balsam
|
||||
return pc.decode(frame.can_id, frame.data, ide=frame.ide, rtr=frame.rtr)
|
||||
result = pc.decode(frame.can_id, frame.data, ide=frame.ide, rtr=frame.rtr)
|
||||
if (frame.ide and not frame.rtr
|
||||
and result.id.msg_type == pc.MsgType.GENERAL_ADDRESS_SPACE
|
||||
and len(frame.data) <= 8 and len(frame.data) % 2 == 0
|
||||
and result.registers is not None):
|
||||
addresses = [address for address, _value in result.registers] or [result.id.body]
|
||||
entries = [assigned_metadata(address) for address in addresses]
|
||||
if all(entries) and len({entry['node'] for entry in entries}) == 1:
|
||||
node = entries[0]['node'] - 4
|
||||
result.protocol = "УМП / ProtoCAN GAS (назначенные ID)"
|
||||
result.device_label = "УМП %d" % node
|
||||
result.message_label = "GAS · УМП %d" % node
|
||||
result.fields.append(("Автоопределение",
|
||||
"УМП %d: все GAS ID входят в назначенную карту; поддержка прошивкой не подтверждена" % node))
|
||||
return result
|
||||
result.fields.append(("Автоопределение", "Разбор ProtoCAN; профиль прибора не определён"))
|
||||
if result.id.msg_type == pc.MsgType.GENERAL_ADDRESS_SPACE:
|
||||
result.summary += " · профиль/узел не определены — выберите протокол вручную"
|
||||
return result
|
||||
|
||||
dec = pc.Decoded(id=pc.ProtoCanId.parse(frame.can_id), dlc=len(frame.data),
|
||||
data=frame.data, ide=frame.ide, rtr=frame.rtr)
|
||||
|
||||
Reference in New Issue
Block a user