CANParser: minor speedup (#560)

This commit is contained in:
Adeeb Shihadeh 2022-02-09 22:46:28 -08:00 committed by GitHub
parent 24538ceb04
commit f74f93629b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 10 deletions

View File

@ -24,24 +24,24 @@ cdef class CANParser:
map[string, uint32_t] msg_name_to_address map[string, uint32_t] msg_name_to_address
map[uint32_t, string] address_to_msg_name map[uint32_t, string] address_to_msg_name
vector[SignalValue] can_values vector[SignalValue] can_values
bool test_mode_enabled
cdef readonly: cdef readonly:
string dbc_name
dict vl dict vl
bool can_valid bool can_valid
string dbc_name
int can_invalid_cnt int can_invalid_cnt
def __init__(self, dbc_name, signals, checks=None, bus=0, enforce_checks=True): def __init__(self, dbc_name, signals, checks=None, bus=0, enforce_checks=True):
if checks is None: if checks is None:
checks = [] checks = []
self.can_valid = True
self.dbc_name = dbc_name self.dbc_name = dbc_name
self.dbc = dbc_lookup(dbc_name) self.dbc = dbc_lookup(dbc_name)
if not self.dbc: if not self.dbc:
raise RuntimeError(f"Can't find DBC: {dbc_name}") raise RuntimeError(f"Can't find DBC: {dbc_name}")
self.vl = {}
self.vl = {}
self.can_valid = False
self.can_invalid_cnt = CAN_INVALID_CNT self.can_invalid_cnt = CAN_INVALID_CNT
cdef int i cdef int i
@ -53,7 +53,7 @@ cdef class CANParser:
self.msg_name_to_address[name] = msg.address self.msg_name_to_address[name] = msg.address
self.address_to_msg_name[msg.address] = name self.address_to_msg_name[msg.address] = name
self.vl[msg.address] = {} self.vl[msg.address] = {}
self.vl[name] = {} self.vl[name] = self.vl[msg.address]
# Convert message names into addresses # Convert message names into addresses
for i in range(len(signals)): for i in range(len(signals)):
@ -113,12 +113,8 @@ cdef class CANParser:
for cv in can_values: for cv in can_values:
# Cast char * directly to unicode # Cast char * directly to unicode
name = <unicode>self.address_to_msg_name[cv.address].c_str()
cv_name = <unicode>cv.name cv_name = <unicode>cv.name
self.vl[cv.address][cv_name] = cv.value self.vl[cv.address][cv_name] = cv.value
self.vl[name][cv_name] = cv.value
updated_val.insert(cv.address) updated_val.insert(cv.address)
return updated_val return updated_val

View File

@ -41,7 +41,7 @@ class TestCanParserPacker(unittest.TestCase):
idx = 0 idx = 0
for steer in range(-256, 255): for steer in range(-256, 255):
for active in [1, 0]: for active in (1, 0):
values = { values = {
"STEER_TORQUE": steer, "STEER_TORQUE": steer,
"STEER_TORQUE_REQUEST": active, "STEER_TORQUE_REQUEST": active,
@ -56,6 +56,9 @@ class TestCanParserPacker(unittest.TestCase):
self.assertAlmostEqual(parser.vl["STEERING_CONTROL"]["STEER_TORQUE_REQUEST"], active) self.assertAlmostEqual(parser.vl["STEERING_CONTROL"]["STEER_TORQUE_REQUEST"], active)
self.assertAlmostEqual(parser.vl["STEERING_CONTROL"]["COUNTER"], idx % 4) self.assertAlmostEqual(parser.vl["STEERING_CONTROL"]["COUNTER"], idx % 4)
for sig in ("STEER_TORQUE", "STEER_TORQUE_REQUEST", "COUNTER", "CHECKSUM"):
self.assertEqual(parser.vl["STEERING_CONTROL"][sig], parser.vl[228][sig])
idx += 1 idx += 1
def test_scale_offset(self): def test_scale_offset(self):