From 5ccff25d885365e4247665fdf8380c6b67c36b28 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sun, 3 Dec 2023 13:59:59 -0800 Subject: [PATCH] Simplify passive mode handling (#30593) * simplify passive handling * makes more sense --- launch_chffrplus.sh | 91 +++------------------- launch_env.sh | 4 - launch_openpilot.sh | 87 ++++++++++++++++++++- selfdrive/manager/manager.py | 8 +- selfdrive/manager/test/test_manager.py | 1 - selfdrive/test/helpers.py | 1 - selfdrive/ui/installer/continue_dashcam.sh | 4 +- tools/webcam/README.md | 2 +- 8 files changed, 100 insertions(+), 98 deletions(-) diff --git a/launch_chffrplus.sh b/launch_chffrplus.sh index a91bd677aa..80a6089238 100755 --- a/launch_chffrplus.sh +++ b/launch_chffrplus.sh @@ -1,88 +1,15 @@ #!/usr/bin/bash -if [ -z "$BASEDIR" ]; then - BASEDIR="/data/openpilot" -fi +# TODO: this can be removed after 0.9.6 release -source "$BASEDIR/launch_env.sh" - -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" - -function agnos_init { - # TODO: move this to agnos - sudo rm -f /data/etc/NetworkManager/system-connections/*.nmmeta - - # set success flag for current boot slot - sudo abctl --set_success - - # Check if AGNOS update is required - if [ $(< /VERSION) != "$AGNOS_VERSION" ]; then - AGNOS_PY="$DIR/system/hardware/tici/agnos.py" - MANIFEST="$DIR/system/hardware/tici/agnos.json" - if $AGNOS_PY --verify $MANIFEST; then - sudo reboot - fi - $DIR/system/hardware/tici/updater $AGNOS_PY $MANIFEST - fi -} - -function launch { - # Remove orphaned git lock if it exists on boot - [ -f "$DIR/.git/index.lock" ] && rm -f $DIR/.git/index.lock - - # Pull time from panda - $DIR/selfdrive/boardd/set_time.py - - # Check to see if there's a valid overlay-based update available. Conditions - # are as follows: - # - # 1. The BASEDIR init file has to exist, with a newer modtime than anything in - # the BASEDIR Git repo. This checks for local development work or the user - # switching branches/forks, which should not be overwritten. - # 2. The FINALIZED consistent file has to exist, indicating there's an update - # that completed successfully and synced to disk. - - if [ -f "${BASEDIR}/.overlay_init" ]; then - find ${BASEDIR}/.git -newer ${BASEDIR}/.overlay_init | grep -q '.' 2> /dev/null - if [ $? -eq 0 ]; then - echo "${BASEDIR} has been modified, skipping overlay update installation" - else - if [ -f "${STAGING_ROOT}/finalized/.overlay_consistent" ]; then - if [ ! -d /data/safe_staging/old_openpilot ]; then - echo "Valid overlay update found, installing" - LAUNCHER_LOCATION="${BASH_SOURCE[0]}" - - mv $BASEDIR /data/safe_staging/old_openpilot - mv "${STAGING_ROOT}/finalized" $BASEDIR - cd $BASEDIR - - echo "Restarting launch script ${LAUNCHER_LOCATION}" - unset AGNOS_VERSION - exec "${LAUNCHER_LOCATION}" - else - echo "openpilot backup found, not updating" - # TODO: restore backup? This means the updater didn't start after swapping - fi - fi - fi - fi - - # handle pythonpath - ln -sfn $(pwd) /data/pythonpath - export PYTHONPATH="$PWD" - - # hardware specific init - agnos_init - - # write tmux scrollback to a file - tmux capture-pane -pq -S-1000 > /tmp/launch_log +# migrate continue.sh and relaunch +cat << EOF > /data/continue.sh +#!/usr/bin/bash - # start manager - cd selfdrive/manager - ./build.py && ./manager.py +export PASSIVE=1 - # if broken, keep on screen error - while true; do sleep 1; done -} +cd /data/openpilot +exec ./launch_openpilot.sh +EOF -launch +/data/continue.sh diff --git a/launch_env.sh b/launch_env.sh index d07fbe33de..e3eba30b67 100755 --- a/launch_env.sh +++ b/launch_env.sh @@ -10,8 +10,4 @@ if [ -z "$AGNOS_VERSION" ]; then export AGNOS_VERSION="8.2" fi -if [ -z "$PASSIVE" ]; then - export PASSIVE="1" -fi - export STAGING_ROOT="/data/safe_staging" diff --git a/launch_openpilot.sh b/launch_openpilot.sh index 1525e1715f..a91bd677aa 100755 --- a/launch_openpilot.sh +++ b/launch_openpilot.sh @@ -1,5 +1,88 @@ #!/usr/bin/bash -export PASSIVE="0" -exec ./launch_chffrplus.sh +if [ -z "$BASEDIR" ]; then + BASEDIR="/data/openpilot" +fi +source "$BASEDIR/launch_env.sh" + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" + +function agnos_init { + # TODO: move this to agnos + sudo rm -f /data/etc/NetworkManager/system-connections/*.nmmeta + + # set success flag for current boot slot + sudo abctl --set_success + + # Check if AGNOS update is required + if [ $(< /VERSION) != "$AGNOS_VERSION" ]; then + AGNOS_PY="$DIR/system/hardware/tici/agnos.py" + MANIFEST="$DIR/system/hardware/tici/agnos.json" + if $AGNOS_PY --verify $MANIFEST; then + sudo reboot + fi + $DIR/system/hardware/tici/updater $AGNOS_PY $MANIFEST + fi +} + +function launch { + # Remove orphaned git lock if it exists on boot + [ -f "$DIR/.git/index.lock" ] && rm -f $DIR/.git/index.lock + + # Pull time from panda + $DIR/selfdrive/boardd/set_time.py + + # Check to see if there's a valid overlay-based update available. Conditions + # are as follows: + # + # 1. The BASEDIR init file has to exist, with a newer modtime than anything in + # the BASEDIR Git repo. This checks for local development work or the user + # switching branches/forks, which should not be overwritten. + # 2. The FINALIZED consistent file has to exist, indicating there's an update + # that completed successfully and synced to disk. + + if [ -f "${BASEDIR}/.overlay_init" ]; then + find ${BASEDIR}/.git -newer ${BASEDIR}/.overlay_init | grep -q '.' 2> /dev/null + if [ $? -eq 0 ]; then + echo "${BASEDIR} has been modified, skipping overlay update installation" + else + if [ -f "${STAGING_ROOT}/finalized/.overlay_consistent" ]; then + if [ ! -d /data/safe_staging/old_openpilot ]; then + echo "Valid overlay update found, installing" + LAUNCHER_LOCATION="${BASH_SOURCE[0]}" + + mv $BASEDIR /data/safe_staging/old_openpilot + mv "${STAGING_ROOT}/finalized" $BASEDIR + cd $BASEDIR + + echo "Restarting launch script ${LAUNCHER_LOCATION}" + unset AGNOS_VERSION + exec "${LAUNCHER_LOCATION}" + else + echo "openpilot backup found, not updating" + # TODO: restore backup? This means the updater didn't start after swapping + fi + fi + fi + fi + + # handle pythonpath + ln -sfn $(pwd) /data/pythonpath + export PYTHONPATH="$PWD" + + # hardware specific init + agnos_init + + # write tmux scrollback to a file + tmux capture-pane -pq -S-1000 > /tmp/launch_log + + # start manager + cd selfdrive/manager + ./build.py && ./manager.py + + # if broken, keep on screen error + while true; do sleep 1; done +} + +launch diff --git a/selfdrive/manager/manager.py b/selfdrive/manager/manager.py index 7b23445c8b..d329e19a0a 100755 --- a/selfdrive/manager/manager.py +++ b/selfdrive/manager/manager.py @@ -60,12 +60,8 @@ def manager_init() -> None: if params.get(k) is None: params.put(k, v) - # is this dashcam? - if os.getenv("PASSIVE") is not None: - params.put_bool("Passive", bool(int(os.getenv("PASSIVE", "0")))) - - if params.get("Passive") is None: - raise Exception("Passive must be set to continue") + # is this a dashcam build? + params.put_bool("Passive", bool(int(os.getenv("PASSIVE", "0")))) # Create folders needed for msgq try: diff --git a/selfdrive/manager/test/test_manager.py b/selfdrive/manager/test/test_manager.py index 0fa186baff..306f39aae0 100755 --- a/selfdrive/manager/test/test_manager.py +++ b/selfdrive/manager/test/test_manager.py @@ -21,7 +21,6 @@ BLACKLIST_PROCS = ['manage_athenad', 'pandad', 'pigeond'] @pytest.mark.tici class TestManager(unittest.TestCase): def setUp(self): - os.environ['PASSIVE'] = '0' HARDWARE.set_power_save(False) # ensure clean CarParams diff --git a/selfdrive/test/helpers.py b/selfdrive/test/helpers.py index 552070f024..2103194cb8 100644 --- a/selfdrive/test/helpers.py +++ b/selfdrive/test/helpers.py @@ -11,7 +11,6 @@ from openpilot.system.version import training_version, terms_version def set_params_enabled(): - os.environ['PASSIVE'] = "0" os.environ['REPLAY'] = "1" os.environ['FINGERPRINT'] = "TOYOTA COROLLA TSS2 2019" os.environ['LOGPRINT'] = "debug" diff --git a/selfdrive/ui/installer/continue_dashcam.sh b/selfdrive/ui/installer/continue_dashcam.sh index 25233fff11..4447c8302f 100755 --- a/selfdrive/ui/installer/continue_dashcam.sh +++ b/selfdrive/ui/installer/continue_dashcam.sh @@ -1,4 +1,6 @@ #!/usr/bin/bash +export PASSIVE=1 + cd /data/openpilot -exec ./launch_chffrplus.sh +exec ./launch_openpilot.sh diff --git a/tools/webcam/README.md b/tools/webcam/README.md index 237e07cdb6..3491f72820 100644 --- a/tools/webcam/README.md +++ b/tools/webcam/README.md @@ -38,7 +38,7 @@ USE_WEBCAM=1 scons -j$(nproc) ## GO ``` cd ~/openpilot/selfdrive/manager -PASSIVE=0 NOSENSOR=1 USE_WEBCAM=1 ./manager.py +NOSENSOR=1 USE_WEBCAM=1 ./manager.py ``` - Start the car, then the UI should show the road webcam's view - Adjust and secure the webcams (you can run tools/webcam/front_mount_helper.py to help mount the driver camera)