2023-01-27 15:42:00 +01:00
|
|
|
import enum
|
|
|
|
|
|
|
|
from eive_tmtc.config.definitions import CustomServiceList
|
|
|
|
from eive_tmtc.config.object_ids import COM_SUBSYSTEM_ID
|
2023-01-28 14:30:51 +01:00
|
|
|
from eive_tmtc.tmtc.com.syrlinks_handler import Datarate
|
2023-01-27 15:42:00 +01:00
|
|
|
from tmtccmd.config.tmtc import (
|
|
|
|
tmtc_definitions_provider,
|
|
|
|
TmtcDefinitionWrapper,
|
|
|
|
OpCodeEntry,
|
|
|
|
)
|
|
|
|
from tmtccmd.tc import service_provider
|
|
|
|
from tmtccmd.tc.decorator import ServiceProviderParams
|
2023-02-08 11:51:55 +01:00
|
|
|
from tmtccmd.tc.pus_200_fsfw_mode import (
|
|
|
|
create_mode_command,
|
|
|
|
create_read_mode_command,
|
|
|
|
create_announce_mode_command,
|
|
|
|
create_announce_mode_recursive_command,
|
|
|
|
)
|
2023-01-31 12:56:13 +01:00
|
|
|
from tmtccmd.tc.pus_20_fsfw_param import (
|
2023-01-28 14:30:51 +01:00
|
|
|
create_load_param_cmd,
|
|
|
|
pack_scalar_u8_parameter_app_data,
|
|
|
|
)
|
|
|
|
|
2023-02-23 15:13:35 +01:00
|
|
|
from tmtccmd.pus.s20_fsfw_param import create_scalar_u32_parameter
|
2023-02-22 12:56:57 +01:00
|
|
|
|
2023-01-28 14:30:51 +01:00
|
|
|
|
|
|
|
class ParameterId(enum.IntEnum):
|
|
|
|
DATARATE = 0
|
2023-02-02 16:01:56 +01:00
|
|
|
TRANSMITTER_TIMEOUT = 1
|
2023-01-27 15:42:00 +01:00
|
|
|
|
|
|
|
|
|
|
|
class Submode(enum.IntEnum):
|
2023-02-06 20:13:15 +01:00
|
|
|
RX_ONLY = 10
|
|
|
|
RX_AND_TX_DEF_DATARATE = 11
|
|
|
|
RX_AND_TX_LOW_DATARATE = 12
|
|
|
|
RX_AND_TX_HIGH_DATARATE = 13
|
|
|
|
RX_AND_TX_CARRIER_WAVE = 14
|
2023-01-27 15:42:00 +01:00
|
|
|
|
|
|
|
|
|
|
|
class OpCode:
|
|
|
|
RX_ONLY = "rx_only"
|
2023-01-27 20:23:41 +01:00
|
|
|
TX_AND_RX_DEF_RATE = "rx_and_tx_default_rate"
|
2023-01-27 15:42:00 +01:00
|
|
|
TX_AND_RX_LOW_RATE = "rx_and_tx_low_rate"
|
|
|
|
TX_AND_RX_HIGH_RATE = "rx_and_tx_high_rate"
|
|
|
|
TX_AND_RX_CARRIER_WAVE = "rx_and_tx_carrier_wave"
|
2023-01-28 14:30:51 +01:00
|
|
|
UPDATE_DEFAULT_DATARATE_LOW = "update_default_rate_low"
|
|
|
|
UPDATE_DEFAULT_DATARATE_HIGH = "update_default_rate_high"
|
2023-02-02 16:01:56 +01:00
|
|
|
CHANGE_TRANSMITTER_TIMEOUT = "change_transmitter_timeout"
|
2023-02-08 01:29:38 +01:00
|
|
|
READ_MODE = "read_mode"
|
|
|
|
ANNOUNCE_MODE = "announce_mode"
|
|
|
|
ANNOUNCE_MODE_RECURSIVE = "announce_mode_recursive"
|
2023-01-27 15:42:00 +01:00
|
|
|
|
|
|
|
|
|
|
|
class Info:
|
|
|
|
RX_ONLY = "Syrlinks RX Only"
|
2023-01-27 20:23:41 +01:00
|
|
|
TX_AND_RX_DEF_DATARATE = "Syrlinks with TX default datarate"
|
2023-01-27 15:42:00 +01:00
|
|
|
TX_AND_RX_LOW_DATARATE = "Syrlinks with TX low datarate (BPSK modulation)"
|
|
|
|
TX_AND_RX_HIGH_DATARATE = "Syrlinks with TX high datarate (0QPSK modulation)"
|
|
|
|
TX_AND_RX_CARRIER_WAVE = "Syrlinks with TX carrier wave"
|
2023-01-28 14:30:51 +01:00
|
|
|
UPDATE_DEFAULT_DATARATE_LOW = "Configure default low datarate (BPSK modulation)"
|
|
|
|
UPDATE_DEFAULT_DATARATE_HIGH = "Configure default high datarate (0QPSK modulation)"
|
2023-02-02 16:01:56 +01:00
|
|
|
CHANGE_TRANSMITTER_TIMEOUT = "Changes the transmitter timeout"
|
2023-02-08 01:29:38 +01:00
|
|
|
READ_MODE = "Read Mode"
|
2023-02-08 11:51:55 +01:00
|
|
|
ANNOUNCE_MODE = "Announce Mode"
|
2023-02-08 01:29:38 +01:00
|
|
|
ANNOUNCE_MODE_RECURSIVE = "Announce mode recursively"
|
2023-01-27 15:42:00 +01:00
|
|
|
|
|
|
|
|
|
|
|
@service_provider(CustomServiceList.COM_SS)
|
|
|
|
def build_com_subsystem_cmd(p: ServiceProviderParams):
|
|
|
|
q = p.queue_helper
|
|
|
|
o = p.op_code
|
2023-01-28 14:30:51 +01:00
|
|
|
prefix = "COM Subsystem"
|
2023-01-27 15:42:00 +01:00
|
|
|
if o == OpCode.RX_ONLY:
|
|
|
|
q.add_log_cmd(Info.RX_ONLY)
|
|
|
|
q.add_pus_tc(create_mode_command(COM_SUBSYSTEM_ID, Submode.RX_ONLY, 0))
|
2023-01-27 20:23:41 +01:00
|
|
|
elif o == OpCode.TX_AND_RX_DEF_RATE:
|
|
|
|
q.add_log_cmd(Info.TX_AND_RX_DEF_DATARATE)
|
|
|
|
q.add_pus_tc(
|
|
|
|
create_mode_command(COM_SUBSYSTEM_ID, Submode.RX_AND_TX_DEF_DATARATE, 0)
|
|
|
|
)
|
2023-01-27 15:42:00 +01:00
|
|
|
elif o == OpCode.TX_AND_RX_LOW_RATE:
|
|
|
|
q.add_log_cmd(Info.TX_AND_RX_LOW_DATARATE)
|
|
|
|
q.add_pus_tc(
|
|
|
|
create_mode_command(COM_SUBSYSTEM_ID, Submode.RX_AND_TX_LOW_DATARATE, 0)
|
|
|
|
)
|
|
|
|
elif o == OpCode.TX_AND_RX_HIGH_RATE:
|
|
|
|
q.add_log_cmd(Info.TX_AND_RX_HIGH_DATARATE)
|
|
|
|
q.add_pus_tc(
|
|
|
|
create_mode_command(COM_SUBSYSTEM_ID, Submode.RX_AND_TX_HIGH_DATARATE, 0)
|
|
|
|
)
|
2023-01-28 14:30:51 +01:00
|
|
|
if o == OpCode.UPDATE_DEFAULT_DATARATE_LOW:
|
|
|
|
q.add_log_cmd(f"{prefix}: {Info.UPDATE_DEFAULT_DATARATE_LOW}")
|
|
|
|
q.add_pus_tc(
|
|
|
|
create_load_param_cmd(
|
|
|
|
pack_scalar_u8_parameter_app_data(
|
|
|
|
COM_SUBSYSTEM_ID,
|
|
|
|
0,
|
|
|
|
ParameterId.DATARATE,
|
|
|
|
Datarate.LOW_RATE_MODULATION_BPSK,
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
if o == OpCode.UPDATE_DEFAULT_DATARATE_HIGH:
|
|
|
|
q.add_log_cmd(f"{prefix}: {Info.UPDATE_DEFAULT_DATARATE_HIGH}")
|
|
|
|
q.add_pus_tc(
|
|
|
|
create_load_param_cmd(
|
|
|
|
pack_scalar_u8_parameter_app_data(
|
|
|
|
COM_SUBSYSTEM_ID,
|
|
|
|
0,
|
|
|
|
ParameterId.DATARATE,
|
|
|
|
Datarate.HIGH_RATE_MODULATION_0QPSK,
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
2023-01-27 15:42:00 +01:00
|
|
|
elif o == OpCode.TX_AND_RX_CARRIER_WAVE:
|
|
|
|
q.add_log_cmd(Info.TX_AND_RX_CARRIER_WAVE)
|
|
|
|
q.add_pus_tc(
|
|
|
|
create_mode_command(COM_SUBSYSTEM_ID, Submode.RX_AND_TX_CARRIER_WAVE, 0)
|
|
|
|
)
|
2023-02-02 16:01:56 +01:00
|
|
|
elif o == OpCode.CHANGE_TRANSMITTER_TIMEOUT:
|
2023-02-22 12:56:57 +01:00
|
|
|
timeout = int(input("Specify timeout to set [ms]: "))
|
2023-02-02 16:01:56 +01:00
|
|
|
q.add_log_cmd(Info.CHANGE_TRANSMITTER_TIMEOUT)
|
|
|
|
q.add_pus_tc(
|
|
|
|
create_load_param_cmd(
|
2023-02-22 12:56:57 +01:00
|
|
|
create_scalar_u32_parameter(
|
2023-02-02 16:01:56 +01:00
|
|
|
COM_SUBSYSTEM_ID,
|
|
|
|
0,
|
|
|
|
ParameterId.TRANSMITTER_TIMEOUT,
|
|
|
|
timeout,
|
2023-02-22 12:56:57 +01:00
|
|
|
).pack()
|
2023-02-02 16:01:56 +01:00
|
|
|
)
|
|
|
|
)
|
2023-02-08 01:29:38 +01:00
|
|
|
elif o == OpCode.READ_MODE:
|
|
|
|
q.add_log_cmd(Info.READ_MODE)
|
|
|
|
q.add_pus_tc(create_read_mode_command(COM_SUBSYSTEM_ID))
|
|
|
|
elif o == OpCode.ANNOUNCE_MODE:
|
|
|
|
q.add_log_cmd(Info.ANNOUNCE_MODE)
|
|
|
|
q.add_pus_tc(create_announce_mode_command(COM_SUBSYSTEM_ID))
|
|
|
|
elif o == OpCode.ANNOUNCE_MODE_RECURSIVE:
|
|
|
|
q.add_log_cmd(Info.ANNOUNCE_MODE_RECURSIVE)
|
|
|
|
q.add_pus_tc(create_announce_mode_recursive_command(COM_SUBSYSTEM_ID))
|
2023-01-27 15:42:00 +01:00
|
|
|
|
|
|
|
|
|
|
|
@tmtc_definitions_provider
|
|
|
|
def add_com_subsystem_cmds(defs: TmtcDefinitionWrapper):
|
|
|
|
oce = OpCodeEntry()
|
|
|
|
oce.add(OpCode.RX_ONLY, Info.RX_ONLY)
|
|
|
|
oce.add(OpCode.TX_AND_RX_LOW_RATE, Info.TX_AND_RX_LOW_DATARATE)
|
|
|
|
oce.add(OpCode.TX_AND_RX_HIGH_RATE, Info.TX_AND_RX_HIGH_DATARATE)
|
2023-01-27 20:23:41 +01:00
|
|
|
oce.add(OpCode.TX_AND_RX_DEF_RATE, Info.TX_AND_RX_DEF_DATARATE)
|
2023-01-28 14:30:51 +01:00
|
|
|
oce.add(OpCode.UPDATE_DEFAULT_DATARATE_LOW, Info.UPDATE_DEFAULT_DATARATE_LOW)
|
|
|
|
oce.add(OpCode.UPDATE_DEFAULT_DATARATE_HIGH, Info.UPDATE_DEFAULT_DATARATE_HIGH)
|
2023-02-22 09:53:23 +01:00
|
|
|
oce.add(OpCode.CHANGE_TRANSMITTER_TIMEOUT, Info.CHANGE_TRANSMITTER_TIMEOUT)
|
2023-02-08 01:29:38 +01:00
|
|
|
oce.add(OpCode.READ_MODE, Info.READ_MODE)
|
|
|
|
oce.add(OpCode.ANNOUNCE_MODE, Info.ANNOUNCE_MODE)
|
|
|
|
oce.add(OpCode.ANNOUNCE_MODE_RECURSIVE, Info.ANNOUNCE_MODE_RECURSIVE)
|
2023-01-27 15:42:00 +01:00
|
|
|
defs.add_service(CustomServiceList.COM_SS, "COM Subsystem", oce)
|