first version of continous operation #69
24
.run/Service 17.run.xml
Normal file
24
.run/Service 17.run.xml
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="Service 17" type="PythonConfigurationType" factoryName="Python" folderName="PUS">
|
||||||
|
<module name="tmtc" />
|
||||||
|
<option name="INTERPRETER_OPTIONS" value="" />
|
||||||
|
<option name="PARENT_ENVS" value="true" />
|
||||||
|
<envs>
|
||||||
|
<env name="PYTHONUNBUFFERED" value="1" />
|
||||||
|
</envs>
|
||||||
|
<option name="SDK_HOME" value="" />
|
||||||
|
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
||||||
|
<option name="IS_MODULE_SDK" value="true" />
|
||||||
|
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||||
|
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||||
|
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
|
||||||
|
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/tmtccli.py" />
|
||||||
|
<option name="PARAMETERS" value="-s 17" />
|
||||||
|
<option name="SHOW_COMMAND_LINE" value="false" />
|
||||||
|
<option name="EMULATE_TERMINAL" value="true" />
|
||||||
|
<option name="MODULE_MODE" value="false" />
|
||||||
|
<option name="REDIRECT_INPUT" value="false" />
|
||||||
|
<option name="INPUT_FILE" value="" />
|
||||||
|
<method v="2" />
|
||||||
|
</configuration>
|
||||||
|
</component>
|
@ -1,5 +1,5 @@
|
|||||||
<component name="ProjectRunConfigurationManager">
|
<component name="ProjectRunConfigurationManager">
|
||||||
<configuration default="false" name="tmtcc Service 17" type="PythonConfigurationType" factoryName="Python" folderName="PUS">
|
<configuration default="false" name="Service 17 w Listener" type="PythonConfigurationType" factoryName="Python" folderName="PUS">
|
||||||
<module name="tmtc" />
|
<module name="tmtc" />
|
||||||
<option name="INTERPRETER_OPTIONS" value="" />
|
<option name="INTERPRETER_OPTIONS" value="" />
|
||||||
<option name="PARENT_ENVS" value="true" />
|
<option name="PARENT_ENVS" value="true" />
|
||||||
|
@ -0,0 +1,6 @@
|
|||||||
|
SW_NAME = "eive"
|
||||||
|
VERSION_MAJOR = 1
|
||||||
|
VERSION_MINOR = 9
|
||||||
|
VERSION_SUBMINOR = 0
|
||||||
|
|
||||||
|
__version__ = "1.9.0"
|
@ -8,6 +8,7 @@ import enum
|
|||||||
|
|
||||||
|
|
||||||
PUS_APID = 0x65
|
PUS_APID = 0x65
|
||||||
|
SPACE_PACKET_IDS = (0x08 << 8 | PUS_APID,)
|
||||||
|
|
||||||
|
|
||||||
class CustomServiceList(enum.Enum):
|
class CustomServiceList(enum.Enum):
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
|
from config.definitions import SPACE_PACKET_IDS
|
||||||
from tmtccmd.config.definitions import (
|
from tmtccmd.config.definitions import (
|
||||||
ServiceOpCodeDictT,
|
ServiceOpCodeDictT,
|
||||||
)
|
)
|
||||||
@ -19,11 +20,7 @@ class EiveHookObject(TmTcHookBase):
|
|||||||
super().__init__(json_cfg_path=json_cfg_path)
|
super().__init__(json_cfg_path=json_cfg_path)
|
||||||
|
|
||||||
def get_service_op_code_dictionary(self) -> ServiceOpCodeDictT:
|
def get_service_op_code_dictionary(self) -> ServiceOpCodeDictT:
|
||||||
from tmtccmd.config.globals import get_default_service_op_code_dict
|
return get_eive_service_op_code_dict()
|
||||||
|
|
||||||
service_op_code_dict = get_default_service_op_code_dict()
|
|
||||||
get_eive_service_op_code_dict(service_op_code_dict=service_op_code_dict)
|
|
||||||
return service_op_code_dict
|
|
||||||
|
|
||||||
def assign_communication_interface(
|
def assign_communication_interface(
|
||||||
self, com_if_key: str
|
self, com_if_key: str
|
||||||
@ -33,7 +30,7 @@ class EiveHookObject(TmTcHookBase):
|
|||||||
return create_communication_interface_default(
|
return create_communication_interface_default(
|
||||||
com_if_key=com_if_key,
|
com_if_key=com_if_key,
|
||||||
json_cfg_path=self.json_cfg_path,
|
json_cfg_path=self.json_cfg_path,
|
||||||
space_packet_ids=(0x0865,),
|
space_packet_ids=SPACE_PACKET_IDS,
|
||||||
)
|
)
|
||||||
|
|
||||||
def perform_mode_operation(self, tmtc_backend: TmTcHandler, mode: int):
|
def perform_mode_operation(self, tmtc_backend: TmTcHandler, mode: int):
|
||||||
|
@ -1,6 +0,0 @@
|
|||||||
SW_NAME = "eive"
|
|
||||||
VERSION_MAJOR = 1
|
|
||||||
VERSION_MINOR = 9
|
|
||||||
VERSION_SUBMINOR = 0
|
|
||||||
|
|
||||||
__version__ = "1.9.0"
|
|
@ -12,7 +12,9 @@ from pus_tc.devs.reaction_wheels import add_rw_cmds
|
|||||||
from pus_tc.devs.bpx_batt import BpxOpCodes
|
from pus_tc.devs.bpx_batt import BpxOpCodes
|
||||||
|
|
||||||
|
|
||||||
def get_eive_service_op_code_dict(service_op_code_dict: ServiceOpCodeDictT):
|
def get_eive_service_op_code_dict() -> ServiceOpCodeDictT:
|
||||||
|
from tmtccmd.config.globals import get_default_service_op_code_dict
|
||||||
|
service_op_code_dict = get_default_service_op_code_dict()
|
||||||
add_bpx_cmd_definitions(cmd_dict=service_op_code_dict)
|
add_bpx_cmd_definitions(cmd_dict=service_op_code_dict)
|
||||||
add_core_controller_definitions(cmd_dict=service_op_code_dict)
|
add_core_controller_definitions(cmd_dict=service_op_code_dict)
|
||||||
add_pl_pcdu_cmds(cmd_dict=service_op_code_dict)
|
add_pl_pcdu_cmds(cmd_dict=service_op_code_dict)
|
||||||
@ -31,6 +33,7 @@ def get_eive_service_op_code_dict(service_op_code_dict: ServiceOpCodeDictT):
|
|||||||
add_pdec_cmds(cmd_dict=service_op_code_dict)
|
add_pdec_cmds(cmd_dict=service_op_code_dict)
|
||||||
add_heater_cmds(cmd_dict=service_op_code_dict)
|
add_heater_cmds(cmd_dict=service_op_code_dict)
|
||||||
add_tmp_sens_cmds(cmd_dict=service_op_code_dict)
|
add_tmp_sens_cmds(cmd_dict=service_op_code_dict)
|
||||||
|
return service_op_code_dict
|
||||||
|
|
||||||
|
|
||||||
def add_tmp_sens_cmds(cmd_dict: ServiceOpCodeDictT):
|
def add_tmp_sens_cmds(cmd_dict: ServiceOpCodeDictT):
|
||||||
|
@ -38,5 +38,4 @@ def pack_service200_test_into(tc_queue: TcQueueT) -> TcQueueT:
|
|||||||
mode_data = pack_mode_data(obj_id, Modes.OFF, 0)
|
mode_data = pack_mode_data(obj_id, Modes.OFF, 0)
|
||||||
command = PusTelecommand(service=200, subservice=1, ssc=2030, app_data=mode_data)
|
command = PusTelecommand(service=200, subservice=1, ssc=2030, app_data=mode_data)
|
||||||
tc_queue.appendleft(command.pack_command_tuple())
|
tc_queue.appendleft(command.pack_command_tuple())
|
||||||
tc_queue.appendleft((QueueCommands.EXPORT_LOG, "log/tmtc_log_service200.txt"))
|
|
||||||
return tc_queue
|
return tc_queue
|
||||||
|
@ -81,7 +81,8 @@ def pre_tc_send_cb(
|
|||||||
):
|
):
|
||||||
if isinstance(queue_entry, bytes) or isinstance(queue_entry, bytearray):
|
if isinstance(queue_entry, bytes) or isinstance(queue_entry, bytearray):
|
||||||
log_raw_pus_tc(
|
log_raw_pus_tc(
|
||||||
packet=queue_entry, srv_subservice=(queue_info.service, queue_info.subservice)
|
packet=queue_entry,
|
||||||
|
srv_subservice=(queue_info.service, queue_info.subservice),
|
||||||
)
|
)
|
||||||
tc_info_string = f"Sent {queue_info}"
|
tc_info_string = f"Sent {queue_info}"
|
||||||
LOGGER.info(tc_info_string)
|
LOGGER.info(tc_info_string)
|
||||||
@ -91,6 +92,7 @@ def pre_tc_send_cb(
|
|||||||
if queue_entry == QueueCommands.PRINT:
|
if queue_entry == QueueCommands.PRINT:
|
||||||
file_logger.info(queue_info)
|
file_logger.info(queue_info)
|
||||||
|
|
||||||
|
|
||||||
def pack_service_queue_user(
|
def pack_service_queue_user(
|
||||||
service: Union[str, int], op_code: str, service_queue: TcQueueT
|
service: Union[str, int], op_code: str, service_queue: TcQueueT
|
||||||
):
|
):
|
||||||
|
@ -3,7 +3,6 @@ import struct
|
|||||||
import os
|
import os
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
from tmtccmd.utility.tmtc_printer import FsfwTmTcPrinter
|
|
||||||
from tmtccmd.config.definitions import HkReplyUnpacked
|
from tmtccmd.config.definitions import HkReplyUnpacked
|
||||||
from tmtccmd.tm.pus_3_fsfw_hk import (
|
from tmtccmd.tm.pus_3_fsfw_hk import (
|
||||||
Service3Base,
|
Service3Base,
|
||||||
@ -19,7 +18,7 @@ from tmtccmd.utility.obj_id import ObjectId, ObjectIdDictT
|
|||||||
import config.object_ids as obj_ids
|
import config.object_ids as obj_ids
|
||||||
|
|
||||||
from pus_tm.devs.reaction_wheels import handle_rw_hk_data
|
from pus_tm.devs.reaction_wheels import handle_rw_hk_data
|
||||||
from pus_tm.defs import PrintWrapper, FsfwTmTcPrinter, log_to_both
|
from pus_tm.defs import FsfwTmTcPrinter, log_to_both
|
||||||
|
|
||||||
LOGGER = get_console_logger()
|
LOGGER = get_console_logger()
|
||||||
|
|
||||||
|
63
tmtcc.py
Normal file
63
tmtcc.py
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
import argparse
|
||||||
|
import sys
|
||||||
|
import traceback
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
try:
|
||||||
|
import spacepackets
|
||||||
|
except ImportError as error:
|
||||||
|
print(error)
|
||||||
|
print("Python spacepackets module could not be imported")
|
||||||
|
print(
|
||||||
|
'Install with "cd spacepackets && python3 -m pip intall -e ." for interative installation'
|
||||||
|
)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
try:
|
||||||
|
import tmtccmd.runner as tmtccmd
|
||||||
|
from tmtccmd.logging.pus import create_tmtc_logger
|
||||||
|
from tmtccmd.ccsds.handler import ApidHandler, CcsdsTmHandler
|
||||||
|
from tmtccmd.config import SetupArgs, default_json_path
|
||||||
|
from tmtccmd.config.args import (
|
||||||
|
create_default_args_parser,
|
||||||
|
add_default_tmtccmd_args,
|
||||||
|
parse_default_input_arguments,
|
||||||
|
)
|
||||||
|
except ImportError as error:
|
||||||
|
run_tmtc_commander = None
|
||||||
|
initialize_tmtc_commander = None
|
||||||
|
tb = traceback.format_exc()
|
||||||
|
print(tb)
|
||||||
|
print("Python tmtccmd submodule could not be imported")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
from config import __version__
|
||||||
|
from config.definitions import PUS_APID
|
||||||
|
from config.hook_implementations import EiveHookObject
|
||||||
|
from pus_tm.factory_hook import ccsds_tm_handler
|
||||||
|
from pus_tc.tc_packer_hook import pre_tc_send_cb
|
||||||
|
|
||||||
|
|
||||||
|
def tmtcc_pre_args() -> EiveHookObject:
|
||||||
|
print(f"-- eive tmtc v{__version__} --")
|
||||||
|
print(f"-- spacepackets v{spacepackets.__version__} --")
|
||||||
|
tmtccmd.init_printout(False)
|
||||||
|
return EiveHookObject(json_cfg_path=default_json_path())
|
||||||
|
|
||||||
|
|
||||||
|
def tmtcc_post_args(hook_obj: EiveHookObject, use_gui: bool, args: Optional[argparse.Namespace]):
|
||||||
|
setup_args = SetupArgs(
|
||||||
|
hook_obj=hook_obj, use_gui=use_gui, apid=PUS_APID, cli_args=args
|
||||||
|
)
|
||||||
|
tmtc_file_logger = create_tmtc_logger()
|
||||||
|
apid_handler = ApidHandler(cb=ccsds_tm_handler, queue_len=50, user_args=None)
|
||||||
|
ccsds_handler = CcsdsTmHandler()
|
||||||
|
ccsds_handler.add_tm_handler(apid=PUS_APID, handler=apid_handler)
|
||||||
|
tmtccmd.setup(setup_args=setup_args)
|
||||||
|
tmtccmd.add_ccsds_handler(ccsds_handler)
|
||||||
|
tmtc_backend = tmtccmd.create_default_tmtc_backend(
|
||||||
|
setup_args=setup_args,
|
||||||
|
tm_handler=ccsds_handler,
|
||||||
|
)
|
||||||
|
tmtc_backend.usr_send_wrapper = (pre_tc_send_cb, tmtc_file_logger)
|
||||||
|
tmtccmd.run(tmtc_backend=tmtc_backend)
|
88
tmtccli.py
88
tmtccli.py
@ -1,93 +1,15 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
"""
|
"""TMTC commander for EIVE"""
|
||||||
@brief TMTC Commander entry point for command line mode.
|
from tmtcc import tmtcc_post_args, tmtcc_pre_args, create_default_args_parser, \
|
||||||
@details
|
add_default_tmtccmd_args, parse_default_input_arguments
|
||||||
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
|
|
||||||
|
|
||||||
https://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
|
|
||||||
"""
|
|
||||||
import sys
|
|
||||||
import traceback
|
|
||||||
|
|
||||||
try:
|
|
||||||
import tmtccmd.runner as tmtccmd
|
|
||||||
from tmtccmd.config import default_json_path, SetupArgs
|
|
||||||
from tmtccmd.config.args import (
|
|
||||||
create_default_args_parser,
|
|
||||||
add_default_tmtccmd_args,
|
|
||||||
parse_default_input_arguments,
|
|
||||||
)
|
|
||||||
from tmtccmd.ccsds.handler import CcsdsTmHandler, ApidHandler
|
|
||||||
from tmtccmd.logging import init_console_logger
|
|
||||||
from tmtccmd.logging.pus import create_tmtc_logger
|
|
||||||
except ImportError as error:
|
|
||||||
run_tmtc_commander = None
|
|
||||||
initialize_tmtc_commander = None
|
|
||||||
tb = traceback.format_exc()
|
|
||||||
print(tb)
|
|
||||||
print("Python tmtccmd submodule could not be imported")
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
try:
|
|
||||||
import spacepackets
|
|
||||||
except ImportError as error:
|
|
||||||
print(error)
|
|
||||||
print("Python spacepackets module could not be imported")
|
|
||||||
print(
|
|
||||||
'Install with "cd spacepackets && python3 -m pip intall -e ." for interative installation'
|
|
||||||
)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
from config.hook_implementations import EiveHookObject
|
|
||||||
from config.version import __version__
|
|
||||||
from config.definitions import PUS_APID
|
|
||||||
from pus_tc.tc_packer_hook import pre_tc_send_cb
|
|
||||||
from pus_tm.factory_hook import ccsds_tm_handler
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
print(f"-- eive tmtc version {__version__} --")
|
hook_obj = tmtcc_pre_args()
|
||||||
print(f"-- spacepackets version {spacepackets.__version__} --")
|
|
||||||
tmtccmd.init_printout(False)
|
|
||||||
tmtc_file_logger = create_tmtc_logger()
|
|
||||||
hook_obj = EiveHookObject(json_cfg_path=default_json_path())
|
|
||||||
arg_parser = create_default_args_parser()
|
arg_parser = create_default_args_parser()
|
||||||
add_default_tmtccmd_args(arg_parser)
|
add_default_tmtccmd_args(arg_parser)
|
||||||
args = parse_default_input_arguments(arg_parser, hook_obj)
|
args = parse_default_input_arguments(arg_parser, hook_obj)
|
||||||
setup_args = SetupArgs(
|
tmtcc_post_args(hook_obj=hook_obj, use_gui=False, args=args)
|
||||||
hook_obj=hook_obj, use_gui=False, apid=PUS_APID, cli_args=args
|
|
||||||
)
|
|
||||||
apid_handler = ApidHandler(cb=ccsds_tm_handler, queue_len=50, user_args=None)
|
|
||||||
ccsds_handler = CcsdsTmHandler()
|
|
||||||
ccsds_handler.add_tm_handler(apid=PUS_APID, handler=apid_handler)
|
|
||||||
tmtccmd.setup(setup_args=setup_args)
|
|
||||||
tmtccmd.add_ccsds_handler(ccsds_handler)
|
|
||||||
tmtc_backend = tmtccmd.create_default_tmtc_backend(
|
|
||||||
setup_args=setup_args,
|
|
||||||
tm_handler=ccsds_handler,
|
|
||||||
)
|
|
||||||
tmtc_backend.usr_send_wrapper = (pre_tc_send_cb, tmtc_file_logger)
|
|
||||||
tmtccmd.run(tmtc_backend=tmtc_backend)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
2
tmtccmd
2
tmtccmd
@ -1 +1 @@
|
|||||||
Subproject commit 6229632de63a5d9eb3bb7d9971d3f3120fe46ddb
|
Subproject commit 14559c1dfbe682b8727acc22132fd590c767d05b
|
67
tmtcgui.py
67
tmtcgui.py
@ -1,68 +1,11 @@
|
|||||||
#!/usr/bin/python3
|
#!/usr/bin/env python3
|
||||||
"""
|
"""TMTC commander for EIVE"""
|
||||||
@brief TMTC Commander entry point for command line mode.
|
from tmtcc import tmtcc_post_args, tmtcc_pre_args
|
||||||
@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
|
|
||||||
|
|
||||||
https://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
|
|
||||||
"""
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from config.hook_implementations import EiveHookObject
|
|
||||||
from config.version import __version__
|
|
||||||
from config.definitions import PUS_APID
|
|
||||||
from pus_tm.factory_hook import ccsds_tm_handler
|
|
||||||
|
|
||||||
try:
|
|
||||||
from tmtccmd.runner import (
|
|
||||||
init_tmtccmd,
|
|
||||||
run_tmtccmd,
|
|
||||||
add_ccsds_handler,
|
|
||||||
)
|
|
||||||
from tmtccmd.ccsds.handler import CcsdsTmHandler
|
|
||||||
import spacepackets
|
|
||||||
except ImportError as error:
|
|
||||||
run_tmtc_commander = None
|
|
||||||
initialize_tmtc_commander = None
|
|
||||||
print(error)
|
|
||||||
print("Python tmtccmd submodule could not be imported")
|
|
||||||
print(
|
|
||||||
'Install with "cd tmtccmd && python3 -m pip install -e ." for interactive installation'
|
|
||||||
)
|
|
||||||
sys.exit(0)
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
hook_obj = EiveHookObject()
|
hook_obj = tmtcc_pre_args()
|
||||||
print(f"-- eive tmtc version {__version__}")
|
tmtcc_post_args(hook_obj=hook_obj, use_gui=True, args=None)
|
||||||
print(f"-- spacepackets version {spacepackets.__version__} --")
|
|
||||||
init_tmtccmd(hook_object=hook_obj)
|
|
||||||
ccsds_handler = CcsdsTmHandler()
|
|
||||||
ccsds_handler.add_tm_handler(
|
|
||||||
apid=PUS_APID, pus_tm_handler=ccsds_tm_handler, max_queue_len=50
|
|
||||||
)
|
|
||||||
add_ccsds_handler(ccsds_handler)
|
|
||||||
run_tmtccmd(use_gui=True)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
Loading…
Reference in New Issue
Block a user