diff --git a/launch_chffrplus.sh b/launch_chffrplus.sh index 95d0fc639d..a91bd677aa 100755 --- a/launch_chffrplus.sh +++ b/launch_chffrplus.sh @@ -1,13 +1,88 @@ #!/usr/bin/bash -# TODO: this can be removed after 0.9.6 release +if [ -z "$BASEDIR" ]; then + BASEDIR="/data/openpilot" +fi -# migrate continue.sh and relaunch -cat << EOF > /data/continue.sh -#!/usr/bin/bash +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 -cd /data/openpilot -exec ./launch_openpilot.sh -EOF + # if broken, keep on screen error + while true; do sleep 1; done +} -/data/continue.sh +launch diff --git a/launch_env.sh b/launch_env.sh index e3eba30b67..d07fbe33de 100755 --- a/launch_env.sh +++ b/launch_env.sh @@ -10,4 +10,8 @@ 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 a91bd677aa..1525e1715f 100755 --- a/launch_openpilot.sh +++ b/launch_openpilot.sh @@ -1,88 +1,5 @@ #!/usr/bin/bash -if [ -z "$BASEDIR" ]; then - BASEDIR="/data/openpilot" -fi +export PASSIVE="0" +exec ./launch_chffrplus.sh -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 d329e19a0a..7b23445c8b 100755 --- a/selfdrive/manager/manager.py +++ b/selfdrive/manager/manager.py @@ -60,8 +60,12 @@ def manager_init() -> None: if params.get(k) is None: params.put(k, v) - # is this a dashcam build? - params.put_bool("Passive", bool(int(os.getenv("PASSIVE", "0")))) + # 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") # Create folders needed for msgq try: diff --git a/selfdrive/manager/test/test_manager.py b/selfdrive/manager/test/test_manager.py index 306f39aae0..0fa186baff 100755 --- a/selfdrive/manager/test/test_manager.py +++ b/selfdrive/manager/test/test_manager.py @@ -21,6 +21,7 @@ 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 2103194cb8..552070f024 100644 --- a/selfdrive/test/helpers.py +++ b/selfdrive/test/helpers.py @@ -11,6 +11,7 @@ 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 4447c8302f..25233fff11 100755 --- a/selfdrive/ui/installer/continue_dashcam.sh +++ b/selfdrive/ui/installer/continue_dashcam.sh @@ -1,6 +1,4 @@ #!/usr/bin/bash -export PASSIVE=1 - cd /data/openpilot -exec ./launch_openpilot.sh +exec ./launch_chffrplus.sh diff --git a/tools/webcam/README.md b/tools/webcam/README.md index 3491f72820..237e07cdb6 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 -NOSENSOR=1 USE_WEBCAM=1 ./manager.py +PASSIVE=0 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)