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
 | |
| 
 |