Add CAN1 100 ms heartbeat with verified firmware and updated protocol PDF
This commit is contained in:
+15
-6
@@ -73,28 +73,37 @@ def main():
|
||||
header = (ROOT / 'firmware/Core/Inc/ami_protocol.h').read_text(encoding='utf-8')
|
||||
identifiers = {int(value, 16) for value in re.findall(
|
||||
r'^#define\s+AMI_CAN_ID_\w+\s+(0x[\dA-Fa-f]+)', header, re.MULTILINE)}
|
||||
expected = {0x182:(False,8), 0x183:(False,8), 0x300:(False,8), 0x6A0:(False,8), 0x6A1:(False,2),
|
||||
expected = {0x182:(False,8), 0x183:(False,8), 0x300:(False,8), 0x301:(False,8), 0x6A0:(False,8), 0x6A1:(False,2),
|
||||
0x6A2:(False,8), 0x6A4:(False,4), 0x6A6:(False,8),
|
||||
0x140:(False,8), 0x156:(False,8),
|
||||
0x186040F3:(True,8), 0x186140F3:(True,8)}
|
||||
actual = {m.frame_id:(m.is_extended_frame,m.length) for m in db.messages}
|
||||
assert actual == expected, actual
|
||||
assert set(actual) == identifiers, (actual, identifiers)
|
||||
assert len(db.messages) == 12
|
||||
assert sum(len(m.signals) for m in db.messages) == 49
|
||||
assert len(db.messages) == 13
|
||||
assert sum(len(m.signals) for m in db.messages) == 53
|
||||
for m in db.messages:
|
||||
if m.frame_id == 0x300:
|
||||
if m.frame_id in (0x300, 0x301):
|
||||
assert m.senders == ['AMI'] and m.receivers == {'VCU'}
|
||||
else:
|
||||
assert m.receivers == {'AMI'}
|
||||
assert m.senders == (['VCU'] if m.frame_id in (0x182,0x183) else
|
||||
['SDC_ACQ_DAC'] if 0x6A0 <= m.frame_id <= 0x6A6 else ['BMS'])
|
||||
assert db.dbc.attributes['Baudrate'].value == 500000
|
||||
for ident, cycle in [(0x182,100), (0x183,100), (0x6A0,100), (0x6A1,500), (0x6A2,20)]:
|
||||
for ident, cycle in [(0x301,100), (0x182,100), (0x183,100), (0x6A0,100), (0x6A1,500), (0x6A2,20)]:
|
||||
assert db.get_message_by_frame_id(ident).cycle_time == cycle
|
||||
for ident in [0x300,0x6A4,0x6A6,0x140,0x156,0x186040F3,0x186140F3]:
|
||||
assert db.get_message_by_frame_id(ident).cycle_time in (None,0)
|
||||
|
||||
assert len(db2.messages) == 12
|
||||
assert all(m.frame_id != 0x301 for m in db2.messages)
|
||||
heartbeat = db.get_message_by_frame_id(0x301)
|
||||
for sequence, uptime in ((0,100), (65535,4294967295), (0,0)):
|
||||
values = dict(Protocol_Version=1, Reserved=0,
|
||||
Heartbeat_Sequence=sequence, MCU_Uptime=uptime)
|
||||
raw = bytes([1,0]) + sequence.to_bytes(2,'little') + uptime.to_bytes(4,'little')
|
||||
assert heartbeat.encode(values) == raw
|
||||
assert heartbeat.decode(raw) == values
|
||||
checks = []
|
||||
def decode(ident, data):
|
||||
checks.append({'id':hex(ident),'data':data})
|
||||
@@ -239,7 +248,7 @@ def main():
|
||||
db2.decode_message(ident, payload, decode_choices=decode_choices)
|
||||
print(json.dumps({'result':'passed','messages':len(db.messages),'signals':sum(len(m.signals) for m in db.messages),
|
||||
'known_payload_checks':len(checks),'all_task_ids_and_counter_edges':True,
|
||||
'ports_bitrate':bitrates,'both_dbc_layouts_and_payloads_match':True,
|
||||
'ports_bitrate':bitrates,'shared_dbc_layouts_and_payloads_match':True, 'heartbeat_can1_only':True,
|
||||
'firmware_and_ioc_bit_timing_match':True,
|
||||
'firmware_ids_match':True,'sdc_source_layout_match':source_check,
|
||||
'display_sender_known_bytes_and_argument_rejection':True,
|
||||
|
||||
Reference in New Issue
Block a user