From 5241bfa8ab872628f43f8e6b808db453063352fe Mon Sep 17 00:00:00 2001 From: chrys87 Date: Tue, 6 Mar 2018 13:58:32 +0100 Subject: [PATCH 01/21] Update evdevDriver.py --- src/fenrir/inputDriver/evdevDriver.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fenrir/inputDriver/evdevDriver.py b/src/fenrir/inputDriver/evdevDriver.py index 2a5e81f5..a09a60ac 100644 --- a/src/fenrir/inputDriver/evdevDriver.py +++ b/src/fenrir/inputDriver/evdevDriver.py @@ -64,7 +64,7 @@ class driver(inputDriver): devices = monitor.poll(2) if devices: while monitor.poll(0.5): - time.sleep(0.2) + time.sleep(0.08) eventQueue.put({"Type":fenrirEventType.PlugInputDevice,"Data":None}) return time.time() def plugInputDeviceWatchdogTimer(self, active): @@ -72,10 +72,10 @@ class driver(inputDriver): return time.time() def inputWatchdog(self,active , params): try: - deviceFd = [] while self.watchDog.value == 0: if active.value == 0: return + time.sleep(0.01) r = [] while r == []: if active.value == 0: From 4c2c8b83e4f3b886f2ff8caa3930c364ac6dc682 Mon Sep 17 00:00:00 2001 From: chrys87 Date: Tue, 6 Mar 2018 16:29:25 +0100 Subject: [PATCH 02/21] Update evdevDriver.py --- src/fenrir/inputDriver/evdevDriver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fenrir/inputDriver/evdevDriver.py b/src/fenrir/inputDriver/evdevDriver.py index a09a60ac..9241384b 100644 --- a/src/fenrir/inputDriver/evdevDriver.py +++ b/src/fenrir/inputDriver/evdevDriver.py @@ -80,7 +80,7 @@ class driver(inputDriver): while r == []: if active.value == 0: return - r, w, x = select(list(params['dev']), [], [], 0.3) + r, w, x = select(list(params['dev']), [], [], 0.5) self.watchDog.value = 0 except: pass From 35fb684627a0a4151da0c1a9e63dba66906fe78e Mon Sep 17 00:00:00 2001 From: chrys Date: Tue, 6 Mar 2018 22:14:05 +0000 Subject: [PATCH 03/21] WIP move key detection to watchdog --- config/settings/settings.conf | 2 +- src/fenrir/core/eventData.py | 0 src/fenrir/core/fenrirManager.py | 19 ++++-- src/fenrir/core/inputDriver.py | 5 +- src/fenrir/core/inputManager.py | 92 +++++++++++++-------------- src/fenrir/inputDriver/dummyDriver.py | 5 -- src/fenrir/inputDriver/evdevDriver.py | 65 +++++-------------- 7 files changed, 79 insertions(+), 109 deletions(-) mode change 100755 => 100644 src/fenrir/core/eventData.py diff --git a/config/settings/settings.conf b/config/settings/settings.conf index 29ea299f..16efab11 100644 --- a/config/settings/settings.conf +++ b/config/settings/settings.conf @@ -124,7 +124,7 @@ driver=vcsaDriver encoding=auto screenUpdateDelay=0.05 suspendingScreen= -autodetectSuspendingScreen=True +autodetectSuspendingScreen=False [keyboard] driver=evdevDriver diff --git a/src/fenrir/core/eventData.py b/src/fenrir/core/eventData.py old mode 100755 new mode 100644 diff --git a/src/fenrir/core/fenrirManager.py b/src/fenrir/core/fenrirManager.py index 4ac8ec97..6a4f0ee2 100644 --- a/src/fenrir/core/fenrirManager.py +++ b/src/fenrir/core/fenrirManager.py @@ -49,18 +49,21 @@ class fenrirManager(): self.environment['runtime']['eventManager'].startMainEventLoop() self.shutdown() def handleInput(self, event): - #startTime = time.time() - eventReceived = self.environment['runtime']['inputManager'].getInputEvent() + #startTime = time.time + if not event['Data']: + event['Data'] = self.environment['runtime']['inputManager'].getInputEvent() + if event['Data']: + event['Data']['EventName'] = self.environment['runtime']['inputManager'].convertEventName(event['Data']['EventName']) + self.environment['runtime']['inputManager'].handleInputEvent(event['Data']) if self.environment['runtime']['inputManager'].noKeyPressed(): self.environment['runtime']['inputManager'].clearLastDeepInput() - if eventReceived: - + if True: if self.environment['runtime']['screenManager'].isSuspendingScreen(): self.environment['runtime']['inputManager'].writeEventBuffer() else: if self.environment['runtime']['helpManager'].isTutorialMode(): self.environment['runtime']['inputManager'].clearEventBuffer() - + print('detect') self.detectCommand() if self.modifierInput: @@ -82,6 +85,7 @@ class fenrirManager(): if event['Data'] == '': return command = event['Data'] + print('fire',command) if self.environment['runtime']['helpManager'].isTutorialMode(): if self.environment['runtime']['commandManager'].commandExists( command, 'help'): self.environment['runtime']['commandManager'].executeCommand( command, 'help') @@ -143,10 +147,10 @@ class fenrirManager(): if self.environment['runtime']['inputManager'].isKeyPress(): if self.command != '': self.singleKeyCommand = True - + print(self.singleKeyCommand,self.modifierInput) if not (self.singleKeyCommand or self.modifierInput): return - + print(self.command,1) # fire event if self.command != '': if self.modifierInput: @@ -157,6 +161,7 @@ class fenrirManager(): if self.environment['runtime']['inputManager'].noKeyPressed(): self.environment['runtime']['eventManager'].putToEventQueue(fenrirEventType.ExecuteCommand, self.command) self.command = '' + print(self.command,2) def shutdownRequest(self): try: self.environment['runtime']['eventManager'].stopMainEventLoop() diff --git a/src/fenrir/core/inputDriver.py b/src/fenrir/core/inputDriver.py index b17a537c..f4d19e46 100644 --- a/src/fenrir/core/inputDriver.py +++ b/src/fenrir/core/inputDriver.py @@ -17,9 +17,12 @@ class inputDriver(): self.releaseDevices() self._isInitialized = False def getInputEvent(self): + time.sleep(0.05) + return None + def handleInputEvent(self, event): time.sleep(0.05) if not self._initialized: - return None + return def writeEventBuffer(self): if not self._initialized: return diff --git a/src/fenrir/core/inputManager.py b/src/fenrir/core/inputManager.py index 139ed4c6..bb2b8a82 100644 --- a/src/fenrir/core/inputManager.py +++ b/src/fenrir/core/inputManager.py @@ -27,52 +27,52 @@ class inputManager(): def shutdown(self): self.removeAllDevices() self.env['runtime']['settingsManager'].shutdownDriver('inputDriver') - - def getInputEvent(self): - eventReceived = False - mEvent = self.env['runtime']['inputDriver'].getInputEvent() - if mEvent: - mEvent['EventName'] = self.convertEventName(mEvent['EventName']) - eventReceived = True - self.env['input']['prevInput'] = self.env['input']['currInput'].copy() - if mEvent['EventState'] == 0: - if mEvent['EventName'] in self.env['input']['currInput']: - self.env['input']['currInput'].remove(mEvent['EventName']) - if len(self.env['input']['currInput']) > 1: - self.env['input']['currInput'] = sorted(self.env['input']['currInput']) - elif len(self.env['input']['currInput']) == 0: - self.env['input']['shortcutRepeat'] = 1 - self.setLedState = self.handleLedStates(mEvent) - self.lastInputTime = time.time() - elif mEvent['EventState'] == 1: - if not mEvent['EventName'] in self.env['input']['currInput']: - self.env['input']['currInput'].append(mEvent['EventName']) - if len(self.env['input']['currInput']) > 1: - self.env['input']['currInput'] = sorted(self.env['input']['currInput']) - if len(self.lastDeepestInput) < len(self.env['input']['currInput']): - self.setLastDeepestInput( self.env['input']['currInput'].copy()) - elif self.lastDeepestInput == self.env['input']['currInput']: - if time.time() - self.lastInputTime <= self.env['runtime']['settingsManager'].getSettingAsFloat('keyboard','doubleTapTimeout'): - self.env['input']['shortcutRepeat'] += 1 - else: - self.env['input']['shortcutRepeat'] = 1 - self.setLedState = self.handleLedStates(mEvent) - self.lastInputTime = time.time() - elif mEvent['EventState'] == 2: - self.lastInputTime = time.time() - else: - pass - self.env['input']['oldNumLock'] = self.env['input']['newNumLock'] - self.env['input']['newNumLock'] = self.env['runtime']['inputDriver'].getLedState() - self.env['input']['oldCapsLock'] = self.env['input']['newCapsLock'] - self.env['input']['newCapsLock'] = self.env['runtime']['inputDriver'].getLedState(1) - self.env['input']['oldScrollLock'] = self.env['input']['newScrollLock'] - self.env['input']['newScrollLock'] = self.env['runtime']['inputDriver'].getLedState(2) - self.env['runtime']['debug'].writeDebugOut("currInput " + str(self.env['input']['currInput'] ) ,debug.debugLevel.INFO) - if self.noKeyPressed(): - self.env['input']['prevInput'] = [] - self.setLedState = True - return eventReceived + def getInputEvent(self): + return self.env['runtime']['inputDriver'].getInputEvent() + def handleInputEvent(self, eventData): + if not eventData: + return + print(self.env['input']['currInput']) + print(eventData['EventState']) + self.env['input']['prevInput'] = self.env['input']['currInput'].copy() + if eventData['EventState'] == 0: + if eventData['EventName'] in self.env['input']['currInput']: + self.env['input']['currInput'].remove(eventData['EventName']) + if len(self.env['input']['currInput']) > 1: + self.env['input']['currInput'] = sorted(self.env['input']['currInput']) + elif len(self.env['input']['currInput']) == 0: + self.env['input']['shortcutRepeat'] = 1 + self.setLedState = self.handleLedStates(eventData) + self.lastInputTime = time.time() + elif eventData['EventState'] == 1: + if not eventData['EventName'] in self.env['input']['currInput']: + if not eventData['EventName'] == 'KEY_RESERVED': + self.env['input']['currInput'].append(eventData['EventName']) + if len(self.env['input']['currInput']) > 1: + self.env['input']['currInput'] = sorted(self.env['input']['currInput']) + if len(self.lastDeepestInput) < len(self.env['input']['currInput']): + self.setLastDeepestInput( self.env['input']['currInput'].copy()) + elif self.lastDeepestInput == self.env['input']['currInput']: + if time.time() - self.lastInputTime <= self.env['runtime']['settingsManager'].getSettingAsFloat('keyboard','doubleTapTimeout'): + self.env['input']['shortcutRepeat'] += 1 + else: + self.env['input']['shortcutRepeat'] = 1 + self.setLedState = self.handleLedStates(eventData) + self.lastInputTime = time.time() + elif eventData['EventState'] == 2: + self.lastInputTime = time.time() + else: + pass + self.env['input']['oldNumLock'] = self.env['input']['newNumLock'] + self.env['input']['newNumLock'] = self.env['runtime']['inputDriver'].getLedState() + self.env['input']['oldCapsLock'] = self.env['input']['newCapsLock'] + self.env['input']['newCapsLock'] = self.env['runtime']['inputDriver'].getLedState(1) + self.env['input']['oldScrollLock'] = self.env['input']['newScrollLock'] + self.env['input']['newScrollLock'] = self.env['runtime']['inputDriver'].getLedState(2) + self.env['runtime']['debug'].writeDebugOut("currInput " + str(self.env['input']['currInput'] ) ,debug.debugLevel.INFO) + if self.noKeyPressed(): + self.env['input']['prevInput'] = [] + self.setLedState = True def handleLedStates(self, mEvent): if not self.setLedState: diff --git a/src/fenrir/inputDriver/dummyDriver.py b/src/fenrir/inputDriver/dummyDriver.py index 55db7f83..917ee1f7 100644 --- a/src/fenrir/inputDriver/dummyDriver.py +++ b/src/fenrir/inputDriver/dummyDriver.py @@ -11,8 +11,3 @@ from core.inputDriver import inputDriver class driver(inputDriver): def __init__(self): inputDriver.__init__(self) - - def getInputEvent(self): - time.sleep(0.1) - if not self._initialized: - return None diff --git a/src/fenrir/inputDriver/evdevDriver.py b/src/fenrir/inputDriver/evdevDriver.py index 9241384b..e32c7d14 100644 --- a/src/fenrir/inputDriver/evdevDriver.py +++ b/src/fenrir/inputDriver/evdevDriver.py @@ -12,6 +12,7 @@ try: import evdev from evdev import InputDevice, UInput _evdevAvailable = True + except Exception as e: _evdevAvailableError = str(e) @@ -54,7 +55,7 @@ class driver(inputDriver): self.env['runtime']['processManager'].addCustomEventThread(self.plugInputDeviceWatchdogUdev) else: self.env['runtime']['processManager'].addSimpleEventThread(fenrirEventType.PlugInputDevice, self.plugInputDeviceWatchdogTimer) - self.env['runtime']['processManager'].addSimpleEventThread(fenrirEventType.KeyboardInput, self.inputWatchdog, {'dev':self.iDevicesFD}) + self.env['runtime']['processManager'].addCustomEventThread(self.inputWatchdog) def plugInputDeviceWatchdogUdev(self,active , eventQueue): context = pyudev.Context() monitor = pyudev.Monitor.from_netlink(context) @@ -65,66 +66,31 @@ class driver(inputDriver): if devices: while monitor.poll(0.5): time.sleep(0.08) - eventQueue.put({"Type":fenrirEventType.PlugInputDevice,"Data":None}) + #eventQueue.put({"Type":fenrirEventType.PlugInputDevice,"Data":None}) return time.time() def plugInputDeviceWatchdogTimer(self, active): time.sleep(2.5) return time.time() - def inputWatchdog(self,active , params): - try: - while self.watchDog.value == 0: - if active.value == 0: - return - time.sleep(0.01) - r = [] - while r == []: - if active.value == 0: - return - r, w, x = select(list(params['dev']), [], [], 0.5) - self.watchDog.value = 0 - except: - pass - def getInputEvent(self): - if not self.hasIDevices(): - self.watchDog.value = 1 - return None - event = None - r, w, x = select(self.iDevices, [], [], 0.00001) - if r != []: + def inputWatchdog(self,active , eventQueue): + while active.value: + r, w, x = select(self.iDevices, [], [], 0.5) for fd in r: + event = None try: event = self.iDevices[fd].read_one() + currMapEvent = self.mapEvent(event) + self.env['input']['eventBuffer'].append( [self.iDevices[fd], self.uDevices[fd], event]) + eventQueue.put({"Type":fenrirEventType.KeyboardInput,"Data":currMapEvent}) except: self.removeDevice(fd) - self.watchDog.value = 1 - return None - foreward = False - while(event): - self.env['input']['eventBuffer'].append( [self.iDevices[fd], self.uDevices[fd], event]) - if event.type == evdev.events.EV_KEY: - if event.code != 0: - currMapEvent = self.mapEvent(event) - if not currMapEvent: - foreward = True - event = self.iDevices[fd].read_one() - continue - if not isinstance(currMapEvent['EventName'], str): - foreward = True - event = self.iDevices[fd].read_one() - continue - if not foreward: - if currMapEvent['EventState'] in [0,1,2]: - self.watchDog.value = 1 - return currMapEvent - else: - if not event.type in [0,1,4]: - foreward = True - event = self.iDevices[fd].read_one() + + def handleInputEvent(self, event): + if not event: + print('skip') + return if foreward: self.writeEventBuffer() self.clearEventBuffer() - self.watchDog.value = 1 - return None def writeEventBuffer(self): if not self._initialized: @@ -224,6 +190,7 @@ class driver(inputDriver): mEvent['EventSec'] = event.sec mEvent['EventUsec'] = event.usec mEvent['EventState'] = event.value + mEvent['EventType'] = event.type return mEvent except Exception as e: return None From 1c274a7c1155bc522b15d8d6f11bfb5b514687c1 Mon Sep 17 00:00:00 2001 From: chrys Date: Tue, 6 Mar 2018 23:58:28 +0100 Subject: [PATCH 04/21] fix command handling --- src/fenrir/inputDriver/evdevDriver.py | 43 ++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/src/fenrir/inputDriver/evdevDriver.py b/src/fenrir/inputDriver/evdevDriver.py index e32c7d14..c3c35c5e 100644 --- a/src/fenrir/inputDriver/evdevDriver.py +++ b/src/fenrir/inputDriver/evdevDriver.py @@ -70,23 +70,52 @@ class driver(inputDriver): return time.time() def plugInputDeviceWatchdogTimer(self, active): time.sleep(2.5) - return time.time() + return time.time() + def inputWatchdog(self,active , eventQueue): while active.value: r, w, x = select(self.iDevices, [], [], 0.5) for fd in r: event = None try: - event = self.iDevices[fd].read_one() - currMapEvent = self.mapEvent(event) - self.env['input']['eventBuffer'].append( [self.iDevices[fd], self.uDevices[fd], event]) - eventQueue.put({"Type":fenrirEventType.KeyboardInput,"Data":currMapEvent}) + event = self.iDevices[fd].read_one() except: self.removeDevice(fd) - + foreward = False + while(event): + self.env['input']['eventBuffer'].append( [self.iDevices[fd], self.uDevices[fd], event]) + if event.type == evdev.events.EV_KEY: + if event.code != 0: + print(1) + currMapEvent = self.mapEvent(event) + if not currMapEvent: + print(2) + foreward = True + event = self.iDevices[fd].read_one() + continue + if not isinstance(currMapEvent['EventName'], str): + print(3) + foreward = True + event = self.iDevices[fd].read_one() + continue + if not foreward: + print(4) + if currMapEvent['EventState'] in [0,1,2]: + print(5) + eventQueue.put({"Type":fenrirEventType.KeyboardInput,"Data":currMapEvent}) + print(currMapEvent) + print(6) + else: + print(7) + if not event.type in [0,1,4]: + foreward = True + event = self.iDevices[fd].read_one() + if foreward: + print('hmmm') + self.writeEventBuffer() + self.clearEventBuffer() def handleInputEvent(self, event): if not event: - print('skip') return if foreward: self.writeEventBuffer() From 54e88b0c9309443f22ce555e1295546278a1c8eb Mon Sep 17 00:00:00 2001 From: chrys Date: Wed, 7 Mar 2018 00:04:07 +0100 Subject: [PATCH 05/21] fix command handling --- src/fenrir/inputDriver/evdevDriver.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fenrir/inputDriver/evdevDriver.py b/src/fenrir/inputDriver/evdevDriver.py index c3c35c5e..7c3ba4c6 100644 --- a/src/fenrir/inputDriver/evdevDriver.py +++ b/src/fenrir/inputDriver/evdevDriver.py @@ -66,7 +66,7 @@ class driver(inputDriver): if devices: while monitor.poll(0.5): time.sleep(0.08) - #eventQueue.put({"Type":fenrirEventType.PlugInputDevice,"Data":None}) + eventQueue.put({"Type":fenrirEventType.PlugInputDevice,"Data":None}) return time.time() def plugInputDeviceWatchdogTimer(self, active): time.sleep(2.5) @@ -77,11 +77,11 @@ class driver(inputDriver): r, w, x = select(self.iDevices, [], [], 0.5) for fd in r: event = None + foreward = False try: event = self.iDevices[fd].read_one() except: self.removeDevice(fd) - foreward = False while(event): self.env['input']['eventBuffer'].append( [self.iDevices[fd], self.uDevices[fd], event]) if event.type == evdev.events.EV_KEY: From a60374923e02aa1591c129a6e0a1b30ff02a8d72 Mon Sep 17 00:00:00 2001 From: chrys Date: Wed, 7 Mar 2018 00:09:48 +0100 Subject: [PATCH 06/21] remove debug messages --- src/fenrir/core/fenrirManager.py | 10 +++++----- src/fenrir/core/inputManager.py | 2 -- src/fenrir/inputDriver/evdevDriver.py | 9 --------- 3 files changed, 5 insertions(+), 16 deletions(-) diff --git a/src/fenrir/core/fenrirManager.py b/src/fenrir/core/fenrirManager.py index 6a4f0ee2..04ad6d42 100644 --- a/src/fenrir/core/fenrirManager.py +++ b/src/fenrir/core/fenrirManager.py @@ -63,7 +63,7 @@ class fenrirManager(): else: if self.environment['runtime']['helpManager'].isTutorialMode(): self.environment['runtime']['inputManager'].clearEventBuffer() - print('detect') + self.detectCommand() if self.modifierInput: @@ -85,7 +85,7 @@ class fenrirManager(): if event['Data'] == '': return command = event['Data'] - print('fire',command) + if self.environment['runtime']['helpManager'].isTutorialMode(): if self.environment['runtime']['commandManager'].commandExists( command, 'help'): self.environment['runtime']['commandManager'].executeCommand( command, 'help') @@ -147,10 +147,10 @@ class fenrirManager(): if self.environment['runtime']['inputManager'].isKeyPress(): if self.command != '': self.singleKeyCommand = True - print(self.singleKeyCommand,self.modifierInput) + if not (self.singleKeyCommand or self.modifierInput): return - print(self.command,1) + # fire event if self.command != '': if self.modifierInput: @@ -161,7 +161,7 @@ class fenrirManager(): if self.environment['runtime']['inputManager'].noKeyPressed(): self.environment['runtime']['eventManager'].putToEventQueue(fenrirEventType.ExecuteCommand, self.command) self.command = '' - print(self.command,2) + def shutdownRequest(self): try: self.environment['runtime']['eventManager'].stopMainEventLoop() diff --git a/src/fenrir/core/inputManager.py b/src/fenrir/core/inputManager.py index bb2b8a82..896d742d 100644 --- a/src/fenrir/core/inputManager.py +++ b/src/fenrir/core/inputManager.py @@ -32,8 +32,6 @@ class inputManager(): def handleInputEvent(self, eventData): if not eventData: return - print(self.env['input']['currInput']) - print(eventData['EventState']) self.env['input']['prevInput'] = self.env['input']['currInput'].copy() if eventData['EventState'] == 0: if eventData['EventName'] in self.env['input']['currInput']: diff --git a/src/fenrir/inputDriver/evdevDriver.py b/src/fenrir/inputDriver/evdevDriver.py index 7c3ba4c6..3046f5f9 100644 --- a/src/fenrir/inputDriver/evdevDriver.py +++ b/src/fenrir/inputDriver/evdevDriver.py @@ -86,32 +86,23 @@ class driver(inputDriver): self.env['input']['eventBuffer'].append( [self.iDevices[fd], self.uDevices[fd], event]) if event.type == evdev.events.EV_KEY: if event.code != 0: - print(1) currMapEvent = self.mapEvent(event) if not currMapEvent: - print(2) foreward = True event = self.iDevices[fd].read_one() continue if not isinstance(currMapEvent['EventName'], str): - print(3) foreward = True event = self.iDevices[fd].read_one() continue if not foreward: - print(4) if currMapEvent['EventState'] in [0,1,2]: - print(5) eventQueue.put({"Type":fenrirEventType.KeyboardInput,"Data":currMapEvent}) - print(currMapEvent) - print(6) else: - print(7) if not event.type in [0,1,4]: foreward = True event = self.iDevices[fd].read_one() if foreward: - print('hmmm') self.writeEventBuffer() self.clearEventBuffer() def handleInputEvent(self, event): From c36d80e4241fee3bf74147174a086b59451636e7 Mon Sep 17 00:00:00 2001 From: chrys Date: Wed, 7 Mar 2018 00:18:32 +0100 Subject: [PATCH 07/21] remove unneded code --- src/fenrir/inputDriver/evdevDriver.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/fenrir/inputDriver/evdevDriver.py b/src/fenrir/inputDriver/evdevDriver.py index 3046f5f9..b147dc3b 100644 --- a/src/fenrir/inputDriver/evdevDriver.py +++ b/src/fenrir/inputDriver/evdevDriver.py @@ -106,11 +106,7 @@ class driver(inputDriver): self.writeEventBuffer() self.clearEventBuffer() def handleInputEvent(self, event): - if not event: - return - if foreward: - self.writeEventBuffer() - self.clearEventBuffer() + return def writeEventBuffer(self): if not self._initialized: From 5b239bcd619c62661fc96e9a037b8935a2bd67a6 Mon Sep 17 00:00:00 2001 From: chrys87 Date: Wed, 7 Mar 2018 10:16:11 +0100 Subject: [PATCH 08/21] Update evdevDriver.py --- src/fenrir/inputDriver/evdevDriver.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/fenrir/inputDriver/evdevDriver.py b/src/fenrir/inputDriver/evdevDriver.py index b147dc3b..5435f9c4 100644 --- a/src/fenrir/inputDriver/evdevDriver.py +++ b/src/fenrir/inputDriver/evdevDriver.py @@ -77,7 +77,8 @@ class driver(inputDriver): r, w, x = select(self.iDevices, [], [], 0.5) for fd in r: event = None - foreward = False + foreward = False + eventFired = False try: event = self.iDevices[fd].read_one() except: @@ -98,11 +99,12 @@ class driver(inputDriver): if not foreward: if currMapEvent['EventState'] in [0,1,2]: eventQueue.put({"Type":fenrirEventType.KeyboardInput,"Data":currMapEvent}) + eventFired = True else: if not event.type in [0,1,4]: foreward = True event = self.iDevices[fd].read_one() - if foreward: + if foreward and not eventFired: self.writeEventBuffer() self.clearEventBuffer() def handleInputEvent(self, event): From 8cc3eefd489abe041ab71e347efb2e04f0aa5e76 Mon Sep 17 00:00:00 2001 From: chrys87 Date: Wed, 7 Mar 2018 10:20:46 +0100 Subject: [PATCH 09/21] cleanups --- src/fenrir/core/inputManager.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/fenrir/core/inputManager.py b/src/fenrir/core/inputManager.py index 896d742d..695917d7 100644 --- a/src/fenrir/core/inputManager.py +++ b/src/fenrir/core/inputManager.py @@ -44,8 +44,7 @@ class inputManager(): self.lastInputTime = time.time() elif eventData['EventState'] == 1: if not eventData['EventName'] in self.env['input']['currInput']: - if not eventData['EventName'] == 'KEY_RESERVED': - self.env['input']['currInput'].append(eventData['EventName']) + self.env['input']['currInput'].append(eventData['EventName']) if len(self.env['input']['currInput']) > 1: self.env['input']['currInput'] = sorted(self.env['input']['currInput']) if len(self.lastDeepestInput) < len(self.env['input']['currInput']): @@ -59,8 +58,7 @@ class inputManager(): self.lastInputTime = time.time() elif eventData['EventState'] == 2: self.lastInputTime = time.time() - else: - pass + self.env['input']['oldNumLock'] = self.env['input']['newNumLock'] self.env['input']['newNumLock'] = self.env['runtime']['inputDriver'].getLedState() self.env['input']['oldCapsLock'] = self.env['input']['newCapsLock'] From 8bae442030d9ada5e9a1e5ef73190a18ea6da710 Mon Sep 17 00:00:00 2001 From: chrys87 Date: Wed, 7 Mar 2018 10:22:51 +0100 Subject: [PATCH 10/21] Update settings.conf --- config/settings/settings.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/settings/settings.conf b/config/settings/settings.conf index 16efab11..29ea299f 100644 --- a/config/settings/settings.conf +++ b/config/settings/settings.conf @@ -124,7 +124,7 @@ driver=vcsaDriver encoding=auto screenUpdateDelay=0.05 suspendingScreen= -autodetectSuspendingScreen=False +autodetectSuspendingScreen=True [keyboard] driver=evdevDriver From af577fae5766e0ec369d37cb2b53df8ae0fa891b Mon Sep 17 00:00:00 2001 From: chrys87 Date: Wed, 7 Mar 2018 11:37:34 +0100 Subject: [PATCH 11/21] Update TODO v2.0 --- TODO v2.0 | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/TODO v2.0 b/TODO v2.0 index 512b08c5..1feecdfa 100644 --- a/TODO v2.0 +++ b/TODO v2.0 @@ -5,9 +5,11 @@ Things needing little knowledge are marked with "(Easy for contribution)". so ju [X] = Done Cleanups: -- split oldValues := newValues out to helper function - [] split it out - [] use it in vcsa driver +- get information already in watchdogs insteed of mainloop + [X] InputDriver + [] ScreenDriver + [] split oldValues := newValues out to helper function + [] move processing of diff to watchdog - Migrate *Data.py to classes and use getter/setter (Easy for contribution) [] commandsData.py [] eventData.py From c9cfb5b84c2a674fee42bce36ec5a62ab981d3d3 Mon Sep 17 00:00:00 2001 From: chrys87 Date: Wed, 7 Mar 2018 11:41:13 +0100 Subject: [PATCH 12/21] Update TODO v2.0 --- TODO v2.0 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/TODO v2.0 b/TODO v2.0 index 1feecdfa..2f0d37a7 100644 --- a/TODO v2.0 +++ b/TODO v2.0 @@ -5,11 +5,6 @@ Things needing little knowledge are marked with "(Easy for contribution)". so ju [X] = Done Cleanups: -- get information already in watchdogs insteed of mainloop - [X] InputDriver - [] ScreenDriver - [] split oldValues := newValues out to helper function - [] move processing of diff to watchdog - Migrate *Data.py to classes and use getter/setter (Easy for contribution) [] commandsData.py [] eventData.py @@ -22,6 +17,11 @@ Cleanups: [] settingsData -> defaultSettings.py General: +- get information already in watchdogs insteed of mainloop (use eventloop to transport) + [X] InputDriver + [] ScreenDriver + [] split oldValues := newValues out to helper function + [] move processing of diff to watchdog - make fenrir runable without settingsfile. fallback to defaults - imporove attribute handling [] improve attributes_curr_char (Easy for contribution) From b56c0acae3d81d47470ff6b619856afd7b11b68b Mon Sep 17 00:00:00 2001 From: chrys87 Date: Wed, 7 Mar 2018 13:10:11 +0100 Subject: [PATCH 13/21] Update evdevDriver.py --- src/fenrir/inputDriver/evdevDriver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fenrir/inputDriver/evdevDriver.py b/src/fenrir/inputDriver/evdevDriver.py index 5435f9c4..9c42dfb2 100644 --- a/src/fenrir/inputDriver/evdevDriver.py +++ b/src/fenrir/inputDriver/evdevDriver.py @@ -96,7 +96,7 @@ class driver(inputDriver): foreward = True event = self.iDevices[fd].read_one() continue - if not foreward: + if not foreward or eventFired: if currMapEvent['EventState'] in [0,1,2]: eventQueue.put({"Type":fenrirEventType.KeyboardInput,"Data":currMapEvent}) eventFired = True From febb9afe05a20ea1637658ed1a482c4659c8e1b1 Mon Sep 17 00:00:00 2001 From: chrys87 Date: Wed, 7 Mar 2018 13:28:49 +0100 Subject: [PATCH 14/21] Update vcsaDriver.py --- src/fenrir/screenDriver/vcsaDriver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fenrir/screenDriver/vcsaDriver.py b/src/fenrir/screenDriver/vcsaDriver.py index 15ec123b..8d792c5e 100644 --- a/src/fenrir/screenDriver/vcsaDriver.py +++ b/src/fenrir/screenDriver/vcsaDriver.py @@ -113,7 +113,7 @@ class driver(screenDriver): except Exception as e: self.env['runtime']['debug'].writeDebugOut('getSessionInformation: Maybe no LoginD:' + str(e),debug.debugLevel.ERROR) self.env['screen']['autoIgnoreScreens'] = [] - self.env['runtime']['debug'].writeDebugOut('getSessionInformation:' + str(self.env['screen']['autoIgnoreScreens']) + ' ' + str(self.env['general']) ,debug.debugLevel.INFO) + #self.env['runtime']['debug'].writeDebugOut('getSessionInformation:' + str(self.env['screen']['autoIgnoreScreens']) + ' ' + str(self.env['general']) ,debug.debugLevel.INFO) def updateWatchdog(self,active , eventQueue): try: From 12d43101bdcade0ac24ea4251936e14b7560ccc9 Mon Sep 17 00:00:00 2001 From: chrys87 Date: Wed, 7 Mar 2018 13:32:30 +0100 Subject: [PATCH 15/21] Update evdevDriver.py --- src/fenrir/inputDriver/evdevDriver.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/fenrir/inputDriver/evdevDriver.py b/src/fenrir/inputDriver/evdevDriver.py index 9c42dfb2..fa96e04e 100644 --- a/src/fenrir/inputDriver/evdevDriver.py +++ b/src/fenrir/inputDriver/evdevDriver.py @@ -84,29 +84,40 @@ class driver(inputDriver): except: self.removeDevice(fd) while(event): + self.env['runtime']['debug'].writeDebugOut('DEBUG INPUT1:' + str(event),debug.debugLevel.INFO) self.env['input']['eventBuffer'].append( [self.iDevices[fd], self.uDevices[fd], event]) if event.type == evdev.events.EV_KEY: + self.env['runtime']['debug'].writeDebugOut('DEBUG INPUT2:' + str(event),debug.debugLevel.INFO) if event.code != 0: + self.env['runtime']['debug'].writeDebugOut('DEBUG INPUT3:' + str(event),debug.debugLevel.INFO) currMapEvent = self.mapEvent(event) if not currMapEvent: foreward = True - event = self.iDevices[fd].read_one() + event = self.iDevices[fd].read_one() + self.env['runtime']['debug'].writeDebugOut('DEBUG INPUT4:' + str(event),debug.debugLevel.INFO) continue if not isinstance(currMapEvent['EventName'], str): foreward = True - event = self.iDevices[fd].read_one() + event = self.iDevices[fd].read_one() + self.env['runtime']['debug'].writeDebugOut('DEBUG INPUT5:' + str(event),debug.debugLevel.INFO) continue if not foreward or eventFired: if currMapEvent['EventState'] in [0,1,2]: eventQueue.put({"Type":fenrirEventType.KeyboardInput,"Data":currMapEvent}) eventFired = True + self.env['runtime']['debug'].writeDebugOut('DEBUG INPUT6:' + str(event),debug.debugLevel.INFO) + else: if not event.type in [0,1,4]: foreward = True + self.env['runtime']['debug'].writeDebugOut('DEBUG INPUT7:' + str(event),debug.debugLevel.INFO) + event = self.iDevices[fd].read_one() if foreward and not eventFired: self.writeEventBuffer() self.clearEventBuffer() + self.env['runtime']['debug'].writeDebugOut('DEBUG INPUT8:' + str(event),debug.debugLevel.INFO) + def handleInputEvent(self, event): return From 8445832db5ec2fc1076ad28a23688a88fef2481b Mon Sep 17 00:00:00 2001 From: chrys87 Date: Wed, 7 Mar 2018 14:23:36 +0100 Subject: [PATCH 16/21] Update evdevDriver.py --- src/fenrir/inputDriver/evdevDriver.py | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/fenrir/inputDriver/evdevDriver.py b/src/fenrir/inputDriver/evdevDriver.py index fa96e04e..2ab4ad8d 100644 --- a/src/fenrir/inputDriver/evdevDriver.py +++ b/src/fenrir/inputDriver/evdevDriver.py @@ -93,30 +93,24 @@ class driver(inputDriver): currMapEvent = self.mapEvent(event) if not currMapEvent: foreward = True - event = self.iDevices[fd].read_one() - self.env['runtime']['debug'].writeDebugOut('DEBUG INPUT4:' + str(event),debug.debugLevel.INFO) - continue + self.env['runtime']['debug'].writeDebugOut('DEBUG INPUT4:' + str(currMapEvent),debug.debugLevel.INFO) if not isinstance(currMapEvent['EventName'], str): foreward = True - event = self.iDevices[fd].read_one() - self.env['runtime']['debug'].writeDebugOut('DEBUG INPUT5:' + str(event),debug.debugLevel.INFO) - continue + self.env['runtime']['debug'].writeDebugOut('DEBUG INPUT5:' + str(currMapEvent),debug.debugLevel.INFO) if not foreward or eventFired: if currMapEvent['EventState'] in [0,1,2]: eventQueue.put({"Type":fenrirEventType.KeyboardInput,"Data":currMapEvent}) eventFired = True - self.env['runtime']['debug'].writeDebugOut('DEBUG INPUT6:' + str(event),debug.debugLevel.INFO) - + self.env['runtime']['debug'].writeDebugOut('DEBUG INPUT6:' + str(currMapEvent),debug.debugLevel.INFO) else: - if not event.type in [0,1,4]: + if not event.type in [0,4]: foreward = True - self.env['runtime']['debug'].writeDebugOut('DEBUG INPUT7:' + str(event),debug.debugLevel.INFO) + self.env['runtime']['debug'].writeDebugOut('DEBUG INPUT7:' + str(currMapEvent),debug.debugLevel.INFO) event = self.iDevices[fd].read_one() if foreward and not eventFired: self.writeEventBuffer() self.clearEventBuffer() - self.env['runtime']['debug'].writeDebugOut('DEBUG INPUT8:' + str(event),debug.debugLevel.INFO) def handleInputEvent(self, event): return From 2dc0e21594763c29f02dc51e1a390d47612103a4 Mon Sep 17 00:00:00 2001 From: chrys87 Date: Wed, 7 Mar 2018 14:24:37 +0100 Subject: [PATCH 17/21] Update fenrirManager.py --- src/fenrir/core/fenrirManager.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/fenrir/core/fenrirManager.py b/src/fenrir/core/fenrirManager.py index 04ad6d42..ad0e2e46 100644 --- a/src/fenrir/core/fenrirManager.py +++ b/src/fenrir/core/fenrirManager.py @@ -82,6 +82,8 @@ class fenrirManager(): self.environment['runtime']['commandManager'].executeDefaultTrigger('onInput') #print('handleInput:',time.time() - startTime) def handleExecuteCommand(self, event): + self.env['runtime']['debug'].writeDebugOut('DEBUG INPUT fenrirMan:' + str(event),debug.debugLevel.INFO) + if event['Data'] == '': return command = event['Data'] From 1f2527388d19a856889a66e512ea3ba37665cc87 Mon Sep 17 00:00:00 2001 From: chrys87 Date: Wed, 7 Mar 2018 14:25:30 +0100 Subject: [PATCH 18/21] Update inputManager.py --- src/fenrir/core/inputManager.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/fenrir/core/inputManager.py b/src/fenrir/core/inputManager.py index 695917d7..43195074 100644 --- a/src/fenrir/core/inputManager.py +++ b/src/fenrir/core/inputManager.py @@ -30,6 +30,7 @@ class inputManager(): def getInputEvent(self): return self.env['runtime']['inputDriver'].getInputEvent() def handleInputEvent(self, eventData): + self.env['runtime']['debug'].writeDebugOut('DEBUG INPUT inputMan:' + str(eventData),debug.debugLevel.INFO) if not eventData: return self.env['input']['prevInput'] = self.env['input']['currInput'].copy() From 6746c8ce6a8f35e895ae86193ed6f5edf4eb9414 Mon Sep 17 00:00:00 2001 From: chrys87 Date: Wed, 7 Mar 2018 14:41:53 +0100 Subject: [PATCH 19/21] Update fenrirManager.py --- src/fenrir/core/fenrirManager.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/fenrir/core/fenrirManager.py b/src/fenrir/core/fenrirManager.py index ad0e2e46..6a375ca8 100644 --- a/src/fenrir/core/fenrirManager.py +++ b/src/fenrir/core/fenrirManager.py @@ -50,6 +50,7 @@ class fenrirManager(): self.shutdown() def handleInput(self, event): #startTime = time.time + self.environment['runtime']['debug'].writeDebugOut('DEBUG INPUT fenrirMan:' + str(event),debug.debugLevel.INFO) if not event['Data']: event['Data'] = self.environment['runtime']['inputManager'].getInputEvent() if event['Data']: @@ -81,9 +82,7 @@ class fenrirManager(): self.environment['runtime']['screenManager'].update('onInput') self.environment['runtime']['commandManager'].executeDefaultTrigger('onInput') #print('handleInput:',time.time() - startTime) - def handleExecuteCommand(self, event): - self.env['runtime']['debug'].writeDebugOut('DEBUG INPUT fenrirMan:' + str(event),debug.debugLevel.INFO) - + def handleExecuteCommand(self, event): if event['Data'] == '': return command = event['Data'] From 638855faf9e5528b5d847c5a2e76af62056fa370 Mon Sep 17 00:00:00 2001 From: chrys87 Date: Wed, 7 Mar 2018 15:21:11 +0100 Subject: [PATCH 20/21] Update evdevDriver.py --- src/fenrir/inputDriver/evdevDriver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fenrir/inputDriver/evdevDriver.py b/src/fenrir/inputDriver/evdevDriver.py index 2ab4ad8d..44e8fa36 100644 --- a/src/fenrir/inputDriver/evdevDriver.py +++ b/src/fenrir/inputDriver/evdevDriver.py @@ -99,7 +99,7 @@ class driver(inputDriver): self.env['runtime']['debug'].writeDebugOut('DEBUG INPUT5:' + str(currMapEvent),debug.debugLevel.INFO) if not foreward or eventFired: if currMapEvent['EventState'] in [0,1,2]: - eventQueue.put({"Type":fenrirEventType.KeyboardInput,"Data":currMapEvent}) + eventQueue.put({"Type":fenrirEventType.KeyboardInput,"Data":currMapEvent.copy()}) eventFired = True self.env['runtime']['debug'].writeDebugOut('DEBUG INPUT6:' + str(currMapEvent),debug.debugLevel.INFO) else: From bf807c25192c7d5314b9f1c4779ad1c151bf4262 Mon Sep 17 00:00:00 2001 From: chrys87 Date: Wed, 7 Mar 2018 18:20:09 +0100 Subject: [PATCH 21/21] Update TODO v2.0 --- TODO v2.0 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/TODO v2.0 b/TODO v2.0 index 2f0d37a7..8560244a 100644 --- a/TODO v2.0 +++ b/TODO v2.0 @@ -22,7 +22,6 @@ General: [] ScreenDriver [] split oldValues := newValues out to helper function [] move processing of diff to watchdog -- make fenrir runable without settingsfile. fallback to defaults - imporove attribute handling [] improve attributes_curr_char (Easy for contribution) [] add an attribute sound (Easy for contribution) @@ -48,6 +47,8 @@ General: [] select field separator - make it runnable via pypy3 (low priority) [] wrapper script for running Fenrir to check if pypy exists, use python3 as fallback. +- make fenrir runnable without root permissions +- make fenrir runable without settingsfile. fallback to defaults Braille Support: [] brailleFocusMode: