Add BlobStats TM handling STR #279

Merged
meggert merged 4 commits from add-blob-stats-str into main 2024-02-29 12:33:32 +01:00
3 changed files with 36 additions and 3 deletions

View File

@ -13,6 +13,7 @@ list yields a list of all related PRs for each release.
## Added ## Added
- Added commands to unlock and use STR secondary firmware slot. - Added commands to unlock and use STR secondary firmware slot.
- STR BlobStats TM handling
## Fixed ## Fixed

View File

@ -53,7 +53,7 @@ FORWARD_SENSOR_TEMPS = False
@dataclasses.dataclass @dataclasses.dataclass
class HkFilter: class HkFilter:
object_ids: List[ObjectIdU32] object_ids: List[bytes]
set_ids: List[int] set_ids: List[int]
@ -72,8 +72,7 @@ def handle_hk_packet(
named_obj_id = tm_packet.object_id named_obj_id = tm_packet.object_id
if tm_packet.subservice == 25 or tm_packet.subservice == 26: if tm_packet.subservice == 25 or tm_packet.subservice == 26:
hk_data = tm_packet.tm_data[8:] hk_data = tm_packet.tm_data[8:]
if named_obj_id.as_bytes in hk_filter.object_ids:
if named_obj_id in hk_filter.object_ids:
# print(f"PUS TM Base64: {base64.b64encode(raw_tm)}") # print(f"PUS TM Base64: {base64.b64encode(raw_tm)}")
handle_regular_hk_print( handle_regular_hk_print(
printer=printer, printer=printer,

View File

@ -9,6 +9,7 @@ import datetime
import enum import enum
import logging import logging
import struct import struct
from typing import List, Tuple
from eive_tmtc.pus_tm.defs import PrintWrapper from eive_tmtc.pus_tm.defs import PrintWrapper
from eive_tmtc.utility.input_helper import InputHelper from eive_tmtc.utility.input_helper import InputHelper
@ -183,6 +184,7 @@ class SetId(enum.IntEnum):
BLOBS = 92 BLOBS = 92
CENTROID = 93 CENTROID = 93
CENTROIDS = 94 CENTROIDS = 94
BLOB_STATS = 102
class DataSetRequest(enum.IntEnum): class DataSetRequest(enum.IntEnum):
@ -876,6 +878,8 @@ def handle_str_hk_data(set_id: int, hk_data: bytes, pw: PrintWrapper):
handle_centroids_set(hk_data, pw) handle_centroids_set(hk_data, pw)
elif set_id == SetId.CONTRAST: elif set_id == SetId.CONTRAST:
handle_contrast_set(hk_data, pw) handle_contrast_set(hk_data, pw)
elif set_id == SetId.BLOB_STATS:
handle_blob_stats_set(hk_data, pw)
else: else:
_LOGGER.warning(f"HK parsing for Star Tracker set ID {set_id} unimplemented") _LOGGER.warning(f"HK parsing for Star Tracker set ID {set_id} unimplemented")
@ -1178,6 +1182,35 @@ def handle_contrast_set(hk_data: bytes, pw: PrintWrapper):
handle_histo_or_contrast_set("Contrast", hk_data, pw) handle_histo_or_contrast_set("Contrast", hk_data, pw)
def handle_blob_stats_set(hk_data: bytes, pw: PrintWrapper):
pw.dlog("Received Blob Stats Set")
if len(hk_data) < 65:
raise ValueError(
f"Matched BlobStats set with length {len(hk_data)} too short. Expected 65 bytes."
)
current_idx = unpack_time_hk(hk_data, 0, pw)
def fill_list(current_idx: int) -> Tuple[List[int], int]:
list_to_fill = []
for _ in range(16):
list_to_fill.append(hk_data[current_idx])
current_idx += 1
return list_to_fill, current_idx
noise_list, current_idx = fill_list(current_idx)
threshold_list, current_idx = fill_list(current_idx)
lvalid_list, current_idx = fill_list(current_idx)
oflow_list, current_idx = fill_list(current_idx)
pw.dlog("Index | Noise | Threshold | LValid | Oflow")
for i in range(16):
pw.dlog(
"{:<3} {:<3} {:<3} {:<3} {:<3}".format(
i, noise_list[i], threshold_list[i], lvalid_list[i], oflow_list[i]
)
)
pw.dlog(FsfwTmTcPrinter.get_validity_buffer(hk_data[current_idx:], num_vars=4))
def handle_star_tracker_action_replies( def handle_star_tracker_action_replies(
action_id: int, pw: PrintWrapper, custom_data: bytes action_id: int, pw: PrintWrapper, custom_data: bytes
): ):