You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
1.0 KiB
36 lines
1.0 KiB
import glob
|
|
from typing import Optional, List
|
|
|
|
def gpio_init(pin: int, output: bool) -> None:
|
|
try:
|
|
with open(f"/sys/class/gpio/gpio{pin}/direction", 'wb') as f:
|
|
f.write(b"out" if output else b"in")
|
|
except Exception as e:
|
|
print(f"Failed to set gpio {pin} direction: {e}")
|
|
|
|
def gpio_set(pin: int, high: bool) -> None:
|
|
try:
|
|
with open(f"/sys/class/gpio/gpio{pin}/value", 'wb') as f:
|
|
f.write(b"1" if high else b"0")
|
|
except Exception as e:
|
|
print(f"Failed to set gpio {pin} value: {e}")
|
|
|
|
def gpio_read(pin: int) -> Optional[bool]:
|
|
val = None
|
|
try:
|
|
with open(f"/sys/class/gpio/gpio{pin}/value", 'rb') as f:
|
|
val = bool(int(f.read().strip()))
|
|
except Exception as e:
|
|
print(f"Failed to set gpio {pin} value: {e}")
|
|
|
|
return val
|
|
|
|
def get_irq_for_action(action: str) -> List[int]:
|
|
ret = []
|
|
for fn in glob.glob('/sys/kernel/irq/*/actions'):
|
|
with open(fn) as f:
|
|
actions = f.read().strip().split(',')
|
|
if action in actions:
|
|
irq = int(fn.split('/')[-2])
|
|
ret.append(irq)
|
|
return ret
|
|
|