diff --git a/selfdrive/common/params.cc b/selfdrive/common/params.cc index 3f64f790c1f126b..6531a1308407bcb 100644 --- a/selfdrive/common/params.cc +++ b/selfdrive/common/params.cc @@ -157,6 +157,7 @@ std::unordered_map keys = { {"TrainingVersion", PERSISTENT}, {"UpdateAvailable", CLEAR_ON_MANAGER_START}, {"UpdateFailedCount", CLEAR_ON_MANAGER_START}, + {"UploadRaw", PERSISTENT}, {"Version", PERSISTENT}, {"VisionRadarToggle", PERSISTENT}, {"ApiCache_Device", PERSISTENT}, diff --git a/selfdrive/loggerd/tests/loggerd_tests_common.py b/selfdrive/loggerd/tests/loggerd_tests_common.py index 1a16e343e612ab7..579aaf6042fda6e 100644 --- a/selfdrive/loggerd/tests/loggerd_tests_common.py +++ b/selfdrive/loggerd/tests/loggerd_tests_common.py @@ -56,6 +56,7 @@ class MockParams(): def __init__(self): self.params = { "DongleId": b"0000000000000000", + "UploadRaw": b"1", "IsOffroad": b"1", } diff --git a/selfdrive/loggerd/tests/test_uploader.py b/selfdrive/loggerd/tests/test_uploader.py index 54c65db73dda891..664a3eb6801ae60 100755 --- a/selfdrive/loggerd/tests/test_uploader.py +++ b/selfdrive/loggerd/tests/test_uploader.py @@ -68,6 +68,12 @@ def gen_order(self, seg1, seg2, boot=True): keys += [f"boot/{self.seg_format2.format(i)}.bz2" for i in seg2] keys += [f"{self.seg_format.format(i)}/qlog.bz2" for i in seg1] keys += [f"{self.seg_format2.format(i)}/qlog.bz2" for i in seg2] + keys += [f"{self.seg_format.format(i)}/rlog.bz2" for i in seg1] + keys += [f"{self.seg_format2.format(i)}/rlog.bz2" for i in seg2] + for i in seg1: + keys += [f"{self.seg_format.format(i)}/{f}" for f in ['fcamera.hevc', 'dcamera.hevc']] + for i in seg2: + keys += [f"{self.seg_format2.format(i)}/{f}" for f in ['fcamera.hevc', 'dcamera.hevc']] return keys def test_upload(self): diff --git a/selfdrive/loggerd/uploader.py b/selfdrive/loggerd/uploader.py index 2013a522bc7a9c5..7abf580788b3fc1 100644 --- a/selfdrive/loggerd/uploader.py +++ b/selfdrive/loggerd/uploader.py @@ -70,10 +70,16 @@ def __init__(self, dongle_id, root): self.immediate_folders = ["crash/", "boot/"] self.immediate_priority = {"qlog.bz2": 0, "qcamera.ts": 1} + self.high_priority = {"rlog.bz2": 0} + self.normal_priority = {"fcamera.hevc": 1, "dcamera.hevc": 2, "ecamera.hevc": 3} def get_upload_sort(self, name): if name in self.immediate_priority: return self.immediate_priority[name] + if name in self.high_priority: + return self.high_priority[name] + 100 + if name in self.normal_priority: + return self.normal_priority[name] + 300 return 1000 def list_upload_files(self): @@ -114,7 +120,7 @@ def list_upload_files(self): yield (name, key, fn) - def next_file_to_upload(self): + def next_file_to_upload(self, with_raw): upload_files = list(self.list_upload_files()) for name, key, fn in upload_files: @@ -125,6 +131,17 @@ def next_file_to_upload(self): if name in self.immediate_priority: return (key, fn) + if with_raw: + # then upload the full log files, rear and front camera files + for name, key, fn in upload_files: + if name in self.high_priority: + return (key, fn) + + # Could add a param here to disable full video uploads + for name, key, fn in upload_files: + if name in self.normal_priority: + return (key, fn) + return None def do_upload(self, key, fn): @@ -237,7 +254,9 @@ def uploader_fn(exit_event): time.sleep(60 if offroad else 5) continue - d = uploader.next_file_to_upload() + allow_raw_upload = params.get_bool("UploadRaw") + + d = uploader.next_file_to_upload(with_raw=allow_raw_upload) if d is None: # Nothing to upload if allow_sleep: time.sleep(60 if offroad else 5) diff --git a/selfdrive/ui/qt/offroad/settings.cc b/selfdrive/ui/qt/offroad/settings.cc index 73dbf0a845f6e23..6e99fb7f989f2ec 100644 --- a/selfdrive/ui/qt/offroad/settings.cc +++ b/selfdrive/ui/qt/offroad/settings.cc @@ -53,6 +53,12 @@ TogglesPanel::TogglesPanel(SettingsWindow *parent) : ListWidget(parent) { "Display speed in km/h instead of mph.", "../assets/offroad/icon_metric.png", }, + { + "UploadRaw", + "Upload Raw Logs", + "Upload full logs and full resolution video by default while on Wi-Fi. If not enabled, individual logs can be marked for upload at useradmin.comma.ai.", + "../assets/offroad/icon_network.png", + }, { "RecordFront", "Record and Upload Driver Camera",