initiated tmtc commander
This commit is contained in:
parent
1314992e32
commit
ff5fb74fb2
10
README.md
10
README.md
@ -1,2 +1,8 @@
|
|||||||
EIVE TMTC Commander
|
### How to use this folder
|
||||||
======
|
|
||||||
|
This folder contains template files to set up the TMTC commander
|
||||||
|
for a new mission or project. These files are the adaption
|
||||||
|
point to customize the TMTC commander.
|
||||||
|
|
||||||
|
To do so, simply copy all folder inside the TMTC commander root. This
|
||||||
|
step is also required because the TMTC commander core will load some modules.
|
||||||
|
0
config/__init__.py
Normal file
0
config/__init__.py
Normal file
18
config/tmtcc_com_config.py
Normal file
18
config/tmtcc_com_config.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
"""
|
||||||
|
@brief This file transfers control of communication interface setup to the user.
|
||||||
|
@details Template configuration file. Copy this folder to the TMTC commander root and adapt
|
||||||
|
it to your needs.
|
||||||
|
"""
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
|
from tmtc_core.com_if.tmtcc_com_interface_base import CommunicationInterface
|
||||||
|
from tmtc_core.core.tmtc_core_definitions import ComInterfaces
|
||||||
|
from tmtc_core.core.tmtcc_com_if_setup import create_communication_interface_default
|
||||||
|
from tmtc_core.utility.tmtcc_tmtc_printer import TmTcPrinter
|
||||||
|
|
||||||
|
|
||||||
|
def create_communication_interface_user(com_if: ComInterfaces, tmtc_printer: TmTcPrinter) -> \
|
||||||
|
Union[CommunicationInterface, None]:
|
||||||
|
return create_communication_interface_default(com_if, tmtc_printer)
|
||||||
|
|
||||||
|
|
41
config/tmtcc_definitions.py
Normal file
41
config/tmtcc_definitions.py
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
"""
|
||||||
|
@brief This file transfers control of the custom definitions like modes to the user.
|
||||||
|
@details Template configuration file. Copy this folder to the TMTC commander root and adapt
|
||||||
|
it to your needs.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import enum
|
||||||
|
from enum import auto
|
||||||
|
|
||||||
|
|
||||||
|
# Mode options, set by args parser
|
||||||
|
class ModeList(enum.Enum):
|
||||||
|
Idle = 0
|
||||||
|
ListenerMode = 1
|
||||||
|
SingleCommandMode = 2
|
||||||
|
ServiceTestMode = 3
|
||||||
|
SoftwareTestMode = 4
|
||||||
|
PromptMode = 32
|
||||||
|
|
||||||
|
|
||||||
|
class ServiceList(enum.Enum):
|
||||||
|
SERVICE_2 = 0
|
||||||
|
SERVICE_3 = auto()
|
||||||
|
SERVICE_5 = auto()
|
||||||
|
SERVICE_8 = auto()
|
||||||
|
SERVICE_9 = auto()
|
||||||
|
SERVICE_17 = auto()
|
||||||
|
SERVICE_20 = auto()
|
||||||
|
SERVICE_200 = auto()
|
||||||
|
|
||||||
|
|
||||||
|
class SerialConfig(enum.Enum):
|
||||||
|
SERIAL_PORT = auto()
|
||||||
|
SERIAL_BAUD_RATE = auto()
|
||||||
|
SERIAL_TIMEOUT = auto()
|
||||||
|
SERIAL_COMM_TYPE = auto()
|
||||||
|
|
||||||
|
|
||||||
|
class EthernetConfig(enum.Enum):
|
||||||
|
SEND_ADDRESS = auto()
|
||||||
|
RECV_ADDRESS = auto()
|
223
config/tmtcc_globals.py
Normal file
223
config/tmtcc_globals.py
Normal file
@ -0,0 +1,223 @@
|
|||||||
|
"""
|
||||||
|
@brief This file transfers definitions of global variables to the user.
|
||||||
|
@details Template configuration file. Copy this folder to the TMTC commander root and adapt
|
||||||
|
it to your needs.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import enum
|
||||||
|
import argparse
|
||||||
|
|
||||||
|
|
||||||
|
# All globals can be added here and will be part of a globals dictionary.
|
||||||
|
from config.tmtcc_definitions import ServiceList, ModeList
|
||||||
|
|
||||||
|
from tmtc_core.com_if.tmtcc_serial_com_if import SerialCommunicationType
|
||||||
|
from tmtc_core.com_if.tmtcc_serial_utilities import determine_com_port
|
||||||
|
from tmtc_core.core.tmtc_core_definitions import ComInterfaces
|
||||||
|
from tmtc_core.utility.tmtcc_logger import get_logger
|
||||||
|
|
||||||
|
|
||||||
|
class GlobalIds(enum.Enum):
|
||||||
|
from enum import auto
|
||||||
|
# Generic parameters
|
||||||
|
APID = auto()
|
||||||
|
MODE = auto()
|
||||||
|
SERVICE = auto()
|
||||||
|
SERVICELIST = auto()
|
||||||
|
COM_IF = auto()
|
||||||
|
OP_CODE = auto()
|
||||||
|
TM_TIMEOUT = auto()
|
||||||
|
|
||||||
|
# Miscellaneous
|
||||||
|
DISPLAY_MODE = auto()
|
||||||
|
USE_LISTENER_AFTER_OP = auto()
|
||||||
|
PRINT_HK = auto()
|
||||||
|
PRINT_TM = auto()
|
||||||
|
PRINT_RAW_TM = auto()
|
||||||
|
PRINT_TO_FILE = auto()
|
||||||
|
RESEND_TC = auto()
|
||||||
|
TC_SEND_TIMEOUT_FACTOR = auto()
|
||||||
|
|
||||||
|
# Config dictionaries
|
||||||
|
USE_SERIAL = auto()
|
||||||
|
SERIAL_CONFIG = auto()
|
||||||
|
USE_ETHERNET = auto()
|
||||||
|
ETHERNET_CONFIG = auto()
|
||||||
|
|
||||||
|
# Object handles
|
||||||
|
PRETTY_PRINTER = auto()
|
||||||
|
TM_LISTENER_HANDLE = auto()
|
||||||
|
COM_INTERFACE_HANDLE = auto()
|
||||||
|
TMTC_PRINTER_HANDLE = auto()
|
||||||
|
|
||||||
|
|
||||||
|
def add_globals_pre_args_parsing(gui: bool = False):
|
||||||
|
from tmtc_core.core.tmtcc_globals_manager import update_global
|
||||||
|
import pprint
|
||||||
|
|
||||||
|
update_global(GlobalIds.APID, 0xef)
|
||||||
|
update_global(GlobalIds.COM_IF, ComInterfaces.EthernetUDP)
|
||||||
|
update_global(GlobalIds.TC_SEND_TIMEOUT_FACTOR, 2)
|
||||||
|
update_global(GlobalIds.TM_TIMEOUT, 4)
|
||||||
|
update_global(GlobalIds.DISPLAY_MODE, "long")
|
||||||
|
update_global(GlobalIds.PRINT_TO_FILE, True)
|
||||||
|
|
||||||
|
update_global(GlobalIds.SERIAL_CONFIG, dict())
|
||||||
|
update_global(GlobalIds.ETHERNET_CONFIG, dict())
|
||||||
|
pp = pprint.PrettyPrinter()
|
||||||
|
update_global(GlobalIds.PRETTY_PRINTER, pp)
|
||||||
|
update_global(GlobalIds.TM_LISTENER_HANDLE, None)
|
||||||
|
update_global(GlobalIds.COM_INTERFACE_HANDLE, None)
|
||||||
|
update_global(GlobalIds.TMTC_PRINTER_HANDLE, None)
|
||||||
|
update_global(GlobalIds.PRINT_RAW_TM, False)
|
||||||
|
update_global(GlobalIds.RESEND_TC, False)
|
||||||
|
|
||||||
|
update_global(GlobalIds.OP_CODE, "0")
|
||||||
|
update_global(GlobalIds.MODE, ModeList.ListenerMode)
|
||||||
|
|
||||||
|
if gui:
|
||||||
|
set_up_ethernet_cfg()
|
||||||
|
|
||||||
|
servicelist = dict()
|
||||||
|
servicelist[ServiceList.SERVICE_2] = ["Service 2 Raw Commanding"]
|
||||||
|
servicelist[ServiceList.SERVICE_3] = ["Service 3 Housekeeping"]
|
||||||
|
servicelist[ServiceList.SERVICE_5] = ["Service 5 Event"]
|
||||||
|
servicelist[ServiceList.SERVICE_8] = ["Service 8 Functional Commanding"]
|
||||||
|
servicelist[ServiceList.SERVICE_9] = ["Service 9 Time"]
|
||||||
|
servicelist[ServiceList.SERVICE_17] = ["Service 17 Test"]
|
||||||
|
servicelist[ServiceList.SERVICE_20] = ["Service 20 Parameters"]
|
||||||
|
servicelist[ServiceList.SERVICE_23] = ["Service 23 File Management"]
|
||||||
|
servicelist[ServiceList.SERVICE_200] = ["Service 200 Mode Management"]
|
||||||
|
update_global(GlobalIds.SERVICE, ServiceList.SERVICE_17)
|
||||||
|
update_global(GlobalIds.SERVICELIST, servicelist)
|
||||||
|
|
||||||
|
|
||||||
|
def add_globals_post_args_parsing(args: argparse.Namespace):
|
||||||
|
from tmtc_core.core.tmtcc_globals_manager import update_global
|
||||||
|
from config.tmtcc_definitions import ModeList
|
||||||
|
logger = get_logger()
|
||||||
|
|
||||||
|
mode_param = ModeList.ListenerMode
|
||||||
|
if 0 <= args.mode <= 6:
|
||||||
|
if args.mode == 0:
|
||||||
|
mode_param = ModeList.GUIMode
|
||||||
|
elif args.mode == 1:
|
||||||
|
mode_param = ModeList.ListenerMode
|
||||||
|
elif args.mode == 2:
|
||||||
|
mode_param = ModeList.SingleCommandMode
|
||||||
|
elif args.mode == 3:
|
||||||
|
mode_param = ModeList.ServiceTestMode
|
||||||
|
elif args.mode == 4:
|
||||||
|
mode_param = ModeList.SoftwareTestMode
|
||||||
|
update_global(GlobalIds.MODE, mode_param)
|
||||||
|
|
||||||
|
if args.com_if == ComInterfaces.EthernetUDP.value:
|
||||||
|
com_if = ComInterfaces.EthernetUDP
|
||||||
|
elif args.com_if == ComInterfaces.Serial.value:
|
||||||
|
com_if = ComInterfaces.Serial
|
||||||
|
elif args.com_if == ComInterfaces.Dummy.value:
|
||||||
|
com_if = ComInterfaces.Dummy
|
||||||
|
elif args.com_if == ComInterfaces.QEMU.value:
|
||||||
|
com_if = ComInterfaces.QEMU
|
||||||
|
else:
|
||||||
|
com_if = ComInterfaces.Serial
|
||||||
|
update_global(GlobalIds.COM_IF, com_if)
|
||||||
|
|
||||||
|
if args.short_display_mode:
|
||||||
|
display_mode_param = "short"
|
||||||
|
else:
|
||||||
|
display_mode_param = "long"
|
||||||
|
update_global(GlobalIds.DISPLAY_MODE, display_mode_param)
|
||||||
|
|
||||||
|
service = str(args.service).lower()
|
||||||
|
if service == "2":
|
||||||
|
service = ServiceList.SERVICE_2
|
||||||
|
elif service == "3":
|
||||||
|
service = ServiceList.SERVICE_3
|
||||||
|
elif service == "5":
|
||||||
|
service = ServiceList.SERVICE_5
|
||||||
|
elif service == "8":
|
||||||
|
service = ServiceList.SERVICE_8
|
||||||
|
elif service == "9":
|
||||||
|
service = ServiceList.SERVICE_9
|
||||||
|
elif service == "17":
|
||||||
|
service = ServiceList.SERVICE_17
|
||||||
|
elif service == "20":
|
||||||
|
service = ServiceList.SERVICE_20
|
||||||
|
elif service == "23":
|
||||||
|
service = ServiceList.SERVICE_23
|
||||||
|
else:
|
||||||
|
logger.warning("Service not known! Setting standard service 17")
|
||||||
|
service = ServiceList.SERVICE_17
|
||||||
|
|
||||||
|
update_global(GlobalIds.SERVICE, service)
|
||||||
|
|
||||||
|
if args.op_code is None:
|
||||||
|
op_code = 0
|
||||||
|
else:
|
||||||
|
op_code = str(args.op_code).lower()
|
||||||
|
update_global(GlobalIds.OP_CODE, op_code)
|
||||||
|
|
||||||
|
update_global(GlobalIds.USE_LISTENER_AFTER_OP, args.listener)
|
||||||
|
update_global(GlobalIds.TM_TIMEOUT, args.tm_timeout)
|
||||||
|
update_global(GlobalIds.PRINT_HK, args.print_hk)
|
||||||
|
update_global(GlobalIds.PRINT_TM, args.print_tm)
|
||||||
|
update_global(GlobalIds.PRINT_RAW_TM, args.raw_data_print)
|
||||||
|
update_global(GlobalIds.PRINT_TO_FILE, args.print_log)
|
||||||
|
update_global(GlobalIds.RESEND_TC, args.resend_tc)
|
||||||
|
update_global(GlobalIds.TC_SEND_TIMEOUT_FACTOR, 3)
|
||||||
|
|
||||||
|
use_serial_cfg = False
|
||||||
|
if com_if == ComInterfaces.Serial or com_if == ComInterfaces.QEMU:
|
||||||
|
use_serial_cfg = True
|
||||||
|
if use_serial_cfg:
|
||||||
|
set_up_serial_cfg(com_if)
|
||||||
|
|
||||||
|
use_ethernet_cfg = False
|
||||||
|
if com_if == ComInterfaces.EthernetUDP:
|
||||||
|
use_ethernet_cfg = True
|
||||||
|
if use_ethernet_cfg:
|
||||||
|
# TODO: Port and IP address can also be passed as CLI parameters. Use them here if applicable
|
||||||
|
set_up_ethernet_cfg()
|
||||||
|
|
||||||
|
|
||||||
|
def set_up_serial_cfg(com_if: ComInterfaces):
|
||||||
|
from tmtc_core.core.tmtcc_globals_manager import update_global
|
||||||
|
update_global(GlobalIds.USE_SERIAL, True)
|
||||||
|
from tmtc_core.core.tmtcc_globals_manager import get_global
|
||||||
|
from config.tmtcc_definitions import SerialConfig
|
||||||
|
serial_cfg_dict = get_global(GlobalIds.SERIAL_CONFIG)
|
||||||
|
if com_if == ComInterfaces.Serial:
|
||||||
|
com_port = determine_com_port()
|
||||||
|
else:
|
||||||
|
com_port = ""
|
||||||
|
serial_cfg_dict.update({SerialConfig.SERIAL_PORT: com_port})
|
||||||
|
serial_cfg_dict.update({SerialConfig.SERIAL_BAUD_RATE: 115200})
|
||||||
|
serial_cfg_dict.update({SerialConfig.SERIAL_TIMEOUT: 0.01})
|
||||||
|
serial_cfg_dict.update({SerialConfig.SERIAL_COMM_TYPE: SerialCommunicationType.DLE_ENCODING})
|
||||||
|
serial_cfg_dict.update({SerialConfig.SERIAL_FRAME_SIZE: 256})
|
||||||
|
serial_cfg_dict.update({SerialConfig.SERIAL_DLE_QUEUE_LEN: 25})
|
||||||
|
serial_cfg_dict.update({SerialConfig.SERIAL_DLE_MAX_FRAME_SIZE: 1024})
|
||||||
|
update_global(GlobalIds.SERIAL_CONFIG, serial_cfg_dict)
|
||||||
|
|
||||||
|
|
||||||
|
def set_up_ethernet_cfg():
|
||||||
|
from tmtc_core.core.tmtcc_globals_manager import update_global
|
||||||
|
update_global(GlobalIds.USE_ETHERNET, True)
|
||||||
|
from tmtc_core.core.tmtcc_globals_manager import get_global
|
||||||
|
from config.tmtcc_definitions import EthernetConfig
|
||||||
|
ethernet_cfg_dict = get_global(GlobalIds.ETHERNET_CONFIG)
|
||||||
|
# Local host and unused port as default config
|
||||||
|
default_send_ip = "127.0.0.1"
|
||||||
|
default_send_port = 7301
|
||||||
|
send_address = (default_send_ip, default_send_port)
|
||||||
|
ethernet_cfg_dict.update({EthernetConfig.SEND_ADDRESS: send_address})
|
||||||
|
# Bind to all interfaces (might be insecure!)
|
||||||
|
default_rcv_ip = ''
|
||||||
|
default_rcv_port = 7302
|
||||||
|
recv_address = (default_rcv_ip, default_rcv_port)
|
||||||
|
ethernet_cfg_dict.update({EthernetConfig.RECV_ADDRESS: recv_address})
|
||||||
|
update_global(GlobalIds.ETHERNET_CONFIG, ethernet_cfg_dict)
|
||||||
|
|
||||||
|
|
||||||
|
|
15
config/tmtcc_hooks.py
Normal file
15
config/tmtcc_hooks.py
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
"""
|
||||||
|
@brief This file exposes hook functions to the user.
|
||||||
|
@details Template configuration file. Copy this folder to the TMTC commander root and adapt
|
||||||
|
it to your needs.
|
||||||
|
"""
|
||||||
|
from tmtc_core.pus_tc.tmtcc_pus_tc_base import PusTelecommand
|
||||||
|
|
||||||
|
|
||||||
|
def command_preparation_hook() -> PusTelecommand:
|
||||||
|
"""
|
||||||
|
Can be used to pack user-defined commands by generating and returning a PusTelecommand
|
||||||
|
class instance
|
||||||
|
"""
|
||||||
|
return PusTelecommand(service=17, subservice=1, ssc=20)
|
||||||
|
|
23
config/tmtcc_object_ids.py
Normal file
23
config/tmtcc_object_ids.py
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
"""
|
||||||
|
@brief This file transfers control of the object IDs to the user.
|
||||||
|
@details Template configuration file. Copy this folder to the TMTC commander root and adapt
|
||||||
|
it to your needs.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import enum
|
||||||
|
from typing import Dict
|
||||||
|
|
||||||
|
|
||||||
|
class ObjectIds(enum.Enum):
|
||||||
|
from enum import auto
|
||||||
|
PUS_SERVICE_17 = auto()
|
||||||
|
TEST_DEVICE = auto()
|
||||||
|
|
||||||
|
|
||||||
|
def set_object_ids(object_id_dict: Dict[ObjectIds, bytearray]):
|
||||||
|
o_ids = ObjectIds
|
||||||
|
object_id_dict.update(
|
||||||
|
{o_ids.PUS_SERVICE_17: bytearray([0x53, 0x00, 0x00, 0x17]),
|
||||||
|
o_ids.TEST_DEVICE: bytearray([0x44, 0x00, 0xAF, 0xFE]),
|
||||||
|
}
|
||||||
|
)
|
22
config/tmtcc_user_mode_op.py
Normal file
22
config/tmtcc_user_mode_op.py
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
"""
|
||||||
|
@brief This file transfers control of custom mode handling to the user.
|
||||||
|
@details Template configuration file. Copy this folder to the TMTC commander root and adapt
|
||||||
|
it to your needs.
|
||||||
|
"""
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from config.tmtcc_definitions import ModeList
|
||||||
|
from core.tmtc_backend import TmTcHandler
|
||||||
|
from test.obsw_pus_service_test import run_selected_pus_tests
|
||||||
|
from tmtc_core.utility.tmtcc_logger import get_logger
|
||||||
|
from utility.tmtcc_binary_uploader import BinaryFileUploader
|
||||||
|
|
||||||
|
LOGGER = get_logger()
|
||||||
|
|
||||||
|
|
||||||
|
def perform_mode_operation_user(tmtc_backend: TmTcHandler, mode: ModeList):
|
||||||
|
"""
|
||||||
|
Custom modes can be implemented here
|
||||||
|
"""
|
||||||
|
LOGGER.error(f"Unknown mode {mode}, Configuration error !")
|
||||||
|
sys.exit()
|
10
config/tmtcc_version.py
Normal file
10
config/tmtcc_version.py
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
"""
|
||||||
|
@brief This file transfers control of versioning to the user.
|
||||||
|
@details Template configuration file. Copy this folder to the TMTC commander root and adapt
|
||||||
|
it to your needs.
|
||||||
|
"""
|
||||||
|
import tmtc_core.core.tmtcc_version as core
|
||||||
|
|
||||||
|
SW_NAME = core.SW_NAME
|
||||||
|
SW_VERSION = core.SW_VERSION
|
||||||
|
SW_SUBVERSION = core.SW_SUBVERSION
|
0
pus_tc/__init__.py
Normal file
0
pus_tc/__init__.py
Normal file
34
pus_tc/tmtcc_tc_packer_hook.py
Normal file
34
pus_tc/tmtcc_tc_packer_hook.py
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
"""
|
||||||
|
@brief This file transfers control of TC packing to the user
|
||||||
|
@details Template configuration file. Copy this folder to the TMTC commander root and adapt
|
||||||
|
it to your needs.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
from collections import deque
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
|
from config.tmtcc_definitions import ServiceList
|
||||||
|
from tmtc_core.utility.tmtcc_logger import get_logger
|
||||||
|
from tmtc_core.pus_tc.tmtcc_pus_tc_base import TcQueueT
|
||||||
|
from tmtc_core.pus_tc.tmtcc_tc_service5_event import pack_service5_test_into
|
||||||
|
from tmtc_core.pus_tc.tmtcc_tc_service17_test import pack_service17_ping_command
|
||||||
|
|
||||||
|
LOGGER = get_logger()
|
||||||
|
|
||||||
|
|
||||||
|
def pack_service_queue_user(service: Union[int, str], op_code: int, service_queue: TcQueueT):
|
||||||
|
if service == ServiceList.SERVICE_5:
|
||||||
|
return pack_service5_test_into(service_queue)
|
||||||
|
if service == ServiceList.SERVICE_17:
|
||||||
|
return service_queue.appendleft(pack_service17_ping_command(ssc=1700).pack_command_tuple())
|
||||||
|
LOGGER.warning("Invalid Service !")
|
||||||
|
|
||||||
|
|
||||||
|
def create_total_tc_queue_user() -> TcQueueT:
|
||||||
|
if not os.path.exists("log"):
|
||||||
|
os.mkdir("log")
|
||||||
|
tc_queue = deque()
|
||||||
|
pack_service5_test_into(tc_queue)
|
||||||
|
tc_queue.appendleft(pack_service17_ping_command(ssc=1700).pack_command_tuple())
|
||||||
|
return tc_queue
|
0
pus_tm/__init__.py
Normal file
0
pus_tm/__init__.py
Normal file
26
pus_tm/tmtcc_pus_hk_handling.py
Normal file
26
pus_tm/tmtcc_pus_hk_handling.py
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
"""
|
||||||
|
@brief This file transfers control of housekeeping handling (PUS service 3) to the
|
||||||
|
developer
|
||||||
|
@details Template configuration file. Copy this folder to the TMTC commander root and adapt
|
||||||
|
it to your needs.
|
||||||
|
"""
|
||||||
|
from typing import Tuple
|
||||||
|
|
||||||
|
from tmtc_core.pus_tm.obsw_tm_service_3 import Service3Base
|
||||||
|
from tmtc_core.utility.tmtcc_logger import get_logger
|
||||||
|
|
||||||
|
LOGGER = get_logger()
|
||||||
|
|
||||||
|
|
||||||
|
def handle_user_hk_packet(
|
||||||
|
object_id: bytearray, hk_data: bytearray,
|
||||||
|
service3_packet: Service3Base) -> Tuple[list, list, bytearray]:
|
||||||
|
"""
|
||||||
|
This function is called when a Service 3 Housekeeping packet is received.
|
||||||
|
@param object_id:
|
||||||
|
@param hk_data:
|
||||||
|
@param service3_packet:
|
||||||
|
@return:
|
||||||
|
"""
|
||||||
|
LOGGER.info("Service3TM: Parsing for this SID has not been implemented.")
|
||||||
|
return [], [], bytearray()
|
26
pus_tm/tmtcc_pus_tm_factory_hook.py
Normal file
26
pus_tm/tmtcc_pus_tm_factory_hook.py
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
"""
|
||||||
|
@brief This file transfers control of TM parsing to the user
|
||||||
|
@details Template configuration file. Copy this folder to the TMTC commander root and adapt
|
||||||
|
it to your needs.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from tmtc_core.pus_tm.tmtcc_pus_tm_base import PusTelemetry
|
||||||
|
from tmtc_core.utility.tmtcc_logger import get_logger
|
||||||
|
|
||||||
|
from tmtc_core.pus_tm.tmtcc_tm_service1 import Service1TM
|
||||||
|
from tmtc_core.pus_tm.tmtcc_tm_service5 import Service5TM
|
||||||
|
from tmtc_core.pus_tm.tmtcc_tm_service17 import Service17TM
|
||||||
|
|
||||||
|
LOGGER = get_logger()
|
||||||
|
|
||||||
|
|
||||||
|
def tm_user_factory_hook(raw_tm_packet: bytearray) -> PusTelemetry:
|
||||||
|
service_type = raw_tm_packet[7]
|
||||||
|
if service_type == 1:
|
||||||
|
return Service1TM(raw_tm_packet)
|
||||||
|
if service_type == 5:
|
||||||
|
return Service5TM(raw_tm_packet)
|
||||||
|
if service_type == 17:
|
||||||
|
return Service17TM(raw_tm_packet)
|
||||||
|
LOGGER.info("The service " + str(service_type) + " is not implemented in Telemetry Factory")
|
||||||
|
return PusTelemetry(raw_tm_packet)
|
4
requirements.txt
Normal file
4
requirements.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
crcmod>=1.7
|
||||||
|
PyQt5>=5.15.1
|
||||||
|
PyQt5-stubs>=5.14.2.2
|
||||||
|
pyserial>=3.4
|
37
tmtc_client_cli.py
Normal file
37
tmtc_client_cli.py
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#!/usr/bin/python3
|
||||||
|
"""
|
||||||
|
@brief TMTC Commander entry point for command line mode.
|
||||||
|
@details
|
||||||
|
This client was developed by KSat for the SOURCE project to test the on-board software but
|
||||||
|
has evolved into a more generic tool for satellite developers to perform TMTC (Telemetry and Telecommand)
|
||||||
|
handling and testing via different communication interfaces. Currently, only the PUS standard is
|
||||||
|
implemented as a packet standard.
|
||||||
|
|
||||||
|
Run this file with the -h flag to display options.
|
||||||
|
|
||||||
|
@license
|
||||||
|
Copyright 2020 KSat e.V. Stuttgart
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
||||||
|
@author R. Mueller
|
||||||
|
"""
|
||||||
|
from tmtc_core.tmtcc_runner import run_tmtc_client
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
run_tmtc_client(False)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
37
tmtc_client_gui.py
Normal file
37
tmtc_client_gui.py
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#!/usr/bin/python3
|
||||||
|
"""
|
||||||
|
@brief TMTC Commander entry point for GUI mode.
|
||||||
|
@details
|
||||||
|
This client was developed by KSat for the SOURCE project to test the on-board software but
|
||||||
|
has evolved into a more generic tool for satellite developers to perform TMTC (Telemetry and Telecommand)
|
||||||
|
handling and testing via different communication interfaces. Currently, only the PUS standard is
|
||||||
|
implemented as a packet standard.
|
||||||
|
|
||||||
|
Run this file with the -h flag to display options.
|
||||||
|
|
||||||
|
@license
|
||||||
|
Copyright 2020 KSat e.V. Stuttgart
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
||||||
|
@author R. Mueller
|
||||||
|
"""
|
||||||
|
from tmtc_core.tmtcc_runner import run_tmtc_client
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
run_tmtc_client(True)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
0
utility/__init__.py
Normal file
0
utility/__init__.py
Normal file
15
utility/tmtcc_user_args_parser.py
Normal file
15
utility/tmtcc_user_args_parser.py
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
"""
|
||||||
|
@brief This file transfers control of the command line argument parsing to the user.
|
||||||
|
@details Template configuration file. Copy this folder to the TMTC commander root and adapt
|
||||||
|
it to your needs.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def parse_input_arguments_user(print_known_args: bool = False, print_unknown_args: bool = False):
|
||||||
|
"""
|
||||||
|
This function by default will build the default argument parser. A custom CLI parser can be
|
||||||
|
built in this function if required.
|
||||||
|
"""
|
||||||
|
from tmtc_core.utility.tmtcc_core_args_parser import parse_default_input_arguments
|
||||||
|
parse_default_input_arguments(print_known_args=print_known_args,
|
||||||
|
print_unknown_args=print_unknown_args)
|
Loading…
Reference in New Issue
Block a user