mirror of
https://github.com/okunze/Argon40-ArgonOne-Script.git
synced 2025-06-19 21:08:38 +02:00
90 lines
2.2 KiB
Python
90 lines
2.2 KiB
Python
|
|
# For Libreelec/Lakka, note that we need to add system paths
|
|
# import sys
|
|
# sys.path.append('/storage/.kodi/addons/virtual.rpi-tools/lib')
|
|
import gpiod
|
|
import os
|
|
import time
|
|
|
|
# This function is the thread that monitors activity in our shutdown pin
|
|
# The pulse width is measured, and the corresponding shell command will be issued
|
|
|
|
def argonpowerbutton_monitor(writeq):
|
|
|
|
try:
|
|
# Reference https://github.com/brgl/libgpiod/blob/master/bindings/python/examples/gpiomon.py
|
|
|
|
# Pin Assignments
|
|
LINE_SHUTDOWN=4
|
|
try:
|
|
# Pi5 mapping
|
|
chip = gpiod.Chip('4')
|
|
except Exception as gpioerr:
|
|
# Old mapping
|
|
chip = gpiod.Chip('0')
|
|
|
|
lineobj = chip.get_line(LINE_SHUTDOWN)
|
|
lineobj.request(consumer="argon", type=gpiod.LINE_REQ_EV_BOTH_EDGES)
|
|
while True:
|
|
hasevent = lineobj.event_wait(10)
|
|
if hasevent:
|
|
pulsetime = 1
|
|
eventdata = lineobj.event_read()
|
|
if eventdata.type == gpiod.LineEvent.RISING_EDGE:
|
|
# Time pulse data
|
|
while lineobj.get_value() == 1:
|
|
time.sleep(0.01)
|
|
pulsetime += 1
|
|
|
|
if pulsetime >=2 and pulsetime <=3:
|
|
# Testing
|
|
#writeq.put("OLEDSWITCH")
|
|
writeq.put("OLEDSTOP")
|
|
os.system("reboot")
|
|
break
|
|
elif pulsetime >=4 and pulsetime <=5:
|
|
writeq.put("OLEDSTOP")
|
|
os.system("shutdown now -h")
|
|
break
|
|
elif pulsetime >=6 and pulsetime <=7:
|
|
writeq.put("OLEDSWITCH")
|
|
lineobj.release()
|
|
chip.close()
|
|
except Exception:
|
|
writeq.put("ERROR")
|
|
|
|
|
|
def argonpowerbutton_monitorswitch(writeq):
|
|
|
|
try:
|
|
# Reference https://github.com/brgl/libgpiod/blob/master/bindings/python/examples/gpiomon.py
|
|
|
|
# Pin Assignments
|
|
LINE_SHUTDOWN=4
|
|
try:
|
|
# Pi5 mapping
|
|
chip = gpiod.Chip('4')
|
|
except Exception as gpioerr:
|
|
# Old mapping
|
|
chip = gpiod.Chip('0')
|
|
|
|
lineobj = chip.get_line(LINE_SHUTDOWN)
|
|
lineobj.request(consumer="argon", type=gpiod.LINE_REQ_EV_BOTH_EDGES)
|
|
while True:
|
|
hasevent = lineobj.event_wait(10)
|
|
if hasevent:
|
|
pulsetime = 1
|
|
eventdata = lineobj.event_read()
|
|
if eventdata.type == gpiod.LineEvent.RISING_EDGE:
|
|
# Time pulse data
|
|
while lineobj.get_value() == 1:
|
|
time.sleep(0.01)
|
|
pulsetime += 1
|
|
|
|
if pulsetime >= 10:
|
|
writeq.put("OLEDSWITCH")
|
|
lineobj.release()
|
|
chip.close()
|
|
except Exception:
|
|
writeq.put("ERROR")
|