Compare commits

..

2 Commits

Author SHA1 Message Date
7e4c46092b changelog
All checks were successful
EIVE/-/pipeline/head This commit looks good
EIVE/-/pipeline/pr-main This commit looks good
2024-06-24 13:42:39 +02:00
50f504992b reworked fused rotation rate set implemented 2024-06-24 13:40:12 +02:00
4 changed files with 52 additions and 39 deletions

View File

@ -10,16 +10,14 @@ list yields a list of all related PRs for each release.
# [unreleased] # [unreleased]
# [v7.1.0] 2025-01-17 ## Changed
- Bumped `tmtccmd` to v8.1.0 - Added support for new fused rotation rate dataset.
## Fixed
- Use new mode TM API.
# [v7.0.0] 2024-05-06 # [v7.0.0] 2024-05-06
## Changed
- Reworked PLOC MPSoC commanding to be inline with OBSW update. - Reworked PLOC MPSoC commanding to be inline with OBSW update.
## Fixed ## Fixed

View File

@ -15,7 +15,7 @@ from tmtccmd.logging.pus import RawTmtcTimedLogWrapper
from tmtccmd.pus import VerificationWrapper from tmtccmd.pus import VerificationWrapper
from tmtccmd.pus.s20_fsfw_param import Service20FsfwTm, Service20ParamDumpWrapper from tmtccmd.pus.s20_fsfw_param import Service20FsfwTm, Service20ParamDumpWrapper
from tmtccmd.pus.s20_fsfw_param_defs import CustomSubservice as ParamSubservice from tmtccmd.pus.s20_fsfw_param_defs import CustomSubservice as ParamSubservice
from tmtccmd.pus.s200_fsfw_mode import Service200FsfwReader, Service200FsfwTm from tmtccmd.pus.s200_fsfw_mode import Service200FsfwTm
from tmtccmd.pus.s200_fsfw_mode import Subservice as ModeSubservice from tmtccmd.pus.s200_fsfw_mode import Subservice as ModeSubservice
from tmtccmd.tmtc import GenericApidHandlerBase, SpecificApidHandlerBase from tmtccmd.tmtc import GenericApidHandlerBase, SpecificApidHandlerBase
from eive_tmtc.config.definitions import TM_DB_PATH, PUS_APID from eive_tmtc.config.definitions import TM_DB_PATH, PUS_APID
@ -109,7 +109,7 @@ class PusHandler(SpecificApidHandlerBase):
elif service == 20: elif service == 20:
self._handle_param_packet(packet, tm_packet) self._handle_param_packet(packet, tm_packet)
elif service == 200: elif service == 200:
dedicated_handler = self._handle_mode_packet(tm_packet) dedicated_handler = self._handle_mode_packet(packet, tm_packet)
else: else:
_LOGGER.info( _LOGGER.info(
f"The service {service} is not implemented in Telemetry Factory" 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" f"unknown subservice {tm_packet.subservice} for parameter service"
) )
def _handle_mode_packet(self, pus_tm: PusTelemetry) -> bool: def _handle_mode_packet(self, raw_data: bytes, _: PusTelemetry) -> bool:
tm_packet = Service200FsfwReader(pus_tm) tm_packet = Service200FsfwTm.unpack(
if tm_packet.tm.subservice == ModeSubservice.TM_CANT_REACH_MODE: raw_telemetry=raw_data, time_reader=CdsShortTimestamp.empty()
)
if tm_packet.subservice == ModeSubservice.TM_CANT_REACH_MODE:
obj_id = tm_packet.object_id obj_id = tm_packet.object_id
obj_id_obj = self.obj_id_dict.get(obj_id) obj_id_obj = self.obj_id_dict.get(obj_id)
retval = tm_packet.return_value retval = tm_packet.return_value
assert retval is not None
string_list = generic_retval_printout(retval) string_list = generic_retval_printout(retval)
self.pw.dlog(f"Received Mode Reply from {obj_id_obj}: Can't reach mode.") self.pw.dlog(f"Received Mode Reply from {obj_id_obj}: Can't reach mode.")
for string in string_list: for string in string_list:
self.pw.dlog(f"Reason: {string}") self.pw.dlog(f"Reason: {string}")
return True return True
if tm_packet.tm.subservice == ModeSubservice.TM_WRONG_MODE_REPLY: if tm_packet.subservice == ModeSubservice.TM_WRONG_MODE_REPLY:
self.pw.dlog(f"Received Mode TM wrong mode reply, mode: {tm_packet.mode}") self.pw.dlog(f"Received Mode TM wrong mode reply, mode: {tm_packet.mode}")
return True
return False return False

View File

@ -988,27 +988,43 @@ def handle_fused_rot_rate_data(pw: PrintWrapper, hk_data: bytes):
inc_len_vec3_double = struct.calcsize(fmt_vec3_double) inc_len_vec3_double = struct.calcsize(fmt_vec3_double)
fmt_source = "!B" fmt_source = "!B"
inc_len_source = struct.calcsize(fmt_source) inc_len_source = struct.calcsize(fmt_source)
old_size = 3 * inc_len_vec3_double + 1 v0_size = 3 * inc_len_vec3_double + 1
new_size = 3 * inc_len_vec3_double + inc_len_source + 1 v1_size = 3 * inc_len_vec3_double + inc_len_source + 1
v2_size = 2 * inc_len_vec3_double + inc_len_source + 1
size = len(hk_data) size = len(hk_data)
if size not in [old_size, new_size]: if size not in [v0_size, v1_size, v2_size]:
pw.dlog(f"Received Fused Rot Rate HK set of unexpected size: {len(hk_data)}") pw.dlog(f"Received Fused Rot Rate HK set of unexpected size: {len(hk_data)}")
return return
current_idx = 0 current_idx = 0
rot_rate_orthogonal = [ if size in [v0_size, v1_size]:
f"{val*180/math.pi:8.3f}" rot_rate_orthogonal = [
for val in struct.unpack( f"{val*180/math.pi:8.3f}"
fmt_vec3_double, hk_data[current_idx : current_idx + inc_len_vec3_double] for val in struct.unpack(
) fmt_vec3_double,
] hk_data[current_idx : current_idx + inc_len_vec3_double],
current_idx += inc_len_vec3_double )
rot_rate_parallel = [ ]
f"{val*180/math.pi:8.3f}" current_idx += inc_len_vec3_double
for val in struct.unpack( pw.dlog(f"Fused Rotational Rate Orthogonal: {rot_rate_orthogonal} [deg/s]")
fmt_vec3_double, hk_data[current_idx : current_idx + inc_len_vec3_double] rot_rate_parallel = [
) f"{val*180/math.pi:8.3f}"
] for val in struct.unpack(
current_idx += inc_len_vec3_double fmt_vec3_double,
hk_data[current_idx : current_idx + inc_len_vec3_double],
)
]
current_idx += inc_len_vec3_double
pw.dlog(f"Fused Rotational Rate Parallel: {rot_rate_parallel} [deg/s]")
else:
rot_rate_susmgm = [
f"{val * 180 / math.pi:8.3f}"
for val in struct.unpack(
fmt_vec3_double,
hk_data[current_idx: current_idx + inc_len_vec3_double],
)
]
current_idx += inc_len_vec3_double
pw.dlog(f"Fused Rotational Rate SUSMGM: {rot_rate_susmgm} [deg/s]")
rot_rate_total = [ rot_rate_total = [
f"{val*180/math.pi:8.3f}" f"{val*180/math.pi:8.3f}"
for val in struct.unpack( for val in struct.unpack(
@ -1016,10 +1032,8 @@ def handle_fused_rot_rate_data(pw: PrintWrapper, hk_data: bytes):
) )
] ]
current_idx += inc_len_vec3_double current_idx += inc_len_vec3_double
pw.dlog(f"Fused Rotational Rate Orthogonal: {rot_rate_orthogonal} [deg/s]")
pw.dlog(f"Fused Rotational Rate Parallel: {rot_rate_parallel} [deg/s]")
pw.dlog(f"Fused Rotational Rate Total: {rot_rate_total} [deg/s]") pw.dlog(f"Fused Rotational Rate Total: {rot_rate_total} [deg/s]")
if size == new_size: if size in [v1_size, v2_size]:
rot_rate_source = struct.unpack( rot_rate_source = struct.unpack(
fmt_source, hk_data[current_idx : current_idx + inc_len_source] fmt_source, hk_data[current_idx : current_idx + inc_len_source]
)[0] )[0]
@ -1030,9 +1044,10 @@ def handle_fused_rot_rate_data(pw: PrintWrapper, hk_data: bytes):
) )
else: else:
pw.dlog(f"Ctrl Strategy (key unknown): {rot_rate_source}") pw.dlog(f"Ctrl Strategy (key unknown): {rot_rate_source}")
if size in [v0_size, v2_size]:
pw.dlog(get_validity_buffer_str(hk_data[current_idx:], num_vars=3))
else:
pw.dlog(get_validity_buffer_str(hk_data[current_idx:], num_vars=4)) pw.dlog(get_validity_buffer_str(hk_data[current_idx:], num_vars=4))
return
pw.dlog(get_validity_buffer_str(hk_data[current_idx:], num_vars=3))
def handle_fused_rot_rate_source_data(pw: PrintWrapper, hk_data: bytes): def handle_fused_rot_rate_source_data(pw: PrintWrapper, hk_data: bytes):

View File

@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
name = "eive-tmtc" name = "eive-tmtc"
description = "TMTC Commander EIVE" description = "TMTC Commander EIVE"
readme = "README.md" readme = "README.md"
version = "7.2.0" version = "7.1.0"
requires-python = ">=3.10" requires-python = ">=3.10"
license = {text = "Apache-2.0"} license = {text = "Apache-2.0"}
authors = [ authors = [
@ -29,9 +29,9 @@ classifiers = [
"Topic :: Scientific/Engineering" "Topic :: Scientific/Engineering"
] ]
dependencies = [ dependencies = [
"tmtccmd ~= 8.1", "tmtccmd ~= 8.0.1",
# "tmtccmd @ git+https://github.com/robamu-org/tmtccmd@main", # "tmtccmd @ git+https://github.com/robamu-org/tmtccmd@main",
"cfdp-py>=0.4, <=0.5", "cfdp-py~=0.1.0",
"python-dateutil ~= 2.8", "python-dateutil ~= 2.8",
] ]