#!/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)}')