From 47813ae8b52050237e6c39314bc0c7338daf7b56 Mon Sep 17 00:00:00 2001 From: Dean Lee Date: Fri, 13 Oct 2023 02:09:17 +0800 Subject: [PATCH 01/18] cabana: fix crash when switching dbc file (#30227) fix crash when switching dbc file --- tools/cabana/chart/chartswidget.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tools/cabana/chart/chartswidget.cc b/tools/cabana/chart/chartswidget.cc index 83991d914f..347a6037ec 100644 --- a/tools/cabana/chart/chartswidget.cc +++ b/tools/cabana/chart/chartswidget.cc @@ -405,16 +405,15 @@ void ChartsWidget::removeAll() { tabbar->removeTab(1); } tab_charts.clear(); - zoomReset(); if (!charts.isEmpty()) { for (auto c : charts) { delete c; } charts.clear(); - updateToolBar(); emit seriesChanged(); } + zoomReset(); } void ChartsWidget::alignCharts() { From 818d29818fcb54f84e8fbb366fbe6913c70be2b9 Mon Sep 17 00:00:00 2001 From: Dean Lee Date: Fri, 13 Oct 2023 02:09:32 +0800 Subject: [PATCH 02/18] cabana: reduce minimum size (#30223) reduce minimumsize --- tools/cabana/binaryview.cc | 1 + tools/cabana/chart/chartswidget.cc | 4 ++++ tools/cabana/chart/chartswidget.h | 1 + tools/cabana/detailwidget.cc | 6 ++++-- tools/cabana/videowidget.cc | 16 ++++++++++------ tools/cabana/videowidget.h | 6 +++--- 6 files changed, 23 insertions(+), 11 deletions(-) diff --git a/tools/cabana/binaryview.cc b/tools/cabana/binaryview.cc index e7edc0ecb9..5bc88f2d4e 100644 --- a/tools/cabana/binaryview.cc +++ b/tools/cabana/binaryview.cc @@ -24,6 +24,7 @@ BinaryView::BinaryView(QWidget *parent) : QTableView(parent) { delegate = new BinaryItemDelegate(this); setItemDelegate(delegate); horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + horizontalHeader()->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont)); verticalHeader()->setSectionsClickable(false); verticalHeader()->setSectionResizeMode(QHeaderView::Fixed); verticalHeader()->setDefaultSectionSize(CELL_HEIGHT); diff --git a/tools/cabana/chart/chartswidget.cc b/tools/cabana/chart/chartswidget.cc index 347a6037ec..64eb99325c 100644 --- a/tools/cabana/chart/chartswidget.cc +++ b/tools/cabana/chart/chartswidget.cc @@ -370,6 +370,10 @@ void ChartsWidget::doAutoScroll() { } } +QSize ChartsWidget::minimumSizeHint() const { + return QSize(CHART_MIN_WIDTH, QWidget::minimumSizeHint().height()); +} + void ChartsWidget::resizeEvent(QResizeEvent *event) { QWidget::resizeEvent(event); updateLayout(); diff --git a/tools/cabana/chart/chartswidget.h b/tools/cabana/chart/chartswidget.h index 3541f8d96e..6a7b535543 100644 --- a/tools/cabana/chart/chartswidget.h +++ b/tools/cabana/chart/chartswidget.h @@ -54,6 +54,7 @@ signals: void seriesChanged(); private: + QSize minimumSizeHint() const override; void resizeEvent(QResizeEvent *event) override; bool event(QEvent *event) override; void alignCharts(); diff --git a/tools/cabana/detailwidget.cc b/tools/cabana/detailwidget.cc index d70aeff0c8..87fa267d5a 100644 --- a/tools/cabana/detailwidget.cc +++ b/tools/cabana/detailwidget.cc @@ -134,11 +134,13 @@ void DetailWidget::refresh() { for (auto s : binary_view->getOverlappingSignals()) { warnings.push_back(tr("%1 has overlapping bits.").arg(s->name)); } - name_label->setText(QString("%1 (%2)").arg(msgName(msg_id), msg->transmitter)); } else { warnings.push_back(tr("Drag-Select in binary view to create new signal.")); - name_label->setText(msgName(msg_id)); } + + QString msg_name = msg ? QString("%1 (%2)").arg(msg->name, msg->transmitter) : msgName(msg_id); + name_label->setText(msg_name); + name_label->setToolTip(msg_name); remove_btn->setEnabled(msg != nullptr); if (!warnings.isEmpty()) { diff --git a/tools/cabana/videowidget.cc b/tools/cabana/videowidget.cc index e7845bca47..7e051ef3b9 100644 --- a/tools/cabana/videowidget.cc +++ b/tools/cabana/videowidget.cc @@ -39,13 +39,15 @@ VideoWidget::VideoWidget(QWidget *parent) : QFrame(parent) { group->setExclusive(true); QHBoxLayout *control_layout = new QHBoxLayout(); - play_btn = new QPushButton(); + play_btn = new QToolButton(); play_btn->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); control_layout->addWidget(play_btn); if (can->liveStreaming()) { - control_layout->addWidget(skip_to_end_btn = new QPushButton(utils::icon("skip-end-fill"), {})); + control_layout->addWidget(skip_to_end_btn = new QToolButton(this)); + skip_to_end_btn->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); + skip_to_end_btn->setIcon(utils::icon("skip-end-fill")); skip_to_end_btn->setToolTip(tr("Skip to the end")); - QObject::connect(skip_to_end_btn, &QPushButton::clicked, [group]() { + QObject::connect(skip_to_end_btn, &QToolButton::clicked, [group]() { // set speed to 1.0 group->buttons()[2]->click(); can->pause(false); @@ -54,9 +56,11 @@ VideoWidget::VideoWidget(QWidget *parent) : QFrame(parent) { } for (float speed : {0.1, 0.5, 1., 2.}) { - QPushButton *btn = new QPushButton(QString("%1x").arg(speed), this); + QToolButton *btn = new QToolButton(this); + btn->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); + btn->setText(QString("%1x").arg(speed)); btn->setCheckable(true); - QObject::connect(btn, &QPushButton::clicked, [speed]() { can->setSpeed(speed); }); + QObject::connect(btn, &QToolButton::clicked, [speed]() { can->setSpeed(speed); }); control_layout->addWidget(btn); group->addButton(btn); if (speed == 1.0) btn->setChecked(true); @@ -64,7 +68,7 @@ VideoWidget::VideoWidget(QWidget *parent) : QFrame(parent) { main_layout->addLayout(control_layout); setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum); - QObject::connect(play_btn, &QPushButton::clicked, []() { can->pause(!can->isPaused()); }); + QObject::connect(play_btn, &QToolButton::clicked, []() { can->pause(!can->isPaused()); }); QObject::connect(can, &AbstractStream::paused, this, &VideoWidget::updatePlayBtnState); QObject::connect(can, &AbstractStream::resume, this, &VideoWidget::updatePlayBtnState); QObject::connect(&settings, &Settings::changed, this, &VideoWidget::updatePlayBtnState); diff --git a/tools/cabana/videowidget.h b/tools/cabana/videowidget.h index bece039a21..aca44d0ac1 100644 --- a/tools/cabana/videowidget.h +++ b/tools/cabana/videowidget.h @@ -9,8 +9,8 @@ #include #include -#include #include +#include #include "selfdrive/ui/qt/widgets/cameraview.h" #include "tools/cabana/streams/abstractstream.h" @@ -80,8 +80,8 @@ protected: double maximum_time = 0; QLabel *end_time_label; QLabel *time_label; - QPushButton *play_btn; - QPushButton *skip_to_end_btn = nullptr; + QToolButton *play_btn; + QToolButton *skip_to_end_btn = nullptr; InfoLabel *alert_label; Slider *slider; }; From 9e24a11f17117caebc595165f59bfc0109af0287 Mon Sep 17 00:00:00 2001 From: Vivek Aithal Date: Fri, 13 Oct 2023 17:24:04 -0700 Subject: [PATCH 03/18] torqued: Refactor to share code with magd (#30238) * refactor to extract common functions and classes out * Add helpers.py to release files * refactor --- release/files_common | 1 + selfdrive/locationd/helpers.py | 50 +++++++++++++++++++++++++++++++++ selfdrive/locationd/torqued.py | 51 +++++----------------------------- 3 files changed, 58 insertions(+), 44 deletions(-) create mode 100644 selfdrive/locationd/helpers.py diff --git a/release/files_common b/release/files_common index ef9f5266e1..7fa7ad50d2 100644 --- a/release/files_common +++ b/release/files_common @@ -246,6 +246,7 @@ selfdrive/locationd/models/gnss_helpers.py selfdrive/locationd/torqued.py selfdrive/locationd/calibrationd.py +selfdrive/locationd/helpers.py system/logcatd/.gitignore system/logcatd/SConscript diff --git a/selfdrive/locationd/helpers.py b/selfdrive/locationd/helpers.py new file mode 100644 index 0000000000..f41b72c703 --- /dev/null +++ b/selfdrive/locationd/helpers.py @@ -0,0 +1,50 @@ +import numpy as np +from typing import List, Optional, Tuple, Any + + +class NPQueue: + def __init__(self, maxlen: int, rowsize: int) -> None: + self.maxlen = maxlen + self.arr = np.empty((0, rowsize)) + + def __len__(self) -> int: + return len(self.arr) + + def append(self, pt: List[float]) -> None: + if len(self.arr) < self.maxlen: + self.arr = np.append(self.arr, [pt], axis=0) + else: + self.arr[:-1] = self.arr[1:] + self.arr[-1] = pt + + +class PointBuckets: + def __init__(self, x_bounds: List[Tuple[float, float]], min_points: List[float], min_points_total: int, points_per_bucket: int, rowsize: int) -> None: + self.x_bounds = x_bounds + self.buckets = {bounds: NPQueue(maxlen=points_per_bucket, rowsize=rowsize) for bounds in x_bounds} + self.buckets_min_points = dict(zip(x_bounds, min_points, strict=True)) + self.min_points_total = min_points_total + + def bucket_lengths(self) -> List[int]: + return [len(v) for v in self.buckets.values()] + + def __len__(self) -> int: + return sum(self.bucket_lengths()) + + def is_valid(self) -> bool: + individual_buckets_valid = all(len(v) >= min_pts for v, min_pts in zip(self.buckets.values(), self.buckets_min_points.values(), strict=True)) + total_points_valid = self.__len__() >= self.min_points_total + return individual_buckets_valid and total_points_valid + + def add_point(self, x: float, y: float, bucket_val: float) -> None: + raise NotImplementedError + + def get_points(self, num_points: Optional[int] = None) -> Any: + points = np.vstack([x.arr for x in self.buckets.values()]) + if num_points is None: + return points + return points[np.random.choice(np.arange(len(points)), min(len(points), num_points), replace=False)] + + def load_points(self, points: List[List[float]]) -> None: + for point in points: + self.add_point(*point) diff --git a/selfdrive/locationd/torqued.py b/selfdrive/locationd/torqued.py index 0b624d5790..719651bcb1 100755 --- a/selfdrive/locationd/torqued.py +++ b/selfdrive/locationd/torqued.py @@ -12,6 +12,7 @@ from openpilot.common.realtime import config_realtime_process, DT_MDL from openpilot.common.filter_simple import FirstOrderFilter from openpilot.system.swaglog import cloudlog from openpilot.selfdrive.controls.lib.vehicle_model import ACCELERATION_DUE_TO_GRAVITY +from openpilot.selfdrive.locationd.helpers import PointBuckets HISTORY = 5 # secs POINTS_PER_BUCKET = 1500 @@ -43,55 +44,13 @@ def slope2rot(slope): return np.array([[cos, -sin], [sin, cos]]) -class NPQueue: - def __init__(self, maxlen, rowsize): - self.maxlen = maxlen - self.arr = np.empty((0, rowsize)) - - def __len__(self): - return len(self.arr) - - def append(self, pt): - if len(self.arr) < self.maxlen: - self.arr = np.append(self.arr, [pt], axis=0) - else: - self.arr[:-1] = self.arr[1:] - self.arr[-1] = pt - - -class PointBuckets: - def __init__(self, x_bounds, min_points, min_points_total): - self.x_bounds = x_bounds - self.buckets = {bounds: NPQueue(maxlen=POINTS_PER_BUCKET, rowsize=3) for bounds in x_bounds} - self.buckets_min_points = dict(zip(x_bounds, min_points, strict=True)) - self.min_points_total = min_points_total - - def bucket_lengths(self): - return [len(v) for v in self.buckets.values()] - - def __len__(self): - return sum(self.bucket_lengths()) - - def is_valid(self): - return all(len(v) >= min_pts for v, min_pts in zip(self.buckets.values(), self.buckets_min_points.values(), strict=True)) \ - and (self.__len__() >= self.min_points_total) - +class TorqueBuckets(PointBuckets): def add_point(self, x, y): for bound_min, bound_max in self.x_bounds: if (x >= bound_min) and (x < bound_max): self.buckets[(bound_min, bound_max)].append([x, 1.0, y]) break - def get_points(self, num_points=None): - points = np.vstack([x.arr for x in self.buckets.values()]) - if num_points is None: - return points - return points[np.random.choice(np.arange(len(points)), min(len(points), num_points), replace=False)] - - def load_points(self, points): - for x, y in points: - self.add_point(x, y) - class TorqueEstimator: def __init__(self, CP, decimated=False): @@ -175,7 +134,11 @@ class TorqueEstimator: self.resets += 1.0 self.decay = MIN_FILTER_DECAY self.raw_points = defaultdict(lambda: deque(maxlen=self.hist_len)) - self.filtered_points = PointBuckets(x_bounds=STEER_BUCKET_BOUNDS, min_points=self.min_bucket_points, min_points_total=self.min_points_total) + self.filtered_points = TorqueBuckets(x_bounds=STEER_BUCKET_BOUNDS, + min_points=self.min_bucket_points, + min_points_total=self.min_points_total, + points_per_bucket=POINTS_PER_BUCKET, + rowsize=3) def estimate_params(self): points = self.filtered_points.get_points(self.fit_points) From b68cfbb332af7ae9182f2806bc7b8dc46e6c8bc0 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Fri, 13 Oct 2023 23:27:04 -0700 Subject: [PATCH 04/18] cleanup old sm pm args (#30241) * cleanup sm pm * fix controlsd * fix --- selfdrive/controls/controlsd.py | 36 ++++++++++++---------------- selfdrive/controls/plannerd.py | 15 +++++------- selfdrive/locationd/laikad.py | 5 ++-- selfdrive/locationd/paramsd.py | 8 +++---- selfdrive/locationd/torqued.py | 9 +++---- selfdrive/monitoring/dmonitoringd.py | 13 ++++------ selfdrive/navd/navd.py | 8 +++---- system/micd.py | 11 ++++----- 8 files changed, 41 insertions(+), 64 deletions(-) diff --git a/selfdrive/controls/controlsd.py b/selfdrive/controls/controlsd.py index 4f3b6a9128..d800d895d3 100755 --- a/selfdrive/controls/controlsd.py +++ b/selfdrive/controls/controlsd.py @@ -56,39 +56,33 @@ ENABLED_STATES = (State.preEnabled, *ACTIVE_STATES) class Controls: - def __init__(self, sm=None, pm=None, can_sock=None, CI=None): + def __init__(self, CI=None): config_realtime_process(4, Priority.CTRL_HIGH) # Ensure the current branch is cached, otherwise the first iteration of controlsd lags self.branch = get_short_branch("") # Setup sockets - self.pm = pm - if self.pm is None: - self.pm = messaging.PubMaster(['sendcan', 'controlsState', 'carState', - 'carControl', 'carEvents', 'carParams']) + self.pm = messaging.PubMaster(['sendcan', 'controlsState', 'carState', + 'carControl', 'carEvents', 'carParams']) self.sensor_packets = ["accelerometer", "gyroscope"] self.camera_packets = ["roadCameraState", "driverCameraState", "wideRoadCameraState"] - self.can_sock = can_sock - if can_sock is None: - can_timeout = None if os.environ.get('NO_CAN_TIMEOUT', False) else 20 - self.can_sock = messaging.sub_sock('can', timeout=can_timeout) + can_timeout = None if os.environ.get('NO_CAN_TIMEOUT', False) else 20 + self.can_sock = messaging.sub_sock('can', timeout=can_timeout) self.log_sock = messaging.sub_sock('androidLog') self.params = Params() - self.sm = sm - if self.sm is None: - ignore = self.sensor_packets + ['testJoystick'] - if SIMULATION: - ignore += ['driverCameraState', 'managerState'] - self.sm = messaging.SubMaster(['deviceState', 'pandaStates', 'peripheralState', 'modelV2', 'liveCalibration', - 'driverMonitoringState', 'longitudinalPlan', 'lateralPlan', 'liveLocationKalman', - 'managerState', 'liveParameters', 'radarState', 'liveTorqueParameters', - 'testJoystick'] + self.camera_packets + self.sensor_packets, - ignore_alive=ignore, ignore_avg_freq=['radarState', 'testJoystick']) + ignore = self.sensor_packets + ['testJoystick'] + if SIMULATION: + ignore += ['driverCameraState', 'managerState'] + self.sm = messaging.SubMaster(['deviceState', 'pandaStates', 'peripheralState', 'modelV2', 'liveCalibration', + 'driverMonitoringState', 'longitudinalPlan', 'lateralPlan', 'liveLocationKalman', + 'managerState', 'liveParameters', 'radarState', 'liveTorqueParameters', + 'testJoystick'] + self.camera_packets + self.sensor_packets, + ignore_alive=ignore, ignore_avg_freq=['radarState', 'testJoystick']) if CI is None: # wait for one pandaState and one CAN packet @@ -879,8 +873,8 @@ class Controls: self.prof.display() -def main(sm=None, pm=None, logcan=None): - controls = Controls(sm, pm, logcan) +def main(): + controls = Controls() controls.controlsd_thread() diff --git a/selfdrive/controls/plannerd.py b/selfdrive/controls/plannerd.py index 2b23a0440e..ed1a2fa09a 100755 --- a/selfdrive/controls/plannerd.py +++ b/selfdrive/controls/plannerd.py @@ -27,7 +27,7 @@ def publish_ui_plan(sm, pm, lateral_planner, longitudinal_planner): uiPlan.accel = longitudinal_planner.a_desired_trajectory_full.tolist() pm.send('uiPlan', ui_send) -def plannerd_thread(sm=None, pm=None): +def plannerd_thread(): config_realtime_process(5, Priority.CTRL_LOW) cloudlog.info("plannerd is waiting for CarParams") @@ -41,12 +41,9 @@ def plannerd_thread(sm=None, pm=None): longitudinal_planner = LongitudinalPlanner(CP) lateral_planner = LateralPlanner(CP, debug=debug_mode) - if sm is None: - sm = messaging.SubMaster(['carControl', 'carState', 'controlsState', 'radarState', 'modelV2'], - poll=['radarState', 'modelV2'], ignore_avg_freq=['radarState']) - - if pm is None: - pm = messaging.PubMaster(['longitudinalPlan', 'lateralPlan', 'uiPlan']) + pm = messaging.PubMaster(['longitudinalPlan', 'lateralPlan', 'uiPlan']) + sm = messaging.SubMaster(['carControl', 'carState', 'controlsState', 'radarState', 'modelV2'], + poll=['radarState', 'modelV2'], ignore_avg_freq=['radarState']) while True: sm.update() @@ -58,8 +55,8 @@ def plannerd_thread(sm=None, pm=None): longitudinal_planner.publish(sm, pm) publish_ui_plan(sm, pm, lateral_planner, longitudinal_planner) -def main(sm=None, pm=None): - plannerd_thread(sm, pm) +def main(): + plannerd_thread() if __name__ == "__main__": diff --git a/selfdrive/locationd/laikad.py b/selfdrive/locationd/laikad.py index f00595618e..10c0e4a7b0 100755 --- a/selfdrive/locationd/laikad.py +++ b/selfdrive/locationd/laikad.py @@ -440,7 +440,7 @@ def clear_tmp_cache(): os.mkdir(Paths.download_cache_root()) -def main(sm=None, pm=None): +def main(): #clear_tmp_cache() use_qcom = not Params().get_bool("UbloxAvailable") @@ -449,8 +449,7 @@ def main(sm=None, pm=None): else: raw_name = "ubloxGnss" raw_gnss_sock = messaging.sub_sock(raw_name, conflate=False) - if pm is None: - pm = messaging.PubMaster(['gnssMeasurements']) + pm = messaging.PubMaster(['gnssMeasurements']) # disable until set as main gps source, to better analyze startup time # TODO ensure low CPU usage before enabling diff --git a/selfdrive/locationd/paramsd.py b/selfdrive/locationd/paramsd.py index 93a5b47f28..0e779c9e3e 100755 --- a/selfdrive/locationd/paramsd.py +++ b/selfdrive/locationd/paramsd.py @@ -117,16 +117,14 @@ def check_valid_with_hysteresis(current_valid: bool, val: float, threshold: floa return current_valid -def main(sm=None, pm=None): +def main(): config_realtime_process([0, 1, 2, 3], 5) DEBUG = bool(int(os.getenv("DEBUG", "0"))) REPLAY = bool(int(os.getenv("REPLAY", "0"))) - if sm is None: - sm = messaging.SubMaster(['liveLocationKalman', 'carState'], poll=['liveLocationKalman']) - if pm is None: - pm = messaging.PubMaster(['liveParameters']) + pm = messaging.PubMaster(['liveParameters']) + sm = messaging.SubMaster(['liveLocationKalman', 'carState'], poll=['liveLocationKalman']) params_reader = Params() # wait for stats about the car to come in from controls diff --git a/selfdrive/locationd/torqued.py b/selfdrive/locationd/torqued.py index 719651bcb1..829f8db417 100755 --- a/selfdrive/locationd/torqued.py +++ b/selfdrive/locationd/torqued.py @@ -218,14 +218,11 @@ class TorqueEstimator: return msg -def main(sm=None, pm=None): +def main(): config_realtime_process([0, 1, 2, 3], 5) - if sm is None: - sm = messaging.SubMaster(['carControl', 'carState', 'liveLocationKalman'], poll=['liveLocationKalman']) - - if pm is None: - pm = messaging.PubMaster(['liveTorqueParameters']) + pm = messaging.PubMaster(['liveTorqueParameters']) + sm = messaging.SubMaster(['carControl', 'carState', 'liveLocationKalman'], poll=['liveLocationKalman']) params = Params() with car.CarParams.from_bytes(params.get("CarParams", block=True)) as CP: diff --git a/selfdrive/monitoring/dmonitoringd.py b/selfdrive/monitoring/dmonitoringd.py index c7cff88f3e..ff2ee71e74 100755 --- a/selfdrive/monitoring/dmonitoringd.py +++ b/selfdrive/monitoring/dmonitoringd.py @@ -10,15 +10,12 @@ from openpilot.selfdrive.controls.lib.events import Events from openpilot.selfdrive.monitoring.driver_monitor import DriverStatus -def dmonitoringd_thread(sm=None, pm=None): +def dmonitoringd_thread(): gc.disable() set_realtime_priority(2) - if pm is None: - pm = messaging.PubMaster(['driverMonitoringState']) - - if sm is None: - sm = messaging.SubMaster(['driverStateV2', 'liveCalibration', 'carState', 'controlsState', 'modelV2'], poll=['driverStateV2']) + pm = messaging.PubMaster(['driverMonitoringState']) + sm = messaging.SubMaster(['driverStateV2', 'liveCalibration', 'carState', 'controlsState', 'modelV2'], poll=['driverStateV2']) driver_status = DriverStatus(rhd_saved=Params().get_bool("IsRhdDetected")) @@ -89,8 +86,8 @@ def dmonitoringd_thread(sm=None, pm=None): driver_status.wheel_on_right == (driver_status.wheelpos_learner.filtered_stat.M > driver_status.settings._WHEELPOS_THRESHOLD)): put_bool_nonblocking("IsRhdDetected", driver_status.wheel_on_right) -def main(sm=None, pm=None): - dmonitoringd_thread(sm, pm) +def main(): + dmonitoringd_thread() if __name__ == '__main__': diff --git a/selfdrive/navd/navd.py b/selfdrive/navd/navd.py index 0ccd1f144b..da2b8c06b9 100755 --- a/selfdrive/navd/navd.py +++ b/selfdrive/navd/navd.py @@ -344,11 +344,9 @@ class RouteEngine: # TODO: Check for going wrong way in segment -def main(sm=None, pm=None): - if sm is None: - sm = messaging.SubMaster(['liveLocationKalman', 'managerState']) - if pm is None: - pm = messaging.PubMaster(['navInstruction', 'navRoute']) +def main(): + pm = messaging.PubMaster(['navInstruction', 'navRoute']) + sm = messaging.SubMaster(['liveLocationKalman', 'managerState']) rk = Ratekeeper(1.0) route_engine = RouteEngine(sm, pm) diff --git a/system/micd.py b/system/micd.py index c7af1b0ad2..72f3b8b490 100755 --- a/system/micd.py +++ b/system/micd.py @@ -40,9 +40,9 @@ def apply_a_weighting(measurements: np.ndarray) -> np.ndarray: class Mic: - def __init__(self, pm): - self.pm = pm + def __init__(self): self.rk = Ratekeeper(RATE) + self.pm = messaging.PubMaster(['microphone']) self.measurements = np.empty(0) @@ -93,11 +93,8 @@ class Mic: self.update() -def main(pm=None): - if pm is None: - pm = messaging.PubMaster(['microphone']) - - mic = Mic(pm) +def main(): + mic = Mic() mic.micd_thread() From 383964cd5baba29ac46d596677e1d59689a2194f Mon Sep 17 00:00:00 2001 From: Dean Lee Date: Sun, 15 Oct 2023 00:14:20 +0800 Subject: [PATCH 05/18] ui: make default_face_kpts_3d constexpr (#30239) --- selfdrive/ui/ui.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/selfdrive/ui/ui.h b/selfdrive/ui/ui.h index bd9d059422..2ba0775676 100644 --- a/selfdrive/ui/ui.h +++ b/selfdrive/ui/ui.h @@ -26,7 +26,7 @@ typedef cereal::CarControl::HUDControl::AudibleAlert AudibleAlert; const mat3 DEFAULT_CALIBRATION = {{ 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0 }}; -const vec3 default_face_kpts_3d[] = { +constexpr vec3 default_face_kpts_3d[] = { {-5.98, -51.20, 8.00}, {-17.64, -49.14, 8.00}, {-23.81, -46.40, 8.00}, {-29.98, -40.91, 8.00}, {-32.04, -37.49, 8.00}, {-34.10, -32.00, 8.00}, {-36.16, -21.03, 8.00}, {-36.16, 6.40, 8.00}, {-35.47, 10.51, 8.00}, {-32.73, 19.43, 8.00}, {-29.30, 26.29, 8.00}, {-24.50, 33.83, 8.00}, {-19.01, 41.37, 8.00}, {-14.21, 46.17, 8.00}, {-12.16, 47.54, 8.00}, From f0aa63181804259c5cea20b9d608bdbe9db6b340 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sat, 14 Oct 2023 20:39:15 -0700 Subject: [PATCH 06/18] cleanup up old lib64 references (#30246) * cleanup sensord * rm rest * fix that * update that --- release/files_common | 1 - selfdrive/test/test_onroad.py | 2 +- selfdrive/ui/soundd/soundd | 1 - selfdrive/ui/spinner | 1 - selfdrive/ui/text | 1 - selfdrive/ui/ui | 1 - system/sensord/.gitignore | 2 +- system/sensord/SConscript | 2 +- system/sensord/sensord | 4 ---- system/sensord/tests/test_sensord.py | 2 +- 10 files changed, 4 insertions(+), 13 deletions(-) delete mode 100755 system/sensord/sensord diff --git a/release/files_common b/release/files_common index 7fa7ad50d2..c573ea4508 100644 --- a/release/files_common +++ b/release/files_common @@ -285,7 +285,6 @@ system/sensord/SConscript system/sensord/sensors_qcom2.cc system/sensord/sensors/*.cc system/sensord/sensors/*.h -system/sensord/sensord system/sensord/pigeond.py selfdrive/thermald/thermald.py diff --git a/selfdrive/test/test_onroad.py b/selfdrive/test/test_onroad.py index 894ab15c12..230a96ddad 100755 --- a/selfdrive/test/test_onroad.py +++ b/selfdrive/test/test_onroad.py @@ -34,7 +34,7 @@ PROCS = { "selfdrive.controls.plannerd": 16.5, "./_ui": 18.0, "selfdrive.locationd.paramsd": 9.0, - "./_sensord": 7.0, + "./sensord": 7.0, "selfdrive.controls.radard": 4.5, "selfdrive.modeld.modeld": 8.0, "selfdrive.modeld.dmonitoringmodeld": 8.0, diff --git a/selfdrive/ui/soundd/soundd b/selfdrive/ui/soundd/soundd index 66dda46d5b..9b7a32fec9 100755 --- a/selfdrive/ui/soundd/soundd +++ b/selfdrive/ui/soundd/soundd @@ -1,5 +1,4 @@ #!/bin/sh cd "$(dirname "$0")" -export LD_LIBRARY_PATH="/system/lib64:$LD_LIBRARY_PATH" export QT_QPA_PLATFORM="offscreen" exec ./_soundd diff --git a/selfdrive/ui/spinner b/selfdrive/ui/spinner index 6c8e533cc8..35feab3f7e 100755 --- a/selfdrive/ui/spinner +++ b/selfdrive/ui/spinner @@ -4,5 +4,4 @@ if [ -f /TICI ] && [ ! -f qt/spinner ]; then cp qt/spinner_larch64 qt/spinner fi -export LD_LIBRARY_PATH="/system/lib64:$LD_LIBRARY_PATH" exec ./qt/spinner "$1" diff --git a/selfdrive/ui/text b/selfdrive/ui/text index 2577e3006b..b44bec42bd 100755 --- a/selfdrive/ui/text +++ b/selfdrive/ui/text @@ -4,5 +4,4 @@ if [ -f /TICI ] && [ ! -f qt/text ]; then cp qt/text_larch64 qt/text fi -export LD_LIBRARY_PATH="/system/lib64:$LD_LIBRARY_PATH" exec ./qt/text "$1" diff --git a/selfdrive/ui/ui b/selfdrive/ui/ui index c9f81c0539..acb2a705a8 100755 --- a/selfdrive/ui/ui +++ b/selfdrive/ui/ui @@ -1,5 +1,4 @@ #!/bin/sh cd "$(dirname "$0")" -export LD_LIBRARY_PATH="/system/lib64:$LD_LIBRARY_PATH" export QT_DBL_CLICK_DIST=150 exec ./_ui diff --git a/system/sensord/.gitignore b/system/sensord/.gitignore index e9b8071b4b..e17675e254 100644 --- a/system/sensord/.gitignore +++ b/system/sensord/.gitignore @@ -1 +1 @@ -_sensord +sensord diff --git a/system/sensord/SConscript b/system/sensord/SConscript index 63d1d0d690..7974eb07ae 100644 --- a/system/sensord/SConscript +++ b/system/sensord/SConscript @@ -14,4 +14,4 @@ sensors = [ libs = [common, cereal, messaging, 'capnp', 'zmq', 'kj', 'pthread'] if arch == "larch64": libs.append('i2c') -env.Program('_sensord', ['sensors_qcom2.cc'] + sensors, LIBS=libs) +env.Program('sensord', ['sensors_qcom2.cc'] + sensors, LIBS=libs) diff --git a/system/sensord/sensord b/system/sensord/sensord deleted file mode 100755 index 9ea848d577..0000000000 --- a/system/sensord/sensord +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -cd "$(dirname "$0")" -export LD_LIBRARY_PATH="/system/lib64:$LD_LIBRARY_PATH" -exec ./_sensord diff --git a/system/sensord/tests/test_sensord.py b/system/sensord/tests/test_sensord.py index d9743a14ea..fba3ef79a4 100755 --- a/system/sensord/tests/test_sensord.py +++ b/system/sensord/tests/test_sensord.py @@ -108,7 +108,7 @@ class TestSensord(unittest.TestCase): os.environ["LSM_SELF_TEST"] = "1" # read initial sensor values every test case can use - os.system("pkill -f ./_sensord") + os.system("pkill -f ./sensord") try: managed_processes["sensord"].start() cls.sample_secs = int(os.getenv("SAMPLE_SECS", "10")) From f8a7def5154acbff3d258b306c86a737ebf98f8c Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sat, 14 Oct 2023 23:03:57 -0700 Subject: [PATCH 07/18] docs: move to gh pages (#30242) * mv to pages * cleanup * push static * mv that * new name for the orphan * only master * build op --- .github/workflows/docs.yaml | 62 ++++++++++++++++++++++++++++++ .github/workflows/tools_tests.yaml | 18 --------- docs/docker/Dockerfile | 42 -------------------- docs/docker/nginx.conf | 15 -------- selfdrive/test/docker_common.sh | 3 -- 5 files changed, 62 insertions(+), 78 deletions(-) create mode 100644 .github/workflows/docs.yaml delete mode 100644 docs/docker/Dockerfile delete mode 100644 docs/docker/nginx.conf diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml new file mode 100644 index 0000000000..0a55843cfd --- /dev/null +++ b/.github/workflows/docs.yaml @@ -0,0 +1,62 @@ +name: docs + +on: + push: + branches: + - master + pull_request: + +concurrency: + group: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && github.run_id || github.head_ref || github.ref }}-${{ github.workflow }}-${{ github.event_name }} + cancel-in-progress: true + +env: + BASE_IMAGE: openpilot-base + + BUILD: selfdrive/test/docker_build.sh base + + RUN: docker run --shm-size 1G -v $GITHUB_WORKSPACE:/tmp/openpilot -w /tmp/openpilot -e FILEREADER_CACHE=1 -e PYTHONPATH=/tmp/openpilot -e NUM_JOBS -e JOB_ID -e GITHUB_ACTION -e GITHUB_REF -e GITHUB_HEAD_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -v $GITHUB_WORKSPACE/.ci_cache/scons_cache:/tmp/scons_cache -v $GITHUB_WORKSPACE/.ci_cache/comma_download_cache:/tmp/comma_download_cache -v $GITHUB_WORKSPACE/.ci_cache/openpilot_cache:/tmp/openpilot_cache $BASE_IMAGE /bin/sh -c + +jobs: + docs: + name: build docs + runs-on: ubuntu-20.04 + timeout-minutes: 45 + steps: + - uses: actions/checkout@v4 + with: + submodules: true + - uses: ./.github/workflows/setup-with-retry + - name: Build openpilot + run: | + ${{ env.RUN }} "scons -j$(nproc)" + - name: Build docs + run: | + ${{ env.RUN }} "apt update && apt install -y doxygen && cd docs && make html" + + - uses: actions/checkout@v4 + if: github.ref == 'refs/heads/master' && github.repository == 'commaai/openpilot' + with: + path: openpilot-docs + ssh-key: ${{ secrets.OPENPILOT_DOCS_KEY }} + repository: commaai/openpilot-docs + - name: Push + if: github.ref == 'refs/heads/master' && github.repository == 'commaai/openpilot' + run: | + set -x + + source release/identity.sh + + cd openpilot-docs + + git checkout --orphan tmp + git rm -rf --cached . + + cp -r ../build/docs/html/ docs/ + touch docs/.nojekyll + git add -f . + + git commit -m "build docs" + + # docs live in different repo to not bloat openpilot's full clone size + git push -f origin gh-pages diff --git a/.github/workflows/tools_tests.yaml b/.github/workflows/tools_tests.yaml index b7dc19f6be..ad0ce598b4 100644 --- a/.github/workflows/tools_tests.yaml +++ b/.github/workflows/tools_tests.yaml @@ -63,24 +63,6 @@ jobs: run: | selfdrive/test/docker_build.sh sim - docs: - name: build docs - runs-on: ubuntu-20.04 - timeout-minutes: 45 - steps: - - uses: actions/checkout@v3 - with: - submodules: true - - uses: ./.github/workflows/setup-with-retry - - name: Setup to push to repo - if: github.ref == 'refs/heads/master' && github.event_name != 'pull_request' && github.repository == 'commaai/openpilot' - run: | - echo "PUSH_IMAGE=true" >> "$GITHUB_ENV" - $DOCKER_LOGIN - - name: Build and push docs image - run: | - selfdrive/test/docker_build.sh docs - devcontainer: name: devcontainer runs-on: ubuntu-latest diff --git a/docs/docker/Dockerfile b/docs/docker/Dockerfile deleted file mode 100644 index 1bae2be24a..0000000000 --- a/docs/docker/Dockerfile +++ /dev/null @@ -1,42 +0,0 @@ -FROM ghcr.io/commaai/openpilot-base:latest - -ENV PYTHONUNBUFFERED 1 - -ENV OPENPILOT_PATH /tmp/openpilot -ENV PYTHONPATH ${OPENPILOT_PATH}:${PYTHONPATH} -ENV POETRY_VIRUALENVS_CREATE false - -RUN mkdir -p ${OPENPILOT_PATH} -WORKDIR ${OPENPILOT_PATH} - -COPY SConstruct ${OPENPILOT_PATH} - -COPY ./openpilot ${OPENPILOT_PATH}/openpilot -COPY ./body ${OPENPILOT_PATH}/body -COPY ./third_party ${OPENPILOT_PATH}/third_party -COPY ./site_scons ${OPENPILOT_PATH}/site_scons -COPY ./laika_repo ${OPENPILOT_PATH}/laika_repo -RUN ln -s ${OPENPILOT_PATH}/laika_repo/laika/ ${OPENPILOT_PATH}/laika -COPY ./rednose ${OPENPILOT_PATH}/rednose -COPY ./rednose_repo ${OPENPILOT_PATH}/rednose_repo -COPY ./tools ${OPENPILOT_PATH}/tools -COPY ./release ${OPENPILOT_PATH}/release -COPY ./common ${OPENPILOT_PATH}/common -COPY ./opendbc ${OPENPILOT_PATH}/opendbc -COPY ./cereal ${OPENPILOT_PATH}/cereal -COPY ./panda ${OPENPILOT_PATH}/panda -COPY ./selfdrive ${OPENPILOT_PATH}/selfdrive -COPY ./system ${OPENPILOT_PATH}/system -COPY ./*.md ${OPENPILOT_PATH}/ - -RUN --mount=type=bind,source=.ci_cache/scons_cache,target=/tmp/scons_cache,rw scons -j$(nproc) --cache-readonly - -RUN apt update && apt install doxygen -y -COPY ./docs ${OPENPILOT_PATH}/docs -RUN git init . -WORKDIR ${OPENPILOT_PATH}/docs -RUN make html - -FROM nginx:1.21 -COPY --from=0 /tmp/openpilot/build/docs/html /usr/share/nginx/html -COPY ./docs/docker/nginx.conf /etc/nginx/conf.d/default.conf diff --git a/docs/docker/nginx.conf b/docs/docker/nginx.conf deleted file mode 100644 index 21fb226368..0000000000 --- a/docs/docker/nginx.conf +++ /dev/null @@ -1,15 +0,0 @@ -server { - listen 80; - listen [::]:80; - server_name localhost; - - gzip on; - gzip_types text/html text/plain text/css text/xml text/javascript application/javascript application/x-javascript; - gzip_min_length 1024; - gzip_vary on; - - root /usr/share/nginx/html; - location / { - try_files $uri $uri/ /index.html; - } -} diff --git a/selfdrive/test/docker_common.sh b/selfdrive/test/docker_common.sh index 68ea472d26..1b3c705494 100644 --- a/selfdrive/test/docker_common.sh +++ b/selfdrive/test/docker_common.sh @@ -1,9 +1,6 @@ if [ $1 = "base" ]; then export DOCKER_IMAGE=openpilot-base export DOCKER_FILE=Dockerfile.openpilot_base -elif [ $1 = "docs" ]; then - export DOCKER_IMAGE=openpilot-docs - export DOCKER_FILE=docs/docker/Dockerfile elif [ $1 = "sim" ]; then export DOCKER_IMAGE=openpilot-sim export DOCKER_FILE=tools/sim/Dockerfile.sim From 0336219b6a8c1a416efc6fe70545be6f20aa9bab Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sat, 14 Oct 2023 23:25:41 -0700 Subject: [PATCH 08/18] CI: update to checkout@v4 (#30248) --- .github/workflows/badges.yaml | 2 +- .github/workflows/labeler.yaml | 2 +- .github/workflows/prebuilt.yaml | 2 +- .github/workflows/release.yaml | 2 +- .github/workflows/repo-maintenance.yaml | 2 +- .github/workflows/selfdrive_tests.yaml | 26 ++++++++++++------------- .github/workflows/tools_tests.yaml | 6 +++--- 7 files changed, 21 insertions(+), 21 deletions(-) diff --git a/.github/workflows/badges.yaml b/.github/workflows/badges.yaml index a2c2daab1a..c19be4c563 100644 --- a/.github/workflows/badges.yaml +++ b/.github/workflows/badges.yaml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-20.04 if: github.repository == 'commaai/openpilot' steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - uses: ./.github/workflows/setup-with-retry diff --git a/.github/workflows/labeler.yaml b/.github/workflows/labeler.yaml index 20f7260ef7..95d1af8bc6 100644 --- a/.github/workflows/labeler.yaml +++ b/.github/workflows/labeler.yaml @@ -9,7 +9,7 @@ jobs: pull-requests: write runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: false - uses: actions/labeler@v5.0.0-alpha.1 diff --git a/.github/workflows/prebuilt.yaml b/.github/workflows/prebuilt.yaml index 8c31bcaac0..f5b0b8c558 100644 --- a/.github/workflows/prebuilt.yaml +++ b/.github/workflows/prebuilt.yaml @@ -24,7 +24,7 @@ jobs: wait-interval: 30 running-workflow-name: 'build prebuilt' check-regexp: ^((?!.*(build master-ci).*).)*$ - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - run: git lfs pull diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 2bb22fecb2..7c36410b32 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -27,7 +27,7 @@ jobs: wait-interval: 30 running-workflow-name: 'build master-ci' check-regexp: ^((?!.*(build prebuilt).*).)*$ - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true fetch-depth: 0 diff --git a/.github/workflows/repo-maintenance.yaml b/.github/workflows/repo-maintenance.yaml index 060b7f3e6c..66e252bf83 100644 --- a/.github/workflows/repo-maintenance.yaml +++ b/.github/workflows/repo-maintenance.yaml @@ -12,7 +12,7 @@ jobs: container: image: ghcr.io/commaai/openpilot-base:latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: poetry lock run: | pip install poetry diff --git a/.github/workflows/selfdrive_tests.yaml b/.github/workflows/selfdrive_tests.yaml index c5820a5f5a..7b31173b5c 100644 --- a/.github/workflows/selfdrive_tests.yaml +++ b/.github/workflows/selfdrive_tests.yaml @@ -35,7 +35,7 @@ jobs: env: STRIPPED_DIR: /tmp/releasepilot steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - run: git lfs pull @@ -77,7 +77,7 @@ jobs: (github.event.pull_request.head.repo.full_name == 'commaai/openpilot'))) && '["x86_64", "aarch64"]' || '["x86_64"]' ) }} runs-on: ${{ (matrix.arch == 'aarch64') && 'buildjet-2vcpu-ubuntu-2204-arm' || 'ubuntu-20.04' }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - uses: ./.github/workflows/setup-with-retry @@ -97,7 +97,7 @@ jobs: runs-on: ${{ (matrix.arch == 'aarch64') && 'buildjet-2vcpu-ubuntu-2204-arm' || 'ubuntu-20.04' }} if: github.ref == 'refs/heads/master' && github.event_name != 'pull_request' && github.repository == 'commaai/openpilot' steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - name: Setup to push to repo @@ -120,7 +120,7 @@ jobs: if: github.ref == 'refs/heads/master' && github.event_name != 'pull_request' && github.repository == 'commaai/openpilot' needs: [docker_push] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: false - name: Setup docker @@ -135,7 +135,7 @@ jobs: name: static analysis runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - uses: ./.github/workflows/setup-with-retry @@ -147,7 +147,7 @@ jobs: name: valgrind runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - uses: ./.github/workflows/setup-with-retry @@ -165,7 +165,7 @@ jobs: name: unit tests runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - uses: ./.github/workflows/setup-with-retry @@ -190,7 +190,7 @@ jobs: ((github.event_name != 'pull_request') || (github.event.pull_request.head.repo.full_name == 'commaai/openpilot'))) && 'buildjet-8vcpu-ubuntu-2004' || 'ubuntu-20.04' }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - uses: ./.github/workflows/setup-with-retry @@ -232,7 +232,7 @@ jobs: name: regen runs-on: 'ubuntu-20.04' steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - uses: ./.github/workflows/setup-with-retry @@ -259,7 +259,7 @@ jobs: name: model tests runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - uses: ./.github/workflows/setup-with-retry @@ -295,7 +295,7 @@ jobs: matrix: job: [0, 1, 2, 3, 4] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - uses: ./.github/workflows/setup-with-retry @@ -323,7 +323,7 @@ jobs: runs-on: ubuntu-20.04 if: github.event_name == 'pull_request' steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true ref: ${{ github.event.pull_request.base.ref }} @@ -333,7 +333,7 @@ jobs: run: | ${{ env.RUN }} "scons -j$(nproc) && python selfdrive/debug/dump_car_info.py --path /tmp/openpilot_cache/base_car_info" sudo chown -R $USER:$USER ${{ github.workspace }} - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true path: current diff --git a/.github/workflows/tools_tests.yaml b/.github/workflows/tools_tests.yaml index ad0ce598b4..75a34b3c55 100644 --- a/.github/workflows/tools_tests.yaml +++ b/.github/workflows/tools_tests.yaml @@ -30,7 +30,7 @@ jobs: runs-on: ubuntu-20.04 timeout-minutes: 45 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - uses: ./.github/workflows/setup-with-retry @@ -48,7 +48,7 @@ jobs: if: github.repository == 'commaai/openpilot' timeout-minutes: 45 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - uses: ./.github/workflows/setup-with-retry @@ -67,7 +67,7 @@ jobs: name: devcontainer runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - uses: ./.github/workflows/setup-with-retry From 998763b4bced0ef787aac3be9c46307bd287ddbc Mon Sep 17 00:00:00 2001 From: Justin Newberry Date: Sun, 15 Oct 2023 17:15:41 -0400 Subject: [PATCH 09/18] Subaru: 2021 impreza fingerprint (#30249) --- selfdrive/car/subaru/values.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/selfdrive/car/subaru/values.py b/selfdrive/car/subaru/values.py index 787d7fdcea..1c9299e6b6 100644 --- a/selfdrive/car/subaru/values.py +++ b/selfdrive/car/subaru/values.py @@ -324,6 +324,7 @@ FW_VERSIONS = { b'\x00\x00eq\x1f@ "', b'\x00\x00eq\x00\x00\x00\x00', b'\x00\x00e\x8f\x00\x00\x00\x00', + b'\x00\x00e\x92\x00\x00\x00\x00', b'\x00\x00e\xa4\x00\x00\x00\x00', ], (Ecu.engine, 0x7e0, None): [ @@ -332,6 +333,7 @@ FW_VERSIONS = { b'\xca!`0\a', b'\xcc\"f0\a', b'\xcc!fp\a', + b'\xcc!`p\x07', b'\xca!f@\x07', b'\xca!fp\x07', b'\xf3"f@\x07', @@ -344,6 +346,7 @@ FW_VERSIONS = { (Ecu.transmission, 0x7e1, None): [ b'\xe6\xf5\004\000\000', b'\xe6\xf5$\000\000', + b'\xe7\xf5\x04\x00\x00', b'\xe7\xf6B0\000', b'\xe7\xf5D0\000', b'\xf1\x00\xd7\x10@', From f616dd77a18197e8d1d25bf8afbfc01c1ab2562b Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sun, 15 Oct 2023 15:21:51 -0700 Subject: [PATCH 10/18] loggerd: add wall time to initData (#30251) * loggerd: add wall time to initData * bump cereal * fix --- cereal | 2 +- system/loggerd/logger.cc | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/cereal b/cereal index b1a1afebb8..24a522f6ba 160000 --- a/cereal +++ b/cereal @@ -1 +1 @@ -Subproject commit b1a1afebb8533a96ff0e8efbba7c10eb47df2af0 +Subproject commit 24a522f6ba47aba12a9baea53020a8323673c79c diff --git a/system/loggerd/logger.cc b/system/loggerd/logger.cc index 31b302ffe6..1474552a13 100644 --- a/system/loggerd/logger.cc +++ b/system/loggerd/logger.cc @@ -24,9 +24,12 @@ // ***** log metadata ***** kj::Array logger_build_init_data() { + uint64_t wall_time = nanos_since_epoch(); + MessageBuilder msg; auto init = msg.initEvent().initInitData(); + init.setWallTimeNanos(wall_time); init.setVersion(COMMA_VERSION); init.setDirty(!getenv("CLEAN")); init.setDeviceType(Hardware::get_device_type()); From db460762c2da8f2cb49195094f7c07f7ee3f3ed7 Mon Sep 17 00:00:00 2001 From: Justin Newberry Date: Mon, 16 Oct 2023 14:32:31 -0400 Subject: [PATCH 11/18] add fingerprinting template (#30257) Add fingerprint template --- .github/pull_request_template.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index efa947a91a..6fbccfbdbb 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,5 +1,15 @@ + +