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/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/keySimulator.py b/framework/core/remoteControllerModules/keySimulator.py index e080056..0280db2 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=30) + 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 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"