diff --git a/release/files_common b/release/files_common index 0d185a1..93ab109 100644 --- a/release/files_common +++ b/release/files_common @@ -564,3 +564,5 @@ tinygrad_repo/tinygrad/runtime/ops_disk.py tinygrad_repo/tinygrad/runtime/ops_gpu.py tinygrad_repo/tinygrad/shape/* tinygrad_repo/tinygrad/*.py + +selfdrive/frogpilot/controls/lib/frogpilot_functions.py diff --git a/selfdrive/assets/img_spinner_comma.png b/selfdrive/assets/img_spinner_comma.png index 1610955..9f5e558 100644 Binary files a/selfdrive/assets/img_spinner_comma.png and b/selfdrive/assets/img_spinner_comma.png differ diff --git a/selfdrive/assets/img_spinner_track.png b/selfdrive/assets/img_spinner_track.png index 931c17e..d54d51e 100644 Binary files a/selfdrive/assets/img_spinner_track.png and b/selfdrive/assets/img_spinner_track.png differ diff --git a/selfdrive/controls/lib/events.py b/selfdrive/controls/lib/events.py index 669eac4..009555e 100755 --- a/selfdrive/controls/lib/events.py +++ b/selfdrive/controls/lib/events.py @@ -228,7 +228,7 @@ def startup_master_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubM if "REPLAY" in os.environ: branch = "replay" - return StartupAlert("WARNING: This branch is not tested", branch, alert_status=AlertStatus.userPrompt) + return StartupAlert("Hippity hoppity this is my property", "so I do what I want 🐸", alert_status=AlertStatus.frogpilot) def below_engage_speed_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int) -> Alert: return NoEntryAlert(f"Drive above {get_display_speed(CP.minEnableSpeed, metric)} to engage") diff --git a/selfdrive/frogpilot/assets/other_images/frogpilot_boot_logo.png b/selfdrive/frogpilot/assets/other_images/frogpilot_boot_logo.png new file mode 100644 index 0000000..2505b8c Binary files /dev/null and b/selfdrive/frogpilot/assets/other_images/frogpilot_boot_logo.png differ diff --git a/selfdrive/frogpilot/controls/lib/frogpilot_functions.py b/selfdrive/frogpilot/controls/lib/frogpilot_functions.py new file mode 100644 index 0000000..e97b0c9 --- /dev/null +++ b/selfdrive/frogpilot/controls/lib/frogpilot_functions.py @@ -0,0 +1,45 @@ +import filecmp +import os +import shutil +import subprocess + +from openpilot.common.basedir import BASEDIR +from openpilot.system.hardware import HARDWARE + +class FrogPilotFunctions: + @classmethod + def run_cmd(cls, cmd, success_msg, fail_msg): + try: + subprocess.check_call(cmd) + print(success_msg) + except subprocess.CalledProcessError as e: + print(f"{fail_msg}: {e}") + except Exception as e: + print(f"Unexpected error occurred: {e}") + + @classmethod + def setup_frogpilot(cls): + frogpilot_boot_logo = f'{BASEDIR}/selfdrive/frogpilot/assets/other_images/frogpilot_boot_logo.png' + boot_logo_location = '/usr/comma/bg.jpg' + boot_logo_save_location = f'{BASEDIR}/selfdrive/frogpilot/assets/other_images/original_bg.jpg' + + remount_root = ['sudo', 'mount', '-o', 'remount,rw', '/'] + cls.run_cmd(remount_root, "File system remounted as read-write.", "Failed to remount file system.") + + if not os.path.exists(boot_logo_save_location): + shutil.copy(boot_logo_location, boot_logo_save_location) + print("Successfully backed up the original boot logo.") + + if not filecmp.cmp(frogpilot_boot_logo, boot_logo_location, shallow=False): + copy_cmd = ['sudo', 'cp', frogpilot_boot_logo, boot_logo_location] + cls.run_cmd(copy_cmd, "Successfully replaced bg.jpg with frogpilot_boot_logo.png.", "Failed to replace boot logo.") + + @classmethod + def uninstall_frogpilot(cls): + original_boot_logo = f'{BASEDIR}/selfdrive/frogpilot/assets/other_images/original_bg.jpg' + boot_logo_location = '/usr/comma/bg.jpg' + + copy_cmd = ['sudo', 'cp', original_boot_logo, boot_logo_location] + cls.run_cmd(copy_cmd, "Successfully restored the original boot logo.", "Failed to restore the original boot logo.") + + HARDWARE.uninstall() diff --git a/selfdrive/manager/manager.py b/selfdrive/manager/manager.py index 24dceaa..8ab7c5a 100755 --- a/selfdrive/manager/manager.py +++ b/selfdrive/manager/manager.py @@ -2,6 +2,7 @@ import datetime import os import signal +import subprocess import sys import traceback @@ -20,6 +21,7 @@ from openpilot.system.version import is_dirty, get_commit, get_version, get_orig get_normalized_origin, terms_version, training_version, \ is_tested_branch, is_release_branch, get_commit_date +from openpilot.selfdrive.frogpilot.controls.lib.frogpilot_functions import FrogPilotFunctions def manager_init() -> None: @@ -175,7 +177,9 @@ def manager_thread() -> None: break -def main() -> None: +def main(frogpilot_functions) -> None: + frogpilot_functions.setup_frogpilot() + manager_init() if os.getenv("PREPAREONLY") is not None: return @@ -194,7 +198,7 @@ def main() -> None: params = Params() if params.get_bool("DoUninstall"): cloudlog.warning("uninstalling") - HARDWARE.uninstall() + frogpilot_functions.uninstall_frogpilot() elif params.get_bool("DoReboot"): cloudlog.warning("reboot") HARDWARE.reboot() @@ -207,7 +211,7 @@ if __name__ == "__main__": unblock_stdout() try: - main() + main(FrogPilotFunctions()) except KeyboardInterrupt: print("got CTRL-C, exiting") except Exception: diff --git a/selfdrive/ui/qt/spinner.cc b/selfdrive/ui/qt/spinner.cc index 2404efa..7ca2f1a 100644 --- a/selfdrive/ui/qt/spinner.cc +++ b/selfdrive/ui/qt/spinner.cc @@ -88,7 +88,7 @@ Spinner::Spinner(QWidget *parent) : QWidget(parent) { } QProgressBar::chunk { border-radius: 10px; - background-color: white; + background-color: rgba(23, 134, 68, 255); } )"); diff --git a/selfdrive/ui/qt/util.cc b/selfdrive/ui/qt/util.cc index bc3c494..a83d353 100644 --- a/selfdrive/ui/qt/util.cc +++ b/selfdrive/ui/qt/util.cc @@ -26,7 +26,7 @@ QString getVersion() { } QString getBrand() { - return QObject::tr("openpilot"); + return QObject::tr("FrogPilot"); } QString getUserAgent() { diff --git a/selfdrive/ui/ui.h b/selfdrive/ui/ui.h index 6efb72a..89584ad 100644 --- a/selfdrive/ui/ui.h +++ b/selfdrive/ui/ui.h @@ -127,6 +127,7 @@ static std::map alert_colors = { {cereal::ControlsState::AlertStatus::NORMAL, QColor(0x15, 0x15, 0x15, 0xf1)}, {cereal::ControlsState::AlertStatus::USER_PROMPT, QColor(0xDA, 0x6F, 0x25, 0xf1)}, {cereal::ControlsState::AlertStatus::CRITICAL, QColor(0xC9, 0x22, 0x31, 0xf1)}, + {cereal::ControlsState::AlertStatus::FROGPILOT, QColor(0x17, 0x86, 0x44, 0xf1)}, }; typedef struct UIScene {