added a lot of documentation and Enums for most function parameters

This commit is contained in:
2023-10-26 11:51:07 +02:00
parent 2d0a5c2974
commit b91cc55341
2 changed files with 503 additions and 114 deletions

View File

@@ -63,6 +63,7 @@ class SMP35x(TelnetAdapter, RecorderAdapter):
Input_4 (int): The input number for Input 4.
Input_5 (int): The input number for Input 5.
"""
INPUT_1 = 1
INPUT_2 = 2
INPUT_3 = 3
@@ -77,9 +78,50 @@ class SMP35x(TelnetAdapter, RecorderAdapter):
A (int): The first output channel.
B (int): The second output channel.
"""
A = 1 # channel A
B = 2 # channel B
class UserEncoderLayoutPresetNumber(enum.IntEnum):
"""
An enumeration representing the available user encoder layout preset numbers.
Attributes:
PRESET_1 (int): The preset number for layout 1.
PRESET_2 (int): The preset number for layout 2.
PRESET_3 (int): The preset number for layout 3.
PRESET_4 (int): The preset number for layout 4.
PRESET_5 (int): The preset number for layout 5.
PRESET_6 (int): The preset number for layout 6.
PRESET_7 (int): The preset number for layout 7.
PRESET_8 (int): The preset number for layout 8.
PRESET_9 (int): The preset number for layout 9.
PRESET_10 (int): The preset number for layout 10.
PRESET_11 (int): The preset number for layout 11.
PRESET_12 (int): The preset number for layout 12.
PRESET_13 (int): The preset number for layout 13.
PRESET_14 (int): The preset number for layout 14.
PRESET_15 (int): The preset number for layout 15.
PRESET_16 (int): The preset number for layout 16.
"""
PRESET_1 = 1
PRESET_2 = 2
PRESET_3 = 3
PRESET_4 = 4
PRESET_5 = 5
PRESET_6 = 6
PRESET_7 = 7
PRESET_8 = 8
PRESET_9 = 9
PRESET_10 = 10
PRESET_11 = 11
PRESET_12 = 12
PRESET_13 = 13
PRESET_14 = 14
PRESET_15 = 15
PRESET_16 = 16
class AudioChannels(enum.IntEnum):
"""
Enum representing the available audio channels on the Extron SMP recorder.
@@ -632,7 +674,9 @@ class SMP35x(TelnetAdapter, RecorderAdapter):
### File related stuff not implemented. (-> use sftp)
def set_input(self, input_num: Union[InputNumber, int], channel_num: Union[OutputChannel, int]):
def set_input(
self, input_num: Union[InputNumber, int], channel_num: Union[OutputChannel, int]
):
"""
Switches input # (1 to 5) to output channel (1=A [input 1 and 2], 2=B [input 3, 4 and 5])
:param input_num:
@@ -662,7 +706,7 @@ class SMP35x(TelnetAdapter, RecorderAdapter):
self.tn.write(f"{channel_num}!\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
def set_input_format(self, input_num: int, input_format: int):
def set_input_format(self, input_num: Union[InputNumber, int], input_format: int):
"""
Sets the input to the format, where the input_format parameter may be:
1 = YUVp / HDTV (default)
@@ -672,22 +716,42 @@ class SMP35x(TelnetAdapter, RecorderAdapter):
:param input_format:
:return:
"""
if input_num not in range(1, 6):
raise LrcException("input_num must be a value between 1 and 5!")
input_num = self._get_number_from_enum(input_num, SMP35x.InputNumber)
if input_format not in range(1, 4):
raise LrcException("input_num must be a value between 1 and 3!")
self.tn.write(f"{input_num}*{input_format}\\\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
def get_input_format(self, input_num: int):
if input_num not in range(1, 6):
raise LrcException("input_num must be a value between 1 and 5!")
def get_input_format(self, input_num: Union[InputNumber, int]):
"""
Get the input format for the specified input number.
Args:
input_num (Union[InputNumber, int]): The input number to get the format for.
Returns:
str: The input format for the specified input number.
"""
input_num = self._get_number_from_enum(input_num, SMP35x.InputNumber)
self.tn.write(f"{input_num}\\\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
def set_input_name(self, input_num: int, input_name: str):
if input_num not in range(1, 6):
raise LrcException("input_num must be a value between 1 and 5!")
def set_input_name(self, input_num: Union[InputNumber, int], input_name: str):
"""
Sets the name of the specified input on the Extron SMP device.
Args:
input_num (Union[InputNumber, int]): The input number to set the name for.
input_name (str): The name to set for the input. Must be no longer than
16 characters and only contain ASCII characters.
Returns:
str: The response from the device after setting the input name.
Raises:
LrcException: If the input_name is longer than
16 characters or contains non-ASCII characters.
"""
input_num = self._get_number_from_enum(input_num, SMP35x.InputNumber)
if len(input_name) > 16:
raise LrcException("input_name must be no longer than 16 chars")
try:
@@ -697,13 +761,29 @@ class SMP35x(TelnetAdapter, RecorderAdapter):
self.tn.write(f"{self.esc_char}{input_num},{input_name}NI\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
def get_input_name(self, input_num: int):
if input_num not in range(1, 6):
raise LrcException("input_num must be a value between 1 and 5!")
def get_input_name(self, input_num: Union[InputNumber, int]) -> str:
"""
Sends a command to the Extron SMP device to retrieve the name of the input
corresponding to the given input number. Returns the name of the input as a string.
Args:
input_num (Union[InputNumber, int]): The number of the input to retrieve the name for.
Returns:
str: The name of the input as a string.
"""
input_num = self._get_number_from_enum(input_num, SMP35x.InputNumber)
self.tn.write(f"{self.esc_char}{input_num}NI\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
def get_input_selction_per_channel(self):
def get_input_selection_per_channel(self):
"""
Sends a command to the Extron SMP device to get the
input selection per channel and returns the response.
Returns:
str: The response from the device.
"""
self.tn.write("32I\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
@@ -830,25 +910,74 @@ class SMP35x(TelnetAdapter, RecorderAdapter):
### Metadata part skipped
def recall_user_preset(self, channel_number: int, preset_number: int):
if channel_number not in range(1, 3):
raise LrcException("channel_number must be a value between 1 and 2!")
if preset_number not in range(1, 17):
raise LrcException("preset_number must be a value between 1 and 16!")
def recall_user_preset(
self,
channel_number: Union["SMP35x.OutputChannel", int],
preset_number: Union["SMP35x.UserEncoderLayoutPresetNumber", int],
):
"""
Recalls a user preset on the specified channel.
Args:
channel_number (Union[SMP35x.OutputChannel, int]): The channel number to recall the preset on.
preset_number (Union[SMP35x.UserEncoderLayoutPresetNumber, int]): The preset number to recall.
Returns:
str: The response from the device.
"""
channel_number = self._get_number_from_enum(
channel_number, SMP35x.OutputChannel
)
preset_number = self._get_number_from_enum(
preset_number, SMP35x.UserEncoderLayoutPresetNumber
)
self.tn.write(f"1*{channel_number}*{preset_number}.\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
def save_user_preset(self, channel_number: int, preset_number: int):
if channel_number not in range(1, 3):
raise LrcException("channel_number must be a value between 1 and 2!")
if preset_number not in range(1, 17):
raise LrcException("preset_number must be a value between 1 and 16!")
def save_user_preset(
self,
channel_number: Union["SMP35x.OutputChannel", int],
preset_number: Union["SMP35x.UserEncoderLayoutPresetNumber", int],
):
"""
Saves a user preset for the specified channel number and preset number.
Args:
channel_number (Union[SMP35x.OutputChannel, int]): The channel number to save the preset for.
preset_number (Union[SMP35x.UserEncoderLayoutPresetNumber, int]): The preset number to save the preset to.
Returns:
str: The response string from the Telnet server.
"""
channel_number = self._get_number_from_enum(
channel_number, SMP35x.OutputChannel
)
preset_number = self._get_number_from_enum(
preset_number, SMP35x.UserEncoderLayoutPresetNumber
)
self.tn.write(f"1*{channel_number}*{preset_number},\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
def set_user_preset_name(self, preset_number: int, preset_name: str):
if preset_number not in range(1, 17):
raise LrcException("preset_number must be a value between 1 and 16!")
def set_user_preset_name(
self,
preset_number: Union["SMP35x.UserEncoderLayoutPresetNumber", int],
preset_name: str,
):
"""
Sets the name of a user encoder layout preset on the Extron SMP device.
Args:
preset_number (Union[SMP35x.UserEncoderLayoutPresetNumber, int]):
The number of the preset to set the name for.
preset_name (str): The name to set for the preset.
Must be no longer than 16 characters and only contain ASCII characters.
Returns:
str: The response from the device after setting the preset name.
"""
preset_number = self._get_number_from_enum(
preset_number, SMP35x.UserEncoderLayoutPresetNumber
)
if len(preset_name) > 16:
raise LrcException("preset_name must be no longer than 16 chars")
try:
@@ -860,37 +989,106 @@ class SMP35x(TelnetAdapter, RecorderAdapter):
self.tn.write(f"{self.esc_char}1*{preset_number},{preset_name}PNAM\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
def get_user_preset_name(self, preset_number: int):
if preset_number not in range(1, 17):
raise LrcException("preset_number must be a value between 1 and 16!")
def get_user_preset_name(
self, preset_number: Union["SMP35x.UserEncoderLayoutPresetNumber", int]
):
"""
Retrieves the name of a user encoder layout preset from the Extron SMP device.
Args:
preset_number (Union[SMP35x.UserEncoderLayoutPresetNumber, int]):
The number of the preset to retrieve.
Returns:
str: The name of the specified user encoder layout preset.
"""
preset_number = self._get_number_from_enum(
preset_number, SMP35x.UserEncoderLayoutPresetNumber
)
self.tn.write(f"{self.esc_char}1*{preset_number}PNAM\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
def get_user_presets(self, input_number: int):
if input_number not in range(1, 6):
raise LrcException("input_number must be a value between 1 and 5!")
def get_user_presets(self, input_number: Union[InputNumber, int]):
"""
Retrieves the user presets for the specified input number.
Args:
input_number (Union[InputNumber, int]): The input number to retrieve user presets for.
Returns:
str: The response string from the device.
"""
input_number = self._get_number_from_enum(input_number, SMP35x.InputNumber)
self.tn.write(f"52*{input_number}#\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
# Input Presets
def recall_input_preset(self, channel_number: int, preset_number: int):
if channel_number not in range(1, 3):
raise LrcException("channel_number must be a value between 1 and 2!")
if preset_number not in range(1, 129):
def recall_input_preset(
self,
channel_number: Union["SMP35x.OutputChannel", int],
input_preset_number: int,
):
"""
Recalls an input preset on the specified channel.
Args:
channel_number (Union[SMP35x.OutputChannel, int]):
The channel number to recall the input preset on.
input_preset_number (int): The input preset number to recall.
Raises:
LrcException: If the input preset number is not between 1 and 128.
Returns:
str: The response from the device.
"""
channel_number = self._get_number_from_enum(
channel_number, SMP35x.OutputChannel
)
if input_preset_number not in range(1, 129):
raise LrcException("preset_number must be a value between 1 and 128!")
self.tn.write(f"2*{channel_number}*{preset_number}.\n")
self.tn.write(f"2*{channel_number}*{input_preset_number}.\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
def save_input_preset(self, channel_number: int, preset_number: int):
if channel_number not in range(1, 3):
raise LrcException("channel_number must be a value between 1 and 2!")
if preset_number not in range(1, 129):
raise LrcException("preset_number must be a value between 1 and 128!")
self.tn.write(f"1*{channel_number}*{preset_number},\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
def save_input_preset(
self,
channel_number: Union["SMP35x.OutputChannel", int],
input_preset_number: int,
):
"""
Saves the current input configuration as a preset on the specified channel.
def set_input_preset_name(self, preset_number: int, preset_name: str):
if preset_number not in range(1, 129):
Args:
channel_number (Union[SMP35x.OutputChannel, int]):
The channel number to save the preset on.
input_preset_number (int): The preset number to save the input configuration to.
Raises:
LrcException: If the input_preset_number is not between 1 and 128.
Returns:
str: The response from the device.
"""
def set_input_preset_name(self, input_preset_number: int, preset_name: str):
"""
Sets the name of an input preset on the Extron SMP recorder.
Args:
input_preset_number (int): The number of the input preset to set the name for.
Must be a value between 1 and 128.
preset_name (str): The name to set for the input preset. Must be a string of
ASCII characters no longer than 16 characters.
Returns:
str: The response string returned by the Extron SMP recorder after setting
the input preset name.
Raises:
LrcException: If the input_preset_number is not between 1 and 128, or if the
preset_name is longer than 16 characters or contains non-ASCII characters.
"""
if input_preset_number not in range(1, 129):
raise LrcException("preset_number must be a value between 1 and 128!")
if len(preset_name) > 16:
raise LrcException("preset_name must be no longer than 16 chars")
@@ -900,19 +1098,41 @@ class SMP35x(TelnetAdapter, RecorderAdapter):
raise LrcException(
"preset_name must only contain ascii characters"
) from exc
self.tn.write(f"{self.esc_char}2*{preset_number},{preset_name}PNAM\n")
self.tn.write(f"{self.esc_char}2*{input_preset_number},{preset_name}PNAM\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
def get_input_preset_name(self, preset_number: int):
if preset_number not in range(1, 129):
def get_input_preset_name(self, input_preset_number: int):
"""
Retrieves the name of the input preset with the given number.
Args:
input_preset_number (int): The number of the input preset to retrieve the name of.
Must be a value between 1 and 128.
Returns:
str: The name of the input preset.
Raises:
LrcException: If the input_preset_number is not a value between 1 and 128.
"""
if input_preset_number not in range(1, 129):
raise LrcException("preset_number must be a value between 1 and 128!")
self.tn.write(f"{self.esc_char}2*{preset_number}PNAM\n")
self.tn.write(f"{self.esc_char}2*{input_preset_number}PNAM\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
def delete_input_preset(self, preset_number: int):
if preset_number not in range(1, 129):
def delete_input_preset(self, input_preset_number: int):
"""
Deletes the input preset with the given number.
Args:
input_preset_number (int): The number of the input preset to delete. Must be a value between 1 and 128.
Returns:
str: The response from the device after attempting to delete the input preset.
"""
if input_preset_number not in range(1, 129):
raise LrcException("preset_number must be a value between 1 and 128!")
self.tn.write(f"{self.esc_char}X2*{preset_number}PRST\n")
self.tn.write(f"{self.esc_char}X2*{input_preset_number}PRST\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
def get_input_presets(self):
@@ -924,7 +1144,11 @@ class SMP35x(TelnetAdapter, RecorderAdapter):
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
# Streaming Presets
def recall_streaming_preset(self, output_number: int, preset_number: int):
def recall_streaming_preset(
self,
output_number: int,
preset_number: Union[UserEncoderLayoutPresetNumber, int],
):
"""
Output_number:
1 = Channel A
@@ -936,12 +1160,17 @@ class SMP35x(TelnetAdapter, RecorderAdapter):
"""
if output_number not in range(1, 4):
raise LrcException("output_number must be a value between 1 and 3!")
if preset_number not in range(1, 17):
raise LrcException("preset_number must be a value between 1 and 16!")
preset_number = self._get_number_from_enum(
preset_number, SMP35x.UserEncoderLayoutPresetNumber
)
self.tn.write(f"3*{output_number}*{preset_number}.\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
def save_streaming_preset(self, output_number: int, preset_number: int):
def save_streaming_preset(
self,
output_number: int,
preset_number: Union[UserEncoderLayoutPresetNumber, int],
):
"""
Output_number:
1 = Channel A
@@ -953,14 +1182,34 @@ class SMP35x(TelnetAdapter, RecorderAdapter):
"""
if output_number not in range(1, 4):
raise LrcException("output_number must be a value between 1 and 3!")
if preset_number not in range(1, 17):
raise LrcException("preset_number must be a value between 1 and 16!")
preset_number = self._get_number_from_enum(
preset_number, SMP35x.UserEncoderLayoutPresetNumber
)
self.tn.write(f"3*{output_number}*{preset_number},\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
def set_streaming_preset_name(self, preset_number: int, preset_name: str):
if preset_number not in range(1, 17):
raise LrcException("preset_number must be a value between 1 and 16!")
def set_streaming_preset_name(
self, preset_number: Union[UserEncoderLayoutPresetNumber, int], preset_name: str
):
"""
Sets the name of a streaming preset on the Extron SMP device.
Args:
preset_number (Union[UserEncoderLayoutPresetNumber, int]):
The number of the preset to set the name for.
preset_name (str): The name to set for the preset.
Must be no longer than 16 characters and contain only ASCII characters.
Raises:
LrcException: If the preset_name is longer
than 16 characters or contains non-ASCII characters.
Returns:
str: The response from the Extron SMP device.
"""
preset_number = self._get_number_from_enum(
preset_number, SMP35x.UserEncoderLayoutPresetNumber
)
if len(preset_name) > 16:
raise LrcException("preset_name must be no longer than 16 chars")
try:
@@ -972,20 +1221,48 @@ class SMP35x(TelnetAdapter, RecorderAdapter):
self.tn.write(f"{self.esc_char}3*{preset_number},{preset_name}PNAM\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
def get_streaming_preset_name(self, preset_number: int):
if preset_number not in range(1, 17):
raise LrcException("preset_number must be a value between 1 and 16!")
def get_streaming_preset_name(
self, preset_number: Union[UserEncoderLayoutPresetNumber, int]
):
"""
Retrieves the name of the streaming preset associated with the given preset number.
Args:
preset_number (Union[UserEncoderLayoutPresetNumber, int]): The preset number or enum value.
Returns:
str: The name of the streaming preset.
"""
preset_number = self._get_number_from_enum(
preset_number, SMP35x.UserEncoderLayoutPresetNumber
)
self.tn.write(f"{self.esc_char}3*{preset_number}PNAM\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
def reset_streaming_preset_to_default(self, preset_number: int):
if preset_number not in range(1, 17):
raise LrcException("preset_number must be a value between 1 and 16!")
def reset_streaming_preset_to_default(
self, preset_number: Union[UserEncoderLayoutPresetNumber, int]
):
"""
Resets the streaming preset to its default settings.
Args:
preset_number (Union[UserEncoderLayoutPresetNumber, int]): The preset number to reset.
Returns:
str: The response from the device.
"""
preset_number = self._get_number_from_enum(
preset_number, SMP35x.UserEncoderLayoutPresetNumber
)
self.tn.write(f"{self.esc_char}X3*{preset_number}PRST\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
# Encoder Presets
def recall_encoder_preset(self, output_number: int, preset_number: int):
def recall_encoder_preset(
self,
output_number: int,
preset_number: Union[UserEncoderLayoutPresetNumber, int],
):
"""
Output_number:
1 = Channel A
@@ -997,12 +1274,17 @@ class SMP35x(TelnetAdapter, RecorderAdapter):
"""
if output_number not in range(1, 4):
raise LrcException("output_number must be a value between 1 and 3!")
if preset_number not in range(1, 17):
raise LrcException("preset_number must be a value between 1 and 16!")
preset_number = self._get_number_from_enum(
preset_number, SMP35x.UserEncoderLayoutPresetNumber
)
self.tn.write(f"4*{output_number}*{preset_number}.\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
def save_encoder_preset(self, output_number: int, preset_number: int):
def save_encoder_preset(
self,
output_number: int,
preset_number: Union[UserEncoderLayoutPresetNumber, int],
):
"""
Output_number:
1 = Channel A
@@ -1014,14 +1296,33 @@ class SMP35x(TelnetAdapter, RecorderAdapter):
"""
if output_number not in range(1, 4):
raise LrcException("output_number must be a value between 1 and 3!")
if preset_number not in range(1, 17):
raise LrcException("preset_number must be a value between 1 and 16!")
preset_number = self._get_number_from_enum(
preset_number, SMP35x.UserEncoderLayoutPresetNumber
)
self.tn.write(f"4*{output_number}*{preset_number},\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
def set_encoder_preset_name(self, preset_number: int, preset_name: str):
if preset_number not in range(1, 17):
raise LrcException("preset_number must be a value between 1 and 16!")
def set_encoder_preset_name(
self, preset_number: Union[UserEncoderLayoutPresetNumber, int], preset_name: str
):
"""
Sets the name of an encoder preset on the Extron SMP device.
Args:
preset_number (Union[UserEncoderLayoutPresetNumber, int]):
The number of the preset to set the name for.
preset_name (str): The name to set for the preset.
Must be no longer than 16 characters and only contain ASCII characters.
Returns:
str: The response from the device after setting the preset name.
Raises:
LrcException: If the preset_name is longer
than 16 characters or contains non-ASCII characters.
"""
preset_number = self._get_number_from_enum(
preset_number, SMP35x.UserEncoderLayoutPresetNumber
)
if len(preset_name) > 16:
raise LrcException("preset_name must be no longer than 16 chars")
try:
@@ -1033,39 +1334,113 @@ class SMP35x(TelnetAdapter, RecorderAdapter):
self.tn.write(f"{self.esc_char}4*{preset_number},{preset_name}PNAM\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
def get_encoder_preset_name(self, preset_number: int):
if preset_number not in range(1, 17):
raise LrcException("preset_number must be a value between 1 and 16!")
def get_encoder_preset_name(
self, preset_number: Union[UserEncoderLayoutPresetNumber, int]
):
"""
Sends a command to the Extron SMP device to retrieve the name of the encoder preset
associated with the given preset number.
Args:
preset_number (Union[UserEncoderLayoutPresetNumber, int]): The preset number to
retrieve the name for. This can be either an integer or a value from the
UserEncoderLayoutPresetNumber enum.
Returns:
str: The name of the encoder preset associated with the given preset number.
"""
preset_number = self._get_number_from_enum(
preset_number, SMP35x.UserEncoderLayoutPresetNumber
)
self.tn.write(f"{self.esc_char}4*{preset_number}PNAM\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
def reset_encoder_preset_to_default(self, preset_number: int):
if preset_number not in range(1, 17):
raise LrcException("preset_number must be a value between 1 and 16!")
def reset_encoder_preset_to_default(
self, preset_number: Union[UserEncoderLayoutPresetNumber, int]
):
"""
Resets the specified encoder preset to its default settings.
Args:
preset_number (Union[UserEncoderLayoutPresetNumber, int]):
The number of the preset to reset.
Returns:
str: The response from the device after sending the reset command.
"""
preset_number = self._get_number_from_enum(
preset_number, SMP35x.UserEncoderLayoutPresetNumber
)
self.tn.write(f"{self.esc_char}X4*{preset_number}PRST\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
# Layout Presets
def save_layout_preset(self, preset_number: int):
if preset_number not in range(1, 17):
raise LrcException("preset_number must be a value between 1 and 16!")
def save_layout_preset(
self, preset_number: Union[UserEncoderLayoutPresetNumber, int]
):
"""
Saves the current layout as a preset with the given number.
Args:
preset_number (Union[UserEncoderLayoutPresetNumber, int]):
The number of the preset to save.
This can be either an integer or a
value from the UserEncoderLayoutPresetNumber enum.
Returns:
str: The response from the device after sending the save command.
"""
preset_number = self._get_number_from_enum(
preset_number, SMP35x.UserEncoderLayoutPresetNumber
)
self.tn.write(f"7*{preset_number},\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
def recall_layout_preset(
self, preset_number: int, include_input_selections: bool = True
self,
preset_number: Union[UserEncoderLayoutPresetNumber, int],
include_input_selections: bool = True,
):
if preset_number not in range(1, 17):
raise LrcException("preset_number must be a value between 1 and 16!")
"""
Recalls a layout preset on the Extron SMP device.
Args:
preset_number (Union[UserEncoderLayoutPresetNumber, int]):
The preset number to recall.
include_input_selections (bool, optional):
Whether to include input selections in the recall. Defaults to True.
Returns:
str: The response from the device.
"""
preset_number = self._get_number_from_enum(
preset_number, SMP35x.UserEncoderLayoutPresetNumber
)
if include_input_selections:
self.tn.write(f"7*{preset_number}.\n")
else:
self.tn.write(f"8*{preset_number}.\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
def set_layout_preset_name(self, preset_number: int, preset_name: str):
if preset_number not in range(1, 17):
raise LrcException("preset_number must be a value between 1 and 16!")
def set_layout_preset_name(
self, preset_number: Union[UserEncoderLayoutPresetNumber, int], preset_name: str
):
"""
Sets the name of a user encoder layout preset on the Extron SMP device.
Args:
preset_number (Union[UserEncoderLayoutPresetNumber, int]):
The number of the preset to set the name for.
preset_name (str): The name to set for the preset.
Must be no longer than 16 characters and only contain ASCII characters.
Returns:
str: The response from the device after setting the preset name.
"""
preset_number = self._get_number_from_enum(
preset_number, SMP35x.UserEncoderLayoutPresetNumber
)
if len(preset_name) > 16:
raise LrcException("preset_name must be no longer than 16 chars")
try:
@@ -1074,20 +1449,44 @@ class SMP35x(TelnetAdapter, RecorderAdapter):
raise LrcException(
"preset_name must only contain ascii characters"
) from exc
self.tn.write(
"{}7*{},{}PNAM\n".format(self.esc_char, preset_number, preset_name)
)
self.tn.write(f"{self.esc_char}7*{preset_number},{preset_name}PNAM\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
def get_layout_preset_name(self, preset_number: int):
if preset_number not in range(1, 17):
raise LrcException("preset_number must be a value between 1 and 16!")
def get_layout_preset_name(
self, preset_number: Union[UserEncoderLayoutPresetNumber, int]
):
"""
Gets the name of the layout preset with the given preset number.
Args:
preset_number (Union[UserEncoderLayoutPresetNumber, int]): The preset number
of the layout preset to get the name of.
Returns:
str: The name of the layout preset with the given preset number.
"""
preset_number = self._get_number_from_enum(
preset_number, SMP35x.UserEncoderLayoutPresetNumber
)
self.tn.write(f"{self.esc_char}7*{preset_number}PNAM\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
def reset_layout_preset_to_default(self, preset_number: int):
if preset_number not in range(1, 17):
raise LrcException("preset_number must be a value between 1 and 16!")
def reset_layout_preset_to_default(
self, preset_number: Union[UserEncoderLayoutPresetNumber, int]
):
"""
Resets the layout preset to its default value.
Args:
preset_number (Union[UserEncoderLayoutPresetNumber, int]):
The number of the preset to reset.
Returns:
str: The response from the device.
"""
preset_number = self._get_number_from_enum(
preset_number, SMP35x.UserEncoderLayoutPresetNumber
)
self.tn.write(f"{self.esc_char}X7*{preset_number}PRST\n")
return TelnetAdapter._get_response_str(self.tn.read_until_non_empty_line())
@@ -1239,13 +1638,12 @@ def main():
print(smp.is_audio_channel_muted(60000))
exit()
smp._login()
# smp._login()
print(smp.get_version(verbose_info=False))
print(smp.get_file_transfer_config())
print(smp.save_configuration())
print(smp.restore_configuration())
return
print(smp.get_bootstrap_version())
print(smp.get_part_number())
print(smp.get_model_name())
@@ -1264,7 +1662,7 @@ def main():
print(smp.get_front_panel_lock())
print(smp.get_input_name(1))
print(smp.get_input_selction_per_channel())
print(smp.get_input_selection_per_channel())
print(smp.get_recording_status())
print("Preset Name: " + smp.get_user_preset_name(2))
print(smp.get_user_presets(1))

View File

@@ -13,15 +13,6 @@ pw = "123mzsmp"
def print_tn(tn_response):
"""
Prints the given TN response, decoding it if necessary.
Args:
tn_response (bytes or str): The TN response to print.
Returns:
None
"""
if isinstance(tn_response, bytes):
print(tn_response.decode("ascii").rstrip())
else: