Skip to content

Commit

Permalink
direct capnp to vector[CanData] conversion
Browse files Browse the repository at this point in the history
  • Loading branch information
deanlee committed Nov 7, 2024
1 parent 2d08ede commit 43de721
Show file tree
Hide file tree
Showing 8 changed files with 22 additions and 11 deletions.
19 changes: 15 additions & 4 deletions opendbc/can/parser_pyx.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from libcpp.pair cimport pair
from libcpp.string cimport string
from libcpp.vector cimport vector
from libc.stdint cimport uint32_t
from libc.stdint cimport uint32_t, uintptr_t

from .common cimport CANParser as cpp_CANParser
from .common cimport dbc_lookup, Msg, DBC, CanData
Expand Down Expand Up @@ -67,13 +67,18 @@ cdef class CANParser:
if self.can:
del self.can

def update(self, data, sendcan=False):
if not hasattr(data, 'get_data_pointer'):
return self.update_strings(self, data, sendcan)

cdef uintptr_t pointer = data.get_data_pointer()
can_data = <vector[CanData]*> pointer
return self._update(can_data[0], sendcan)

def update_strings(self, strings, sendcan=False):
# input format:
# [nanos, [[address, data, src], ...]]
# [[nanos, [[address, data, src], ...], ...]]
for address in self.addresses:
self.vl_all[address].clear()

cdef vector[CanData] can_data_array

try:
Expand All @@ -95,6 +100,12 @@ cdef class CANParser:
except TypeError:
raise RuntimeError("invalid parameter")

return self._update(can_data_array, sendcan)

cdef _update(self, vector[CanData] &can_data_array, sendcan):
for address in self.addresses:
self.vl_all[address].clear()

updated_addrs = self.can.update(can_data_array)
for addr in updated_addrs:
vl = self.vl[addr]
Expand Down
2 changes: 1 addition & 1 deletion opendbc/car/chrysler/radar_interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ def update(self, can_strings):
if self.rcp is None or self.CP.radarUnavailable:
return super().update(None)

vls = self.rcp.update_strings(can_strings)
vls = self.rcp.update(can_strings)
self.updated_messages.update(vls)

if self.trigger_msg not in self.updated_messages:
Expand Down
2 changes: 1 addition & 1 deletion opendbc/car/ford/radar_interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ def update(self, can_strings):
if self.rcp is None:
return super().update(None)

vls = self.rcp.update_strings(can_strings)
vls = self.rcp.update(can_strings)
self.updated_messages.update(vls)

if self.trigger_msg not in self.updated_messages:
Expand Down
2 changes: 1 addition & 1 deletion opendbc/car/gm/radar_interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ def update(self, can_strings):
if self.rcp is None:
return super().update(None)

vls = self.rcp.update_strings(can_strings)
vls = self.rcp.update(can_strings)
self.updated_messages.update(vls)

if self.trigger_msg not in self.updated_messages:
Expand Down
2 changes: 1 addition & 1 deletion opendbc/car/honda/radar_interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ def update(self, can_strings):
if self.radar_off_can:
return super().update(None)

vls = self.rcp.update_strings(can_strings)
vls = self.rcp.update(can_strings)
self.updated_messages.update(vls)

if self.trigger_msg not in self.updated_messages:
Expand Down
2 changes: 1 addition & 1 deletion opendbc/car/hyundai/radar_interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ def update(self, can_strings):
if self.radar_off_can or (self.rcp is None):
return super().update(None)

vls = self.rcp.update_strings(can_strings)
vls = self.rcp.update(can_strings)
self.updated_messages.update(vls)

if self.trigger_msg not in self.updated_messages:
Expand Down
2 changes: 1 addition & 1 deletion opendbc/car/interfaces.py
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,7 @@ def update(self, can_packets: list[tuple[int, list[CanData]]]) -> structs.CarSta
# parse can
for cp in self.can_parsers:
if cp is not None:
cp.update_strings(can_packets)
cp.update(can_packets)

# get CarState
ret = self._update()
Expand Down
2 changes: 1 addition & 1 deletion opendbc/car/toyota/radar_interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ def update(self, can_strings):
if self.rcp is None:
return super().update(None)

vls = self.rcp.update_strings(can_strings)
vls = self.rcp.update(can_strings)
self.updated_messages.update(vls)

if self.trigger_msg not in self.updated_messages:
Expand Down

0 comments on commit 43de721

Please sign in to comment.