46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
import logging
|
|
import struct
|
|
import enum
|
|
from typing import List
|
|
from spacepackets.ecss import PusTm
|
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
|
|
|
from pytmtc.common import AcsId, Apid
|
|
from pytmtc.hk_common import create_request_one_shot_hk_cmd
|
|
from pytmtc.mode import handle_set_mode_cmd
|
|
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
|
|
class SetId(enum.IntEnum):
|
|
SENSOR_SET = 0
|
|
|
|
|
|
def create_mgm_cmds(q: DefaultPusQueueHelper, cmd_path: List[str]):
|
|
assert len(cmd_path) >= 3
|
|
if cmd_path[2] == "hk":
|
|
if cmd_path[3] == "one_shot_hk":
|
|
q.add_log_cmd("Sending HK one shot request")
|
|
q.add_pus_tc(
|
|
create_request_one_shot_hk_cmd(Apid.ACS, AcsId.MGM_0, SetId.SENSOR_SET)
|
|
)
|
|
|
|
if cmd_path[2] == "mode":
|
|
if cmd_path[3] == "set_mode":
|
|
handle_set_mode_cmd(q, "MGM 0", cmd_path[4], Apid.ACS, AcsId.MGM_0)
|
|
|
|
|
|
def handle_mgm_hk_report(pus_tm: PusTm, set_id: int, hk_data: bytes):
|
|
if set_id == SetId.SENSOR_SET:
|
|
if len(hk_data) != 13:
|
|
raise ValueError(f"invalid HK data length, expected 13, got {len(hk_data)}")
|
|
data_valid = hk_data[0]
|
|
mgm_x = struct.unpack("!f", hk_data[1:5])[0]
|
|
mgm_y = struct.unpack("!f", hk_data[5:9])[0]
|
|
mgm_z = struct.unpack("!f", hk_data[9:13])[0]
|
|
_LOGGER.info(
|
|
f"received MGM HK set in uT: Valid {data_valid} X {mgm_x} Y {mgm_y} Z {mgm_z}"
|
|
)
|
|
pass
|