mirror of https://github.com/rusefi/opendbc.git
CANParser: minor speedup (#560)
This commit is contained in:
parent
24538ceb04
commit
f74f93629b
|
@ -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
|
||||||
|
|
|
@ -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):
|
||||||
|
|
Loading…
Reference in New Issue