This commit is contained in:
parent
99c6c8bbd0
commit
3fe51b08a6
@ -0,0 +1 @@
|
|||||||
|
from .definitions import * # noqa
|
@ -11,6 +11,7 @@ from spacepackets.ccsds import PacketId
|
|||||||
from spacepackets.util import UnsignedByteField
|
from spacepackets.util import UnsignedByteField
|
||||||
|
|
||||||
|
|
||||||
|
DB_PATH = "tm.db"
|
||||||
PUS_APID = 0x65
|
PUS_APID = 0x65
|
||||||
CFDP_APID = 0x66
|
CFDP_APID = 0x66
|
||||||
PUS_PACKET_ID = PacketId(PacketType.TM, True, PUS_APID)
|
PUS_PACKET_ID = PacketId(PacketType.TM, True, PUS_APID)
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
"""HK Handling for EIVE OBSW"""
|
"""HK Handling for EIVE OBSW"""
|
||||||
import dataclasses
|
import dataclasses
|
||||||
import logging
|
import logging
|
||||||
from typing import List
|
import sqlite3
|
||||||
|
from typing import List, Optional, cast
|
||||||
|
|
||||||
from eive_tmtc.tmtc.acs.acs_ctrl import handle_acs_ctrl_hk_data
|
from eive_tmtc.tmtc.acs.acs_ctrl import handle_acs_ctrl_hk_data
|
||||||
from eive_tmtc.tmtc.internal_err_reporter import handle_ier_hk_data
|
from eive_tmtc.tmtc.internal_err_reporter import handle_ier_hk_data
|
||||||
@ -18,7 +19,6 @@ from eive_tmtc.tmtc.tcs import handle_thermal_controller_hk_data
|
|||||||
from eive_tmtc.tmtc.tcs.tmp1075 import handle_tmp_1075_hk_data
|
from eive_tmtc.tmtc.tcs.tmp1075 import handle_tmp_1075_hk_data
|
||||||
from spacepackets.ecss import PusTelemetry
|
from spacepackets.ecss import PusTelemetry
|
||||||
from tmtccmd.tm.pus_3_fsfw_hk import (
|
from tmtccmd.tm.pus_3_fsfw_hk import (
|
||||||
Service3Base,
|
|
||||||
HkContentType,
|
HkContentType,
|
||||||
Service3FsfwTm,
|
Service3FsfwTm,
|
||||||
)
|
)
|
||||||
@ -60,9 +60,10 @@ def handle_hk_packet(
|
|||||||
printer: FsfwTmTcPrinter,
|
printer: FsfwTmTcPrinter,
|
||||||
hk_filter: HkFilter,
|
hk_filter: HkFilter,
|
||||||
hk_level: int,
|
hk_level: int,
|
||||||
|
db: Optional[sqlite3.Connection],
|
||||||
):
|
):
|
||||||
tm_packet = Service3FsfwTm.unpack(raw_telemetry=raw_tm, custom_hk_handling=False)
|
tm_packet = Service3FsfwTm.unpack(raw_telemetry=raw_tm, custom_hk_handling=False)
|
||||||
named_obj_id = obj_id_dict.get(tm_packet.object_id.as_bytes)
|
named_obj_id = cast(ObjectIdU32, obj_id_dict.get(tm_packet.object_id.as_bytes))
|
||||||
if named_obj_id is None:
|
if named_obj_id is None:
|
||||||
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:
|
||||||
@ -75,6 +76,7 @@ def handle_hk_packet(
|
|||||||
hk_packet=tm_packet,
|
hk_packet=tm_packet,
|
||||||
tm=tm_packet.pus_tm,
|
tm=tm_packet.pus_tm,
|
||||||
hk_data=hk_data,
|
hk_data=hk_data,
|
||||||
|
db=db,
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
try:
|
try:
|
||||||
@ -89,6 +91,7 @@ def handle_hk_packet(
|
|||||||
hk_packet=tm_packet,
|
hk_packet=tm_packet,
|
||||||
tm=tm_packet.pus_tm,
|
tm=tm_packet.pus_tm,
|
||||||
hk_data=hk_data,
|
hk_data=hk_data,
|
||||||
|
db=db,
|
||||||
)
|
)
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
_LOGGER.exception(
|
_LOGGER.exception(
|
||||||
@ -101,12 +104,14 @@ def handle_hk_packet(
|
|||||||
def handle_regular_hk_print( # noqa C901: Complexity okay here
|
def handle_regular_hk_print( # noqa C901: Complexity okay here
|
||||||
printer: FsfwTmTcPrinter,
|
printer: FsfwTmTcPrinter,
|
||||||
object_id: ObjectIdU32,
|
object_id: ObjectIdU32,
|
||||||
hk_packet: Service3Base,
|
hk_packet: Service3FsfwTm,
|
||||||
tm: PusTelemetry,
|
tm: PusTelemetry,
|
||||||
hk_data: bytes,
|
hk_data: bytes,
|
||||||
|
db: Optional[sqlite3.Connection],
|
||||||
):
|
):
|
||||||
objb = object_id.as_bytes
|
objb = object_id.as_bytes
|
||||||
set_id = hk_packet.set_id
|
set_id = hk_packet.set_id
|
||||||
|
assert tm.time_provider is not None
|
||||||
packet_dt = tm.time_provider.as_date_time()
|
packet_dt = tm.time_provider.as_date_time()
|
||||||
pw = PrintWrapper(printer.file_logger)
|
pw = PrintWrapper(printer.file_logger)
|
||||||
"""This function is called when a Service 3 Housekeeping packet is received."""
|
"""This function is called when a Service 3 Housekeeping packet is received."""
|
||||||
@ -127,9 +132,23 @@ def handle_regular_hk_print( # noqa C901: Complexity okay here
|
|||||||
elif objb == obj_ids.CORE_CONTROLLER_ID:
|
elif objb == obj_ids.CORE_CONTROLLER_ID:
|
||||||
return handle_core_hk_data(pw=pw, hk_data=hk_data, set_id=set_id)
|
return handle_core_hk_data(pw=pw, hk_data=hk_data, set_id=set_id)
|
||||||
elif objb == obj_ids.PDU_1_HANDLER_ID:
|
elif objb == obj_ids.PDU_1_HANDLER_ID:
|
||||||
return handle_pdu_data(pw=pw, pdu_idx=1, set_id=set_id, hk_data=hk_data)
|
return handle_pdu_data(
|
||||||
|
hk_packet=hk_packet,
|
||||||
|
con=db,
|
||||||
|
pw=pw,
|
||||||
|
pdu_idx=1,
|
||||||
|
set_id=set_id,
|
||||||
|
hk_data=hk_data,
|
||||||
|
)
|
||||||
elif objb == obj_ids.PDU_2_HANDLER_ID:
|
elif objb == obj_ids.PDU_2_HANDLER_ID:
|
||||||
return handle_pdu_data(pw=pw, pdu_idx=2, set_id=set_id, hk_data=hk_data)
|
return handle_pdu_data(
|
||||||
|
hk_packet=hk_packet,
|
||||||
|
con=db,
|
||||||
|
pw=pw,
|
||||||
|
pdu_idx=2,
|
||||||
|
set_id=set_id,
|
||||||
|
hk_data=hk_data,
|
||||||
|
)
|
||||||
elif objb == obj_ids.PLOC_MPSOC_ID:
|
elif objb == obj_ids.PLOC_MPSOC_ID:
|
||||||
return handle_ploc_mpsoc_hk_data(pw=pw, hk_data=hk_data, set_id=set_id)
|
return handle_ploc_mpsoc_hk_data(pw=pw, hk_data=hk_data, set_id=set_id)
|
||||||
elif objb == obj_ids.ACU_HANDLER_ID:
|
elif objb == obj_ids.ACU_HANDLER_ID:
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import struct
|
import struct
|
||||||
from typing import List, Tuple
|
import sqlite3
|
||||||
|
from typing import List, Optional, Tuple
|
||||||
|
|
||||||
from eive_tmtc.tmtc.power.acu import acu_config_table_handler
|
from eive_tmtc.tmtc.power.acu import acu_config_table_handler
|
||||||
from eive_tmtc.tmtc.power.common_power import (
|
from eive_tmtc.tmtc.power.common_power import (
|
||||||
@ -8,6 +9,7 @@ from eive_tmtc.tmtc.power.common_power import (
|
|||||||
OBC_ENDIANNESS,
|
OBC_ENDIANNESS,
|
||||||
)
|
)
|
||||||
from eive_tmtc.tmtc.power.power import PcduSetIds
|
from eive_tmtc.tmtc.power.power import PcduSetIds
|
||||||
|
from tmtccmd.tm.pus_3_fsfw_hk import Service3FsfwTm
|
||||||
from tmtccmd.util import ObjectIdBase
|
from tmtccmd.util import ObjectIdBase
|
||||||
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
||||||
from eive_tmtc.pus_tm.defs import PrintWrapper
|
from eive_tmtc.pus_tm.defs import PrintWrapper
|
||||||
@ -146,7 +148,14 @@ class DevicesInfoParser:
|
|||||||
return "Unknown Type"
|
return "Unknown Type"
|
||||||
|
|
||||||
|
|
||||||
def handle_pdu_data(pw: PrintWrapper, pdu_idx: int, set_id: int, hk_data: bytes):
|
def handle_pdu_data(
|
||||||
|
hk_packet: Service3FsfwTm,
|
||||||
|
con: Optional[sqlite3.Connection],
|
||||||
|
pw: PrintWrapper,
|
||||||
|
pdu_idx: int,
|
||||||
|
set_id: int,
|
||||||
|
hk_data: bytes,
|
||||||
|
):
|
||||||
current_idx = 0
|
current_idx = 0
|
||||||
priv_idx = pdu_idx - 1
|
priv_idx = pdu_idx - 1
|
||||||
if set_id == SetId.AUX or set_id == SetId.AUX:
|
if set_id == SetId.AUX or set_id == SetId.AUX:
|
||||||
@ -219,6 +228,28 @@ def handle_pdu_data(pw: PrintWrapper, pdu_idx: int, set_id: int, hk_data: bytes)
|
|||||||
f"Boot Count {boot_count} | Battery Mode {batt_mode} | "
|
f"Boot Count {boot_count} | Battery Mode {batt_mode} | "
|
||||||
f"Temperature {temperature} | VCC {vcc} | VBAT {vbat}"
|
f"Temperature {temperature} | VCC {vcc} | VBAT {vbat}"
|
||||||
)
|
)
|
||||||
|
if con is not None:
|
||||||
|
cursor = con.cursor()
|
||||||
|
if pdu_idx == 1:
|
||||||
|
tbl_name = "Pdu1"
|
||||||
|
channel_list = PDU1_CHANNELS_NAMES
|
||||||
|
else:
|
||||||
|
tbl_name = "Pdu2"
|
||||||
|
channel_list = PDU2_CHANNELS_NAMES
|
||||||
|
for idx, name in enumerate(channel_list):
|
||||||
|
cursor.execute(
|
||||||
|
f"CREATE TABLE {tbl_name}{name} IF NOT EXISTS "
|
||||||
|
f"(GenerationTime, OutEnable, Voltage, Current)"
|
||||||
|
)
|
||||||
|
value_list = [
|
||||||
|
hk_packet.pus_tm.time_provider.as_datetime(), # type: ignore
|
||||||
|
output_enb_list[idx],
|
||||||
|
voltage_list[idx],
|
||||||
|
current_list[idx],
|
||||||
|
]
|
||||||
|
cursor.execute(
|
||||||
|
f"INSERT INTO {tbl_name}{name} VALUES(?, ?, ?, ?)", value_list
|
||||||
|
)
|
||||||
pw.dlog(info)
|
pw.dlog(info)
|
||||||
|
|
||||||
|
|
||||||
|
61
tmtcc.py
61
tmtcc.py
@ -1,60 +1,62 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
import sqlite3
|
||||||
import logging
|
import logging
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
|
from importlib.metadata import version
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from typing import Tuple
|
||||||
|
|
||||||
import tmtccmd
|
import tmtccmd
|
||||||
from eive_tmtc.cfdp.fault_handler import EiveCfdpFaultHandler
|
|
||||||
from eive_tmtc.cfdp.tm import CfdpInCcsdsWrapper
|
|
||||||
from eive_tmtc.cfdp.user import EiveCfdpUser
|
|
||||||
from spacepackets.ecss import PusVerificator
|
|
||||||
from spacepackets.version import get_version as get_sp_version
|
|
||||||
from spacepackets.cfdp import (
|
from spacepackets.cfdp import (
|
||||||
ChecksumType,
|
ChecksumType,
|
||||||
TransmissionMode,
|
TransmissionMode,
|
||||||
)
|
)
|
||||||
|
from spacepackets.ecss import PusVerificator
|
||||||
from eive_tmtc.pus_tc.tc_handler import TcHandler
|
from spacepackets.version import get_version as get_sp_version
|
||||||
from eive_tmtc.pus_tm.hk_handler import HkFilter
|
from tmtccmd import BackendBase
|
||||||
from tmtccmd.logging import add_colorlog_console_logger
|
|
||||||
from tmtccmd.cfdp.handler import CfdpInCcsdsHandler
|
from tmtccmd.cfdp.handler import CfdpInCcsdsHandler
|
||||||
from tmtccmd.cfdp.mib import (
|
from tmtccmd.cfdp.mib import (
|
||||||
LocalEntityCfg,
|
|
||||||
IndicationCfg,
|
IndicationCfg,
|
||||||
|
LocalEntityCfg,
|
||||||
RemoteEntityCfg,
|
RemoteEntityCfg,
|
||||||
)
|
)
|
||||||
from tmtccmd import BackendBase
|
from tmtccmd.config import (
|
||||||
from tmtccmd.util import FileSeqCountProvider, PusFileSeqCountProvider
|
SetupWrapper,
|
||||||
|
default_json_path,
|
||||||
|
params_to_procedure_conversion,
|
||||||
|
)
|
||||||
|
from tmtccmd.config.args import (
|
||||||
|
PreArgsParsingWrapper,
|
||||||
|
ProcedureParamsWrapper,
|
||||||
|
SetupParams,
|
||||||
|
)
|
||||||
|
from tmtccmd.core import BackendRequest
|
||||||
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
||||||
|
from tmtccmd.logging import add_colorlog_console_logger
|
||||||
from tmtccmd.logging.pus import (
|
from tmtccmd.logging.pus import (
|
||||||
RawTmtcTimedLogWrapper,
|
RawTmtcTimedLogWrapper,
|
||||||
RegularTmtcLogWrapper,
|
RegularTmtcLogWrapper,
|
||||||
TimedLogWhen,
|
TimedLogWhen,
|
||||||
)
|
)
|
||||||
from tmtccmd.pus import VerificationWrapper
|
from tmtccmd.pus import VerificationWrapper
|
||||||
from tmtccmd.tm import SpecificApidHandlerBase, GenericApidHandlerBase, CcsdsTmHandler
|
from tmtccmd.tm import CcsdsTmHandler, GenericApidHandlerBase, SpecificApidHandlerBase
|
||||||
from tmtccmd.core import BackendRequest
|
from tmtccmd.util import FileSeqCountProvider, PusFileSeqCountProvider
|
||||||
from tmtccmd.config import (
|
|
||||||
default_json_path,
|
|
||||||
SetupWrapper,
|
|
||||||
params_to_procedure_conversion,
|
|
||||||
)
|
|
||||||
from tmtccmd.config.args import (
|
|
||||||
SetupParams,
|
|
||||||
PreArgsParsingWrapper,
|
|
||||||
ProcedureParamsWrapper,
|
|
||||||
)
|
|
||||||
from eive_tmtc import APP_LOGGER
|
from eive_tmtc import APP_LOGGER
|
||||||
from importlib.metadata import version
|
from eive_tmtc.cfdp.fault_handler import EiveCfdpFaultHandler
|
||||||
|
from eive_tmtc.cfdp.tm import CfdpInCcsdsWrapper
|
||||||
|
from eive_tmtc.cfdp.user import EiveCfdpUser
|
||||||
from eive_tmtc.config.definitions import (
|
from eive_tmtc.config.definitions import (
|
||||||
PUS_APID,
|
|
||||||
CFDP_APID,
|
CFDP_APID,
|
||||||
CFDP_LOCAL_ENTITY_ID,
|
CFDP_LOCAL_ENTITY_ID,
|
||||||
CFDP_REMOTE_ENTITY_ID,
|
CFDP_REMOTE_ENTITY_ID,
|
||||||
|
PUS_APID,
|
||||||
|
DB_PATH,
|
||||||
)
|
)
|
||||||
from eive_tmtc.config.hook import EiveHookObject
|
from eive_tmtc.config.hook import EiveHookObject
|
||||||
|
from eive_tmtc.pus_tc.tc_handler import TcHandler
|
||||||
|
from eive_tmtc.pus_tm.hk_handler import HkFilter
|
||||||
from eive_tmtc.pus_tm.pus_demux import pus_factory_hook
|
from eive_tmtc.pus_tm.pus_demux import pus_factory_hook
|
||||||
|
|
||||||
_LOGGER = APP_LOGGER
|
_LOGGER = APP_LOGGER
|
||||||
@ -80,6 +82,7 @@ class PusHandler(SpecificApidHandlerBase):
|
|||||||
self.hk_level = hk_level
|
self.hk_level = hk_level
|
||||||
self.these_objs_hk_only = []
|
self.these_objs_hk_only = []
|
||||||
self.hk_filter = HkFilter(object_ids=self.these_objs_hk_only, set_ids=[])
|
self.hk_filter = HkFilter(object_ids=self.these_objs_hk_only, set_ids=[])
|
||||||
|
self.tm_db = sqlite3.connect(DB_PATH)
|
||||||
|
|
||||||
def handle_tm(self, packet: bytes, _user_args: any):
|
def handle_tm(self, packet: bytes, _user_args: any):
|
||||||
# with open("tc.bin", "wb") as of:
|
# with open("tc.bin", "wb") as of:
|
||||||
@ -106,7 +109,7 @@ class CustomCcsdsTmHandler(CcsdsTmHandler):
|
|||||||
_LOGGER.debug(f"Received packet {packet.hex(sep=',')} with APID {apid}")
|
_LOGGER.debug(f"Received packet {packet.hex(sep=',')} with APID {apid}")
|
||||||
|
|
||||||
|
|
||||||
def setup_params() -> (SetupWrapper, int):
|
def setup_params() -> Tuple[SetupWrapper, int]:
|
||||||
hook_obj = EiveHookObject(default_json_path())
|
hook_obj = EiveHookObject(default_json_path())
|
||||||
params = SetupParams()
|
params = SetupParams()
|
||||||
parser_wrapper = PreArgsParsingWrapper()
|
parser_wrapper = PreArgsParsingWrapper()
|
||||||
@ -190,7 +193,7 @@ def setup_tmtc_handlers(
|
|||||||
raw_logger: RawTmtcTimedLogWrapper,
|
raw_logger: RawTmtcTimedLogWrapper,
|
||||||
gui: bool,
|
gui: bool,
|
||||||
hk_level: int,
|
hk_level: int,
|
||||||
) -> (CcsdsTmHandler, TcHandler):
|
) -> Tuple[CcsdsTmHandler, TcHandler]:
|
||||||
cfdp_in_ccsds_wrapper = setup_cfdp_handler()
|
cfdp_in_ccsds_wrapper = setup_cfdp_handler()
|
||||||
verification_wrapper = VerificationWrapper(
|
verification_wrapper = VerificationWrapper(
|
||||||
verificator, _LOGGER, printer.file_logger
|
verificator, _LOGGER, printer.file_logger
|
||||||
|
Loading…
x
Reference in New Issue
Block a user