81 lines
2.5 KiB
Python
81 lines
2.5 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
# Fenrir TTY screen reader
|
|
# By Chrys, Storm Dragon, and contributers.
|
|
|
|
from fenrirscreenreader.core import debug
|
|
|
|
class inputDriver():
|
|
def __init__(self):
|
|
self._initialized = False
|
|
def initialize(self, environment):
|
|
self.env = environment
|
|
self.env['runtime']['inputManager'].setShortcutType('KEY')
|
|
self._isInitialized = True
|
|
def shutdown(self):
|
|
if self._initialized:
|
|
self.removeAllDevices()
|
|
self._isInitialized = False
|
|
def getInputEvent(self):
|
|
time.sleep(0.1)
|
|
return None
|
|
def clearEventBuffer(self):
|
|
if not self._initialized:
|
|
return
|
|
del self.env['input']['eventBuffer'][:]
|
|
def updateInputDevices(self, newDevices = None, init = False):
|
|
if not self._initialized:
|
|
return
|
|
def getLedState(self, led = 0):
|
|
if not self._initialized:
|
|
return False
|
|
return False
|
|
def toggleLedState(self, led = 0):
|
|
if not self._initialized:
|
|
return
|
|
def grabAllDevices(self):
|
|
if not self._initialized:
|
|
return True
|
|
return True
|
|
def ungrabAllDevices(self):
|
|
if not self._initialized:
|
|
return True
|
|
return True
|
|
|
|
def forceUngrab(self):
|
|
"""Emergency method to release grabbed devices in case of failure"""
|
|
if not self._initialized:
|
|
return True
|
|
try:
|
|
# Try standard ungrab first
|
|
return self.ungrabAllDevices()
|
|
except Exception as e:
|
|
# Just log the failure and inform the user
|
|
if hasattr(self, 'env') and 'runtime' in self.env and 'debug' in self.env['runtime']:
|
|
self.env['runtime']['debug'].writeDebugOut(
|
|
f"Emergency device release failed: {str(e)}",
|
|
debug.debugLevel.ERROR
|
|
)
|
|
else:
|
|
print(f"Emergency device release failed: {str(e)}")
|
|
return False
|
|
|
|
def hasIDevices(self):
|
|
if not self._initialized:
|
|
return False
|
|
return True
|
|
def removeAllDevices(self):
|
|
if not self._initialized:
|
|
return
|
|
def sendKey(self):
|
|
if not self._initialized:
|
|
return
|
|
def __del__(self):
|
|
if not self._initialized:
|
|
return
|
|
try:
|
|
self.removeAllDevices()
|
|
except Exception as e:
|
|
print(f'inputDriver __del__: Error removing devices: {str(e)}')
|