Last active
May 29, 2024 08:30
-
-
Save anecdata/fe35dc6a94069fc920edf61a64750b53 to your computer and use it in GitHub Desktop.
CircuitPython 8 safemode.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# SPDX-FileCopyrightText: 2023 anecdata | |
# | |
# SPDX-License-Identifier: MIT | |
import json | |
import microcontroller | |
import supervisor | |
from ⚙️ import * | |
# safemode.py is the entry point for SAFE MODE (hard fault, etc.) | |
# store supervisor.runtime.safe_mode_reason since it won't be available during boot.py or code.py | |
# NVM Safe Mode - to cross-check against safemode reason | |
if microcontroller.nvm[NVM_INDEX_SAFEMODE] != SAFEMODESET: | |
microcontroller.nvm[NVM_INDEX_SAFEMODE] = SAFEMODESET | |
# set up the safemode dict | |
safemode_dict = {} | |
safemode_dict["safemode_reason"] = str(supervisor.runtime.safe_mode_reason) | |
update_restart_dict_time(safemode_dict) # add timestamp | |
# write dict as JSON | |
precode_file_write("/safemode.json", json.dumps(safemode_dict)) # use storage.remount() | |
if False: # check for any safemode conditions where we shouldn't RESET | |
pass | |
else: | |
# RESET out of safe mode | |
microcontroller.reset() # or alarm.exit_and_deep_sleep() |
Emoji's as imports. What is this chaos... I love it.
from 💣 import TotallySafeCodeNotA💥
from 📷import 🖼️ I could see some neat uses.
I wonder how do you test safemode.py
. The documentation mentions supervisor.SafeModeReason.PROGRAMMATIC
however there is not much about how to trigger it. I tried blowing the stack in code.py
however that ends up with RuntimeError
.
edit: I see now, the guide on https://learn.adafruit.com/circuitpython-safe-mode/safe-mode-reasons describes how to do it using microcontroller.on_next_reset(microcontroller.RunMode.SAFE_MODE)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
nice!