From 5c8e7fa34f65f77813ccfff96884a901adb985d7 Mon Sep 17 00:00:00 2001 From: deanlee Date: Sat, 8 Jun 2024 22:10:34 +0800 Subject: [PATCH 01/22] use new opendbc api --- opendbc | 2 +- selfdrive/car/chrysler/radar_interface.py | 3 +- selfdrive/car/ford/radar_interface.py | 3 +- selfdrive/car/gm/radar_interface.py | 3 +- selfdrive/car/honda/radar_interface.py | 3 +- selfdrive/car/hyundai/radar_interface.py | 3 +- selfdrive/car/interfaces.py | 4 ++- selfdrive/car/tesla/radar_interface.py | 3 +- selfdrive/car/toyota/radar_interface.py | 3 +- .../debug/check_can_parser_performance.py | 4 ++- selfdrive/pandad/__init__.py | 3 +- selfdrive/pandad/can_list_to_can_capnp.cc | 31 +++++++++++++++++ selfdrive/pandad/pandad_api_impl.pyx | 33 ++++++++++++++++--- .../examples/subaru_long_accel.ipynb | 3 +- .../examples/subaru_steer_temp_fault.ipynb | 3 +- 15 files changed, 87 insertions(+), 17 deletions(-) diff --git a/opendbc b/opendbc index 776bca184bc997..c3367d0d00a4f3 160000 --- a/opendbc +++ b/opendbc @@ -1 +1 @@ -Subproject commit 776bca184bc997b587afb20df71bc56a4890c4d8 +Subproject commit c3367d0d00a4f3c8461e3d37638a6f16b3f39aa6 diff --git a/selfdrive/car/chrysler/radar_interface.py b/selfdrive/car/chrysler/radar_interface.py index d9829584228b4d..5b3fe29d09e858 100755 --- a/selfdrive/car/chrysler/radar_interface.py +++ b/selfdrive/car/chrysler/radar_interface.py @@ -3,6 +3,7 @@ from cereal import car from openpilot.selfdrive.car.interfaces import RadarInterfaceBase from openpilot.selfdrive.car.chrysler.values import DBC +from openpilot.selfdrive.pandad import can_capnp_to_list RADAR_MSGS_C = list(range(0x2c2, 0x2d4+2, 2)) # c_ messages 706,...,724 RADAR_MSGS_D = list(range(0x2a2, 0x2b4+2, 2)) # d_ messages @@ -48,7 +49,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_strings(can_capnp_to_list(can_strings)) self.updated_messages.update(vls) if self.trigger_msg not in self.updated_messages: diff --git a/selfdrive/car/ford/radar_interface.py b/selfdrive/car/ford/radar_interface.py index 209bbebae34d5f..9f818eace18e7e 100644 --- a/selfdrive/car/ford/radar_interface.py +++ b/selfdrive/car/ford/radar_interface.py @@ -5,6 +5,7 @@ from openpilot.selfdrive.car.ford.fordcan import CanBus from openpilot.selfdrive.car.ford.values import DBC, RADAR from openpilot.selfdrive.car.interfaces import RadarInterfaceBase +from openpilot.selfdrive.pandad import can_capnp_to_list DELPHI_ESR_RADAR_MSGS = list(range(0x500, 0x540)) @@ -52,7 +53,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_strings(can_capnp_to_list(can_strings)) self.updated_messages.update(vls) if self.trigger_msg not in self.updated_messages: diff --git a/selfdrive/car/gm/radar_interface.py b/selfdrive/car/gm/radar_interface.py index b893babd319396..7bc6f12a8e3a48 100755 --- a/selfdrive/car/gm/radar_interface.py +++ b/selfdrive/car/gm/radar_interface.py @@ -5,6 +5,7 @@ from opendbc.can.parser import CANParser from openpilot.selfdrive.car.gm.values import DBC, CanBus from openpilot.selfdrive.car.interfaces import RadarInterfaceBase +from openpilot.selfdrive.pandad import can_capnp_to_list RADAR_HEADER_MSG = 1120 SLOT_1_MSG = RADAR_HEADER_MSG + 1 @@ -46,7 +47,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_strings(can_capnp_to_list(can_strings)) self.updated_messages.update(vls) if self.trigger_msg not in self.updated_messages: diff --git a/selfdrive/car/honda/radar_interface.py b/selfdrive/car/honda/radar_interface.py index 8090f8e03e7735..eac65d33729506 100755 --- a/selfdrive/car/honda/radar_interface.py +++ b/selfdrive/car/honda/radar_interface.py @@ -3,6 +3,7 @@ from opendbc.can.parser import CANParser from openpilot.selfdrive.car.interfaces import RadarInterfaceBase from openpilot.selfdrive.car.honda.values import DBC +from openpilot.selfdrive.pandad import can_capnp_to_list def _create_nidec_can_parser(car_fingerprint): @@ -36,7 +37,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_strings(can_capnp_to_list(can_strings)) self.updated_messages.update(vls) if self.trigger_msg not in self.updated_messages: diff --git a/selfdrive/car/hyundai/radar_interface.py b/selfdrive/car/hyundai/radar_interface.py index 52600509860f5a..a90df64817794e 100644 --- a/selfdrive/car/hyundai/radar_interface.py +++ b/selfdrive/car/hyundai/radar_interface.py @@ -4,6 +4,7 @@ from opendbc.can.parser import CANParser from openpilot.selfdrive.car.interfaces import RadarInterfaceBase from openpilot.selfdrive.car.hyundai.values import DBC +from openpilot.selfdrive.pandad import can_capnp_to_list RADAR_START_ADDR = 0x500 RADAR_MSG_COUNT = 32 @@ -32,7 +33,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_strings(can_capnp_to_list(can_strings)) self.updated_messages.update(vls) if self.trigger_msg not in self.updated_messages: diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py index 5eac6062aa53cf..dd31dce5643721 100644 --- a/selfdrive/car/interfaces.py +++ b/selfdrive/car/interfaces.py @@ -19,6 +19,7 @@ from openpilot.selfdrive.controls.lib.drive_helpers import V_CRUISE_MAX, get_friction from openpilot.selfdrive.controls.lib.events import Events from openpilot.selfdrive.controls.lib.vehicle_model import VehicleModel +from openpilot.selfdrive.pandad import can_capnp_to_list ButtonType = car.CarState.ButtonEvent.Type GearShifter = car.CarState.GearShifter @@ -234,9 +235,10 @@ def _update(self, c: car.CarControl) -> car.CarState: def update(self, c: car.CarControl, can_strings: list[bytes]) -> car.CarState: # parse can + can_list = can_capnp_to_list(can_strings) for cp in self.can_parsers: if cp is not None: - cp.update_strings(can_strings) + cp.update_strings(can_list) # get CarState ret = self._update(c) diff --git a/selfdrive/car/tesla/radar_interface.py b/selfdrive/car/tesla/radar_interface.py index ae5077824bc6f2..32747dfe1857d6 100755 --- a/selfdrive/car/tesla/radar_interface.py +++ b/selfdrive/car/tesla/radar_interface.py @@ -3,6 +3,7 @@ from opendbc.can.parser import CANParser from openpilot.selfdrive.car.tesla.values import CAR, DBC, CANBUS from openpilot.selfdrive.car.interfaces import RadarInterfaceBase +from openpilot.selfdrive.pandad import can_capnp_to_list class RadarInterface(RadarInterfaceBase): @@ -33,7 +34,7 @@ def update(self, can_strings): if self.rcp is None: return super().update(None) - values = self.rcp.update_strings(can_strings) + values = self.rcp.update_strings(can_capnp_to_list(can_strings)) self.updated_messages.update(values) if self.trigger_msg not in self.updated_messages: diff --git a/selfdrive/car/toyota/radar_interface.py b/selfdrive/car/toyota/radar_interface.py index fae6eecaf634e2..2f0225982cb7fd 100755 --- a/selfdrive/car/toyota/radar_interface.py +++ b/selfdrive/car/toyota/radar_interface.py @@ -3,6 +3,7 @@ from cereal import car from openpilot.selfdrive.car.toyota.values import DBC, TSS2_CAR from openpilot.selfdrive.car.interfaces import RadarInterfaceBase +from openpilot.selfdrive.pandad import can_capnp_to_list def _create_radar_can_parser(car_fingerprint): @@ -42,7 +43,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_strings(can_capnp_to_list(can_strings)) self.updated_messages.update(vls) if self.trigger_msg not in self.updated_messages: diff --git a/selfdrive/debug/check_can_parser_performance.py b/selfdrive/debug/check_can_parser_performance.py index 604a1df1248e86..a653886a198144 100755 --- a/selfdrive/debug/check_can_parser_performance.py +++ b/selfdrive/debug/check_can_parser_performance.py @@ -6,8 +6,10 @@ from cereal import car from openpilot.selfdrive.car.tests.routes import CarTestRoute from openpilot.selfdrive.car.tests.test_models import TestCarModelBase +from openpilot.selfdrive.pandad import can_capnp_to_list from openpilot.tools.plotjuggler.juggle import DEMO_ROUTE + N_RUNS = 10 @@ -25,7 +27,7 @@ class CarModelTestCase(TestCarModelBase): CC = car.CarControl.new_message() ets = [] for _ in tqdm(range(N_RUNS)): - msgs = [(m.as_builder().to_bytes(),) for m in tm.can_msgs] + msgs = can_capnp_to_list([m.as_builder().to_bytes() for m in tm.can_msgs]) start_t = time.process_time_ns() for msg in msgs: for cp in tm.CI.can_parsers: diff --git a/selfdrive/pandad/__init__.py b/selfdrive/pandad/__init__.py index 8081a62dd0f1d7..c2df28e00fc296 100644 --- a/selfdrive/pandad/__init__.py +++ b/selfdrive/pandad/__init__.py @@ -1,6 +1,7 @@ # Cython, now uses scons to build -from openpilot.selfdrive.pandad.pandad_api_impl import can_list_to_can_capnp +from openpilot.selfdrive.pandad.pandad_api_impl import can_list_to_can_capnp, can_capnp_to_list assert can_list_to_can_capnp +assert can_capnp_to_list def can_capnp_to_can_list(can, src_filter=None): ret = [] diff --git a/selfdrive/pandad/can_list_to_can_capnp.cc b/selfdrive/pandad/can_list_to_can_capnp.cc index 9fc2648da27a62..76688dcefab3fd 100644 --- a/selfdrive/pandad/can_list_to_can_capnp.cc +++ b/selfdrive/pandad/can_list_to_can_capnp.cc @@ -1,5 +1,6 @@ #include "cereal/messaging/messaging.h" #include "selfdrive/pandad/panda.h" +#include "opendbc/can/common.h" void can_list_to_can_capnp_cpp(const std::vector &can_list, std::string &out, bool sendCan, bool valid) { MessageBuilder msg; @@ -19,3 +20,33 @@ void can_list_to_can_capnp_cpp(const std::vector &can_list, std::stri kj::ArrayOutputStream output_stream(kj::ArrayPtr((unsigned char *)out.data(), msg_size)); capnp::writeMessage(output_stream, msg); } + +void can_capnp_to_can_list_cpp(const std::vector &strings, std::vector &can_data, bool sendcan) { + kj::Array aligned_buf; + can_data.reserve(strings.size()); + for (const auto &s : strings) { + const size_t buf_size = (s.length() / sizeof(capnp::word)) + 1; + if (aligned_buf.size() < buf_size) { + aligned_buf = kj::heapArray(buf_size); + } + memcpy(aligned_buf.begin(), s.data(), s.length()); + + // extract the messages + capnp::FlatArrayMessageReader cmsg(aligned_buf.slice(0, buf_size)); + cereal::Event::Reader event = cmsg.getRoot(); + + auto &can = can_data.emplace_back(); + can.nanos = event.getLogMonoTime(); + + auto cans = sendcan ? event.getSendcan() : event.getCan(); + can.frames.reserve(cans.size()); + for (const auto &c : cans) { + auto &frame = can.frames.emplace_back(); + frame.src = c.getSrc(); + frame.address = c.getAddress(); + auto dat = c.getDat(); + frame.dat.resize(dat.size()); + memcpy(frame.dat.data(), dat.begin(), dat.size()); + } + } +} diff --git a/selfdrive/pandad/pandad_api_impl.pyx b/selfdrive/pandad/pandad_api_impl.pyx index cbac8cc5a3adf0..7bc3b6c2d9b612 100644 --- a/selfdrive/pandad/pandad_api_impl.pyx +++ b/selfdrive/pandad/pandad_api_impl.pyx @@ -1,8 +1,10 @@ # distutils: language = c++ # cython: language_level=3 +from cython.operator cimport dereference as deref, preincrement as preinc from libcpp.vector cimport vector from libcpp.string cimport string from libcpp cimport bool +from libc.stdint cimport uint8_t, uint32_t, uint64_t cdef extern from "panda.h": cdef struct can_frame: @@ -11,21 +13,44 @@ cdef extern from "panda.h": long busTime long src +cdef extern from "opendbc/can/common.h": + cdef struct CanFrame: + long src + uint32_t address + vector[uint8_t] dat + + cdef struct CanData: + uint64_t nanos + vector[CanFrame] frames + cdef extern from "can_list_to_can_capnp.cc": void can_list_to_can_capnp_cpp(const vector[can_frame] &can_list, string &out, bool sendCan, bool valid) + void can_capnp_to_can_list_cpp(const vector[string] &strings, vector[CanData] &can_data, bool sendcan) def can_list_to_can_capnp(can_msgs, msgtype='can', valid=True): - cdef can_frame *f cdef vector[can_frame] can_list - can_list.reserve(len(can_msgs)) + + cdef can_frame f for can_msg in can_msgs: - f = &(can_list.emplace_back()) f.address = can_msg[0] f.busTime = can_msg[1] f.dat = can_msg[2] f.src = can_msg[3] - + can_list.push_back(f) cdef string out can_list_to_can_capnp_cpp(can_list, out, msgtype == 'sendcan', valid) return out + +def can_capnp_to_list(strings, sendcan=False): + cdef vector[CanData] data + can_capnp_to_can_list_cpp(strings, data, sendcan) + result = [] + cdef vector[CanData].iterator it = data.begin() + cdef CanData *d + while it != data.end(): + d = &deref(it) + frames = [[f.address, 0, (&f.dat[0])[:f.dat.size()], f.src] for f in d.frames] + result.append([d.nanos, frames]) + preinc(it) + return result diff --git a/tools/car_porting/examples/subaru_long_accel.ipynb b/tools/car_porting/examples/subaru_long_accel.ipynb index 9d18a114df3ee8..35b92702a7e991 100644 --- a/tools/car_porting/examples/subaru_long_accel.ipynb +++ b/tools/car_porting/examples/subaru_long_accel.ipynb @@ -24,6 +24,7 @@ "from opendbc.can.parser import CANParser\n", "\n", "from openpilot.selfdrive.car.subaru.values import DBC\n", + "from openpilot.selfdrive.pandad import can_capnp_to_list\n", "from openpilot.tools.lib.logreader import LogReader\n", "\n", "\"\"\"\n", @@ -50,7 +51,7 @@ "\n", " for msg in lr:\n", " if msg.which() == \"can\":\n", - " cp.update_strings([msg.as_builder().to_bytes()])\n", + " cp.update_strings(can_capnp_to_list([msg.as_builder().to_bytes()]))\n", " es_distance_history.append(copy.copy(cp.vl[\"ES_Distance\"]))\n", " es_brake_history.append(copy.copy(cp.vl[\"ES_Brake\"]))\n", " es_status_history.append(copy.copy(cp.vl[\"ES_Status\"]))\n", diff --git a/tools/car_porting/examples/subaru_steer_temp_fault.ipynb b/tools/car_porting/examples/subaru_steer_temp_fault.ipynb index 3d5055cbc29b04..8b762fecb8461b 100644 --- a/tools/car_porting/examples/subaru_steer_temp_fault.ipynb +++ b/tools/car_porting/examples/subaru_steer_temp_fault.ipynb @@ -27,6 +27,7 @@ "from opendbc.can.parser import CANParser\n", "\n", "from openpilot.selfdrive.car.subaru.values import CanBus, DBC\n", + "from openpilot.selfdrive.pandad import can_capnp_to_list\n", "from openpilot.tools.lib.logreader import LogReader\n", "\n", "\"\"\"\n", @@ -50,7 +51,7 @@ " examples = []\n", "\n", " for msg in can_msgs:\n", - " cp.update_strings([msg.as_builder().to_bytes()])\n", + " cp.update_strings(can_capnp_to_list([msg.as_builder().to_bytes()]))\n", " steering_torque_history.append(copy.copy(cp.vl[\"Steering_Torque\"]))\n", "\n", " steer_warning_last = False\n", From 8e4cf22ab9970e9397b28d9026ccd4964af25f3d Mon Sep 17 00:00:00 2001 From: deanlee Date: Sat, 8 Jun 2024 23:07:05 +0800 Subject: [PATCH 02/22] export pandad_python --- opendbc | 2 +- selfdrive/controls/lib/lateral_mpc_lib/SConscript | 6 +++++- selfdrive/controls/lib/longitudinal_mpc_lib/SConscript | 6 +++++- selfdrive/debug/check_can_parser_performance.py | 1 - selfdrive/pandad/SConscript | 3 ++- 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/opendbc b/opendbc index c3367d0d00a4f3..776bca184bc997 160000 --- a/opendbc +++ b/opendbc @@ -1 +1 @@ -Subproject commit c3367d0d00a4f3c8461e3d37638a6f16b3f39aa6 +Subproject commit 776bca184bc997b587afb20df71bc56a4890c4d8 diff --git a/selfdrive/controls/lib/lateral_mpc_lib/SConscript b/selfdrive/controls/lib/lateral_mpc_lib/SConscript index 73242cb8f9cf36..53083763fe239b 100644 --- a/selfdrive/controls/lib/lateral_mpc_lib/SConscript +++ b/selfdrive/controls/lib/lateral_mpc_lib/SConscript @@ -1,4 +1,4 @@ -Import('env', 'envCython', 'arch', 'msgq_python', 'common_python', 'opendbc_python') +Import('env', 'envCython', 'arch', 'msgq_python', 'common_python', 'opendbc_python', 'pandad_python') gen = "c_generated_code" @@ -60,7 +60,11 @@ lenv.Clean(generated_files, Dir(gen)) generated_lat = lenv.Command(generated_files, source_list, f"cd {Dir('.').abspath} && python3 lat_mpc.py") +<<<<<<< HEAD lenv.Depends(generated_lat, [msgq_python, common_python, opendbc_python]) +======= +lenv.Depends(generated_lat, [messaging_python, common_python, opendbc_python, pandad_python]) +>>>>>>> export pandad_python lenv["CFLAGS"].append("-DACADOS_WITH_QPOASES") lenv["CXXFLAGS"].append("-DACADOS_WITH_QPOASES") diff --git a/selfdrive/controls/lib/longitudinal_mpc_lib/SConscript b/selfdrive/controls/lib/longitudinal_mpc_lib/SConscript index 592c1c2c2da8ec..1149107758102d 100644 --- a/selfdrive/controls/lib/longitudinal_mpc_lib/SConscript +++ b/selfdrive/controls/lib/longitudinal_mpc_lib/SConscript @@ -1,4 +1,4 @@ -Import('env', 'envCython', 'arch', 'msgq_python', 'common_python', 'opendbc_python') +Import('env', 'envCython', 'arch', 'msgq_python', 'common_python', 'opendbc_python', 'pandad_python') gen = "c_generated_code" @@ -66,7 +66,11 @@ lenv.Clean(generated_files, Dir(gen)) generated_long = lenv.Command(generated_files, source_list, f"cd {Dir('.').abspath} && python3 long_mpc.py") +<<<<<<< HEAD lenv.Depends(generated_long, [msgq_python, common_python, opendbc_python]) +======= +lenv.Depends(generated_long, [messaging_python, common_python, opendbc_python, pandad_python]) +>>>>>>> export pandad_python lenv["CFLAGS"].append("-DACADOS_WITH_QPOASES") lenv["CXXFLAGS"].append("-DACADOS_WITH_QPOASES") diff --git a/selfdrive/debug/check_can_parser_performance.py b/selfdrive/debug/check_can_parser_performance.py index a653886a198144..8b9ef068ac0705 100755 --- a/selfdrive/debug/check_can_parser_performance.py +++ b/selfdrive/debug/check_can_parser_performance.py @@ -9,7 +9,6 @@ from openpilot.selfdrive.pandad import can_capnp_to_list from openpilot.tools.plotjuggler.juggle import DEMO_ROUTE - N_RUNS = 10 diff --git a/selfdrive/pandad/SConscript b/selfdrive/pandad/SConscript index 63a2c1e650d539..160a7916b08551 100644 --- a/selfdrive/pandad/SConscript +++ b/selfdrive/pandad/SConscript @@ -6,6 +6,7 @@ panda = env.Library('panda', ['panda.cc', 'panda_comms.cc', 'spi.cc']) env.Program('pandad', ['main.cc', 'pandad.cc'], LIBS=[panda] + libs) env.Library('libcan_list_to_can_capnp', ['can_list_to_can_capnp.cc']) -envCython.Program('pandad_api_impl.so', 'pandad_api_impl.pyx', LIBS=["can_list_to_can_capnp", 'capnp', 'kj'] + envCython["LIBS"]) +pandad_python = envCython.Program('pandad_api_impl.so', 'pandad_api_impl.pyx', LIBS=["can_list_to_can_capnp", 'capnp', 'kj'] + envCython["LIBS"]) +Export('pandad_python') if GetOption('extras'): env.Program('tests/test_pandad_usbprotocol', ['tests/test_pandad_usbprotocol.cc'], LIBS=[panda] + libs) From 56eb03630183619333efc4d472b6938bbe9626e5 Mon Sep 17 00:00:00 2001 From: deanlee Date: Tue, 11 Jun 2024 11:23:06 +0800 Subject: [PATCH 03/22] merge master --- selfdrive/pandad/pandad_api_impl.pyx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/selfdrive/pandad/pandad_api_impl.pyx b/selfdrive/pandad/pandad_api_impl.pyx index 7bc3b6c2d9b612..163fb5f7ead1f8 100644 --- a/selfdrive/pandad/pandad_api_impl.pyx +++ b/selfdrive/pandad/pandad_api_impl.pyx @@ -28,16 +28,17 @@ cdef extern from "can_list_to_can_capnp.cc": void can_capnp_to_can_list_cpp(const vector[string] &strings, vector[CanData] &can_data, bool sendcan) def can_list_to_can_capnp(can_msgs, msgtype='can', valid=True): + cdef can_frame *f cdef vector[can_frame] can_list - can_list.reserve(len(can_msgs)) - cdef can_frame f + can_list.reserve(len(can_msgs)) for can_msg in can_msgs: + f = &(can_list.emplace_back()) f.address = can_msg[0] f.busTime = can_msg[1] f.dat = can_msg[2] f.src = can_msg[3] - can_list.push_back(f) + cdef string out can_list_to_can_capnp_cpp(can_list, out, msgtype == 'sendcan', valid) return out @@ -45,9 +46,10 @@ def can_list_to_can_capnp(can_msgs, msgtype='can', valid=True): def can_capnp_to_list(strings, sendcan=False): cdef vector[CanData] data can_capnp_to_can_list_cpp(strings, data, sendcan) + result = [] - cdef vector[CanData].iterator it = data.begin() cdef CanData *d + cdef vector[CanData].iterator it = data.begin() while it != data.end(): d = &deref(it) frames = [[f.address, 0, (&f.dat[0])[:f.dat.size()], f.src] for f in d.frames] From feb80a21e373cfad09c3fc5422ca2db92471aee4 Mon Sep 17 00:00:00 2001 From: deanlee Date: Tue, 11 Jun 2024 11:29:45 +0800 Subject: [PATCH 04/22] merge master --- selfdrive/controls/lib/lateral_mpc_lib/SConscript | 6 +----- selfdrive/controls/lib/longitudinal_mpc_lib/SConscript | 6 +----- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/selfdrive/controls/lib/lateral_mpc_lib/SConscript b/selfdrive/controls/lib/lateral_mpc_lib/SConscript index 53083763fe239b..46dd267308f997 100644 --- a/selfdrive/controls/lib/lateral_mpc_lib/SConscript +++ b/selfdrive/controls/lib/lateral_mpc_lib/SConscript @@ -60,11 +60,7 @@ lenv.Clean(generated_files, Dir(gen)) generated_lat = lenv.Command(generated_files, source_list, f"cd {Dir('.').abspath} && python3 lat_mpc.py") -<<<<<<< HEAD -lenv.Depends(generated_lat, [msgq_python, common_python, opendbc_python]) -======= -lenv.Depends(generated_lat, [messaging_python, common_python, opendbc_python, pandad_python]) ->>>>>>> export pandad_python +lenv.Depends(generated_lat, [msgq_python, common_python, opendbc_python, pandad_python]) lenv["CFLAGS"].append("-DACADOS_WITH_QPOASES") lenv["CXXFLAGS"].append("-DACADOS_WITH_QPOASES") diff --git a/selfdrive/controls/lib/longitudinal_mpc_lib/SConscript b/selfdrive/controls/lib/longitudinal_mpc_lib/SConscript index 1149107758102d..9f051c915408dc 100644 --- a/selfdrive/controls/lib/longitudinal_mpc_lib/SConscript +++ b/selfdrive/controls/lib/longitudinal_mpc_lib/SConscript @@ -66,11 +66,7 @@ lenv.Clean(generated_files, Dir(gen)) generated_long = lenv.Command(generated_files, source_list, f"cd {Dir('.').abspath} && python3 long_mpc.py") -<<<<<<< HEAD -lenv.Depends(generated_long, [msgq_python, common_python, opendbc_python]) -======= -lenv.Depends(generated_long, [messaging_python, common_python, opendbc_python, pandad_python]) ->>>>>>> export pandad_python +lenv.Depends(generated_long, [msgq_python, common_python, opendbc_python, pandad_python]) lenv["CFLAGS"].append("-DACADOS_WITH_QPOASES") lenv["CXXFLAGS"].append("-DACADOS_WITH_QPOASES") From 7f123b87cec32d94ead4c03916524720263a3e8d Mon Sep 17 00:00:00 2001 From: deanlee Date: Tue, 11 Jun 2024 11:44:41 +0800 Subject: [PATCH 05/22] bump opendbc --- opendbc | 2 +- selfdrive/pandad/can_list_to_can_capnp.cc | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/opendbc b/opendbc index 776bca184bc997..d09f19c8795fda 160000 --- a/opendbc +++ b/opendbc @@ -1 +1 @@ -Subproject commit 776bca184bc997b587afb20df71bc56a4890c4d8 +Subproject commit d09f19c8795fdac17bfc467b6d2aab926e124e6c diff --git a/selfdrive/pandad/can_list_to_can_capnp.cc b/selfdrive/pandad/can_list_to_can_capnp.cc index 76688dcefab3fd..d8517b71fa8503 100644 --- a/selfdrive/pandad/can_list_to_can_capnp.cc +++ b/selfdrive/pandad/can_list_to_can_capnp.cc @@ -24,6 +24,7 @@ void can_list_to_can_capnp_cpp(const std::vector &can_list, std::stri void can_capnp_to_can_list_cpp(const std::vector &strings, std::vector &can_data, bool sendcan) { kj::Array aligned_buf; can_data.reserve(strings.size()); + for (const auto &s : strings) { const size_t buf_size = (s.length() / sizeof(capnp::word)) + 1; if (aligned_buf.size() < buf_size) { @@ -45,8 +46,7 @@ void can_capnp_to_can_list_cpp(const std::vector &strings, std::vec frame.src = c.getSrc(); frame.address = c.getAddress(); auto dat = c.getDat(); - frame.dat.resize(dat.size()); - memcpy(frame.dat.data(), dat.begin(), dat.size()); + frame.dat.assign(dat.begin(), dat.end()); } } } From bc0cd1cd4c68e869e272027e9ece59bb997027b9 Mon Sep 17 00:00:00 2001 From: deanlee Date: Tue, 11 Jun 2024 12:31:46 +0800 Subject: [PATCH 06/22] bump opendbc --- opendbc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc b/opendbc index d09f19c8795fda..c3367d0d00a4f3 160000 --- a/opendbc +++ b/opendbc @@ -1 +1 @@ -Subproject commit d09f19c8795fdac17bfc467b6d2aab926e124e6c +Subproject commit c3367d0d00a4f3c8461e3d37638a6f16b3f39aa6 From d1cc533452159e6441f3b729d7328dd0d1b8f89e Mon Sep 17 00:00:00 2001 From: deanlee Date: Tue, 11 Jun 2024 14:51:49 +0800 Subject: [PATCH 07/22] improve func --- selfdrive/pandad/can_list_to_can_capnp.cc | 48 +++++++++++------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/selfdrive/pandad/can_list_to_can_capnp.cc b/selfdrive/pandad/can_list_to_can_capnp.cc index d8517b71fa8503..232287bec98223 100644 --- a/selfdrive/pandad/can_list_to_can_capnp.cc +++ b/selfdrive/pandad/can_list_to_can_capnp.cc @@ -21,32 +21,32 @@ void can_list_to_can_capnp_cpp(const std::vector &can_list, std::stri capnp::writeMessage(output_stream, msg); } -void can_capnp_to_can_list_cpp(const std::vector &strings, std::vector &can_data, bool sendcan) { - kj::Array aligned_buf; - can_data.reserve(strings.size()); - - for (const auto &s : strings) { - const size_t buf_size = (s.length() / sizeof(capnp::word)) + 1; - if (aligned_buf.size() < buf_size) { - aligned_buf = kj::heapArray(buf_size); - } - memcpy(aligned_buf.begin(), s.data(), s.length()); +// Converts a vector of Cap'n Proto serialized can strings into a vector of CanData structures. +void can_capnp_to_can_list_cpp(const std::vector &strings, std::vector &can_list, bool sendcan) { + AlignedBuffer aligned_buf; + can_list.reserve(strings.size()); + for (const auto &str : strings) { // extract the messages - capnp::FlatArrayMessageReader cmsg(aligned_buf.slice(0, buf_size)); - cereal::Event::Reader event = cmsg.getRoot(); - - auto &can = can_data.emplace_back(); - can.nanos = event.getLogMonoTime(); - - auto cans = sendcan ? event.getSendcan() : event.getCan(); - can.frames.reserve(cans.size()); - for (const auto &c : cans) { - auto &frame = can.frames.emplace_back(); - frame.src = c.getSrc(); - frame.address = c.getAddress(); - auto dat = c.getDat(); - frame.dat.assign(dat.begin(), dat.end()); + capnp::FlatArrayMessageReader reader(aligned_buf.align(str.data(), str.size())); + cereal::Event::Reader event = reader.getRoot(); + + auto frames = sendcan ? event.getSendcan() : event.getCan(); + + // Add new CanData entry + CanData &can_data = can_list.emplace_back(); + can_data.nanos = event.getLogMonoTime(); + can_data.frames.reserve(frames.size()); + + // Populate CAN frames + for (const auto &frame : frames) { + CanFrame &can_frame = can_data.frames.emplace_back(); + can_frame.src = frame.getSrc(); + can_frame.address = frame.getAddress(); + + // Copy CAN data + auto dat = frame.getDat(); + can_frame.dat.assign(dat.begin(), dat.end()); } } } From e1d2f31c6a1800593458c2ad8a057bdf881e6239 Mon Sep 17 00:00:00 2001 From: deanlee Date: Wed, 12 Jun 2024 17:32:59 +0800 Subject: [PATCH 08/22] keep interface unchanged --- selfdrive/car/chrysler/radar_interface.py | 3 +-- selfdrive/car/ford/radar_interface.py | 3 +-- selfdrive/car/gm/radar_interface.py | 3 +-- selfdrive/car/honda/radar_interface.py | 3 +-- selfdrive/car/hyundai/radar_interface.py | 3 +-- selfdrive/car/tesla/radar_interface.py | 3 +-- selfdrive/car/toyota/radar_interface.py | 3 +-- selfdrive/controls/radard.py | 4 ++-- 8 files changed, 9 insertions(+), 16 deletions(-) diff --git a/selfdrive/car/chrysler/radar_interface.py b/selfdrive/car/chrysler/radar_interface.py index 5b3fe29d09e858..d9829584228b4d 100755 --- a/selfdrive/car/chrysler/radar_interface.py +++ b/selfdrive/car/chrysler/radar_interface.py @@ -3,7 +3,6 @@ from cereal import car from openpilot.selfdrive.car.interfaces import RadarInterfaceBase from openpilot.selfdrive.car.chrysler.values import DBC -from openpilot.selfdrive.pandad import can_capnp_to_list RADAR_MSGS_C = list(range(0x2c2, 0x2d4+2, 2)) # c_ messages 706,...,724 RADAR_MSGS_D = list(range(0x2a2, 0x2b4+2, 2)) # d_ messages @@ -49,7 +48,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_capnp_to_list(can_strings)) + vls = self.rcp.update_strings(can_strings) self.updated_messages.update(vls) if self.trigger_msg not in self.updated_messages: diff --git a/selfdrive/car/ford/radar_interface.py b/selfdrive/car/ford/radar_interface.py index 9f818eace18e7e..209bbebae34d5f 100644 --- a/selfdrive/car/ford/radar_interface.py +++ b/selfdrive/car/ford/radar_interface.py @@ -5,7 +5,6 @@ from openpilot.selfdrive.car.ford.fordcan import CanBus from openpilot.selfdrive.car.ford.values import DBC, RADAR from openpilot.selfdrive.car.interfaces import RadarInterfaceBase -from openpilot.selfdrive.pandad import can_capnp_to_list DELPHI_ESR_RADAR_MSGS = list(range(0x500, 0x540)) @@ -53,7 +52,7 @@ def update(self, can_strings): if self.rcp is None: return super().update(None) - vls = self.rcp.update_strings(can_capnp_to_list(can_strings)) + vls = self.rcp.update_strings(can_strings) self.updated_messages.update(vls) if self.trigger_msg not in self.updated_messages: diff --git a/selfdrive/car/gm/radar_interface.py b/selfdrive/car/gm/radar_interface.py index 7bc6f12a8e3a48..b893babd319396 100755 --- a/selfdrive/car/gm/radar_interface.py +++ b/selfdrive/car/gm/radar_interface.py @@ -5,7 +5,6 @@ from opendbc.can.parser import CANParser from openpilot.selfdrive.car.gm.values import DBC, CanBus from openpilot.selfdrive.car.interfaces import RadarInterfaceBase -from openpilot.selfdrive.pandad import can_capnp_to_list RADAR_HEADER_MSG = 1120 SLOT_1_MSG = RADAR_HEADER_MSG + 1 @@ -47,7 +46,7 @@ def update(self, can_strings): if self.rcp is None: return super().update(None) - vls = self.rcp.update_strings(can_capnp_to_list(can_strings)) + vls = self.rcp.update_strings(can_strings) self.updated_messages.update(vls) if self.trigger_msg not in self.updated_messages: diff --git a/selfdrive/car/honda/radar_interface.py b/selfdrive/car/honda/radar_interface.py index eac65d33729506..8090f8e03e7735 100755 --- a/selfdrive/car/honda/radar_interface.py +++ b/selfdrive/car/honda/radar_interface.py @@ -3,7 +3,6 @@ from opendbc.can.parser import CANParser from openpilot.selfdrive.car.interfaces import RadarInterfaceBase from openpilot.selfdrive.car.honda.values import DBC -from openpilot.selfdrive.pandad import can_capnp_to_list def _create_nidec_can_parser(car_fingerprint): @@ -37,7 +36,7 @@ def update(self, can_strings): if self.radar_off_can: return super().update(None) - vls = self.rcp.update_strings(can_capnp_to_list(can_strings)) + vls = self.rcp.update_strings(can_strings) self.updated_messages.update(vls) if self.trigger_msg not in self.updated_messages: diff --git a/selfdrive/car/hyundai/radar_interface.py b/selfdrive/car/hyundai/radar_interface.py index a90df64817794e..52600509860f5a 100644 --- a/selfdrive/car/hyundai/radar_interface.py +++ b/selfdrive/car/hyundai/radar_interface.py @@ -4,7 +4,6 @@ from opendbc.can.parser import CANParser from openpilot.selfdrive.car.interfaces import RadarInterfaceBase from openpilot.selfdrive.car.hyundai.values import DBC -from openpilot.selfdrive.pandad import can_capnp_to_list RADAR_START_ADDR = 0x500 RADAR_MSG_COUNT = 32 @@ -33,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_capnp_to_list(can_strings)) + vls = self.rcp.update_strings(can_strings) self.updated_messages.update(vls) if self.trigger_msg not in self.updated_messages: diff --git a/selfdrive/car/tesla/radar_interface.py b/selfdrive/car/tesla/radar_interface.py index 32747dfe1857d6..ae5077824bc6f2 100755 --- a/selfdrive/car/tesla/radar_interface.py +++ b/selfdrive/car/tesla/radar_interface.py @@ -3,7 +3,6 @@ from opendbc.can.parser import CANParser from openpilot.selfdrive.car.tesla.values import CAR, DBC, CANBUS from openpilot.selfdrive.car.interfaces import RadarInterfaceBase -from openpilot.selfdrive.pandad import can_capnp_to_list class RadarInterface(RadarInterfaceBase): @@ -34,7 +33,7 @@ def update(self, can_strings): if self.rcp is None: return super().update(None) - values = self.rcp.update_strings(can_capnp_to_list(can_strings)) + values = self.rcp.update_strings(can_strings) self.updated_messages.update(values) if self.trigger_msg not in self.updated_messages: diff --git a/selfdrive/car/toyota/radar_interface.py b/selfdrive/car/toyota/radar_interface.py index 2f0225982cb7fd..fae6eecaf634e2 100755 --- a/selfdrive/car/toyota/radar_interface.py +++ b/selfdrive/car/toyota/radar_interface.py @@ -3,7 +3,6 @@ from cereal import car from openpilot.selfdrive.car.toyota.values import DBC, TSS2_CAR from openpilot.selfdrive.car.interfaces import RadarInterfaceBase -from openpilot.selfdrive.pandad import can_capnp_to_list def _create_radar_can_parser(car_fingerprint): @@ -43,7 +42,7 @@ def update(self, can_strings): if self.rcp is None: return super().update(None) - vls = self.rcp.update_strings(can_capnp_to_list(can_strings)) + vls = self.rcp.update_strings(can_strings) self.updated_messages.update(vls) if self.trigger_msg not in self.updated_messages: diff --git a/selfdrive/controls/radard.py b/selfdrive/controls/radard.py index 7420f666f7a3c2..1a73bd69ec3b94 100755 --- a/selfdrive/controls/radard.py +++ b/selfdrive/controls/radard.py @@ -10,8 +10,8 @@ from openpilot.common.params import Params from openpilot.common.realtime import DT_CTRL, Ratekeeper, Priority, config_realtime_process from openpilot.common.swaglog import cloudlog - from openpilot.common.simple_kalman import KF1D +from openpilot.selfdrive.pandad import can_capnp_to_list # Default lead acceleration decay set to 50% at 1s @@ -308,7 +308,7 @@ def main(): while 1: can_strings = messaging.drain_sock_raw(can_sock, wait_for_one=True) - rr = RI.update(can_strings) + rr = RI.update(can_capnp_to_list(can_strings)) sm.update(0) if rr is None: continue From b2907f044bdf300c4c1299dbee00b9249442577d Mon Sep 17 00:00:00 2001 From: deanlee Date: Wed, 12 Jun 2024 18:13:25 +0800 Subject: [PATCH 09/22] fix test_car_interfaces --- selfdrive/car/tests/test_car_interfaces.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/selfdrive/car/tests/test_car_interfaces.py b/selfdrive/car/tests/test_car_interfaces.py index 19096c23e5505d..50e3d3e4b376d7 100644 --- a/selfdrive/car/tests/test_car_interfaces.py +++ b/selfdrive/car/tests/test_car_interfaces.py @@ -16,6 +16,7 @@ from openpilot.selfdrive.controls.lib.latcontrol_pid import LatControlPID from openpilot.selfdrive.controls.lib.latcontrol_torque import LatControlTorque from openpilot.selfdrive.controls.lib.longcontrol import LongControl +from openpilot.selfdrive.pandad import can_capnp_to_list from openpilot.selfdrive.test.fuzzy_generation import DrawType, FuzzyGenerator ALL_ECUS = {ecu for ecus in FW_VERSIONS.values() for ecu in ecus.keys()} @@ -129,7 +130,7 @@ def test_car_interfaces(self, car_name, data): # Test radar fault if not car_params.radarUnavailable and radar_interface.rcp is not None: - cans = [messaging.new_message('can', 1).to_bytes() for _ in range(5)] + cans = can_capnp_to_list([messaging.new_message('can', 1).to_bytes() for _ in range(5)]) rr = radar_interface.update(cans) assert rr is None or len(rr.errors) > 0 From 6391ff1772445d09a709fef15cb4a18531b1e176 Mon Sep 17 00:00:00 2001 From: deanlee Date: Wed, 12 Jun 2024 18:59:59 +0800 Subject: [PATCH 10/22] bump opendbc --- opendbc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc b/opendbc index c3367d0d00a4f3..d025e4f4a0d595 160000 --- a/opendbc +++ b/opendbc @@ -1 +1 @@ -Subproject commit c3367d0d00a4f3c8461e3d37638a6f16b3f39aa6 +Subproject commit d025e4f4a0d595238e72a71300b4d45b8a4685ff From fc97bbdf1467a1189a06ce6affb498fbf1f364c7 Mon Sep 17 00:00:00 2001 From: deanlee Date: Wed, 12 Jun 2024 19:09:05 +0800 Subject: [PATCH 11/22] bump opendbc --- opendbc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc b/opendbc index d025e4f4a0d595..986dd5da073962 160000 --- a/opendbc +++ b/opendbc @@ -1 +1 @@ -Subproject commit d025e4f4a0d595238e72a71300b4d45b8a4685ff +Subproject commit 986dd5da073962bb79cc35fe89586e3d67335c55 From 1ac4ff2f6c6ba441f399690944e328f649d78b07 Mon Sep 17 00:00:00 2001 From: deanlee Date: Wed, 12 Jun 2024 19:40:28 +0800 Subject: [PATCH 12/22] fix test_models --- selfdrive/car/tests/test_models.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/selfdrive/car/tests/test_models.py b/selfdrive/car/tests/test_models.py index b5d75e665b0582..ffff334841895a 100644 --- a/selfdrive/car/tests/test_models.py +++ b/selfdrive/car/tests/test_models.py @@ -20,6 +20,7 @@ from openpilot.selfdrive.car.honda.values import CAR as HONDA, HondaFlags from openpilot.selfdrive.car.tests.routes import non_tested_cars, routes, CarTestRoute from openpilot.selfdrive.car.values import Platform +from openpilot.selfdrive.pandad import can_capnp_to_list from openpilot.selfdrive.test.helpers import read_segment_list from openpilot.system.hardware.hw import DEFAULT_DOWNLOAD_CACHE_ROOT from openpilot.tools.lib.logreader import LogReader, internal_source, openpilotci_source @@ -238,7 +239,7 @@ def test_radar_interface(self): # start parsing CAN messages after we've left ELM mode and can expect CAN traffic error_cnt = 0 for i, msg in enumerate(self.can_msgs[self.elm_frame:]): - rr = RI.update((msg.as_builder().to_bytes(),)) + rr = RI.update(can_capnp_to_list((msg.as_builder().to_bytes(),))) if rr is not None and i > 50: error_cnt += car.RadarData.Error.canError in rr.errors self.assertEqual(error_cnt, 0) From b494b1442e51db25c7e8b6deffcae1149b3ea67b Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Tue, 30 Jul 2024 15:52:53 -0700 Subject: [PATCH 13/22] the interface now has to convert from can capnp to list, so we should include this time --- selfdrive/debug/check_can_parser_performance.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/selfdrive/debug/check_can_parser_performance.py b/selfdrive/debug/check_can_parser_performance.py index 8b9ef068ac0705..07e9c55281a04d 100755 --- a/selfdrive/debug/check_can_parser_performance.py +++ b/selfdrive/debug/check_can_parser_performance.py @@ -26,12 +26,12 @@ class CarModelTestCase(TestCarModelBase): CC = car.CarControl.new_message() ets = [] for _ in tqdm(range(N_RUNS)): - msgs = can_capnp_to_list([m.as_builder().to_bytes() for m in tm.can_msgs]) + msgs = [m.as_builder().to_bytes() for m in tm.can_msgs] start_t = time.process_time_ns() for msg in msgs: for cp in tm.CI.can_parsers: if cp is not None: - cp.update_strings(msg) + cp.update_strings(can_capnp_to_list([msg])) ets.append((time.process_time_ns() - start_t) * 1e-6) print(f'{len(tm.can_msgs)} CAN packets, {N_RUNS} runs') From 177ebaa7c193b5b4d60a21ee664e8edd5182e409 Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Tue, 30 Jul 2024 21:33:00 -0700 Subject: [PATCH 14/22] goes from ~210 to ~240 mean ms real time --- selfdrive/debug/check_can_parser_performance.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/selfdrive/debug/check_can_parser_performance.py b/selfdrive/debug/check_can_parser_performance.py index 07e9c55281a04d..a5155f0126b8dc 100755 --- a/selfdrive/debug/check_can_parser_performance.py +++ b/selfdrive/debug/check_can_parser_performance.py @@ -29,9 +29,10 @@ class CarModelTestCase(TestCarModelBase): msgs = [m.as_builder().to_bytes() for m in tm.can_msgs] start_t = time.process_time_ns() for msg in msgs: + can_list = can_capnp_to_list([msg]) for cp in tm.CI.can_parsers: if cp is not None: - cp.update_strings(can_capnp_to_list([msg])) + cp.update_strings(can_list) ets.append((time.process_time_ns() - start_t) * 1e-6) print(f'{len(tm.can_msgs)} CAN packets, {N_RUNS} runs') From 4273274d17bc30620b97772e2642191184ea6d73 Mon Sep 17 00:00:00 2001 From: deanlee Date: Wed, 31 Jul 2024 12:43:00 +0800 Subject: [PATCH 15/22] remoe busTime --- selfdrive/pandad/pandad_api_impl.pyx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/selfdrive/pandad/pandad_api_impl.pyx b/selfdrive/pandad/pandad_api_impl.pyx index 57614b1b01d8be..9d34ddb6cd57e6 100644 --- a/selfdrive/pandad/pandad_api_impl.pyx +++ b/selfdrive/pandad/pandad_api_impl.pyx @@ -50,7 +50,7 @@ def can_capnp_to_list(strings, sendcan=False): cdef vector[CanData].iterator it = data.begin() while it != data.end(): d = &deref(it) - frames = [[f.address, 0, (&f.dat[0])[:f.dat.size()], f.src] for f in d.frames] + frames = [[f.address, (&f.dat[0])[:f.dat.size()], f.src] for f in d.frames] result.append([d.nanos, frames]) preinc(it) return result From 1b45304555be5d6d89d2be1abd492c10b24319c9 Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Tue, 30 Jul 2024 21:53:47 -0700 Subject: [PATCH 16/22] lowercase sendcan --- selfdrive/pandad/can_list_to_can_capnp.cc | 4 ++-- selfdrive/pandad/pandad_api_impl.pyx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/selfdrive/pandad/can_list_to_can_capnp.cc b/selfdrive/pandad/can_list_to_can_capnp.cc index 83068e77985b35..ad2393b986ccff 100644 --- a/selfdrive/pandad/can_list_to_can_capnp.cc +++ b/selfdrive/pandad/can_list_to_can_capnp.cc @@ -2,11 +2,11 @@ #include "selfdrive/pandad/panda.h" #include "opendbc/can/common.h" -void can_list_to_can_capnp_cpp(const std::vector &can_list, std::string &out, bool sendCan, bool valid) { +void can_list_to_can_capnp_cpp(const std::vector &can_list, std::string &out, bool sendcan, bool valid) { MessageBuilder msg; auto event = msg.initEvent(valid); - auto canData = sendCan ? event.initSendcan(can_list.size()) : event.initCan(can_list.size()); + auto canData = sendcan ? event.initSendcan(can_list.size()) : event.initCan(can_list.size()); int j = 0; for (auto it = can_list.begin(); it != can_list.end(); it++, j++) { auto c = canData[j]; diff --git a/selfdrive/pandad/pandad_api_impl.pyx b/selfdrive/pandad/pandad_api_impl.pyx index 9d34ddb6cd57e6..5e01fc8614ad56 100644 --- a/selfdrive/pandad/pandad_api_impl.pyx +++ b/selfdrive/pandad/pandad_api_impl.pyx @@ -23,7 +23,7 @@ cdef extern from "opendbc/can/common.h": vector[CanFrame] frames cdef extern from "can_list_to_can_capnp.cc": - void can_list_to_can_capnp_cpp(const vector[can_frame] &can_list, string &out, bool sendCan, bool valid) + void can_list_to_can_capnp_cpp(const vector[can_frame] &can_list, string &out, bool sendcan, bool valid) void can_capnp_to_can_list_cpp(const vector[string] &strings, vector[CanData] &can_data, bool sendcan) def can_list_to_can_capnp(can_msgs, msgtype='can', valid=True): From 9a6d885388f5ab16a3f288e04788c3b05b632370 Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Tue, 30 Jul 2024 21:57:25 -0700 Subject: [PATCH 17/22] consistent msgtype --- selfdrive/pandad/pandad_api_impl.pyx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/selfdrive/pandad/pandad_api_impl.pyx b/selfdrive/pandad/pandad_api_impl.pyx index 5e01fc8614ad56..8a12e1c4337b18 100644 --- a/selfdrive/pandad/pandad_api_impl.pyx +++ b/selfdrive/pandad/pandad_api_impl.pyx @@ -41,9 +41,9 @@ def can_list_to_can_capnp(can_msgs, msgtype='can', valid=True): can_list_to_can_capnp_cpp(can_list, out, msgtype == 'sendcan', valid) return out -def can_capnp_to_list(strings, sendcan=False): +def can_capnp_to_list(strings, msgtype='can'): cdef vector[CanData] data - can_capnp_to_can_list_cpp(strings, data, sendcan) + can_capnp_to_can_list_cpp(strings, data, msgtype == 'sendcan') result = [] cdef CanData *d From fc622b9e20d6ab0fd2164aef799ee9252ba7f5e5 Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Tue, 30 Jul 2024 23:25:04 -0700 Subject: [PATCH 18/22] bump --- opendbc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc b/opendbc index c6ba3edd0760a9..379d54be92748c 160000 --- a/opendbc +++ b/opendbc @@ -1 +1 @@ -Subproject commit c6ba3edd0760a9dd9d8f0bebcc4467d310d4fad5 +Subproject commit 379d54be92748cd281df3d3b99bcb836236be9f8 From d6859d8a4f74091248d8888d5d596196d81a5ebc Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Tue, 30 Jul 2024 23:30:23 -0700 Subject: [PATCH 19/22] bump --- opendbc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc b/opendbc index 379d54be92748c..0a095bc1a487a8 160000 --- a/opendbc +++ b/opendbc @@ -1 +1 @@ -Subproject commit 379d54be92748cd281df3d3b99bcb836236be9f8 +Subproject commit 0a095bc1a487a8df669349cc923a9b3984219765 From 49abf6a5c3d67abdef923e68921fed9e5cbe4cda Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Wed, 31 Jul 2024 00:08:05 -0700 Subject: [PATCH 20/22] not used in lat_mpc --- selfdrive/controls/lib/lateral_mpc_lib/SConscript | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/selfdrive/controls/lib/lateral_mpc_lib/SConscript b/selfdrive/controls/lib/lateral_mpc_lib/SConscript index 7ece5ca7e69cc7..2c03da06a626df 100644 --- a/selfdrive/controls/lib/lateral_mpc_lib/SConscript +++ b/selfdrive/controls/lib/lateral_mpc_lib/SConscript @@ -1,4 +1,4 @@ -Import('env', 'envCython', 'arch', 'msgq_python', 'common_python', 'opendbc_python', 'pandad_python', 'np_version') +Import('env', 'envCython', 'arch', 'msgq_python', 'common_python', 'opendbc_python', 'np_version') gen = "c_generated_code" @@ -60,7 +60,7 @@ lenv.Clean(generated_files, Dir(gen)) generated_lat = lenv.Command(generated_files, source_list, f"cd {Dir('.').abspath} && python3 lat_mpc.py") -lenv.Depends(generated_lat, [msgq_python, common_python, opendbc_python, pandad_python]) +lenv.Depends(generated_lat, [msgq_python, common_python, opendbc_python]) lenv["CFLAGS"].append("-DACADOS_WITH_QPOASES") lenv["CXXFLAGS"].append("-DACADOS_WITH_QPOASES") From d879376054438d34b77f2595f09e51f950fcb419 Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Wed, 31 Jul 2024 00:08:41 -0700 Subject: [PATCH 21/22] space --- selfdrive/pandad/SConscript | 1 + 1 file changed, 1 insertion(+) diff --git a/selfdrive/pandad/SConscript b/selfdrive/pandad/SConscript index 160a7916b08551..dcc1f9811ee0bd 100644 --- a/selfdrive/pandad/SConscript +++ b/selfdrive/pandad/SConscript @@ -8,5 +8,6 @@ env.Library('libcan_list_to_can_capnp', ['can_list_to_can_capnp.cc']) pandad_python = envCython.Program('pandad_api_impl.so', 'pandad_api_impl.pyx', LIBS=["can_list_to_can_capnp", 'capnp', 'kj'] + envCython["LIBS"]) Export('pandad_python') + if GetOption('extras'): env.Program('tests/test_pandad_usbprotocol', ['tests/test_pandad_usbprotocol.cc'], LIBS=[panda] + libs) From eb9a39c716a28f87fd48579db6218f38c5c3d107 Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Wed, 31 Jul 2024 00:13:09 -0700 Subject: [PATCH 22/22] bump to master --- opendbc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc b/opendbc index 0a095bc1a487a8..39a5345924d241 160000 --- a/opendbc +++ b/opendbc @@ -1 +1 @@ -Subproject commit 0a095bc1a487a8df669349cc923a9b3984219765 +Subproject commit 39a5345924d2414f05c40d258d359eb8412a0b03