Compare commits
2 Commits
main
...
fused-rot-
Author | SHA1 | Date | |
---|---|---|---|
7e4c46092b | |||
50f504992b |
14
CHANGELOG.md
14
CHANGELOG.md
@ -10,20 +10,14 @@ list yields a list of all related PRs for each release.
|
|||||||
|
|
||||||
# [unreleased]
|
# [unreleased]
|
||||||
|
|
||||||
# [v7.1.1] 2025-02-10
|
## Changed
|
||||||
|
|
||||||
- Bumped `tmtccmd` to v8.2.0
|
- Added support for new fused rotation rate dataset.
|
||||||
|
|
||||||
# [v7.1.0] 2025-01-17
|
|
||||||
|
|
||||||
- Bumped `tmtccmd` to v8.1.0
|
|
||||||
|
|
||||||
## 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
|
||||||
|
@ -4,8 +4,7 @@ import logging
|
|||||||
from spacepackets.cfdp import ConditionCode
|
from spacepackets.cfdp import ConditionCode
|
||||||
from spacepackets.util import UnsignedByteField
|
from spacepackets.util import UnsignedByteField
|
||||||
from cfdppy import CfdpUserBase, TransactionId
|
from cfdppy import CfdpUserBase, TransactionId
|
||||||
from cfdppy.mib import CheckTimerProvider, EntityType
|
from cfdppy.mib import CheckTimerProvider, Countdown, EntityType
|
||||||
from spacepackets.countdown import Countdown
|
|
||||||
from cfdppy.user import (
|
from cfdppy.user import (
|
||||||
TransactionFinishedParams,
|
TransactionFinishedParams,
|
||||||
MetadataRecvParams,
|
MetadataRecvParams,
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
@ -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):
|
||||||
|
@ -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,8 +29,9 @@ classifiers = [
|
|||||||
"Topic :: Scientific/Engineering"
|
"Topic :: Scientific/Engineering"
|
||||||
]
|
]
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"tmtccmd~=8.2.0",
|
"tmtccmd ~= 8.0.1",
|
||||||
"cfdp-py~=0.5.1",
|
# "tmtccmd @ git+https://github.com/robamu-org/tmtccmd@main",
|
||||||
|
"cfdp-py~=0.1.0",
|
||||||
"python-dateutil ~= 2.8",
|
"python-dateutil ~= 2.8",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user