diff --git a/selfdrive/assets/img_spinner_comma.png b/selfdrive/assets/img_spinner_comma.png index 16109557f..9f5e55877 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 931c17e83..d54d51ead 100644 Binary files a/selfdrive/assets/img_spinner_track.png and b/selfdrive/assets/img_spinner_track.png differ diff --git a/selfdrive/car/car_helpers.py b/selfdrive/car/car_helpers.py index 66097339b..bba21efe0 100644 --- a/selfdrive/car/car_helpers.py +++ b/selfdrive/car/car_helpers.py @@ -20,11 +20,7 @@ EventName = car.CarEvent.EventName def get_startup_event(car_recognized, controller_available, fw_seen): - build_metadata = get_build_metadata() - if build_metadata.openpilot.comma_remote and build_metadata.tested_channel: - event = EventName.startup - else: - event = EventName.startupMaster + event = EventName.startupMaster if not car_recognized: if fw_seen: diff --git a/selfdrive/controls/lib/events.py b/selfdrive/controls/lib/events.py index 4d57bc6f6..10771c162 100755 --- a/selfdrive/controls/lib/events.py +++ b/selfdrive/controls/lib/events.py @@ -229,7 +229,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.jpg b/selfdrive/frogpilot/assets/other_images/frogpilot_boot_logo.jpg new file mode 100644 index 000000000..2505b8cb5 Binary files /dev/null and b/selfdrive/frogpilot/assets/other_images/frogpilot_boot_logo.jpg differ 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 000000000..2505b8cb5 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 index e5a10ee93..1c8a6a86a 100644 --- a/selfdrive/frogpilot/controls/lib/frogpilot_functions.py +++ b/selfdrive/frogpilot/controls/lib/frogpilot_functions.py @@ -1,4 +1,20 @@ +import filecmp +import os +import shutil +import subprocess + +from openpilot.common.basedir import BASEDIR from openpilot.common.params_pyx import Params, UnknownKeyName +from openpilot.system.hardware import HARDWARE + +def run_cmd(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}") def convert_params(params, params_storage): def convert_param(key, action_func): @@ -26,3 +42,32 @@ def convert_params(params, params_storage): def frogpilot_boot_functions(params, params_storage): convert_params(params, params_storage) + +def setup_frogpilot(): + remount_root = ['sudo', 'mount', '-o', 'remount,rw', '/'] + run_cmd(remount_root, "File system remounted as read-write.", "Failed to remount file system.") + + frogpilot_boot_logo = f'{BASEDIR}/selfdrive/frogpilot/assets/other_images/frogpilot_boot_logo.png' + frogpilot_boot_logo_jpg = f'{BASEDIR}/selfdrive/frogpilot/assets/other_images/frogpilot_boot_logo.jpg' + + boot_logo_location = '/usr/comma/bg.jpg' + boot_logo_save_location = f'{BASEDIR}/selfdrive/frogpilot/assets/other_images/original_bg.jpg' + + if not os.path.exists(boot_logo_save_location): + shutil.copy(boot_logo_location, boot_logo_save_location) + print("Successfully saved original_bg.jpg.") + + if filecmp.cmp(boot_logo_save_location, frogpilot_boot_logo_jpg, shallow=False): + os.remove(boot_logo_save_location) + + if not filecmp.cmp(frogpilot_boot_logo, boot_logo_location, shallow=False): + run_cmd(['sudo', 'cp', frogpilot_boot_logo, boot_logo_location], "Successfully replaced bg.jpg with frogpilot_boot_logo.png.", "Failed to replace boot logo.") + +def uninstall_frogpilot(): + boot_logo_location = '/usr/comma/bg.jpg' + boot_logo_restore_location = f'{BASEDIR}/selfdrive/frogpilot/assets/other_images/original_bg.jpg' + + copy_cmd = ['sudo', 'cp', boot_logo_restore_location, boot_logo_location] + run_cmd(copy_cmd, "Successfully restored the original boot logo.", "Failed to restore the original boot logo.") + + HARDWARE.uninstall() diff --git a/selfdrive/ui/qt/offroad/software_settings.cc b/selfdrive/ui/qt/offroad/software_settings.cc index c8245205c..2fa6982c8 100644 --- a/selfdrive/ui/qt/offroad/software_settings.cc +++ b/selfdrive/ui/qt/offroad/software_settings.cc @@ -70,9 +70,7 @@ SoftwarePanel::SoftwarePanel(QWidget* parent) : ListWidget(parent) { checkForUpdates(); } }); - if (!params.getBool("IsTestedBranch")) { - addItem(targetBranchBtn); - } + addItem(targetBranchBtn); // uninstall button auto uninstallBtn = new ButtonControl(tr("Uninstall %1").arg(getBrand()), tr("UNINSTALL")); diff --git a/selfdrive/ui/qt/onroad/alerts.h b/selfdrive/ui/qt/onroad/alerts.h index 1f76ba305..569c4b413 100644 --- a/selfdrive/ui/qt/onroad/alerts.h +++ b/selfdrive/ui/qt/onroad/alerts.h @@ -29,6 +29,9 @@ protected: {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)}, + + // FrogPilot alert colors + {cereal::ControlsState::AlertStatus::FROGPILOT, QColor(0x17, 0x86, 0x44, 0xf1)}, }; void paintEvent(QPaintEvent*) override; diff --git a/selfdrive/ui/qt/spinner.cc b/selfdrive/ui/qt/spinner.cc index 2404efa66..7ca2f1a70 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 0bf5f2865..99395b70c 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/qt/widgets/toggle.cc b/selfdrive/ui/qt/widgets/toggle.cc index 82302ad5b..1236d25dd 100644 --- a/selfdrive/ui/qt/widgets/toggle.cc +++ b/selfdrive/ui/qt/widgets/toggle.cc @@ -75,7 +75,7 @@ void Toggle::setEnabled(bool value) { enabled = value; if (value) { circleColor.setRgb(0xfafafa); - green.setRgb(0x33ab4c); + green.setRgb(0x178644); } else { circleColor.setRgb(0x888888); green.setRgb(0x227722); diff --git a/system/manager/manager.py b/system/manager/manager.py old mode 100755 new mode 100644 index 9a708b033..eb001087b --- a/system/manager/manager.py +++ b/system/manager/manager.py @@ -19,7 +19,7 @@ from openpilot.system.athena.registration import register, UNREGISTERED_DONGLE_I from openpilot.common.swaglog import cloudlog, add_file_handler from openpilot.system.version import get_build_metadata, terms_version, training_version -from openpilot.selfdrive.frogpilot.controls.lib.frogpilot_functions import frogpilot_boot_functions +from openpilot.selfdrive.frogpilot.controls.lib.frogpilot_functions import frogpilot_boot_functions, setup_frogpilot, uninstall_frogpilot def manager_init() -> None: @@ -27,6 +27,8 @@ def manager_init() -> None: build_metadata = get_build_metadata() + setup_frogpilot() + params = Params() params_storage = Params("/persist/params") params.clear_all(ParamKeyType.CLEAR_ON_MANAGER_START) @@ -199,7 +201,7 @@ def main() -> None: params = Params() if params.get_bool("DoUninstall"): cloudlog.warning("uninstalling") - HARDWARE.uninstall() + uninstall_frogpilot() elif params.get_bool("DoReboot"): cloudlog.warning("reboot") HARDWARE.reboot() diff --git a/system/updated/updated.py b/system/updated/updated.py index d43f439af..68207bb48 100755 --- a/system/updated/updated.py +++ b/system/updated/updated.py @@ -307,7 +307,7 @@ class Updater: with open(os.path.join(basedir, "common", "version.h")) as f: version = f.read().split('"')[1] - commit_unix_ts = run(["git", "show", "-s", "--format=%ct", "HEAD"], basedir).rstrip() + commit_unix_ts = run(["git", "show", "-s", "--format=%ct", "HEAD"], basedir).split()[0] dt = datetime.datetime.fromtimestamp(int(commit_unix_ts)) commit_date = dt.strftime("%b %d") except Exception: diff --git a/system/version.py b/system/version.py index 94964526b..1c934aed6 100755 --- a/system/version.py +++ b/system/version.py @@ -10,8 +10,8 @@ from openpilot.common.basedir import BASEDIR from openpilot.common.swaglog import cloudlog from openpilot.common.git import get_commit, get_origin, get_branch, get_short_branch, get_commit_date -RELEASE_BRANCHES = ['release3-staging', 'release3', 'nightly'] -TESTED_BRANCHES = RELEASE_BRANCHES + ['devel', 'devel-staging'] +RELEASE_BRANCHES = ['FrogPilot', 'FrogPilot-New', 'FrogPilot-Test'] +TESTED_BRANCHES = RELEASE_BRANCHES + ['FrogPilot-Staging', 'FrogPilot-Testing'] BUILD_METADATA_FILENAME = "build.json"