Files
test/keywords/ptp/phc_ctl_keywords.py
Guntaka Umashankar Reddy 3758f1758b Added pmc, phc_ctl and ip link set keywords
Change-Id: Ie456750985f4d50ccd76f18d6c8da558dbcb65e9
Signed-off-by: Guntaka Umashankar Reddy <umashankarguntaka.reddy@windriver.com>
2025-02-21 09:53:50 +00:00

107 lines
3.8 KiB
Python

from keywords.base_keyword import BaseKeyword
class PhcCtlKeywords(BaseKeyword):
"""
Directly control PHC device clock using given SSH connection.
Attributes:
ssh_connection: An instance of an SSH connection.
"""
def __init__(self, ssh_connection):
"""
Initializes the PhcCtlKeywords with an SSH connection.
Args:
ssh_connection: An instance of an SSH connection.
"""
self.ssh_connection = ssh_connection
def phc_ctl_get(self, device: str) -> str:
"""
Get the current time of the PHC clock device
Args:
device : may be either CLOCK_REALTIME, any /dev/ptpX device, or any ethernet device which supports ethtool's get_ts_info ioctl.
Example:
phc_ctl[643764.828]: clock time is 1739856255.215802036 or Tue Feb 18 05:24:15 2025
Returns:
"""
output = self.ssh_connection.send_as_sudo(f"phc_ctl {device} get")
self.validate_success_return_code(self.ssh_connection)
output_str = ''.join(output).replace('\n', '')
if output_str and len(output_str.split()) > 4:
return output_str.split()[4]
else:
raise "output_str.split() is expected to be a List with four elements."
def phc_ctl_cmp(self, device: str) -> str:
"""
Compare the PHC clock device to CLOCK_REALTIME
Args:
device : may be either CLOCK_REALTIME, any /dev/ptpX device, or any ethernet device which supports ethtool's get_ts_info ioctl.
Example:
phc_ctl[645639.878]: offset from CLOCK_REALTIME is -37000000008ns
Returns:
"""
output = self.ssh_connection.send_as_sudo(f"phc_ctl {device} cmp")
self.validate_success_return_code(self.ssh_connection)
output_str = ''.join(output)
if output_str and len(output_str.split()) > 5:
return output_str.split()[5]
else:
raise "output_str.split() is expected to be a List with five elements."
def phc_ctl_adj(self, device: str, seconds: str) -> str:
"""
Adjust the PHC clock by an amount of seconds provided
Args:
device : may be either CLOCK_REALTIME, any /dev/ptpX device, or any ethernet device which supports ethtool's get_ts_info ioctl.
seconds :
Example:
phc_ctl[646368.470]: adjusted clock by 0.000001 seconds
Returns:
"""
output = self.ssh_connection.send_as_sudo(f"phc_ctl {device} adj {seconds}")
self.validate_success_return_code(self.ssh_connection)
output_str = ''.join(output).replace('\n', '')
if output_str and len(output_str.split()) > 5:
return output_str.split()[4]
else:
raise "output_str.split() is expected to be a List with five elements."
def phc_ctl_set(self, device: str, seconds: str = None) -> str:
"""
Set the PHC clock time to the value specified in seconds. Defaults to reading CLOCK_REALTIME if no value is provided.
Args:
device : may be either CLOCK_REALTIME, any /dev/ptpX device, or any ethernet device which supports ethtool's get_ts_info ioctl.
seconds :
Example :
phc_ctl[647759.416]: set clock time to 1739860212.789318498 or Tue Feb 18 06:30:12 2025
Returns:
"""
if seconds:
cmd = f"phc_ctl {device} set {seconds}"
else:
cmd = f"phc_ctl {device} set"
output = self.ssh_connection.send_as_sudo(cmd)
self.validate_success_return_code(self.ssh_connection)
output_str = ''.join(output).replace('\n', '')
if output_str and len(output_str.split()) > 5:
return output_str.split()[5]
else:
raise "output_str.split() is expected to be a List with five elements."