Compare commits
13 Commits
add-reset-
...
main
Author | SHA1 | Date | |
---|---|---|---|
7721a57a67 | |||
d1f92f7aed | |||
6e85b1add8 | |||
73a7c6ec14 | |||
28161059ca | |||
52d434630b | |||
55a357b52c | |||
2d6e9f826c | |||
20489a02d2 | |||
652f3bf66f | |||
8419a4edd7 | |||
673c8b2cf2 | |||
e23b39e652 |
12
CHANGELOG.md
12
CHANGELOG.md
@ -10,6 +10,18 @@ list yields a list of all related PRs for each release.
|
||||
|
||||
# [unreleased]
|
||||
|
||||
# [v7.1.1] 2025-02-10
|
||||
|
||||
- Bumped `tmtccmd` to v8.2.0
|
||||
|
||||
# [v7.1.0] 2025-01-17
|
||||
|
||||
- Bumped `tmtccmd` to v8.1.0
|
||||
|
||||
## Fixed
|
||||
|
||||
- Use new mode TM API.
|
||||
|
||||
# [v7.0.0] 2024-05-06
|
||||
|
||||
- Reworked PLOC MPSoC commanding to be inline with OBSW update.
|
||||
|
@ -4,7 +4,8 @@ import logging
|
||||
from spacepackets.cfdp import ConditionCode
|
||||
from spacepackets.util import UnsignedByteField
|
||||
from cfdppy import CfdpUserBase, TransactionId
|
||||
from cfdppy.mib import CheckTimerProvider, Countdown, EntityType
|
||||
from cfdppy.mib import CheckTimerProvider, EntityType
|
||||
from spacepackets.countdown import Countdown
|
||||
from cfdppy.user import (
|
||||
TransactionFinishedParams,
|
||||
MetadataRecvParams,
|
||||
|
@ -17,6 +17,7 @@ TM_DB_PATH = "tm.db"
|
||||
|
||||
# TODO: The cleanest way would be to load those from the config file..
|
||||
PRINT_RAW_HK_B64_STR = False
|
||||
PRINT_RAW_ACTION_DATA_REPLY_B64_STR = True
|
||||
PRINT_RAW_EVENTS_B64_STR = False
|
||||
|
||||
PUS_APID = 0x65
|
||||
|
@ -52,7 +52,7 @@ from eive_tmtc.tmtc.wdt import create_wdt_node
|
||||
|
||||
class EiveHookObject(HookBase):
|
||||
def __init__(self, json_cfg_path: str):
|
||||
super().__init__(json_cfg_path=json_cfg_path)
|
||||
super().__init__(json_cfg_path)
|
||||
|
||||
def get_command_definitions(self) -> CmdTreeNode:
|
||||
root_node = CmdTreeNode.root_node()
|
||||
|
@ -1,8 +1,10 @@
|
||||
import base64
|
||||
import logging
|
||||
import struct
|
||||
|
||||
from spacepackets.ecss import PusTm
|
||||
from tmtccmd.pus.s8_fsfw_action_defs import CustomSubservice
|
||||
from eive_tmtc.config.definitions import PRINT_RAW_ACTION_DATA_REPLY_B64_STR
|
||||
from eive_tmtc.config.object_ids import (
|
||||
ACU_HANDLER_ID,
|
||||
PDU_1_HANDLER_ID,
|
||||
@ -51,6 +53,8 @@ def handle_action_service_tm(
|
||||
if object_id is None:
|
||||
object_id = ObjectIdU32(object_id_raw, "Unknown ID")
|
||||
if tm_packet.subservice == CustomSubservice.TM_DATA_REPLY:
|
||||
if PRINT_RAW_ACTION_DATA_REPLY_B64_STR:
|
||||
print(f"PUS TM Base64: {base64.b64encode(raw_tm)}")
|
||||
if object_id.as_bytes == IMTQ_HANDLER_ID:
|
||||
return handle_imtq_replies(action_id, pw, custom_data)
|
||||
elif object_id.as_bytes == PLOC_MPSOC_ID:
|
||||
|
@ -15,7 +15,7 @@ from tmtccmd.logging.pus import RawTmtcTimedLogWrapper
|
||||
from tmtccmd.pus import VerificationWrapper
|
||||
from tmtccmd.pus.s20_fsfw_param import Service20FsfwTm, Service20ParamDumpWrapper
|
||||
from tmtccmd.pus.s20_fsfw_param_defs import CustomSubservice as ParamSubservice
|
||||
from tmtccmd.pus.s200_fsfw_mode import Service200FsfwTm
|
||||
from tmtccmd.pus.s200_fsfw_mode import Service200FsfwReader, Service200FsfwTm
|
||||
from tmtccmd.pus.s200_fsfw_mode import Subservice as ModeSubservice
|
||||
from tmtccmd.tmtc import GenericApidHandlerBase, SpecificApidHandlerBase
|
||||
from eive_tmtc.config.definitions import TM_DB_PATH, PUS_APID
|
||||
@ -109,7 +109,7 @@ class PusHandler(SpecificApidHandlerBase):
|
||||
elif service == 20:
|
||||
self._handle_param_packet(packet, tm_packet)
|
||||
elif service == 200:
|
||||
dedicated_handler = self._handle_mode_packet(packet, tm_packet)
|
||||
dedicated_handler = self._handle_mode_packet(tm_packet)
|
||||
else:
|
||||
_LOGGER.info(
|
||||
f"The service {service} is not implemented in Telemetry Factory"
|
||||
@ -193,21 +193,21 @@ class PusHandler(SpecificApidHandlerBase):
|
||||
f"unknown subservice {tm_packet.subservice} for parameter service"
|
||||
)
|
||||
|
||||
def _handle_mode_packet(self, raw_data: bytes, _: PusTelemetry) -> bool:
|
||||
tm_packet = Service200FsfwTm.unpack(
|
||||
raw_telemetry=raw_data, time_reader=CdsShortTimestamp.empty()
|
||||
)
|
||||
if tm_packet.subservice == ModeSubservice.TM_CANT_REACH_MODE:
|
||||
def _handle_mode_packet(self, pus_tm: PusTelemetry) -> bool:
|
||||
tm_packet = Service200FsfwReader(pus_tm)
|
||||
if tm_packet.tm.subservice == ModeSubservice.TM_CANT_REACH_MODE:
|
||||
obj_id = tm_packet.object_id
|
||||
obj_id_obj = self.obj_id_dict.get(obj_id)
|
||||
retval = tm_packet.return_value
|
||||
assert retval is not None
|
||||
string_list = generic_retval_printout(retval)
|
||||
self.pw.dlog(f"Received Mode Reply from {obj_id_obj}: Can't reach mode.")
|
||||
for string in string_list:
|
||||
self.pw.dlog(f"Reason: {string}")
|
||||
return True
|
||||
if tm_packet.subservice == ModeSubservice.TM_WRONG_MODE_REPLY:
|
||||
if tm_packet.tm.subservice == ModeSubservice.TM_WRONG_MODE_REPLY:
|
||||
self.pw.dlog(f"Received Mode TM wrong mode reply, mode: {tm_packet.mode}")
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
|
@ -19,7 +19,6 @@ from tmtccmd.fsfw.tmtc_printer import get_validity_buffer_str
|
||||
from tmtccmd.pus.s11_tc_sched import (
|
||||
create_enable_tc_sched_cmd,
|
||||
create_disable_tc_sched_cmd,
|
||||
create_reset_tc_sched_cmd,
|
||||
)
|
||||
|
||||
from eive_tmtc.config.object_ids import CORE_CONTROLLER_ID
|
||||
@ -71,7 +70,6 @@ class ActionId(enum.IntEnum):
|
||||
MKDIR_HELPER = 55
|
||||
ENABLE_SCHEDULER = 56
|
||||
UPDATE_LEAP_SECONRS = 60
|
||||
RESET_SCHEDULER = 61
|
||||
|
||||
|
||||
class ParamId(enum.IntEnum):
|
||||
@ -124,7 +122,6 @@ class OpCode:
|
||||
ENABLE_SCHEDULER = "enable_scheduler"
|
||||
DISABLE_SCHEDULER = "disable_scheduler"
|
||||
UPDATE_LEAP_SECONDS = "leap_seconds_update"
|
||||
RESET_SCHEDULER = "reset_scheduler"
|
||||
|
||||
|
||||
class Info:
|
||||
@ -169,7 +166,6 @@ class Info:
|
||||
ENABLE_SCHEDULER = "Enable scheduler"
|
||||
DISABLE_SCHEDULER = "Disable scheduler"
|
||||
UPDATE_LEAP_SECONDS = "Updates the Leap Seconds"
|
||||
RESET_SCHEDULER = "Reset scheduler"
|
||||
|
||||
|
||||
class Chip(enum.IntEnum):
|
||||
@ -479,9 +475,6 @@ def pack_core_commands( # noqa C901
|
||||
elif cmd_str == OpCode.DISABLE_SCHEDULER:
|
||||
q.add_log_cmd(Info.DISABLE_SCHEDULER)
|
||||
q.add_pus_tc(create_disable_tc_sched_cmd())
|
||||
elif cmd_str == OpCode.RESET_SCHEDULER:
|
||||
q.add_log_cmd(Info.RESET_SCHEDULER)
|
||||
q.add_pus_tc(create_reset_tc_sched_cmd())
|
||||
elif cmd_str == OpCode.UPDATE_LEAP_SECONDS:
|
||||
q.add_log_cmd(Info.UPDATE_LEAP_SECONDS)
|
||||
leap_seconds = int(input("Specify new Leap Seconds Value: ")).to_bytes(
|
||||
|
@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
|
||||
name = "eive-tmtc"
|
||||
description = "TMTC Commander EIVE"
|
||||
readme = "README.md"
|
||||
version = "7.1.0"
|
||||
version = "7.2.0"
|
||||
requires-python = ">=3.10"
|
||||
license = {text = "Apache-2.0"}
|
||||
authors = [
|
||||
@ -29,9 +29,8 @@ classifiers = [
|
||||
"Topic :: Scientific/Engineering"
|
||||
]
|
||||
dependencies = [
|
||||
"tmtccmd ~= 8.0.1",
|
||||
# "tmtccmd @ git+https://github.com/robamu-org/tmtccmd@main",
|
||||
"cfdp-py~=0.1.0",
|
||||
"tmtccmd~=8.2.0",
|
||||
"cfdp-py~=0.5.1",
|
||||
"python-dateutil ~= 2.8",
|
||||
]
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user