From e7b63e47c0093f4bbe04848b555abe6dbf22c60e Mon Sep 17 00:00:00 2001 From: mshameersm <90616493+mshameersm@users.noreply.github.com> Date: Fri, 10 Apr 2026 11:14:36 +0530 Subject: [PATCH 1/3] Add holdInterval in keySimulator --- framework/core/commonRemote.py | 5 +++-- .../remoteControllerModules/keySimulator.py | 18 ++++++++---------- framework/core/remoteControllerModules/none.py | 5 +++-- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/framework/core/commonRemote.py b/framework/core/commonRemote.py index 967d13c..406d671 100644 --- a/framework/core/commonRemote.py +++ b/framework/core/commonRemote.py @@ -161,7 +161,7 @@ def __decodeRemoteMapConfig(self): keyDictionary = config.get('remoteMaps',{}) return keyDictionary - def sendKey(self, keycode:dict, delay:int=1, repeat:int=1, randomRepeat:int=0): + def sendKey(self, keycode:dict, delay:int=1, repeat:int=1, randomRepeat:int=0, holdInterval:int=0): """Send a key to the remoteCommander Args: @@ -169,6 +169,7 @@ def sendKey(self, keycode:dict, delay:int=1, repeat:int=1, randomRepeat:int=0): delay (int, optional): Delay in seconds between repeats. Defaults to 1. repeat (int, optional): How many key repeats. Defaults to 1. randomRepeat (int, optional): Random Key repeat value. Defaults to 0. + holdInterval (int, optional): Hold the key for specified delay. Defaults to 0. """ if (randomRepeat != 0): import random @@ -181,7 +182,7 @@ def sendKey(self, keycode:dict, delay:int=1, repeat:int=1, randomRepeat:int=0): self.log.info( "sendKey[" + keycode.name + "] delay:[" +str(delay)+"]" ) mappedCode = self.remoteMap.getMappedKey( keycode.name ) - result = self.remoteController.sendKey( mappedCode, repeat, delay) + result = self.remoteController.sendKey( mappedCode, repeat, delay, holdInterval) return result def setKeyMap( self, name:dict ): diff --git a/framework/core/remoteControllerModules/keySimulator.py b/framework/core/remoteControllerModules/keySimulator.py index e080056..86e932a 100644 --- a/framework/core/remoteControllerModules/keySimulator.py +++ b/framework/core/remoteControllerModules/keySimulator.py @@ -56,13 +56,14 @@ def __init__(self, log: logModule, remoteConfig: dict): prompt=self.prompt ) - def sendKey(self, key: str, repeat: int, delay: int): + def sendKey(self, key: str, repeat: int=0, delay: int=1, holdInterval: int=0): """Send a key command with specified repeats and interval. Args: key (str): The key to send. repeat (int): Number of times to send the key. delay (int): Delay between key presses in seconds. + holdInterval (int): How long to wait between key presses. Returns: bool: Result of the command verification. @@ -70,13 +71,10 @@ def sendKey(self, key: str, repeat: int, delay: int): finalResult = True # Send the key command - for _ in range(repeat): - self.session.write("") - self.session.write(f"keySimulator -k{key}", wait_for_prompt=True) - time.sleep(delay) - output = self.session.read_until(self.prompt, timeout=10) - if self.prompt not in output: - self.log.error(f"Failed to send key: {key}") - finalResult = False - break + self.session.write("") + self.session.write(f"keySimulator -k{key} -i{delay} -r{repeat} -p{holdInterval}", wait_for_prompt=True) + output = self.session.read_until(self.prompt, timeout=10) + if self.prompt not in output: + self.log.error(f"Failed to send key: {key}") + finalResult = False return finalResult diff --git a/framework/core/remoteControllerModules/none.py b/framework/core/remoteControllerModules/none.py index c4e8a77..ffc5832 100644 --- a/framework/core/remoteControllerModules/none.py +++ b/framework/core/remoteControllerModules/none.py @@ -43,13 +43,14 @@ def __init__( self, log:logModule, remoteConfig:dict): """ self.log = log - def sendKey(self, code:str, repeat:int, delay:int ): + def sendKey(self, code:str, repeat:int, delay:int, holdInterval:int ): """Send a key Args: code (str): keycode repeat (int): number of repeats required delay (int): delay in seconds between repeats + holdInterval (int): How long to wait between key presses. Returns: bool: true on success otherwise failure @@ -58,7 +59,7 @@ def sendKey(self, code:str, repeat:int, delay:int ): return False for _ in range(repeat): - self.log.info("remoteNone: sendKey( code=[{}] repeat=[{}] delay=[{}] )".format( code, repeat, delay ) ) + self.log.info("remoteNone: sendKey( code=[{}] repeat=[{}] delay=[{}] holdInterval=[{}] )".format( code, repeat, delay, holdInterval ) ) time.sleep( delay ) return True \ No newline at end of file From 14a760f6b95ddf7e671506d0dca08393fcf62f12 Mon Sep 17 00:00:00 2001 From: mshameersm <90616493+mshameersm@users.noreply.github.com> Date: Fri, 17 Apr 2026 15:56:04 +0530 Subject: [PATCH 2/3] update function signature for sendkey --- framework/core/remoteControllerModules/arduino.py | 3 ++- framework/core/remoteControllerModules/olimex.py | 2 +- framework/core/remoteControllerModules/redrat.py | 2 +- framework/core/remoteControllerModules/remoteInterface.py | 3 ++- framework/core/remoteControllerModules/skyProc.py | 2 +- 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/framework/core/remoteControllerModules/arduino.py b/framework/core/remoteControllerModules/arduino.py index 096e3f4..27547d5 100644 --- a/framework/core/remoteControllerModules/arduino.py +++ b/framework/core/remoteControllerModules/arduino.py @@ -48,13 +48,14 @@ def __init__( self, log:logModule, remoteConfig:dict() ): self.arduino = serial.Serial(port=self.remoteConfig.get("port"), baudrate=self.remoteConfig.get("baudrate"), timeout=300) self.firstKeyPressInTc = True - def sendKey(self, key, repeat=1, delay=1): + def sendKey(self, key, repeat=1, delay=1, holdInterval=0): """Send IR key using arduino module Args: key (str) - Key to be sent to device# repeat (int) - Number of times the key has to be pressed. Defaults to 1 delay (int) - wait time after pressing the key + holdInterval (int): How long to wait between key presses. """ if self.firstKeyPressInTc: time.sleep(5) diff --git a/framework/core/remoteControllerModules/olimex.py b/framework/core/remoteControllerModules/olimex.py index 7458a0f..2cce4ef 100644 --- a/framework/core/remoteControllerModules/olimex.py +++ b/framework/core/remoteControllerModules/olimex.py @@ -53,7 +53,7 @@ def command(self, cmd:str): self.telnet.disconnect() return True - def sendKey(self, code:str, repeat:int, delay:int ): + def sendKey(self, code:str, repeat:int, delay:int, holdInterval:int): if code == None: return False diff --git a/framework/core/remoteControllerModules/redrat.py b/framework/core/remoteControllerModules/redrat.py index dadd83d..e635f63 100644 --- a/framework/core/remoteControllerModules/redrat.py +++ b/framework/core/remoteControllerModules/redrat.py @@ -113,7 +113,7 @@ def __init__(self, log: logModule, config: dict): self._client.start(self._hub_ip, hub_port=self._hub_port, netbox_id=self._netbox_id) self._output = config.get('output', 1) - def sendKey(self, code, repeat, delay): + def sendKey(self, code, repeat, delay, holdInterval): msg = f'{self._netbox_id_type}="{self._netbox_id}" {code} output="{self._output}"' for _ in range(repeat): if 'OK' not in self._client.send_message(msg): diff --git a/framework/core/remoteControllerModules/remoteInterface.py b/framework/core/remoteControllerModules/remoteInterface.py index 7d32978..6589691 100644 --- a/framework/core/remoteControllerModules/remoteInterface.py +++ b/framework/core/remoteControllerModules/remoteInterface.py @@ -44,13 +44,14 @@ def __init__( self, log:logModule, remoteConfig:dict): self._config = remoteConfig @abstractmethod - def sendKey(self, code:str, repeat:int, delay:int ): + def sendKey(self, code:str, repeat:int, delay:int, holdInterval:int ): """Send a key Args: code (str): keycode repeat (int): number of repeats required delay (int): delay in seconds between repeats + holdInterval (int): How long to wait between key presses. Returns: bool: true on success otherwise failure diff --git a/framework/core/remoteControllerModules/skyProc.py b/framework/core/remoteControllerModules/skyProc.py index cd62faa..90e7654 100644 --- a/framework/core/remoteControllerModules/skyProc.py +++ b/framework/core/remoteControllerModules/skyProc.py @@ -51,7 +51,7 @@ def command(self, cmd): self.telnet.disconnect() return True - def sendKey(self, code, repeat, delay ): + def sendKey(self, code, repeat, delay, holdInterval ): # Run the key sendKey via the terminal command="echo " + str(code) + " > /proc/cdi_ir" From 364e2d8352d4e1369df230d3494f0532941d449c Mon Sep 17 00:00:00 2001 From: mshameersm <90616493+mshameersm@users.noreply.github.com> Date: Wed, 6 May 2026 11:09:46 +0530 Subject: [PATCH 3/3] update timeout for read_until as it takes time for some --- framework/core/remoteControllerModules/keySimulator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/core/remoteControllerModules/keySimulator.py b/framework/core/remoteControllerModules/keySimulator.py index 86e932a..0280db2 100644 --- a/framework/core/remoteControllerModules/keySimulator.py +++ b/framework/core/remoteControllerModules/keySimulator.py @@ -73,7 +73,7 @@ def sendKey(self, key: str, repeat: int=0, delay: int=1, holdInterval: int=0): # Send the key command self.session.write("") self.session.write(f"keySimulator -k{key} -i{delay} -r{repeat} -p{holdInterval}", wait_for_prompt=True) - output = self.session.read_until(self.prompt, timeout=10) + output = self.session.read_until(self.prompt, timeout=30) if self.prompt not in output: self.log.error(f"Failed to send key: {key}") finalResult = False