ui/* usr/share/quantimotor/ui
bcm2837-rpi-zero-2-w.dtb usr/share/quantimotor
enable_ads.py usr/share/quantimotor
+power-off.py usr/lib/systemd/system-shutdown
quantimotor.conf etc/modules-load.d
raspi-extra-cmdline etc/default
raspi-firmware-custom etc/default
--- /dev/null
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+#
+# Turn ourselves off by lowering the GPIO line in the soft power switch circuit
+# Copyright (C) 2025 Bdale Garbee <bdale@gag.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+
+import gpiod
+import signal
+import sys
+import time
+
+from gpiod.line import Direction, Value
+
+def set_line_values(chip_path, line_values):
+ value_str = {Value.ACTIVE: "Active", Value.INACTIVE: "Inactive"}
+
+ request = gpiod.request_lines(
+ chip_path,
+ consumer=sys.argv[0],
+ config={
+ tuple(line_values.keys()): gpiod.LineSettings(direction=Direction.OUTPUT)
+ },
+ )
+ request.set_values(line_values)
+
+if __name__ == "__main__":
+ try:
+ set_line_values(
+ "/dev/gpiochip0",
+ {13: Value.INACTIVE, # turn off soft power switch
+ }
+ )
+
+ except OSError as ex:
+ print(ex, "\nD'oh! Powering off failed.")
+