Compare commits
50 Commits
v5.9.0
...
07b13c153d
Author | SHA1 | Date | |
---|---|---|---|
07b13c153d | |||
aad725a4e5 | |||
fd714a118d | |||
4446e471d9
|
|||
6a8f48c493
|
|||
0f6e7eb159
|
|||
92fe9d92de
|
|||
99c6c8bbd0
|
|||
26552ebeca | |||
76e80c259c | |||
f59c2b9a9e | |||
bf3565f497 | |||
7f119f36d2 | |||
18728731ed | |||
14334dae92
|
|||
0aaf63215b | |||
72460fdb49
|
|||
b08f9d9af6
|
|||
66c1895cd0
|
|||
4e56bd172e | |||
ff73746935
|
|||
5821c60eb4
|
|||
2ca7bc5a70
|
|||
d9530271c3
|
|||
97b529318d
|
|||
c4598ff058
|
|||
b3d903115e | |||
6420bd162a | |||
9680066d0a | |||
d5e923233b | |||
d0b857dfb7 | |||
0c4ab25421 | |||
84f50bab83
|
|||
43d6b98695 | |||
4b7debacc6 | |||
9567146ff8
|
|||
e18ec86eca
|
|||
f52f4b1ce2 | |||
ad530925d5 | |||
c12dfd06d8 | |||
728b7c647c
|
|||
a5e38a6856
|
|||
f400dea799
|
|||
6bd94cc167
|
|||
7a664eeab8
|
|||
dbfe1dc0d5 | |||
4b6887e304 | |||
28716209a3 | |||
f0860a785d
|
|||
ead9c20888
|
12
CHANGELOG.md
12
CHANGELOG.md
@ -10,6 +10,18 @@ list yields a list of all related PRs for each release.
|
|||||||
|
|
||||||
# [unreleased]
|
# [unreleased]
|
||||||
|
|
||||||
|
## Added
|
||||||
|
|
||||||
|
- Core controller auto switch enable and disable command.
|
||||||
|
|
||||||
|
# [v5.10.1] 2023-10-27
|
||||||
|
|
||||||
|
- Minor improvements, update event translation.
|
||||||
|
|
||||||
|
# [v5.10.0] 2023-10-27
|
||||||
|
|
||||||
|
- Added new STR commands to allow more debugging.
|
||||||
|
|
||||||
# [v5.9.0] 2023-10-24
|
# [v5.9.0] 2023-10-24
|
||||||
|
|
||||||
## Added
|
## Added
|
||||||
|
259
eive_tmtc/cfdp/handler.py
Normal file
259
eive_tmtc/cfdp/handler.py
Normal file
@ -0,0 +1,259 @@
|
|||||||
|
from dataclasses import dataclass
|
||||||
|
from typing import Optional, Tuple
|
||||||
|
|
||||||
|
import deprecation
|
||||||
|
from spacepackets import PacketType, SpacePacket, SpacePacketHeader
|
||||||
|
from spacepackets.cfdp import GenericPduPacket, PduFactory
|
||||||
|
from spacepackets.cfdp.pdu import PduHolder
|
||||||
|
from tmtccmd.cfdp import (
|
||||||
|
CfdpUserBase,
|
||||||
|
LocalEntityCfg,
|
||||||
|
RemoteEntityCfgTable,
|
||||||
|
)
|
||||||
|
from tmtccmd.cfdp.defs import CfdpState
|
||||||
|
from tmtccmd.cfdp.handler import (
|
||||||
|
DestHandler,
|
||||||
|
DestStateWrapper,
|
||||||
|
SourceHandler,
|
||||||
|
SourceStateWrapper,
|
||||||
|
)
|
||||||
|
from tmtccmd.cfdp.handler.common import PacketDestination, get_packet_destination
|
||||||
|
from tmtccmd.cfdp.mib import CheckTimerProvider
|
||||||
|
from tmtccmd.cfdp.request import PutRequest
|
||||||
|
from tmtccmd.util import ProvidesSeqCount
|
||||||
|
from tmtccmd.version import get_version
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class StateWrapper:
|
||||||
|
source_handler_state = SourceStateWrapper()
|
||||||
|
dest_handler_state = DestStateWrapper()
|
||||||
|
|
||||||
|
|
||||||
|
class CfdpHandler:
|
||||||
|
"""Wrapper class which wraps both the :py:class:`tmtccmd.cfdp.handler.source.SourceHandler` and
|
||||||
|
:py:class:`tmtccmd.cfdp.handler.dest.DestHandler` in a sensible way.
|
||||||
|
|
||||||
|
If you have special requirements, for example you want to spawn a new destination handler
|
||||||
|
for each file copy transfer to allow multiple consecutive file transfers, it might be a good
|
||||||
|
idea to write a custom wrapper."""
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
cfg: LocalEntityCfg,
|
||||||
|
user: CfdpUserBase,
|
||||||
|
seq_cnt_provider: ProvidesSeqCount,
|
||||||
|
remote_cfg_table: RemoteEntityCfgTable,
|
||||||
|
check_timer_provider: CheckTimerProvider,
|
||||||
|
):
|
||||||
|
self.remote_cfg_table = remote_cfg_table
|
||||||
|
self.dest_handler = DestHandler(
|
||||||
|
cfg=cfg,
|
||||||
|
user=user,
|
||||||
|
remote_cfg_table=remote_cfg_table,
|
||||||
|
check_timer_provider=check_timer_provider,
|
||||||
|
)
|
||||||
|
self.source_handler = SourceHandler(
|
||||||
|
cfg=cfg,
|
||||||
|
seq_num_provider=seq_cnt_provider,
|
||||||
|
user=user,
|
||||||
|
remote_cfg_table=remote_cfg_table,
|
||||||
|
check_timer_provider=check_timer_provider,
|
||||||
|
)
|
||||||
|
|
||||||
|
def put_request(self, request: PutRequest):
|
||||||
|
if not self.remote_cfg_table.get_cfg(request.destination_id):
|
||||||
|
raise ValueError(
|
||||||
|
f"No remote CFDP config found for entity ID {request.destination_id}"
|
||||||
|
)
|
||||||
|
self.source_handler.put_request(
|
||||||
|
request, self.remote_cfg_table.get_cfg(request.destination_id) # type: ignore
|
||||||
|
)
|
||||||
|
|
||||||
|
def pull_next_source_packet(self) -> Optional[PduHolder]:
|
||||||
|
res = self.source_handler.state_machine()
|
||||||
|
if res.states.num_packets_ready:
|
||||||
|
return self.source_handler.get_next_packet()
|
||||||
|
return None
|
||||||
|
|
||||||
|
def pull_next_dest_packet(self) -> Optional[PduHolder]:
|
||||||
|
res = self.dest_handler.state_machine()
|
||||||
|
if res.states.packets_ready:
|
||||||
|
return self.dest_handler.get_next_packet()
|
||||||
|
return None
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
return self
|
||||||
|
|
||||||
|
def __next__(self) -> Tuple[Optional[PduHolder], Optional[PduHolder]]:
|
||||||
|
"""The iterator for this class will returns a tuple of optional PDUs wrapped b a
|
||||||
|
:py:class:`PduHolder`.
|
||||||
|
|
||||||
|
:return: Can be a tuple where the first entry can hold a source packet and the second entry
|
||||||
|
can be a destination packet. If both packets are None, a StopIteration will be raised.
|
||||||
|
"""
|
||||||
|
next_source_packet = self.pull_next_source_packet()
|
||||||
|
next_dest_packet = self.pull_next_dest_packet()
|
||||||
|
if not next_dest_packet and not next_source_packet:
|
||||||
|
raise StopIteration
|
||||||
|
return next_source_packet, next_dest_packet
|
||||||
|
|
||||||
|
def put_request_pending(self) -> bool:
|
||||||
|
return self.source_handler.states.state != CfdpState.IDLE
|
||||||
|
|
||||||
|
@deprecation.deprecated(
|
||||||
|
deprecated_in="6.0.0rc0",
|
||||||
|
current_version=get_version(),
|
||||||
|
details="Use insert_packet instead",
|
||||||
|
)
|
||||||
|
def pass_packet(self, packet: GenericPduPacket):
|
||||||
|
self.insert_packet(packet)
|
||||||
|
|
||||||
|
def insert_packet(self, packet: GenericPduPacket):
|
||||||
|
"""This function routes the packets based on PDU type and directive type if applicable.
|
||||||
|
|
||||||
|
The routing is based on section 4.5 of the CFDP standard which specifies the PDU forwarding
|
||||||
|
procedure."""
|
||||||
|
if get_packet_destination(packet) == PacketDestination.DEST_HANDLER:
|
||||||
|
self.dest_handler.insert_packet(packet)
|
||||||
|
elif get_packet_destination(packet) == PacketDestination.SOURCE_HANDLER:
|
||||||
|
self.source_handler.insert_packet(packet) # type: ignore
|
||||||
|
|
||||||
|
|
||||||
|
class CfdpInCcsdsHandler:
|
||||||
|
"""Wrapper helper type used to wrap PDU packets into CCSDS packets and to extract PDU
|
||||||
|
packets from CCSDS packets.
|
||||||
|
|
||||||
|
:param cfg: Local CFDP entity configuration.
|
||||||
|
:param user: User wrapper. This contains the indication callback implementations and the
|
||||||
|
virtual filestore implementation.
|
||||||
|
:param cfdp_seq_cnt_provider: Every CFDP file transfer has a transaction sequence number.
|
||||||
|
This provider is used to retrieve that sequence number.
|
||||||
|
:param ccsds_seq_cnt_provider: Each CFDP PDU is wrapped into a CCSDS space packet, and each
|
||||||
|
space packet has a dedicated sequence count. This provider is used to retrieve the
|
||||||
|
sequence count.
|
||||||
|
:param ccsds_apid: APID to use for the CCSDS space packet header wrapped around each PDU.
|
||||||
|
This is important so that the OBSW can distinguish between regular PUS packets and
|
||||||
|
CFDP packets."""
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
cfg: LocalEntityCfg,
|
||||||
|
user: CfdpUserBase,
|
||||||
|
remote_cfg_table: RemoteEntityCfgTable,
|
||||||
|
ccsds_apid: int,
|
||||||
|
cfdp_seq_cnt_provider: ProvidesSeqCount,
|
||||||
|
ccsds_seq_cnt_provider: ProvidesSeqCount,
|
||||||
|
check_timer_provider: CheckTimerProvider,
|
||||||
|
):
|
||||||
|
self.cfdp_handler = CfdpHandler(
|
||||||
|
cfg=cfg,
|
||||||
|
user=user,
|
||||||
|
seq_cnt_provider=cfdp_seq_cnt_provider,
|
||||||
|
remote_cfg_table=remote_cfg_table,
|
||||||
|
check_timer_provider=check_timer_provider,
|
||||||
|
)
|
||||||
|
self.ccsds_seq_cnt_provider = ccsds_seq_cnt_provider
|
||||||
|
self.ccsds_apid = ccsds_apid
|
||||||
|
|
||||||
|
def put_request_pending(self):
|
||||||
|
return self.cfdp_handler.put_request_pending()
|
||||||
|
|
||||||
|
def state_machine(self):
|
||||||
|
self.source_handler.state_machine()
|
||||||
|
self.dest_handler.state_machine()
|
||||||
|
|
||||||
|
@deprecation.deprecated(
|
||||||
|
deprecated_in="6.0.0rc1",
|
||||||
|
current_version=get_version(),
|
||||||
|
details="Use state_machine instead",
|
||||||
|
)
|
||||||
|
def fsm(self):
|
||||||
|
self.state_machine()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def source_handler(self):
|
||||||
|
return self.cfdp_handler.source_handler
|
||||||
|
|
||||||
|
@property
|
||||||
|
def dest_handler(self):
|
||||||
|
return self.cfdp_handler.dest_handler
|
||||||
|
|
||||||
|
def pull_next_source_packet(self) -> Optional[Tuple[PduHolder, SpacePacket]]:
|
||||||
|
"""Retrieves the next PDU to send and wraps it into a space packet"""
|
||||||
|
next_packet = self.cfdp_handler.pull_next_source_packet()
|
||||||
|
if next_packet is None:
|
||||||
|
return next_packet
|
||||||
|
sp_header = SpacePacketHeader(
|
||||||
|
packet_type=PacketType.TC,
|
||||||
|
apid=self.ccsds_apid,
|
||||||
|
seq_count=self.ccsds_seq_cnt_provider.get_and_increment(),
|
||||||
|
data_len=next_packet.packet_len - 1,
|
||||||
|
)
|
||||||
|
return next_packet, SpacePacket(sp_header, None, next_packet.pack())
|
||||||
|
|
||||||
|
def pull_next_dest_packet(self) -> Optional[Tuple[PduHolder, SpacePacket]]:
|
||||||
|
"""Retrieves the next PDU to send and wraps it into a space packet"""
|
||||||
|
next_packet = self.cfdp_handler.pull_next_dest_packet()
|
||||||
|
if next_packet is None:
|
||||||
|
return next_packet
|
||||||
|
sp_header = SpacePacketHeader(
|
||||||
|
packet_type=PacketType.TC,
|
||||||
|
apid=self.ccsds_apid,
|
||||||
|
seq_count=self.ccsds_seq_cnt_provider.get_and_increment(),
|
||||||
|
data_len=next_packet.packet_len - 1,
|
||||||
|
)
|
||||||
|
return next_packet, SpacePacket(sp_header, None, next_packet.pack())
|
||||||
|
|
||||||
|
@deprecation.deprecated(
|
||||||
|
deprecated_in="6.0.0rc1",
|
||||||
|
current_version=get_version(),
|
||||||
|
details="Use insert_space_packet instead",
|
||||||
|
)
|
||||||
|
def pass_space_packet(self, space_packet: SpacePacket):
|
||||||
|
self.insert_space_packet(space_packet)
|
||||||
|
|
||||||
|
def insert_space_packet(self, space_packet: SpacePacket) -> bool:
|
||||||
|
if space_packet.user_data is None:
|
||||||
|
raise ValueError(
|
||||||
|
"space packet is empty, expected packet containing a CFDP PDU"
|
||||||
|
)
|
||||||
|
# Unwrap the user data and pass it to the handler
|
||||||
|
pdu_raw = space_packet.user_data
|
||||||
|
pdu_base = PduFactory.from_raw(pdu_raw)
|
||||||
|
if pdu_base:
|
||||||
|
self.insert_pdu_packet(pdu_base)
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def insert_pdu_packet(self, pdu: GenericPduPacket):
|
||||||
|
self.cfdp_handler.insert_packet(pdu)
|
||||||
|
|
||||||
|
@deprecation.deprecated(
|
||||||
|
deprecated_in="6.0.0rc1",
|
||||||
|
current_version=get_version(),
|
||||||
|
details="Use insert_pdu_packet instead",
|
||||||
|
)
|
||||||
|
def pass_pdu_packet(self, pdu_base: GenericPduPacket):
|
||||||
|
self.insert_pdu_packet(pdu_base)
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
return self
|
||||||
|
|
||||||
|
def __next__(
|
||||||
|
self,
|
||||||
|
) -> Tuple[
|
||||||
|
Optional[Tuple[PduHolder, SpacePacket]],
|
||||||
|
Optional[Tuple[PduHolder, SpacePacket]],
|
||||||
|
]:
|
||||||
|
"""The iterator for this class will returns a tuple of optional PDUs wrapped b a
|
||||||
|
:py:class:`PduHolder`.
|
||||||
|
|
||||||
|
:return: Can be a tuple where the first entry can hold a source packet and the second entry
|
||||||
|
can be a destination packet. If both packets are None, a StopIteration will be raised.
|
||||||
|
"""
|
||||||
|
next_source_tuple = self.pull_next_source_packet()
|
||||||
|
next_dest_tuple = self.pull_next_dest_packet()
|
||||||
|
if not next_source_tuple and not next_dest_tuple:
|
||||||
|
raise StopIteration
|
||||||
|
return next_source_tuple, next_dest_tuple
|
@ -1,27 +1,29 @@
|
|||||||
import logging
|
import logging
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
from eive_tmtc.config.definitions import CFDP_APID
|
from eive_tmtc.config.definitions import CFDP_APID
|
||||||
from spacepackets.ccsds import SPACE_PACKET_HEADER_SIZE
|
from spacepackets.ccsds import SPACE_PACKET_HEADER_SIZE
|
||||||
from spacepackets.cfdp import PduFactory, PduType, DirectiveType
|
from spacepackets.cfdp import PduFactory, PduType
|
||||||
from tmtccmd.cfdp.handler import CfdpInCcsdsHandler
|
from tmtccmd.cfdp.handler import CfdpInCcsdsHandler
|
||||||
from tmtccmd.tm import SpecificApidHandlerBase
|
from tmtccmd.tmtc import SpecificApidHandlerBase
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class CfdpInCcsdsWrapper(SpecificApidHandlerBase):
|
class CfdpInCcsdsWrapper(SpecificApidHandlerBase):
|
||||||
def __init__(self, cfdp_in_ccsds_handler: CfdpInCcsdsHandler):
|
def __init__(self, cfdp_in_ccsds_handler: CfdpInCcsdsHandler):
|
||||||
super().__init__(CFDP_APID, None)
|
|
||||||
self.handler = cfdp_in_ccsds_handler
|
self.handler = cfdp_in_ccsds_handler
|
||||||
|
super().__init__(CFDP_APID, None)
|
||||||
|
|
||||||
def handle_tm(self, packet: bytes, _user_args: any):
|
def handle_tm(self, packet: bytes, _user_args: Any):
|
||||||
# Ignore the space packet header. Its only purpose is to use the same protocol and
|
# Ignore the space packet header. Its only purpose is to use the same protocol and
|
||||||
# have a seaprate APID for space packets. If this function is called, the APID is correct.
|
# have a seaprate APID for space packets. If this function is called, the APID is correct.
|
||||||
pdu = packet[SPACE_PACKET_HEADER_SIZE:]
|
pdu = packet[SPACE_PACKET_HEADER_SIZE:]
|
||||||
pdu_base = PduFactory.from_raw(pdu)
|
generic_pdu = PduFactory.from_raw(pdu)
|
||||||
if pdu_base.pdu_type == PduType.FILE_DATA:
|
assert generic_pdu is not None
|
||||||
|
if generic_pdu.pdu_type == PduType.FILE_DATA:
|
||||||
_LOGGER.info("Received File Data PDU")
|
_LOGGER.info("Received File Data PDU")
|
||||||
else:
|
else:
|
||||||
directive_type = DirectiveType(pdu_base.directive_type)
|
directive_type = PduFactory.pdu_directive_type(pdu)
|
||||||
_LOGGER.info(f"Received File Directive PDU with type {directive_type!r}")
|
_LOGGER.info(f"Received File Directive PDU with type {directive_type!r}")
|
||||||
self.handler.insert_pdu_packet(pdu_base)
|
self.handler.insert_pdu_packet(generic_pdu)
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
|
from datetime import timedelta
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from spacepackets.cfdp import ConditionCode
|
from spacepackets.cfdp import ConditionCode
|
||||||
|
from spacepackets.util import UnsignedByteField
|
||||||
from tmtccmd.cfdp import CfdpUserBase, TransactionId
|
from tmtccmd.cfdp import CfdpUserBase, TransactionId
|
||||||
|
from tmtccmd.cfdp.mib import CheckTimerProvider, Countdown, EntityType
|
||||||
from tmtccmd.cfdp.user import (
|
from tmtccmd.cfdp.user import (
|
||||||
TransactionFinishedParams,
|
TransactionFinishedParams,
|
||||||
MetadataRecvParams,
|
MetadataRecvParams,
|
||||||
@ -11,6 +14,16 @@ from tmtccmd.cfdp.user import (
|
|||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class EiveCheckTimerProvider(CheckTimerProvider):
|
||||||
|
def provide_check_timer(
|
||||||
|
self,
|
||||||
|
local_entity_id: UnsignedByteField,
|
||||||
|
remote_entity_id: UnsignedByteField,
|
||||||
|
entity_type: EntityType,
|
||||||
|
) -> Countdown:
|
||||||
|
return Countdown(timedelta(seconds=5.0))
|
||||||
|
|
||||||
|
|
||||||
class EiveCfdpUser(CfdpUserBase):
|
class EiveCfdpUser(CfdpUserBase):
|
||||||
def transaction_indication(self, transaction_id: TransactionId):
|
def transaction_indication(self, transaction_id: TransactionId):
|
||||||
_LOGGER.info(f"CFDP User: Start of File {transaction_id}")
|
_LOGGER.info(f"CFDP User: Start of File {transaction_id}")
|
||||||
|
@ -312,4 +312,5 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path
|
|||||||
14313;0x37e9;DUMP_HK_CANCELLED;LOW;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
|
14313;0x37e9;DUMP_HK_CANCELLED;LOW;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
|
||||||
14314;0x37ea;DUMP_CFDP_CANCELLED;LOW;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
|
14314;0x37ea;DUMP_CFDP_CANCELLED;LOW;P1: Number of dumped packets. P2: Total dumped bytes.;mission/persistentTmStoreDefs.h
|
||||||
14500;0x38a4;TEMPERATURE_ALL_ONES_START;MEDIUM;Detected invalid values, starting invalid message counting;mission/acs/SusHandler.h
|
14500;0x38a4;TEMPERATURE_ALL_ONES_START;MEDIUM;Detected invalid values, starting invalid message counting;mission/acs/SusHandler.h
|
||||||
14501;0x38a5;TEMPERATURE_ALL_ONES_RECOVERY;INFO;Detected valid values again, resetting invalid message counter. P1: Invalid message counter.;mission/acs/SusHandler.h
|
14501;0x38a5;TEMPERATURE_ALL_ONES_RECOVERY;INFO;Detected valid values for a prolonged time again, resetting all counters. P1: Number of periods with invalid messages. P2: Maximum invalid message counter.;mission/acs/SusHandler.h
|
||||||
|
14600;0x3908;FAULT_HANDLER_TRIGGERED;LOW;P1: CFDP fault handler code. P2: CFDP condition code.;mission/cfdp/defs.h
|
||||||
|
|
@ -158,6 +158,7 @@
|
|||||||
0x73000102;CFDP_TM_FUNNEL
|
0x73000102;CFDP_TM_FUNNEL
|
||||||
0x73000205;CFDP_HANDLER
|
0x73000205;CFDP_HANDLER
|
||||||
0x73000206;CFDP_DISTRIBUTOR
|
0x73000206;CFDP_DISTRIBUTOR
|
||||||
|
0x73000207;CFDP_FAULT_HANDLER
|
||||||
0x73010000;EIVE_SYSTEM
|
0x73010000;EIVE_SYSTEM
|
||||||
0x73010001;ACS_SUBSYSTEM
|
0x73010001;ACS_SUBSYSTEM
|
||||||
0x73010002;PL_SUBSYSTEM
|
0x73010002;PL_SUBSYSTEM
|
||||||
|
|
@ -61,3 +61,4 @@
|
|||||||
143;PERSISTENT_TM_STORE
|
143;PERSISTENT_TM_STORE
|
||||||
144;SYRLINKS_COM
|
144;SYRLINKS_COM
|
||||||
145;SUS_HANDLER
|
145;SUS_HANDLER
|
||||||
|
146;CFDP_APP
|
||||||
|
|
@ -11,8 +11,8 @@ import struct
|
|||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
from spacepackets.ecss import PusTelecommand
|
from spacepackets.ecss import PusTelecommand
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
|
from tmtccmd.pus.s8_fsfw_action import create_action_cmd
|
||||||
from tmtccmd.util import ObjectIdU32, ObjectIdBase
|
from tmtccmd.util import ObjectIdU32, ObjectIdBase
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,8 +12,8 @@ from eive_tmtc.tmtc.payload.scex import pack_scex_cmds
|
|||||||
from eive_tmtc.tmtc.tcs.subsystem import pack_tcs_sys_commands
|
from eive_tmtc.tmtc.tcs.subsystem import pack_tcs_sys_commands
|
||||||
from tmtccmd import DefaultProcedureInfo, TcHandlerBase
|
from tmtccmd import DefaultProcedureInfo, TcHandlerBase
|
||||||
from tmtccmd.config import CoreServiceList
|
from tmtccmd.config import CoreServiceList
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from tmtccmd.tc.decorator import (
|
from tmtccmd.tmtc.decorator import (
|
||||||
route_to_registered_service_handlers,
|
route_to_registered_service_handlers,
|
||||||
ServiceProviderParams,
|
ServiceProviderParams,
|
||||||
)
|
)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import Mode
|
from tmtccmd.pus.s200_fsfw_mode import Mode
|
||||||
from tmtccmd.util import ObjectIdU32, ObjectIdBase
|
from tmtccmd.util import ObjectIdU32, ObjectIdBase
|
||||||
|
|
||||||
from eive_tmtc.tmtc.common import pack_mode_cmd_with_info
|
from eive_tmtc.tmtc.common import pack_mode_cmd_with_info
|
||||||
|
@ -10,7 +10,7 @@ from spacepackets.ecss import PusTelecommand
|
|||||||
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
|
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
|
||||||
from tmtccmd.config.tmtc import tmtc_definitions_provider
|
from tmtccmd.config.tmtc import tmtc_definitions_provider
|
||||||
|
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from tmtccmd.pus.s11_tc_sched import (
|
from tmtccmd.pus.s11_tc_sched import (
|
||||||
create_time_tagged_cmd,
|
create_time_tagged_cmd,
|
||||||
create_enable_tc_sched_cmd,
|
create_enable_tc_sched_cmd,
|
||||||
@ -50,7 +50,7 @@ from eive_tmtc.tmtc.acs.gyros import (
|
|||||||
L3gGyroSetId as L3gGyroSetIds_1_3,
|
L3gGyroSetId as L3gGyroSetIds_1_3,
|
||||||
)
|
)
|
||||||
from eive_tmtc.tmtc.acs.gps import SetId as GpsSetIds
|
from eive_tmtc.tmtc.acs.gps import SetId as GpsSetIds
|
||||||
from tmtccmd.tc.pus_3_fsfw_hk import (
|
from tmtccmd.pus.tc.s3_fsfw_hk import (
|
||||||
make_sid,
|
make_sid,
|
||||||
disable_periodic_hk_command,
|
disable_periodic_hk_command,
|
||||||
create_enable_periodic_hk_command_with_interval,
|
create_enable_periodic_hk_command_with_interval,
|
||||||
|
@ -12,7 +12,7 @@ from tmtccmd.cfdp.defs import CfdpRequestType
|
|||||||
from tmtccmd.cfdp.handler import CfdpInCcsdsHandler
|
from tmtccmd.cfdp.handler import CfdpInCcsdsHandler
|
||||||
from tmtccmd.logging import get_current_time_string
|
from tmtccmd.logging import get_current_time_string
|
||||||
from tmtccmd.logging.pus import RawTmtcTimedLogWrapper
|
from tmtccmd.logging.pus import RawTmtcTimedLogWrapper
|
||||||
from tmtccmd.tc import (
|
from tmtccmd.tmtc import (
|
||||||
DefaultPusQueueHelper,
|
DefaultPusQueueHelper,
|
||||||
QueueWrapper,
|
QueueWrapper,
|
||||||
FeedWrapper,
|
FeedWrapper,
|
||||||
|
@ -16,9 +16,9 @@ from eive_tmtc.pus_tm.defs import PrintWrapper
|
|||||||
from eive_tmtc.tmtc.core import handle_core_ctrl_action_replies
|
from eive_tmtc.tmtc.core import handle_core_ctrl_action_replies
|
||||||
from eive_tmtc.tmtc.payload.ploc_mpsoc import handle_mpsoc_data_reply
|
from eive_tmtc.tmtc.payload.ploc_mpsoc import handle_mpsoc_data_reply
|
||||||
from eive_tmtc.tmtc.payload.ploc_supervisor import SupvActionId
|
from eive_tmtc.tmtc.payload.ploc_supervisor import SupvActionId
|
||||||
from eive_tmtc.tmtc.acs.star_tracker import StarTrackerActionId
|
from eive_tmtc.tmtc.acs.star_tracker import handle_star_tracker_action_replies
|
||||||
from eive_tmtc.tmtc.power.tm import handle_get_param_data_reply
|
from eive_tmtc.tmtc.power.tm import handle_get_param_data_reply
|
||||||
from tmtccmd.tm import Service8FsfwTm
|
from tmtccmd.pus.s8_fsfw_action import Service8FsfwTm
|
||||||
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
||||||
from spacepackets.ccsds.time import CdsShortTimestamp
|
from spacepackets.ccsds.time import CdsShortTimestamp
|
||||||
from tmtccmd.util import ObjectIdDictT
|
from tmtccmd.util import ObjectIdDictT
|
||||||
@ -52,7 +52,7 @@ def handle_action_reply(
|
|||||||
elif object_id.as_bytes == CORE_CONTROLLER_ID:
|
elif object_id.as_bytes == CORE_CONTROLLER_ID:
|
||||||
return handle_core_ctrl_action_replies(action_id, pw, custom_data)
|
return handle_core_ctrl_action_replies(action_id, pw, custom_data)
|
||||||
elif object_id.as_bytes == STAR_TRACKER_ID:
|
elif object_id.as_bytes == STAR_TRACKER_ID:
|
||||||
return handle_startracker_replies(action_id, pw, custom_data)
|
return handle_star_tracker_action_replies(action_id, pw, custom_data)
|
||||||
elif object_id.as_bytes in [
|
elif object_id.as_bytes in [
|
||||||
ACU_HANDLER_ID,
|
ACU_HANDLER_ID,
|
||||||
PDU_1_HANDLER_ID,
|
PDU_1_HANDLER_ID,
|
||||||
@ -89,20 +89,3 @@ def handle_supervisor_replies(action_id: int, pw: PrintWrapper, custom_data: byt
|
|||||||
content_list = [struct.unpack("!H", custom_data[:2])[0]]
|
content_list = [struct.unpack("!H", custom_data[:2])[0]]
|
||||||
pw.dlog(f"{header_list}")
|
pw.dlog(f"{header_list}")
|
||||||
pw.dlog(f"{content_list}")
|
pw.dlog(f"{content_list}")
|
||||||
|
|
||||||
|
|
||||||
def handle_startracker_replies(
|
|
||||||
action_id: int, pw: PrintWrapper, custom_data: bytearray
|
|
||||||
):
|
|
||||||
if action_id == StarTrackerActionId.CHECKSUM:
|
|
||||||
if len(custom_data) != 5:
|
|
||||||
_LOGGER.warning(
|
|
||||||
"Star tracker reply has invalid length {0}".format(len(custom_data))
|
|
||||||
)
|
|
||||||
return
|
|
||||||
header_list = ["Checksum", "Checksum valid"]
|
|
||||||
print(custom_data[4])
|
|
||||||
checksum_valid_flag = custom_data[4] >> 8
|
|
||||||
content_list = ["0x" + custom_data[:4].hex(), checksum_valid_flag]
|
|
||||||
pw.dlog(f"{header_list}")
|
|
||||||
pw.dlog(f"{content_list}")
|
|
||||||
|
@ -8,10 +8,10 @@ from eive_tmtc.pus_tm.defs import PrintWrapper
|
|||||||
from eive_tmtc.pus_tm.verification_handler import generic_retval_printout
|
from eive_tmtc.pus_tm.verification_handler import generic_retval_printout
|
||||||
from eive_tmtc.tmtc.acs.subsystem import AcsMode
|
from eive_tmtc.tmtc.acs.subsystem import AcsMode
|
||||||
from eive_tmtc.tmtc.core import SdState, SdCardSelect
|
from eive_tmtc.tmtc.core import SdState, SdCardSelect
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import Mode
|
from tmtccmd.pus.s200_fsfw_mode import Mode
|
||||||
from tmtccmd.tc.pus_201_fsfw_health import FsfwHealth
|
from tmtccmd.pus.s201_fsfw_health import FsfwHealth
|
||||||
|
|
||||||
from tmtccmd.tm import Service5Tm
|
from tmtccmd.pus.s5_fsfw_event import Service5Tm
|
||||||
from tmtccmd.fsfw import EventInfo
|
from tmtccmd.fsfw import EventInfo
|
||||||
from spacepackets.ccsds.time import CdsShortTimestamp
|
from spacepackets.ccsds.time import CdsShortTimestamp
|
||||||
|
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
"""HK Handling for EIVE OBSW"""
|
"""HK Handling for EIVE OBSW"""
|
||||||
|
import dataclasses
|
||||||
import logging
|
import logging
|
||||||
|
from typing import List
|
||||||
|
|
||||||
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
|
||||||
@ -15,7 +17,7 @@ from eive_tmtc.tmtc.com.syrlinks_handler import handle_syrlinks_hk_data
|
|||||||
from eive_tmtc.tmtc.tcs import handle_thermal_controller_hk_data
|
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.pus.tm.s3_fsfw_hk import (
|
||||||
Service3Base,
|
Service3Base,
|
||||||
HkContentType,
|
HkContentType,
|
||||||
Service3FsfwTm,
|
Service3FsfwTm,
|
||||||
@ -46,8 +48,18 @@ _LOGGER = logging.getLogger(__name__)
|
|||||||
FORWARD_SENSOR_TEMPS = False
|
FORWARD_SENSOR_TEMPS = False
|
||||||
|
|
||||||
|
|
||||||
|
@dataclasses.dataclass
|
||||||
|
class HkFilter:
|
||||||
|
object_ids: List[ObjectIdU32]
|
||||||
|
set_ids: List[int]
|
||||||
|
|
||||||
|
|
||||||
def handle_hk_packet(
|
def handle_hk_packet(
|
||||||
raw_tm: bytes, obj_id_dict: ObjectIdDictT, printer: FsfwTmTcPrinter, hk_level: int
|
raw_tm: bytes,
|
||||||
|
obj_id_dict: ObjectIdDictT,
|
||||||
|
printer: FsfwTmTcPrinter,
|
||||||
|
hk_filter: HkFilter,
|
||||||
|
hk_level: int,
|
||||||
):
|
):
|
||||||
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 = obj_id_dict.get(tm_packet.object_id.as_bytes)
|
||||||
@ -56,17 +68,21 @@ def handle_hk_packet(
|
|||||||
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:]
|
||||||
|
|
||||||
printer.generic_hk_tm_print(
|
if named_obj_id in hk_filter.object_ids:
|
||||||
content_type=HkContentType.HK,
|
handle_regular_hk_print(
|
||||||
object_id=named_obj_id,
|
printer=printer,
|
||||||
set_id=tm_packet.set_id,
|
object_id=named_obj_id,
|
||||||
hk_data=hk_data,
|
hk_packet=tm_packet,
|
||||||
)
|
tm=tm_packet.pus_tm,
|
||||||
|
hk_data=hk_data,
|
||||||
|
)
|
||||||
|
return
|
||||||
try:
|
try:
|
||||||
if hk_level == 1:
|
if hk_level >= 1:
|
||||||
pass
|
printer.generic_hk_tm_print(
|
||||||
elif hk_level > 1:
|
HkContentType.HK, named_obj_id, tm_packet.set_id, hk_data
|
||||||
|
)
|
||||||
|
if hk_level >= 1:
|
||||||
handle_regular_hk_print(
|
handle_regular_hk_print(
|
||||||
printer=printer,
|
printer=printer,
|
||||||
object_id=named_obj_id,
|
object_id=named_obj_id,
|
||||||
|
@ -2,24 +2,25 @@
|
|||||||
"""
|
"""
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from eive_tmtc.config.object_ids import get_object_ids
|
from spacepackets.ccsds.time import CdsShortTimestamp
|
||||||
from spacepackets.ecss import PusTelemetry
|
from spacepackets.ecss import PusTelemetry
|
||||||
from spacepackets.ecss.pus_17_test import Service17Tm
|
from spacepackets.ecss.pus_17_test import Service17Tm
|
||||||
from spacepackets.util import PrintFormats
|
from spacepackets.util import PrintFormats
|
||||||
from spacepackets.ccsds.time import CdsShortTimestamp
|
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
||||||
from tmtccmd.logging.pus import RawTmtcTimedLogWrapper
|
from tmtccmd.logging.pus import RawTmtcTimedLogWrapper
|
||||||
from tmtccmd.pus import VerificationWrapper
|
from tmtccmd.pus import VerificationWrapper
|
||||||
from tmtccmd.tm import Service20FsfwTm, Service200FsfwTm
|
from tmtccmd.pus.s20_fsfw_param import Service20FsfwTm, Service20ParamDumpWrapper
|
||||||
from tmtccmd.tm.pus_20_fsfw_param import 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.tm.pus_200_fsfw_mode import Subservice as ModeSubservice
|
from tmtccmd.pus.s200_fsfw_mode import Service200FsfwTm
|
||||||
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
from tmtccmd.pus.s200_fsfw_mode import Subservice as ModeSubservice
|
||||||
from .defs import PrintWrapper
|
|
||||||
|
from eive_tmtc.config.object_ids import get_object_ids
|
||||||
|
|
||||||
from .event_handler import handle_event_packet
|
|
||||||
from .verification_handler import handle_service_1_fsfw_packet, generic_retval_printout
|
|
||||||
from .hk_handler import handle_hk_packet
|
|
||||||
from .action_reply_handler import handle_action_reply
|
from .action_reply_handler import handle_action_reply
|
||||||
|
from .defs import PrintWrapper
|
||||||
|
from .event_handler import handle_event_packet
|
||||||
|
from .hk_handler import HkFilter, handle_hk_packet
|
||||||
|
from .verification_handler import generic_retval_printout, handle_service_1_fsfw_packet
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -30,6 +31,7 @@ def pus_factory_hook( # noqa C901 : Complexity okay here
|
|||||||
printer: FsfwTmTcPrinter,
|
printer: FsfwTmTcPrinter,
|
||||||
raw_logger: RawTmtcTimedLogWrapper,
|
raw_logger: RawTmtcTimedLogWrapper,
|
||||||
hk_level: int,
|
hk_level: int,
|
||||||
|
hk_filter: HkFilter,
|
||||||
):
|
):
|
||||||
if len(packet) < 8:
|
if len(packet) < 8:
|
||||||
_LOGGER.warning("Detected packet shorter than 8 bytes!")
|
_LOGGER.warning("Detected packet shorter than 8 bytes!")
|
||||||
@ -50,7 +52,11 @@ def pus_factory_hook( # noqa C901 : Complexity okay here
|
|||||||
handle_service_1_fsfw_packet(wrapper=verif_wrapper, raw_tm=packet)
|
handle_service_1_fsfw_packet(wrapper=verif_wrapper, raw_tm=packet)
|
||||||
elif service == 3:
|
elif service == 3:
|
||||||
handle_hk_packet(
|
handle_hk_packet(
|
||||||
printer=printer, raw_tm=packet, obj_id_dict=obj_id_dict, hk_level=hk_level
|
printer=printer,
|
||||||
|
raw_tm=packet,
|
||||||
|
obj_id_dict=obj_id_dict,
|
||||||
|
hk_level=hk_level,
|
||||||
|
hk_filter=hk_filter,
|
||||||
)
|
)
|
||||||
elif service == 5:
|
elif service == 5:
|
||||||
handle_event_packet(raw_tm=packet, pw=pw)
|
handle_event_packet(raw_tm=packet, pw=pw)
|
||||||
|
@ -4,7 +4,7 @@ from typing import List, Optional
|
|||||||
from spacepackets.ccsds import CdsShortTimestamp
|
from spacepackets.ccsds import CdsShortTimestamp
|
||||||
from spacepackets.ecss.pus_1_verification import UnpackParams, Service1Tm
|
from spacepackets.ecss.pus_1_verification import UnpackParams, Service1Tm
|
||||||
from tmtccmd.pus import VerificationWrapper
|
from tmtccmd.pus import VerificationWrapper
|
||||||
from tmtccmd.tm.pus_1_verification import Service1FsfwWrapper
|
from tmtccmd.pus.s1_verification import Service1FsfwWrapper
|
||||||
from eive_tmtc.config.retvals import get_retval_dict
|
from eive_tmtc.config.retvals import get_retval_dict
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
@ -6,9 +6,9 @@ from tmtccmd.config.tmtc import (
|
|||||||
TmtcDefinitionWrapper,
|
TmtcDefinitionWrapper,
|
||||||
OpCodeEntry,
|
OpCodeEntry,
|
||||||
)
|
)
|
||||||
from tmtccmd.tc import service_provider, DefaultPusQueueHelper
|
from tmtccmd.tmtc import service_provider, DefaultPusQueueHelper
|
||||||
from tmtccmd.tc.decorator import ServiceProviderParams
|
from tmtccmd.tmtc.decorator import ServiceProviderParams
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import Mode
|
from tmtccmd.pus.s200_fsfw_mode import Mode
|
||||||
from eive_tmtc.config.object_ids import ACS_BOARD_ASS_ID
|
from eive_tmtc.config.object_ids import ACS_BOARD_ASS_ID
|
||||||
|
|
||||||
from eive_tmtc.tmtc.common import pack_mode_cmd_with_info
|
from eive_tmtc.tmtc.common import pack_mode_cmd_with_info
|
||||||
|
@ -1,49 +1,47 @@
|
|||||||
import datetime
|
import datetime
|
||||||
import enum
|
import enum
|
||||||
import logging
|
import logging
|
||||||
|
import math
|
||||||
import socket
|
import socket
|
||||||
import struct
|
import struct
|
||||||
import math
|
|
||||||
from socket import AF_INET
|
from socket import AF_INET
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
|
||||||
|
from tmtccmd.config.tmtc import (
|
||||||
|
OpCodeEntry,
|
||||||
|
TmtcDefinitionWrapper,
|
||||||
|
tmtc_definitions_provider,
|
||||||
|
)
|
||||||
|
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
||||||
|
from tmtccmd.pus.s8_fsfw_action import create_action_cmd
|
||||||
|
from tmtccmd.pus.s20_fsfw_param import create_load_param_cmd
|
||||||
|
from tmtccmd.pus.s20_fsfw_param_defs import (
|
||||||
|
create_matrix_double_parameter,
|
||||||
|
create_matrix_float_parameter,
|
||||||
|
create_scalar_double_parameter,
|
||||||
|
create_scalar_float_parameter,
|
||||||
|
create_scalar_i32_parameter,
|
||||||
|
create_scalar_u8_parameter,
|
||||||
|
create_scalar_u16_parameter,
|
||||||
|
create_vector_double_parameter,
|
||||||
|
create_vector_float_parameter,
|
||||||
|
)
|
||||||
|
from tmtccmd.pus.s200_fsfw_mode import Mode, pack_mode_command
|
||||||
|
from tmtccmd.pus.tc.s3_fsfw_hk import (
|
||||||
|
create_request_one_diag_command,
|
||||||
|
disable_periodic_hk_command,
|
||||||
|
enable_periodic_hk_command_with_interval,
|
||||||
|
generate_one_hk_command,
|
||||||
|
make_sid,
|
||||||
|
)
|
||||||
|
from tmtccmd.tmtc import service_provider
|
||||||
|
from tmtccmd.tmtc.decorator import ServiceProviderParams
|
||||||
|
from tmtccmd.tmtc.queue import DefaultPusQueueHelper
|
||||||
|
|
||||||
from eive_tmtc.config.definitions import CustomServiceList
|
from eive_tmtc.config.definitions import CustomServiceList
|
||||||
from eive_tmtc.config.object_ids import ACS_CONTROLLER
|
from eive_tmtc.config.object_ids import ACS_CONTROLLER
|
||||||
from eive_tmtc.pus_tm.defs import PrintWrapper
|
from eive_tmtc.pus_tm.defs import PrintWrapper
|
||||||
from eive_tmtc.tmtc.acs.defs import AcsMode, SafeSubmode
|
from eive_tmtc.tmtc.acs.defs import AcsMode, SafeSubmode
|
||||||
from tmtccmd.config.tmtc import (
|
|
||||||
tmtc_definitions_provider,
|
|
||||||
TmtcDefinitionWrapper,
|
|
||||||
OpCodeEntry,
|
|
||||||
)
|
|
||||||
from tmtccmd.tc import service_provider
|
|
||||||
from tmtccmd.tc.queue import DefaultPusQueueHelper
|
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import Mode, pack_mode_command
|
|
||||||
from tmtccmd.tc.decorator import ServiceProviderParams
|
|
||||||
from tmtccmd.tc.pus_3_fsfw_hk import (
|
|
||||||
generate_one_hk_command,
|
|
||||||
make_sid,
|
|
||||||
enable_periodic_hk_command_with_interval,
|
|
||||||
disable_periodic_hk_command,
|
|
||||||
create_request_one_diag_command,
|
|
||||||
)
|
|
||||||
from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
|
|
||||||
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
|
||||||
|
|
||||||
from tmtccmd.tc.pus_20_fsfw_param import create_load_param_cmd
|
|
||||||
|
|
||||||
from tmtccmd.pus.s20_fsfw_param_defs import (
|
|
||||||
create_scalar_u8_parameter,
|
|
||||||
create_scalar_u16_parameter,
|
|
||||||
create_scalar_i32_parameter,
|
|
||||||
create_scalar_float_parameter,
|
|
||||||
create_scalar_double_parameter,
|
|
||||||
create_vector_float_parameter,
|
|
||||||
create_vector_double_parameter,
|
|
||||||
create_matrix_float_parameter,
|
|
||||||
create_matrix_double_parameter,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -7,9 +7,9 @@ from eive_tmtc.config.definitions import CustomServiceList
|
|||||||
from eive_tmtc.pus_tm.defs import PrintWrapper
|
from eive_tmtc.pus_tm.defs import PrintWrapper
|
||||||
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
|
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
|
||||||
from tmtccmd.config.tmtc import tmtc_definitions_provider
|
from tmtccmd.config.tmtc import tmtc_definitions_provider
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import create_mode_command, Mode
|
from tmtccmd.pus.s200_fsfw_mode import create_mode_command, Mode
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from tmtccmd.tc.pus_3_fsfw_hk import (
|
from tmtccmd.pus.tc.s3_fsfw_hk import (
|
||||||
make_sid,
|
make_sid,
|
||||||
create_request_one_hk_command,
|
create_request_one_hk_command,
|
||||||
create_enable_periodic_hk_command_with_interval_with_diag,
|
create_enable_periodic_hk_command_with_interval_with_diag,
|
||||||
|
@ -3,13 +3,13 @@ import logging
|
|||||||
import struct
|
import struct
|
||||||
|
|
||||||
from spacepackets.ecss import PusTelecommand
|
from spacepackets.ecss import PusTelecommand
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from tmtccmd.tc.pus_201_fsfw_health import pack_set_health_cmd_data, FsfwHealth
|
from tmtccmd.pus.s201_fsfw_health import pack_set_health_cmd_data, FsfwHealth
|
||||||
from tmtccmd.pus.s201_fsfw_health import Subservice
|
from tmtccmd.pus.s201_fsfw_health import Subservice
|
||||||
|
|
||||||
import eive_tmtc.config.object_ids as obj_ids
|
import eive_tmtc.config.object_ids as obj_ids
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import create_mode_command, Mode
|
from tmtccmd.pus.s200_fsfw_mode import create_mode_command, Mode
|
||||||
from tmtccmd.tc.pus_3_fsfw_hk import create_request_one_hk_command, make_sid
|
from tmtccmd.pus.tc.s3_fsfw_hk import create_request_one_hk_command, make_sid
|
||||||
from tmtccmd.config.tmtc import (
|
from tmtccmd.config.tmtc import (
|
||||||
tmtc_definitions_provider,
|
tmtc_definitions_provider,
|
||||||
OpCodeEntry,
|
OpCodeEntry,
|
||||||
|
@ -18,8 +18,8 @@ from tmtccmd.config.tmtc import (
|
|||||||
OpCodeEntry,
|
OpCodeEntry,
|
||||||
TmtcDefinitionWrapper,
|
TmtcDefinitionWrapper,
|
||||||
)
|
)
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from tmtccmd.tc.pus_3_fsfw_hk import (
|
from tmtccmd.pus.tc.s3_fsfw_hk import (
|
||||||
make_sid,
|
make_sid,
|
||||||
generate_one_diag_command,
|
generate_one_diag_command,
|
||||||
generate_one_hk_command,
|
generate_one_hk_command,
|
||||||
@ -27,7 +27,7 @@ from tmtccmd.tc.pus_3_fsfw_hk import (
|
|||||||
create_enable_periodic_hk_command_with_interval_with_diag,
|
create_enable_periodic_hk_command_with_interval_with_diag,
|
||||||
create_disable_periodic_hk_command_with_diag,
|
create_disable_periodic_hk_command_with_diag,
|
||||||
)
|
)
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import pack_mode_data, Mode
|
from tmtccmd.pus.s200_fsfw_mode import pack_mode_data, Mode
|
||||||
from tmtccmd.util import ObjectIdU32
|
from tmtccmd.util import ObjectIdU32
|
||||||
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
||||||
|
|
||||||
|
@ -14,8 +14,8 @@ from eive_tmtc.config.object_ids import (
|
|||||||
|
|
||||||
from eive_tmtc.pus_tm.defs import PrintWrapper
|
from eive_tmtc.pus_tm.defs import PrintWrapper
|
||||||
from tmtccmd.config.tmtc import tmtc_definitions_provider, TmtcDefinitionWrapper
|
from tmtccmd.config.tmtc import tmtc_definitions_provider, TmtcDefinitionWrapper
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import create_mode_command, Mode
|
from tmtccmd.pus.s200_fsfw_mode import create_mode_command, Mode
|
||||||
from tmtccmd.util import ObjectIdU32
|
from tmtccmd.util import ObjectIdU32
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,17 +12,17 @@ from eive_tmtc.pus_tm.defs import PrintWrapper
|
|||||||
from eive_tmtc.config.object_ids import RW1_ID, RW2_ID, RW3_ID, RW4_ID
|
from eive_tmtc.config.object_ids import RW1_ID, RW2_ID, RW3_ID, RW4_ID
|
||||||
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
|
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
|
||||||
from tmtccmd.config.tmtc import tmtc_definitions_provider
|
from tmtccmd.config.tmtc import tmtc_definitions_provider
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from tmtccmd.tc.pus_3_fsfw_hk import (
|
from tmtccmd.pus.tc.s3_fsfw_hk import (
|
||||||
generate_one_hk_command,
|
generate_one_hk_command,
|
||||||
generate_one_diag_command,
|
generate_one_diag_command,
|
||||||
make_sid,
|
make_sid,
|
||||||
enable_periodic_hk_command_with_interval,
|
enable_periodic_hk_command_with_interval,
|
||||||
disable_periodic_hk_command,
|
disable_periodic_hk_command,
|
||||||
)
|
)
|
||||||
from tmtccmd.tc.pus_8_fsfw_funccmd import create_action_cmd
|
from tmtccmd.pus.s8_fsfw_action import create_action_cmd
|
||||||
from spacepackets.ecss.tc import PusTelecommand
|
from spacepackets.ecss.tc import PusTelecommand
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import pack_mode_data, Mode, Subservice
|
from tmtccmd.pus.s200_fsfw_mode import pack_mode_data, Mode, Subservice
|
||||||
from eive_tmtc.config.definitions import CustomServiceList
|
from eive_tmtc.config.definitions import CustomServiceList
|
||||||
from tmtccmd.util import ObjectIdU32
|
from tmtccmd.util import ObjectIdU32
|
||||||
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
||||||
|
@ -16,9 +16,16 @@ from eive_tmtc.utility.input_helper import InputHelper
|
|||||||
from spacepackets.ecss.tc import PusTelecommand
|
from spacepackets.ecss.tc import PusTelecommand
|
||||||
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
|
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
|
||||||
from tmtccmd.config.tmtc import tmtc_definitions_provider
|
from tmtccmd.config.tmtc import tmtc_definitions_provider
|
||||||
from tmtccmd.tc.pus_3_fsfw_hk import create_request_one_diag_command, make_sid
|
from tmtccmd.pus.tc.s3_fsfw_hk import (
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
create_request_one_diag_command,
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import pack_mode_data, Mode
|
create_request_one_hk_command,
|
||||||
|
enable_periodic_hk_command_with_interval,
|
||||||
|
disable_periodic_hk_command,
|
||||||
|
make_sid,
|
||||||
|
)
|
||||||
|
from tmtccmd.pus.s8_fsfw_action import create_action_cmd
|
||||||
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
|
from tmtccmd.pus.s200_fsfw_mode import pack_mode_data, Mode
|
||||||
from tmtccmd.util import ObjectIdU32
|
from tmtccmd.util import ObjectIdU32
|
||||||
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
||||||
from eive_tmtc.config.object_ids import STR_ASSEMBLY, STAR_TRACKER_ID
|
from eive_tmtc.config.object_ids import STR_ASSEMBLY, STAR_TRACKER_ID
|
||||||
@ -90,6 +97,9 @@ class StarTrackerActionId(enum.IntEnum):
|
|||||||
DEBUG_CAMERA = 83
|
DEBUG_CAMERA = 83
|
||||||
FIRMWARE_UPDATE = 84
|
FIRMWARE_UPDATE = 84
|
||||||
SET_TIME_FROM_SYS_TIME = 87
|
SET_TIME_FROM_SYS_TIME = 87
|
||||||
|
ADD_SECONDARY_TM_TO_NORMAL_MODE = 95
|
||||||
|
RESET_SECONDARY_TM_SET = 96
|
||||||
|
READ_SECONDARY_TM_SET = 97
|
||||||
|
|
||||||
|
|
||||||
class OpCodes:
|
class OpCodes:
|
||||||
@ -98,19 +108,29 @@ class OpCodes:
|
|||||||
NORMAL = "nml"
|
NORMAL = "nml"
|
||||||
OFF = "off"
|
OFF = "off"
|
||||||
PING = "ping"
|
PING = "ping"
|
||||||
REQUEST_SOLUTION_SET_HK = "hk_req_sol"
|
ONE_SHOOT_HK = "one_shot_hk"
|
||||||
REQUEST_SOLUTION_SET_ACTION = "action_req_sol"
|
ENABLE_HK = "enable_hk"
|
||||||
|
DISABLE_HK = "disable_hk"
|
||||||
|
ADD_SECONDARY_TM_TO_NORMAL_MODE = "add_secondary_tm"
|
||||||
|
RESET_SECONDARY_TM_SET = "reset_secondary_tm"
|
||||||
|
READ_SECONDARY_TM_SET = "read_secondary_tm"
|
||||||
TAKE_IMAGE = "take_image"
|
TAKE_IMAGE = "take_image"
|
||||||
UPLOAD_IMAGE = "upload_image"
|
UPLOAD_IMAGE = "upload_image"
|
||||||
|
DOWNLOAD_IMAGE = "download_image"
|
||||||
SET_IMG_PROCESSOR_MODE = "set_img_proc_mode"
|
SET_IMG_PROCESSOR_MODE = "set_img_proc_mode"
|
||||||
FW_UPDATE = "fw_update"
|
FW_UPDATE = "fw_update"
|
||||||
SET_TIME_FROM_SYS_TIME = "set_time"
|
SET_TIME_FROM_SYS_TIME = "set_time"
|
||||||
|
|
||||||
|
|
||||||
class Info:
|
class Info:
|
||||||
REQUEST_SOLUTION_SET_HK = "Request Solution Set HK once"
|
ONE_SHOOT_HK = "One shoot HK Set"
|
||||||
REQUEST_SOLUTION_SET_ACTION = "Request Solution Set Action"
|
ENABLE_HK = "Enable Periodic HK"
|
||||||
UPLOAD_IMAGE = "Upload Image"
|
DISABLE_HK = "Disable Periodic HK"
|
||||||
|
ADD_SECONDARY_TM_TO_NORMAL_MODE = "Add specific Dataset to secondary TM"
|
||||||
|
RESET_SECONDARY_TM_SET = "Reset secondary TM to Temperature Set only"
|
||||||
|
READ_SECONDARY_TM_SET = "Read list of secondary TM Sets"
|
||||||
|
UPLOAD_IMAGE = "Upload Optical Image"
|
||||||
|
DOWNLOAD_IMAGE = "Download Optical Image"
|
||||||
TAKE_IMAGE = "Take Image"
|
TAKE_IMAGE = "Take Image"
|
||||||
SET_IMG_PROCESSOR_MODE = "Set Image Processor Mode"
|
SET_IMG_PROCESSOR_MODE = "Set Image Processor Mode"
|
||||||
FW_UPDATE = "Firmware Update"
|
FW_UPDATE = "Firmware Update"
|
||||||
@ -124,11 +144,24 @@ class SetId(enum.IntEnum):
|
|||||||
TEMPERATURE = 25
|
TEMPERATURE = 25
|
||||||
SOLUTION = 24
|
SOLUTION = 24
|
||||||
HISTOGRAM = 28
|
HISTOGRAM = 28
|
||||||
|
CONTRAST = 29
|
||||||
CHECKSUM = 50
|
CHECKSUM = 50
|
||||||
CAMERA = 67
|
CAMERA = 67
|
||||||
LIMITS = 68
|
LIMITS = 68
|
||||||
CENTROIDING = 72
|
CENTROIDING = 72
|
||||||
LISA = 73
|
LISA = 73
|
||||||
|
AUTO_BLOB = 89
|
||||||
|
MATCHED_CENTROIDS = 90
|
||||||
|
BLOB = 91
|
||||||
|
BLOBS = 92
|
||||||
|
CENTROID = 93
|
||||||
|
CENTROIDS = 94
|
||||||
|
|
||||||
|
|
||||||
|
class DataSetRequest(enum.IntEnum):
|
||||||
|
ONESHOT = 0
|
||||||
|
ENABLE = 1
|
||||||
|
DISABLE = 2
|
||||||
|
|
||||||
|
|
||||||
class FileDefs:
|
class FileDefs:
|
||||||
@ -227,13 +260,15 @@ def pack_star_tracker_commands( # noqa C901
|
|||||||
q.add_log_cmd("Star tracker: Mode Off")
|
q.add_log_cmd("Star tracker: Mode Off")
|
||||||
data = pack_mode_data(prompt_object_id_mode_cmd(), Mode.OFF, 0)
|
data = pack_mode_data(prompt_object_id_mode_cmd(), Mode.OFF, 0)
|
||||||
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
|
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
|
||||||
if op_code == OpCodes.REQUEST_SOLUTION_SET_HK:
|
if op_code == OpCodes.ONE_SHOOT_HK:
|
||||||
q.add_log_cmd(Info.REQUEST_SOLUTION_SET_HK)
|
q.add_log_cmd(Info.ONE_SHOOT_HK)
|
||||||
q.add_pus_tc(create_request_one_diag_command(make_sid(obyt, SetId.SOLUTION)))
|
request_dataset(q, DataSetRequest.ONESHOT)
|
||||||
if op_code == OpCodes.REQUEST_SOLUTION_SET_ACTION:
|
if op_code == OpCodes.ENABLE_HK:
|
||||||
q.add_log_cmd("Star tracker: Request solution")
|
q.add_log_cmd(Info.ENABLE_HK)
|
||||||
data = obyt + struct.pack("!I", StarTrackerActionId.REQ_SOLUTION)
|
request_dataset(q, DataSetRequest.ENABLE)
|
||||||
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
|
if op_code == OpCodes.DISABLE_HK:
|
||||||
|
q.add_log_cmd(Info.DISABLE_HK)
|
||||||
|
request_dataset(q, DataSetRequest.DISABLE)
|
||||||
if op_code == "4":
|
if op_code == "4":
|
||||||
q.add_log_cmd("Star tracker: Mode Raw")
|
q.add_log_cmd("Star tracker: Mode Raw")
|
||||||
data = pack_mode_data(obyt, Mode.RAW, 0)
|
data = pack_mode_data(obyt, Mode.RAW, 0)
|
||||||
@ -290,8 +325,8 @@ def pack_star_tracker_commands( # noqa C901
|
|||||||
+ bytearray(image, "utf-8")
|
+ bytearray(image, "utf-8")
|
||||||
)
|
)
|
||||||
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
|
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
|
||||||
if op_code == "16":
|
if op_code == OpCodes.DOWNLOAD_IMAGE:
|
||||||
q.add_log_cmd("Star tracker: Download image")
|
q.add_log_cmd(f"STR: {Info.DOWNLOAD_IMAGE}")
|
||||||
path = input("Specify storage location (default - /mnt/sd0/startracker): ")
|
path = input("Specify storage location (default - /mnt/sd0/startracker): ")
|
||||||
if not path:
|
if not path:
|
||||||
path = FileDefs.download_path
|
path = FileDefs.download_path
|
||||||
@ -613,6 +648,79 @@ def pack_star_tracker_commands( # noqa C901
|
|||||||
+ firmware.encode()
|
+ firmware.encode()
|
||||||
)
|
)
|
||||||
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
|
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
|
||||||
|
if op_code == OpCodes.ADD_SECONDARY_TM_TO_NORMAL_MODE:
|
||||||
|
q.add_log_cmd(Info.ADD_SECONDARY_TM_TO_NORMAL_MODE)
|
||||||
|
for val in SetId:
|
||||||
|
print("{:<2}: {:<20}".format(val, val.name))
|
||||||
|
set_id = int(input("Specify the dataset \n" ""))
|
||||||
|
q.add_pus_tc(
|
||||||
|
create_action_cmd(
|
||||||
|
STAR_TRACKER_ID,
|
||||||
|
StarTrackerActionId.ADD_SECONDARY_TM_TO_NORMAL_MODE,
|
||||||
|
struct.pack("!I", set_id),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
if op_code == OpCodes.RESET_SECONDARY_TM_SET:
|
||||||
|
q.add_log_cmd(Info.RESET_SECONDARY_TM_SET)
|
||||||
|
q.add_pus_tc(
|
||||||
|
create_action_cmd(
|
||||||
|
STAR_TRACKER_ID,
|
||||||
|
StarTrackerActionId.RESET_SECONDARY_TM_SET,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
if op_code == OpCodes.READ_SECONDARY_TM_SET:
|
||||||
|
q.add_log_cmd(Info.READ_SECONDARY_TM_SET)
|
||||||
|
q.add_pus_tc(
|
||||||
|
create_action_cmd(
|
||||||
|
STAR_TRACKER_ID, StarTrackerActionId.READ_SECONDARY_TM_SET
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def request_dataset(q: DefaultPusQueueHelper, req_type: DataSetRequest):
|
||||||
|
for val in SetId:
|
||||||
|
print("{:<2}: {:<20}".format(val, val.name))
|
||||||
|
set_id = int(input("Specify the dataset \n" ""))
|
||||||
|
if set_id in [SetId.SOLUTION, SetId.TEMPERATURE]:
|
||||||
|
is_diag = True
|
||||||
|
else:
|
||||||
|
is_diag = False
|
||||||
|
match req_type:
|
||||||
|
case DataSetRequest.ONESHOT:
|
||||||
|
if is_diag:
|
||||||
|
q.add_pus_tc(
|
||||||
|
create_request_one_diag_command(make_sid(STAR_TRACKER_ID, set_id))
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
q.add_pus_tc(
|
||||||
|
create_request_one_hk_command(make_sid(STAR_TRACKER_ID, set_id))
|
||||||
|
)
|
||||||
|
case DataSetRequest.ENABLE:
|
||||||
|
interval = float(
|
||||||
|
input("Please specify interval in floating point seconds: ")
|
||||||
|
)
|
||||||
|
|
||||||
|
if is_diag:
|
||||||
|
cmd_tuple = enable_periodic_hk_command_with_interval(
|
||||||
|
True, make_sid(STAR_TRACKER_ID, set_id), interval
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
cmd_tuple = enable_periodic_hk_command_with_interval(
|
||||||
|
False, make_sid(STAR_TRACKER_ID, set_id), interval
|
||||||
|
)
|
||||||
|
q.add_pus_tc(cmd_tuple[0])
|
||||||
|
q.add_pus_tc(cmd_tuple[1])
|
||||||
|
case DataSetRequest.DISABLE:
|
||||||
|
if is_diag:
|
||||||
|
q.add_pus_tc(
|
||||||
|
disable_periodic_hk_command(True, make_sid(STAR_TRACKER_ID, set_id))
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
q.add_pus_tc(
|
||||||
|
disable_periodic_hk_command(
|
||||||
|
False, make_sid(STAR_TRACKER_ID, set_id)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def pack_read_command(object_id: bytes) -> bytearray:
|
def pack_read_command(object_id: bytes) -> bytearray:
|
||||||
@ -680,8 +788,24 @@ def handle_str_hk_data(set_id: int, hk_data: bytes, pw: PrintWrapper):
|
|||||||
pw.dlog(f"Received STR HK set with set ID {set_id}")
|
pw.dlog(f"Received STR HK set with set ID {set_id}")
|
||||||
if set_id == SetId.SOLUTION:
|
if set_id == SetId.SOLUTION:
|
||||||
handle_solution_set(hk_data, pw)
|
handle_solution_set(hk_data, pw)
|
||||||
|
elif set_id == SetId.HISTOGRAM:
|
||||||
|
handle_histogram_set(hk_data, pw)
|
||||||
elif set_id == SetId.TEMPERATURE:
|
elif set_id == SetId.TEMPERATURE:
|
||||||
handle_temperature_set(hk_data, pw)
|
handle_temperature_set(hk_data, pw)
|
||||||
|
elif set_id == SetId.AUTO_BLOB:
|
||||||
|
handle_auto_blob_set(hk_data, pw)
|
||||||
|
elif set_id == SetId.MATCHED_CENTROIDS:
|
||||||
|
handle_matched_centroids_set(hk_data, pw)
|
||||||
|
elif set_id == SetId.BLOB:
|
||||||
|
handle_blob_set(hk_data, pw)
|
||||||
|
elif set_id == SetId.BLOBS:
|
||||||
|
handle_blobs_set(hk_data, pw)
|
||||||
|
elif set_id == SetId.CENTROID:
|
||||||
|
handle_centroid_set(hk_data, pw)
|
||||||
|
elif set_id == SetId.CENTROIDS:
|
||||||
|
handle_centroids_set(hk_data, pw)
|
||||||
|
elif set_id == SetId.CONTRAST:
|
||||||
|
handle_contrast_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")
|
||||||
|
|
||||||
@ -692,11 +816,14 @@ def unpack_time_hk(hk_data: bytes, current_idx: int, pw: PrintWrapper) -> int:
|
|||||||
(ticks, unix_time) = struct.unpack(
|
(ticks, unix_time) = struct.unpack(
|
||||||
ticks_time_fmt, hk_data[current_idx : current_idx + fmt_len]
|
ticks_time_fmt, hk_data[current_idx : current_idx + fmt_len]
|
||||||
)
|
)
|
||||||
unix_as_dt = datetime.datetime.fromtimestamp(
|
try:
|
||||||
int(round(unix_time / 1e6)), tz=datetime.timezone.utc
|
unix_as_dt = datetime.datetime.fromtimestamp(
|
||||||
)
|
int(round(unix_time / 1e6)), tz=datetime.timezone.utc
|
||||||
pw.dlog(f"Ticks: {ticks} | UNIX time: {unix_time}")
|
)
|
||||||
pw.dlog(f"UNIX as datetime: {unix_as_dt}")
|
pw.dlog(f"Ticks: {ticks} | UNIX time: {unix_time}")
|
||||||
|
pw.dlog(f"UNIX as datetime: {unix_as_dt}")
|
||||||
|
except ValueError as e:
|
||||||
|
_LOGGER.exception(e)
|
||||||
current_idx += fmt_len
|
current_idx += fmt_len
|
||||||
return current_idx
|
return current_idx
|
||||||
|
|
||||||
@ -792,6 +919,234 @@ def handle_solution_set(hk_data: bytes, pw: PrintWrapper):
|
|||||||
FsfwTmTcPrinter.get_validity_buffer(hk_data[current_idx:], 23)
|
FsfwTmTcPrinter.get_validity_buffer(hk_data[current_idx:], 23)
|
||||||
|
|
||||||
|
|
||||||
|
def handle_blob_set(hk_data: bytes, pw: PrintWrapper):
|
||||||
|
pw.dlog("Received Blob Set")
|
||||||
|
if len(hk_data) < 14:
|
||||||
|
_LOGGER.warning(f"Blob dataset HK data with length {len(hk_data)} too short")
|
||||||
|
return
|
||||||
|
current_idx = unpack_time_hk(hk_data, 0, pw)
|
||||||
|
blob_count = struct.unpack("!I", hk_data[current_idx : current_idx + 4])[0]
|
||||||
|
pw.dlog(f"Blob count: {blob_count}")
|
||||||
|
FsfwTmTcPrinter.get_validity_buffer(hk_data[current_idx + 4 :], num_vars=3)
|
||||||
|
|
||||||
|
|
||||||
|
def handle_blobs_set(hk_data: bytes, pw: PrintWrapper):
|
||||||
|
pw.dlog("Received Blobs Set")
|
||||||
|
if len(hk_data) < 6 + 2 * 2 * 8:
|
||||||
|
_LOGGER.warning(f"Blobs dataset HK data with length {len(hk_data)} too short")
|
||||||
|
return
|
||||||
|
current_idx = unpack_time_hk(hk_data, 0, pw)
|
||||||
|
fmt_str = "!HHH"
|
||||||
|
inc_len = struct.calcsize(fmt_str)
|
||||||
|
count, count_used, nr_4lines_skipped = struct.unpack(
|
||||||
|
fmt_str, hk_data[current_idx : current_idx + inc_len]
|
||||||
|
)
|
||||||
|
current_idx += inc_len
|
||||||
|
pw.dlog(
|
||||||
|
f"Count {count} | Count Used {count_used} | Number of skipped 4lines {nr_4lines_skipped}"
|
||||||
|
)
|
||||||
|
fmt_coords = "!HHHHHHHH"
|
||||||
|
inc_len = struct.calcsize(fmt_coords)
|
||||||
|
x_coords = struct.unpack(fmt_coords, hk_data[current_idx : current_idx + inc_len])
|
||||||
|
current_idx += inc_len
|
||||||
|
y_coords = struct.unpack(fmt_coords, hk_data[current_idx : current_idx + inc_len])
|
||||||
|
current_idx += inc_len
|
||||||
|
pw.dlog("{:<8} {:<8}".format("X", "Y"))
|
||||||
|
for idx in range(8):
|
||||||
|
pw.dlog("{:<8} {:<8}".format(x_coords[idx], y_coords[idx]))
|
||||||
|
assert current_idx == len(hk_data) - 1
|
||||||
|
FsfwTmTcPrinter.get_validity_buffer(hk_data[current_idx:], num_vars=7)
|
||||||
|
|
||||||
|
|
||||||
|
def handle_centroid_set(hk_data: bytes, pw: PrintWrapper):
|
||||||
|
pw.dlog("Received Centroid Set")
|
||||||
|
if len(hk_data) < 14:
|
||||||
|
raise ValueError(
|
||||||
|
f"Centroid dataset HK data with length {len(hk_data)} too short"
|
||||||
|
)
|
||||||
|
current_idx = unpack_time_hk(hk_data, 0, pw)
|
||||||
|
centroid_count = struct.unpack("!I", hk_data[current_idx : current_idx + 4])[0]
|
||||||
|
current_idx += 4
|
||||||
|
pw.dlog(f"Centroid count: {centroid_count}")
|
||||||
|
assert current_idx == len(hk_data) - 1
|
||||||
|
FsfwTmTcPrinter.get_validity_buffer(hk_data[current_idx:], num_vars=3)
|
||||||
|
|
||||||
|
|
||||||
|
def handle_centroids_set(hk_data: bytes, pw: PrintWrapper):
|
||||||
|
pw.dlog("Received Centroids Set")
|
||||||
|
current_idx = unpack_time_hk(hk_data, 0, pw)
|
||||||
|
centroids_count = struct.unpack("!H", hk_data[current_idx : current_idx + 2])[0]
|
||||||
|
current_idx += 2
|
||||||
|
pw.dlog(f"Centroids count: {centroids_count}")
|
||||||
|
fmt_coords = "!ffffffffffffffff"
|
||||||
|
inc_len = struct.calcsize(fmt_coords)
|
||||||
|
x_coords = struct.unpack(fmt_coords, hk_data[current_idx : current_idx + inc_len])
|
||||||
|
current_idx += inc_len
|
||||||
|
y_coords = struct.unpack(fmt_coords, hk_data[current_idx : current_idx + inc_len])
|
||||||
|
current_idx += inc_len
|
||||||
|
fmt_coords = "!BBBBBBBBBBBBBBBB"
|
||||||
|
inc_len = struct.calcsize(fmt_coords)
|
||||||
|
magnitude = struct.unpack(fmt_coords, hk_data[current_idx : current_idx + inc_len])
|
||||||
|
current_idx += inc_len
|
||||||
|
pw.dlog("{:<8} {:<8} {:<8} {:<8}".format("Index", "X", "Y", "Magnitude"))
|
||||||
|
for idx in range(16):
|
||||||
|
pw.dlog(
|
||||||
|
"{:<8} {:<8.3f} {:<8.3f} {:<8}".format(
|
||||||
|
idx, x_coords[idx], y_coords[idx], magnitude[idx]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
assert current_idx == len(hk_data) - 1
|
||||||
|
FsfwTmTcPrinter.get_validity_buffer(hk_data[current_idx:], num_vars=6)
|
||||||
|
|
||||||
|
|
||||||
|
def handle_matched_centroids_set(hk_data: bytes, pw: PrintWrapper):
|
||||||
|
pw.dlog("Received Matched Centroids Set")
|
||||||
|
if len(hk_data) < 4 + 8 + 1 + 4 * 16 * 5:
|
||||||
|
raise ValueError(
|
||||||
|
f"Matched Centroids dataset HK data with length {len(hk_data)} too short. Expected 333 bytes."
|
||||||
|
)
|
||||||
|
current_idx = unpack_time_hk(hk_data, 0, pw)
|
||||||
|
num_matched_centroids = hk_data[current_idx]
|
||||||
|
current_idx += 1
|
||||||
|
pw.dlog(f"Number of matched centroids {num_matched_centroids}")
|
||||||
|
fmt_ids = "!IIIIIIIIIIIIIIII"
|
||||||
|
inc_len = struct.calcsize(fmt_ids)
|
||||||
|
star_id = struct.unpack(fmt_ids, hk_data[current_idx : current_idx + inc_len])
|
||||||
|
current_idx += inc_len
|
||||||
|
fmt_floats = "!ffffffffffffffff"
|
||||||
|
inc_len = struct.calcsize(fmt_floats)
|
||||||
|
x_coords = struct.unpack(fmt_floats, hk_data[current_idx : current_idx + inc_len])
|
||||||
|
current_idx += inc_len
|
||||||
|
y_coords = struct.unpack(fmt_floats, hk_data[current_idx : current_idx + inc_len])
|
||||||
|
current_idx += inc_len
|
||||||
|
x_errors = struct.unpack(fmt_floats, hk_data[current_idx : current_idx + inc_len])
|
||||||
|
current_idx += inc_len
|
||||||
|
y_errors = struct.unpack(fmt_floats, hk_data[current_idx : current_idx + inc_len])
|
||||||
|
current_idx += inc_len
|
||||||
|
pw.dlog(
|
||||||
|
"{:<8} {:<10} {:<10} {:<10} {:<10} {:<10}".format(
|
||||||
|
"Index", "Star ID", "X", "Y", "X Error", "Y Error"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
for idx in range(16):
|
||||||
|
pw.dlog(
|
||||||
|
"{:<8} {:<10} {:<10.3f} {:<10.3f} {:<10.3f} {:<10.3f}".format(
|
||||||
|
idx,
|
||||||
|
star_id[idx],
|
||||||
|
x_coords[idx],
|
||||||
|
y_coords[idx],
|
||||||
|
x_errors[idx],
|
||||||
|
y_errors[idx],
|
||||||
|
)
|
||||||
|
)
|
||||||
|
assert current_idx == len(hk_data) - 1
|
||||||
|
FsfwTmTcPrinter.get_validity_buffer(hk_data[current_idx:], num_vars=8)
|
||||||
|
|
||||||
|
|
||||||
|
def handle_auto_blob_set(hk_data: bytes, pw: PrintWrapper):
|
||||||
|
pw.dlog("Received Auto Blob Set")
|
||||||
|
if len(hk_data) < 4 + 8 + 4:
|
||||||
|
raise ValueError(
|
||||||
|
f"Matched Centroids dataset HK data with length {len(hk_data)} too short. Expected 16 bytes."
|
||||||
|
)
|
||||||
|
current_idx = unpack_time_hk(hk_data, 0, pw)
|
||||||
|
fmt_threshold = "!f"
|
||||||
|
inc_len = struct.calcsize(fmt_threshold)
|
||||||
|
threshold = struct.unpack(
|
||||||
|
fmt_threshold, hk_data[current_idx : current_idx + inc_len]
|
||||||
|
)[0]
|
||||||
|
current_idx += inc_len
|
||||||
|
assert current_idx == len(hk_data) - 1
|
||||||
|
pw.dlog(f"Threshold {threshold}")
|
||||||
|
FsfwTmTcPrinter.get_validity_buffer(hk_data[current_idx:], num_vars=3)
|
||||||
|
|
||||||
|
|
||||||
|
def handle_histo_or_contrast_set(name: str, hk_data: bytes, pw: PrintWrapper):
|
||||||
|
pw.dlog(f"Received {name} Set")
|
||||||
|
current_idx = unpack_time_hk(hk_data, 0, pw)
|
||||||
|
fmt_str = "!IIIIIIIII"
|
||||||
|
bins_list = []
|
||||||
|
inc_len = struct.calcsize(fmt_str)
|
||||||
|
a_bins = struct.unpack(fmt_str, hk_data[current_idx : current_idx + inc_len])
|
||||||
|
bins_list.append(a_bins)
|
||||||
|
current_idx += inc_len
|
||||||
|
b_bins = struct.unpack(fmt_str, hk_data[current_idx : current_idx + inc_len])
|
||||||
|
bins_list.append(b_bins)
|
||||||
|
current_idx += inc_len
|
||||||
|
c_bins = struct.unpack(fmt_str, hk_data[current_idx : current_idx + inc_len])
|
||||||
|
bins_list.append(c_bins)
|
||||||
|
current_idx += inc_len
|
||||||
|
d_bins = struct.unpack(fmt_str, hk_data[current_idx : current_idx + inc_len])
|
||||||
|
bins_list.append(d_bins)
|
||||||
|
pw.dlog(
|
||||||
|
f"{name} Sections: A Upper Left | B Upper Right | C Lower Left | D Lower Right"
|
||||||
|
)
|
||||||
|
pw.dlog("{:<12} {:<10} {:<10} {:<10} {:<10}".format("Range", "A", "B", "C", "D"))
|
||||||
|
for idx in range(9):
|
||||||
|
if idx == 0:
|
||||||
|
val_range = "0 (0-0)"
|
||||||
|
elif idx == 1:
|
||||||
|
val_range = "1 (1-1)"
|
||||||
|
else:
|
||||||
|
val_range = f"{idx} ({pow(2, idx - 1)}-{pow(2, idx) - 1})"
|
||||||
|
pw.dlog(
|
||||||
|
"{:<12} {:<10} {:<10} {:<10} {:<10}".format(
|
||||||
|
val_range,
|
||||||
|
bins_list[0][idx],
|
||||||
|
bins_list[1][idx],
|
||||||
|
bins_list[2][idx],
|
||||||
|
bins_list[3][idx],
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def handle_histogram_set(hk_data: bytes, pw: PrintWrapper):
|
||||||
|
handle_histo_or_contrast_set("Histogram", hk_data, pw)
|
||||||
|
|
||||||
|
|
||||||
|
def handle_contrast_set(hk_data: bytes, pw: PrintWrapper):
|
||||||
|
handle_histo_or_contrast_set("Contrast", hk_data, pw)
|
||||||
|
|
||||||
|
|
||||||
|
def handle_star_tracker_action_replies(
|
||||||
|
action_id: int, pw: PrintWrapper, custom_data: bytes
|
||||||
|
):
|
||||||
|
if action_id == StarTrackerActionId.CHECKSUM:
|
||||||
|
handle_checksum(pw, custom_data)
|
||||||
|
elif action_id == StarTrackerActionId.READ_SECONDARY_TM_SET:
|
||||||
|
handle_read_secondary_tm_set(pw, custom_data)
|
||||||
|
|
||||||
|
|
||||||
|
def handle_checksum(pw: PrintWrapper, custom_data: bytes):
|
||||||
|
if len(custom_data) != 5:
|
||||||
|
_LOGGER.warning(
|
||||||
|
"Star tracker reply has invalid length {0}".format(len(custom_data))
|
||||||
|
)
|
||||||
|
return
|
||||||
|
header_list = ["Checksum", "Checksum valid"]
|
||||||
|
print(custom_data[4])
|
||||||
|
checksum_valid_flag = custom_data[4] >> 8
|
||||||
|
content_list = ["0x" + custom_data[:4].hex(), checksum_valid_flag]
|
||||||
|
pw.dlog(f"{header_list}")
|
||||||
|
pw.dlog(f"{content_list}")
|
||||||
|
|
||||||
|
|
||||||
|
def handle_read_secondary_tm_set(pw: PrintWrapper, custom_data: bytes):
|
||||||
|
pw.dlog("Received secondary TM Sets")
|
||||||
|
if len(custom_data) % 4 != 0:
|
||||||
|
raise ValueError(f"Received data of unexpected length {len(custom_data)}")
|
||||||
|
data_length = int(len(custom_data) / 4)
|
||||||
|
fmt_str = "!" + "I" * data_length
|
||||||
|
inc_len = struct.calcsize(fmt_str)
|
||||||
|
set_ids = struct.unpack(fmt_str, custom_data[:inc_len])
|
||||||
|
pw.dlog("The following Datasets are currently Part of the secondary TM list")
|
||||||
|
for set_id in set_ids:
|
||||||
|
if set_id in SetId._value2member_map_:
|
||||||
|
pw.dlog(SetId(set_id).name)
|
||||||
|
else:
|
||||||
|
pw.dlog(f"Unknown Set ID {set_id}")
|
||||||
|
|
||||||
|
|
||||||
@tmtc_definitions_provider
|
@tmtc_definitions_provider
|
||||||
def add_str_cmds(defs: TmtcDefinitionWrapper):
|
def add_str_cmds(defs: TmtcDefinitionWrapper):
|
||||||
oce = OpCodeEntry()
|
oce = OpCodeEntry()
|
||||||
@ -799,62 +1154,19 @@ def add_str_cmds(defs: TmtcDefinitionWrapper):
|
|||||||
oce.add(OpCodes.ON_FIRMWARE, "Mode On, Submode Firmware")
|
oce.add(OpCodes.ON_FIRMWARE, "Mode On, Submode Firmware")
|
||||||
oce.add(OpCodes.NORMAL, "Mode Normal")
|
oce.add(OpCodes.NORMAL, "Mode Normal")
|
||||||
oce.add(OpCodes.OFF, "Mode Off")
|
oce.add(OpCodes.OFF, "Mode Off")
|
||||||
# oce.add("4", "Star Tracker: Mode Raw")
|
|
||||||
oce.add(OpCodes.PING, "Star Tracker: Ping")
|
oce.add(OpCodes.PING, "Star Tracker: Ping")
|
||||||
oce.add(OpCodes.TAKE_IMAGE, "Take Image")
|
oce.add(OpCodes.TAKE_IMAGE, "Take Image")
|
||||||
oce.add(OpCodes.REQUEST_SOLUTION_SET_HK, Info.REQUEST_SOLUTION_SET_HK)
|
|
||||||
oce.add(OpCodes.REQUEST_SOLUTION_SET_ACTION, Info.REQUEST_SOLUTION_SET_ACTION)
|
|
||||||
oce.add(OpCodes.UPLOAD_IMAGE, Info.UPLOAD_IMAGE)
|
oce.add(OpCodes.UPLOAD_IMAGE, Info.UPLOAD_IMAGE)
|
||||||
|
oce.add(OpCodes.DOWNLOAD_IMAGE, Info.DOWNLOAD_IMAGE)
|
||||||
|
oce.add(OpCodes.ONE_SHOOT_HK, Info.ONE_SHOOT_HK)
|
||||||
|
oce.add(OpCodes.ENABLE_HK, Info.ENABLE_HK)
|
||||||
|
oce.add(OpCodes.DISABLE_HK, Info.DISABLE_HK)
|
||||||
oce.add(OpCodes.SET_IMG_PROCESSOR_MODE, Info.SET_IMG_PROCESSOR_MODE)
|
oce.add(OpCodes.SET_IMG_PROCESSOR_MODE, Info.SET_IMG_PROCESSOR_MODE)
|
||||||
oce.add("6", "Star Tracker: Switch to bootloader program")
|
oce.add(
|
||||||
oce.add("7", "Star Tracker: Request temperature")
|
OpCodes.ADD_SECONDARY_TM_TO_NORMAL_MODE, Info.ADD_SECONDARY_TM_TO_NORMAL_MODE
|
||||||
oce.add("8", "Star Tracker: Request version")
|
)
|
||||||
oce.add("9", "Star Tracker: Request interface")
|
oce.add(OpCodes.READ_SECONDARY_TM_SET, Info.READ_SECONDARY_TM_SET)
|
||||||
oce.add("10", "Star Tracker: Request power")
|
oce.add(OpCodes.RESET_SECONDARY_TM_SET, Info.RESET_SECONDARY_TM_SET)
|
||||||
oce.add("11", "Star Tracker: Set subscription parameters")
|
|
||||||
oce.add("12", "Star Tracker: Boot image (requires bootloader mode)")
|
|
||||||
oce.add("13", "Star Tracker: Request time")
|
|
||||||
oce.add("14", "Star Tracker: Request solution")
|
|
||||||
oce.add("16", "Star Tracker: Download image")
|
|
||||||
oce.add("17", "Star Tracker: Set limit parameters")
|
|
||||||
oce.add("17", "Star Tracker: Set limit parameters")
|
|
||||||
oce.add("18", "Star Tracker: Set tracking parameters")
|
|
||||||
oce.add("19", "Star Tracker: Set mounting parameters")
|
|
||||||
oce.add("20", "Star Tracker: Set camera parameters")
|
|
||||||
oce.add("22", "Star Tracker: Set centroiding parameters")
|
|
||||||
oce.add("23", "Star Tracker: Set LISA parameters")
|
|
||||||
oce.add("24", "Star Tracker: Set matching parameters")
|
|
||||||
oce.add("25", "Star Tracker: Set validation parameters")
|
|
||||||
oce.add("26", "Star Tracker: Set algo parameters")
|
|
||||||
oce.add("28", "Star Tracker: Stop str helper")
|
|
||||||
oce.add("30", "Star Tracker: Set name of download image")
|
|
||||||
oce.add("31", "Star Tracker: Request histogram")
|
|
||||||
oce.add("32", "Star Tracker: Request contrast")
|
|
||||||
oce.add("33", "Star Tracker: Set json filename")
|
|
||||||
oce.add("35", "Star Tracker: Flash read")
|
|
||||||
oce.add("36", "Star Tracker: Set flash read filename")
|
|
||||||
oce.add("37", "Star Tracker: Get checksum")
|
|
||||||
oce.add("49", "Star Tracker: Request camera parameter")
|
|
||||||
oce.add("50", "Star Tracker: Request limits")
|
|
||||||
oce.add("52", "Star Tracker: (EGSE only) Load camera ground config")
|
|
||||||
oce.add("53", "Star Tracker: (EGSE only) Load camera flight config")
|
|
||||||
oce.add("54", "Star Tracker: Request log level parameters")
|
|
||||||
oce.add("55", "Star Tracker: Request mounting parameters")
|
|
||||||
oce.add("56", "Star Tracker: Request image processor parameters")
|
|
||||||
oce.add("57", "Star Tracker: Request centroiding parameters")
|
|
||||||
oce.add("58", "Star Tracker: Request lisa parameters")
|
|
||||||
oce.add("59", "Star Tracker: Request matching parameters")
|
|
||||||
oce.add("60", "Star Tracker: Request tracking parameters")
|
|
||||||
oce.add("61", "Star Tracker: Request validation parameters")
|
|
||||||
oce.add("62", "Star Tracker: Request algo parameters")
|
|
||||||
oce.add("63", "Star Tracker: Request subscription parameters")
|
|
||||||
oce.add("64", "Star Tracker: Request log subscription parameters")
|
|
||||||
oce.add("65", "Star Tracker: Request debug camera parameters")
|
|
||||||
oce.add("66", "Star Tracker: Set log level parameters")
|
|
||||||
oce.add("67", "Star Tracker: Set log subscription parameters")
|
|
||||||
oce.add("68", "Star Tracker: Set debug camera parameters")
|
|
||||||
oce.add(OpCodes.FW_UPDATE, Info.FW_UPDATE)
|
oce.add(OpCodes.FW_UPDATE, Info.FW_UPDATE)
|
||||||
oce.add("70", "Star Tracker: Disable timestamp generation")
|
|
||||||
oce.add("71", "Star Tracker: Enable timestamp generation")
|
|
||||||
oce.add(OpCodes.SET_TIME_FROM_SYS_TIME, Info.SET_TIME_FROM_SYS_TIME)
|
oce.add(OpCodes.SET_TIME_FROM_SYS_TIME, Info.SET_TIME_FROM_SYS_TIME)
|
||||||
defs.add_service(CustomServiceList.STAR_TRACKER.value, "Star Tracker", oce)
|
defs.add_service(CustomServiceList.STAR_TRACKER.value, "Star Tracker", oce)
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
import struct
|
import struct
|
||||||
|
|
||||||
from spacepackets.ecss.tc import PusTelecommand
|
from spacepackets.ecss.tc import PusTelecommand
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from tmtccmd.util import ObjectIdU32
|
from tmtccmd.util import ObjectIdU32
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,9 +11,9 @@ from tmtccmd.config.tmtc import (
|
|||||||
TmtcDefinitionWrapper,
|
TmtcDefinitionWrapper,
|
||||||
OpCodeEntry,
|
OpCodeEntry,
|
||||||
)
|
)
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import Subservice as ModeSubservices
|
from tmtccmd.pus.s200_fsfw_mode import Subservice as ModeSubservices
|
||||||
from tmtccmd.tc import service_provider
|
from tmtccmd.tmtc import service_provider
|
||||||
from tmtccmd.tc.decorator import ServiceProviderParams
|
from tmtccmd.tmtc.decorator import ServiceProviderParams
|
||||||
|
|
||||||
|
|
||||||
class OpCode(str, enum.Enum):
|
class OpCode(str, enum.Enum):
|
||||||
|
@ -7,9 +7,9 @@ from tmtccmd.config.tmtc import (
|
|||||||
TmtcDefinitionWrapper,
|
TmtcDefinitionWrapper,
|
||||||
OpCodeEntry,
|
OpCodeEntry,
|
||||||
)
|
)
|
||||||
from tmtccmd.tc import service_provider, DefaultPusQueueHelper
|
from tmtccmd.tmtc import service_provider, DefaultPusQueueHelper
|
||||||
from tmtccmd.tc.decorator import ServiceProviderParams
|
from tmtccmd.tmtc.decorator import ServiceProviderParams
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import Mode
|
from tmtccmd.pus.s200_fsfw_mode import Mode
|
||||||
|
|
||||||
|
|
||||||
class SusOpCode:
|
class SusOpCode:
|
||||||
|
@ -15,8 +15,8 @@ from tmtccmd.config.tmtc import (
|
|||||||
OpCodeEntry,
|
OpCodeEntry,
|
||||||
TmtcDefinitionWrapper,
|
TmtcDefinitionWrapper,
|
||||||
)
|
)
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import create_mode_command, Mode
|
from tmtccmd.pus.s200_fsfw_mode import create_mode_command, Mode
|
||||||
from tmtccmd.util import ObjectIdU32
|
from tmtccmd.util import ObjectIdU32
|
||||||
|
|
||||||
|
|
||||||
|
@ -8,10 +8,10 @@
|
|||||||
import enum
|
import enum
|
||||||
|
|
||||||
from spacepackets.ecss.tc import PusTelecommand
|
from spacepackets.ecss.tc import PusTelecommand
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
|
|
||||||
from tmtccmd.tc.pus_20_fsfw_param import create_load_param_cmd
|
from tmtccmd.pus.s20_fsfw_param import create_load_param_cmd
|
||||||
from tmtccmd.tc.pus_8_fsfw_funccmd import create_action_cmd
|
from tmtccmd.pus.s8_fsfw_action import create_action_cmd
|
||||||
from tmtccmd.pus.s20_fsfw_param_defs import create_scalar_u8_parameter
|
from tmtccmd.pus.s20_fsfw_param_defs import create_scalar_u8_parameter
|
||||||
|
|
||||||
from tmtccmd.config.tmtc import (
|
from tmtccmd.config.tmtc import (
|
||||||
|
@ -12,15 +12,15 @@ from tmtccmd.config.tmtc import (
|
|||||||
TmtcDefinitionWrapper,
|
TmtcDefinitionWrapper,
|
||||||
OpCodeEntry,
|
OpCodeEntry,
|
||||||
)
|
)
|
||||||
from tmtccmd.tc import service_provider
|
from tmtccmd.tmtc import service_provider
|
||||||
from tmtccmd.tc.decorator import ServiceProviderParams
|
from tmtccmd.tmtc.decorator import ServiceProviderParams
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import (
|
from tmtccmd.pus.s200_fsfw_mode import (
|
||||||
create_mode_command,
|
create_mode_command,
|
||||||
create_read_mode_command,
|
create_read_mode_command,
|
||||||
create_announce_mode_command,
|
create_announce_mode_command,
|
||||||
create_announce_mode_recursive_command,
|
create_announce_mode_recursive_command,
|
||||||
)
|
)
|
||||||
from tmtccmd.tc.pus_20_fsfw_param import (
|
from tmtccmd.pus.s20_fsfw_param import (
|
||||||
create_load_param_cmd,
|
create_load_param_cmd,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -17,8 +17,8 @@ from tmtccmd.config.tmtc import (
|
|||||||
TmtcDefinitionWrapper,
|
TmtcDefinitionWrapper,
|
||||||
OpCodeEntry,
|
OpCodeEntry,
|
||||||
)
|
)
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from tmtccmd.tc.pus_3_fsfw_hk import (
|
from tmtccmd.pus.tc.s3_fsfw_hk import (
|
||||||
make_sid,
|
make_sid,
|
||||||
create_request_one_diag_command,
|
create_request_one_diag_command,
|
||||||
create_request_one_hk_command,
|
create_request_one_hk_command,
|
||||||
@ -26,7 +26,7 @@ from tmtccmd.tc.pus_3_fsfw_hk import (
|
|||||||
create_disable_periodic_hk_command_with_diag,
|
create_disable_periodic_hk_command_with_diag,
|
||||||
)
|
)
|
||||||
from spacepackets.ecss.tc import PusTelecommand
|
from spacepackets.ecss.tc import PusTelecommand
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import Mode, create_mode_command
|
from tmtccmd.pus.s200_fsfw_mode import Mode, create_mode_command
|
||||||
from eive_tmtc.config.object_ids import SYRLINKS_HANDLER_ID
|
from eive_tmtc.config.object_ids import SYRLINKS_HANDLER_ID
|
||||||
import struct
|
import struct
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
from spacepackets.ecss.tc import PusTelecommand
|
from spacepackets.ecss.tc import PusTelecommand
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import pack_mode_data, Mode, Subservice
|
from tmtccmd.pus.s200_fsfw_mode import pack_mode_data, Mode, Subservice
|
||||||
from tmtccmd.util import ObjectIdU32
|
from tmtccmd.util import ObjectIdU32
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@ import logging
|
|||||||
import os
|
import os
|
||||||
import struct
|
import struct
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from typing import Tuple
|
||||||
|
|
||||||
from eive_tmtc.pus_tm.defs import PrintWrapper
|
from eive_tmtc.pus_tm.defs import PrintWrapper
|
||||||
|
|
||||||
@ -10,10 +11,10 @@ from eive_tmtc.config.definitions import CustomServiceList
|
|||||||
from spacepackets.ecss import PusTelecommand
|
from spacepackets.ecss import PusTelecommand
|
||||||
from tmtccmd.config import TmtcDefinitionWrapper
|
from tmtccmd.config import TmtcDefinitionWrapper
|
||||||
|
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
|
from tmtccmd.pus.s8_fsfw_action import create_action_cmd
|
||||||
from tmtccmd.tc.pus_3_fsfw_hk import make_sid, generate_one_hk_command
|
from tmtccmd.pus.tc.s3_fsfw_hk import make_sid, generate_one_hk_command
|
||||||
from tmtccmd.tc.pus_20_fsfw_param import (
|
from tmtccmd.pus.s20_fsfw_param import (
|
||||||
create_scalar_u8_parameter,
|
create_scalar_u8_parameter,
|
||||||
create_load_param_cmd,
|
create_load_param_cmd,
|
||||||
)
|
)
|
||||||
@ -52,6 +53,8 @@ class ActionId(enum.IntEnum):
|
|||||||
SWITCH_TO_SD_0 = 16
|
SWITCH_TO_SD_0 = 16
|
||||||
SWITCH_TO_SD_1 = 17
|
SWITCH_TO_SD_1 = 17
|
||||||
SWITCH_TO_BOTH_SD_CARDS = 18
|
SWITCH_TO_BOTH_SD_CARDS = 18
|
||||||
|
AUTO_SWITCH_ENABLE = 19
|
||||||
|
AUTO_SWITCH_DISABLE = 20
|
||||||
XSC_REBOOT = 32
|
XSC_REBOOT = 32
|
||||||
FULL_REBOOT = 34
|
FULL_REBOOT = 34
|
||||||
EXECUTE_SHELL_CMD_BLOCKING = 40
|
EXECUTE_SHELL_CMD_BLOCKING = 40
|
||||||
@ -110,6 +113,8 @@ class OpCode:
|
|||||||
RWD_RESET_REBOOT_COUNTER_10 = "rwd_reset_10"
|
RWD_RESET_REBOOT_COUNTER_10 = "rwd_reset_10"
|
||||||
RWD_RESET_REBOOT_COUNTER_11 = "rwd_reset_11"
|
RWD_RESET_REBOOT_COUNTER_11 = "rwd_reset_11"
|
||||||
RWD_SET_MAX_REBOOT_CNT = "rwd_max_cnt"
|
RWD_SET_MAX_REBOOT_CNT = "rwd_max_cnt"
|
||||||
|
AUTO_SWITCH_ENABLE = "auto_switch_enable"
|
||||||
|
AUTO_SWITCH_DISABLE = "auto_switch_disable"
|
||||||
|
|
||||||
|
|
||||||
class Info:
|
class Info:
|
||||||
@ -135,6 +140,8 @@ class Info:
|
|||||||
MV_HELPER = "Filesystem Move Helper"
|
MV_HELPER = "Filesystem Move Helper"
|
||||||
RM_HELPER = "Filesystem Removal Helper"
|
RM_HELPER = "Filesystem Removal Helper"
|
||||||
MKDIR_HELPER = "Filesystem Directory Creation Helper"
|
MKDIR_HELPER = "Filesystem Directory Creation Helper"
|
||||||
|
AUTO_SWITCH_ENABLE = "Enable Auto-Switch Feature with a specific target image"
|
||||||
|
AUTO_SWITCH_DISABLE = "Disable Auto-Switch Feature"
|
||||||
|
|
||||||
|
|
||||||
class Chip(enum.IntEnum):
|
class Chip(enum.IntEnum):
|
||||||
@ -176,6 +183,8 @@ def add_core_controller_definitions(defs: TmtcDefinitionWrapper):
|
|||||||
oce.add(keys=OpCode.OBSW_UPDATE_FROM_TMP, info=Info.OBSW_UPDATE_FROM_TMP)
|
oce.add(keys=OpCode.OBSW_UPDATE_FROM_TMP, info=Info.OBSW_UPDATE_FROM_TMP)
|
||||||
oce.add(keys=OpCode.OBSW_UPDATE_FROM_SD_0, info=Info.OBSW_UPDATE_FROM_SD_0)
|
oce.add(keys=OpCode.OBSW_UPDATE_FROM_SD_0, info=Info.OBSW_UPDATE_FROM_SD_0)
|
||||||
oce.add(keys=OpCode.OBSW_UPDATE_FROM_SD_1, info=Info.OBSW_UPDATE_FROM_SD_1)
|
oce.add(keys=OpCode.OBSW_UPDATE_FROM_SD_1, info=Info.OBSW_UPDATE_FROM_SD_1)
|
||||||
|
oce.add(keys=OpCode.AUTO_SWITCH_ENABLE, info=Info.AUTO_SWITCH_ENABLE)
|
||||||
|
oce.add(keys=OpCode.AUTO_SWITCH_DISABLE, info=Info.AUTO_SWITCH_DISABLE)
|
||||||
oce.add(keys=OpCode.SYSTEMCTL_CMD_EXECUTOR, info=Info.SYSTEMCTL_CMD_EXECUTOR)
|
oce.add(keys=OpCode.SYSTEMCTL_CMD_EXECUTOR, info=Info.SYSTEMCTL_CMD_EXECUTOR)
|
||||||
oce.add(
|
oce.add(
|
||||||
keys=OpCode.EXECUTE_SHELL_CMD_BLOCKING, info=Info.EXECUTE_SHELL_CMD_BLOCKING
|
keys=OpCode.EXECUTE_SHELL_CMD_BLOCKING, info=Info.EXECUTE_SHELL_CMD_BLOCKING
|
||||||
@ -381,6 +390,20 @@ def pack_core_commands( # noqa C901
|
|||||||
elif op_code in OpCode.OBSW_UPDATE_FROM_TMP:
|
elif op_code in OpCode.OBSW_UPDATE_FROM_TMP:
|
||||||
q.add_log_cmd(Info.OBSW_UPDATE_FROM_TMP)
|
q.add_log_cmd(Info.OBSW_UPDATE_FROM_TMP)
|
||||||
q.add_pus_tc(pack_obsw_update_cmd(ActionId.UPDATE_OBSW_FROM_TMP))
|
q.add_pus_tc(pack_obsw_update_cmd(ActionId.UPDATE_OBSW_FROM_TMP))
|
||||||
|
elif op_code in OpCode.AUTO_SWITCH_ENABLE:
|
||||||
|
q.add_log_cmd(Info.AUTO_SWITCH_ENABLE)
|
||||||
|
chip, copy = determine_chip_and_copy()
|
||||||
|
user_data = bytes([chip, copy])
|
||||||
|
q.add_pus_tc(
|
||||||
|
create_action_cmd(
|
||||||
|
CORE_CONTROLLER_ID, ActionId.AUTO_SWITCH_ENABLE, user_data
|
||||||
|
)
|
||||||
|
)
|
||||||
|
elif op_code in OpCode.AUTO_SWITCH_DISABLE:
|
||||||
|
q.add_log_cmd(Info.AUTO_SWITCH_DISABLE)
|
||||||
|
q.add_pus_tc(
|
||||||
|
create_action_cmd(CORE_CONTROLLER_ID, ActionId.AUTO_SWITCH_DISABLE)
|
||||||
|
)
|
||||||
elif op_code in OpCode.SWITCH_TO_SD_0:
|
elif op_code in OpCode.SWITCH_TO_SD_0:
|
||||||
q.add_log_cmd(Info.SWITCH_TO_SD_0)
|
q.add_log_cmd(Info.SWITCH_TO_SD_0)
|
||||||
q.add_pus_tc(
|
q.add_pus_tc(
|
||||||
@ -551,18 +574,17 @@ def create_full_reboot_cmds() -> PusTelecommand:
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def determine_reboot_params() -> (bool, Chip, Copy):
|
def determine_reboot_params() -> Tuple[bool, Chip, Copy]:
|
||||||
chip_select = -1
|
|
||||||
copy_select = -1
|
|
||||||
reboot_self = input("Reboot self? [y/n]: ")
|
reboot_self = input("Reboot self? [y/n]: ")
|
||||||
if reboot_self in ["y", "yes", "1"]:
|
if reboot_self in ["y", "yes", "1"]:
|
||||||
_LOGGER.info("Rebooting currently running image")
|
_LOGGER.info("Rebooting currently running image")
|
||||||
return True, chip_select, copy_select
|
return True, Chip.NONE, Copy.NONE
|
||||||
_LOGGER.info("Rebooting image specified by chip and copy")
|
_LOGGER.info("Rebooting image specified by chip and copy")
|
||||||
return False, determine_chip_and_copy()
|
chip, copy = determine_chip_and_copy()
|
||||||
|
return False, chip, copy
|
||||||
|
|
||||||
|
|
||||||
def determine_chip_and_copy() -> (int, int):
|
def determine_chip_and_copy() -> Tuple[Chip, Copy]:
|
||||||
while True:
|
while True:
|
||||||
chip_select = input("Chip select [0/1]: ")
|
chip_select = input("Chip select [0/1]: ")
|
||||||
if chip_select in ["0", "1"]:
|
if chip_select in ["0", "1"]:
|
||||||
|
@ -6,9 +6,9 @@ from tmtccmd.config.tmtc import (
|
|||||||
TmtcDefinitionWrapper,
|
TmtcDefinitionWrapper,
|
||||||
OpCodeEntry,
|
OpCodeEntry,
|
||||||
)
|
)
|
||||||
from tmtccmd.tc import service_provider
|
from tmtccmd.tmtc import service_provider
|
||||||
from tmtccmd.pus.s201_fsfw_health import Subservice, FsfwHealth
|
from tmtccmd.pus.s201_fsfw_health import Subservice, FsfwHealth
|
||||||
from tmtccmd.tc.decorator import ServiceProviderParams
|
from tmtccmd.tmtc.decorator import ServiceProviderParams
|
||||||
|
|
||||||
|
|
||||||
class OpCode:
|
class OpCode:
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
@date 02.05.2020
|
@date 02.05.2020
|
||||||
"""
|
"""
|
||||||
from spacepackets.ecss.tc import PusTelecommand
|
from spacepackets.ecss.tc import PusTelecommand
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import pack_mode_data, Mode
|
from tmtccmd.pus.s200_fsfw_mode import pack_mode_data, Mode
|
||||||
from eive_tmtc.config.object_ids import TEST_DEVICE_ID
|
from eive_tmtc.config.object_ids import TEST_DEVICE_ID
|
||||||
|
|
||||||
TEST_DEVICE_OBJ_ID = TEST_DEVICE_ID
|
TEST_DEVICE_OBJ_ID = TEST_DEVICE_ID
|
||||||
|
@ -12,7 +12,7 @@ from eive_tmtc.config.definitions import CustomServiceList
|
|||||||
from spacepackets.ecss.tc import PusTelecommand
|
from spacepackets.ecss.tc import PusTelecommand
|
||||||
from tmtccmd.config import TmtcDefinitionWrapper
|
from tmtccmd.config import TmtcDefinitionWrapper
|
||||||
from tmtccmd.config.tmtc import tmtc_definitions_provider, OpCodeEntry
|
from tmtccmd.config.tmtc import tmtc_definitions_provider, OpCodeEntry
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from tmtccmd.util import ObjectIdU32
|
from tmtccmd.util import ObjectIdU32
|
||||||
|
|
||||||
|
|
||||||
|
@ -20,11 +20,11 @@ from tmtccmd.config.tmtc import (
|
|||||||
TmtcDefinitionWrapper,
|
TmtcDefinitionWrapper,
|
||||||
)
|
)
|
||||||
from spacepackets.ecss.tc import PusTelecommand
|
from spacepackets.ecss.tc import PusTelecommand
|
||||||
from tmtccmd.tc import service_provider
|
from tmtccmd.tmtc import service_provider
|
||||||
from tmtccmd.tc.decorator import ServiceProviderParams
|
from tmtccmd.tmtc.decorator import ServiceProviderParams
|
||||||
from eive_tmtc.utility.input_helper import InputHelper
|
from eive_tmtc.utility.input_helper import InputHelper
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import pack_mode_data, Mode
|
from tmtccmd.pus.s200_fsfw_mode import pack_mode_data, Mode
|
||||||
from tmtccmd.tc.pus_8_fsfw_funccmd import create_action_cmd
|
from tmtccmd.pus.s8_fsfw_action import create_action_cmd
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -14,13 +14,13 @@ from eive_tmtc.config.object_ids import PLOC_SUPV_ID, get_object_ids
|
|||||||
from eive_tmtc.config.definitions import CustomServiceList
|
from eive_tmtc.config.definitions import CustomServiceList
|
||||||
from eive_tmtc.pus_tm.defs import PrintWrapper
|
from eive_tmtc.pus_tm.defs import PrintWrapper
|
||||||
from spacepackets.ecss.tc import PusTelecommand
|
from spacepackets.ecss.tc import PusTelecommand
|
||||||
from tmtccmd.tc.pus_3_fsfw_hk import generate_one_hk_command, make_sid
|
from tmtccmd.pus.tc.s3_fsfw_hk import generate_one_hk_command, make_sid
|
||||||
from tmtccmd.config import TmtcDefinitionWrapper
|
from tmtccmd.config import TmtcDefinitionWrapper
|
||||||
from tmtccmd.config.tmtc import tmtc_definitions_provider, OpCodeEntry
|
from tmtccmd.config.tmtc import tmtc_definitions_provider, OpCodeEntry
|
||||||
from tmtccmd.tc import service_provider
|
from tmtccmd.tmtc import service_provider
|
||||||
from tmtccmd.tc.decorator import ServiceProviderParams
|
from tmtccmd.tmtc.decorator import ServiceProviderParams
|
||||||
from tmtccmd.pus.s200_fsfw_mode import pack_mode_data, Mode
|
from tmtccmd.pus.s200_fsfw_mode import pack_mode_data, Mode
|
||||||
from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
|
from tmtccmd.pus.s8_fsfw_action import create_action_cmd
|
||||||
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
||||||
from eive_tmtc.utility.input_helper import InputHelper
|
from eive_tmtc.utility.input_helper import InputHelper
|
||||||
|
|
||||||
@ -151,6 +151,7 @@ class OpCodes:
|
|||||||
PERFORM_UPDATE = ["update"]
|
PERFORM_UPDATE = ["update"]
|
||||||
FACTORY_RESET = ["factory_reset"]
|
FACTORY_RESET = ["factory_reset"]
|
||||||
MEM_CHECK = ["mem_check"]
|
MEM_CHECK = ["mem_check"]
|
||||||
|
RESET_MPSOC = "reset_mpsoc"
|
||||||
|
|
||||||
|
|
||||||
class Info(str, enum.Enum):
|
class Info(str, enum.Enum):
|
||||||
@ -168,6 +169,7 @@ class Info(str, enum.Enum):
|
|||||||
REQ_BOOT_STATUS_REPORT = "Request boot status report and HK"
|
REQ_BOOT_STATUS_REPORT = "Request boot status report and HK"
|
||||||
MEM_CHECK = "Memory Check"
|
MEM_CHECK = "Memory Check"
|
||||||
SEL_NVM = "Select NVM"
|
SEL_NVM = "Select NVM"
|
||||||
|
RESET_MPSOC = "Reset MPSoC"
|
||||||
|
|
||||||
|
|
||||||
@tmtc_definitions_provider
|
@tmtc_definitions_provider
|
||||||
@ -183,8 +185,8 @@ def add_ploc_supv_cmds(defs: TmtcDefinitionWrapper):
|
|||||||
oce.add(OpCodes.SEL_NVM, Info.SEL_NVM)
|
oce.add(OpCodes.SEL_NVM, Info.SEL_NVM)
|
||||||
oce.add(OpCodes.SET_TIME_REF, Info.SET_TIME_REF)
|
oce.add(OpCodes.SET_TIME_REF, Info.SET_TIME_REF)
|
||||||
oce.add(OpCodes.FACTORY_RESET, Info.FACTORY_RESET)
|
oce.add(OpCodes.FACTORY_RESET, Info.FACTORY_RESET)
|
||||||
|
oce.add(OpCodes.RESET_MPSOC, Info.RESET_MPSOC)
|
||||||
oce.add("8", "PLOC Supervisor: Set max restart tries")
|
oce.add("8", "PLOC Supervisor: Set max restart tries")
|
||||||
oce.add("9", "PLOC Supervisor: Reset MPSoC")
|
|
||||||
oce.add("11", "PLOC Supervisor: Set boot timeout")
|
oce.add("11", "PLOC Supervisor: Set boot timeout")
|
||||||
oce.add("12", "PLOC Supervisor: Disable Hk")
|
oce.add("12", "PLOC Supervisor: Disable Hk")
|
||||||
oce.add(OpCodes.REQ_BOOT_STATUS_REPORT, Info.REQ_BOOT_STATUS_REPORT)
|
oce.add(OpCodes.REQ_BOOT_STATUS_REPORT, Info.REQ_BOOT_STATUS_REPORT)
|
||||||
@ -268,7 +270,6 @@ def pack_ploc_supv_commands(p: ServiceProviderParams): # noqa C901
|
|||||||
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
|
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
|
||||||
if op_code in OpCodes.FACTORY_RESET:
|
if op_code in OpCodes.FACTORY_RESET:
|
||||||
q.add_log_cmd(f"{prefix}: {Info.FACTORY_RESET}")
|
q.add_log_cmd(f"{prefix}: {Info.FACTORY_RESET}")
|
||||||
key = -1
|
|
||||||
while True:
|
while True:
|
||||||
print("Please select the key for a factory reset operation")
|
print("Please select the key for a factory reset operation")
|
||||||
for key, val in FACTORY_RESET_OPS.items():
|
for key, val in FACTORY_RESET_OPS.items():
|
||||||
@ -293,8 +294,8 @@ def pack_ploc_supv_commands(p: ServiceProviderParams): # noqa C901
|
|||||||
+ struct.pack("!B", restart_tries)
|
+ struct.pack("!B", restart_tries)
|
||||||
)
|
)
|
||||||
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
|
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
|
||||||
if op_code == "9":
|
if op_code == OpCodes.RESET_MPSOC:
|
||||||
q.add_log_cmd("PLOC Supervisor: Reset MPSoC")
|
q.add_log_cmd(Info.RESET_MPSOC)
|
||||||
command = object_id.as_bytes + struct.pack("!I", SupvActionId.RESET_MPSOC)
|
command = object_id.as_bytes + struct.pack("!I", SupvActionId.RESET_MPSOC)
|
||||||
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
|
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
|
||||||
if op_code in OpCodes.SET_TIME_REF:
|
if op_code in OpCodes.SET_TIME_REF:
|
||||||
|
@ -9,20 +9,19 @@ from eive_tmtc.pus_tm.defs import PrintWrapper
|
|||||||
from tmtccmd.config import TmtcDefinitionWrapper
|
from tmtccmd.config import TmtcDefinitionWrapper
|
||||||
|
|
||||||
from tmtccmd.config.tmtc import OpCodeEntry, tmtc_definitions_provider
|
from tmtccmd.config.tmtc import OpCodeEntry, tmtc_definitions_provider
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from tmtccmd.tc.pus_3_fsfw_hk import (
|
from tmtccmd.pus.tc.s3_fsfw_hk import (
|
||||||
make_sid,
|
make_sid,
|
||||||
generate_one_diag_command,
|
generate_one_diag_command,
|
||||||
enable_periodic_hk_command_with_interval,
|
enable_periodic_hk_command_with_interval,
|
||||||
disable_periodic_hk_command,
|
disable_periodic_hk_command,
|
||||||
)
|
)
|
||||||
from tmtccmd.tc.pus_11_tc_sched import (
|
from tmtccmd.pus.s11_tc_sched import (
|
||||||
create_enable_tc_sched_cmd,
|
create_enable_tc_sched_cmd,
|
||||||
create_time_tagged_cmd,
|
create_time_tagged_cmd,
|
||||||
)
|
)
|
||||||
from tmtccmd.pus.s200_fsfw_mode import Subservice
|
from tmtccmd.pus.s200_fsfw_mode import Subservice, pack_mode_data, Mode
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import pack_mode_data, Mode
|
from tmtccmd.pus.s20_fsfw_param import (
|
||||||
from tmtccmd.tc.pus_20_fsfw_param import (
|
|
||||||
create_scalar_double_parameter,
|
create_scalar_double_parameter,
|
||||||
create_load_param_cmd,
|
create_load_param_cmd,
|
||||||
create_scalar_boolean_parameter,
|
create_scalar_boolean_parameter,
|
||||||
|
@ -14,9 +14,9 @@ from eive_tmtc.pus_tm.defs import PrintWrapper
|
|||||||
from spacepackets.ecss.tc import PusTelecommand
|
from spacepackets.ecss.tc import PusTelecommand
|
||||||
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
|
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
|
||||||
from tmtccmd.config.tmtc import tmtc_definitions_provider
|
from tmtccmd.config.tmtc import tmtc_definitions_provider
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import Mode, pack_mode_data
|
from tmtccmd.pus.s200_fsfw_mode import Mode, pack_mode_data
|
||||||
from tmtccmd.tc.pus_3_fsfw_hk import generate_one_hk_command, make_sid
|
from tmtccmd.pus.tc.s3_fsfw_hk import generate_one_hk_command, make_sid
|
||||||
from tmtccmd.util import ObjectIdU32
|
from tmtccmd.util import ObjectIdU32
|
||||||
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
||||||
|
|
||||||
|
@ -5,10 +5,10 @@ from spacepackets.ecss import PusTelecommand
|
|||||||
|
|
||||||
from eive_tmtc.config.definitions import CustomServiceList
|
from eive_tmtc.config.definitions import CustomServiceList
|
||||||
from tmtccmd.config.tmtc import tmtc_definitions_provider
|
from tmtccmd.config.tmtc import tmtc_definitions_provider
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import Mode, pack_mode_data, Subservice
|
from tmtccmd.pus.s200_fsfw_mode import Mode, pack_mode_data, Subservice
|
||||||
from tmtccmd.tc import service_provider
|
from tmtccmd.tmtc import service_provider
|
||||||
from tmtccmd.tc.decorator import ServiceProviderParams
|
from tmtccmd.tmtc.decorator import ServiceProviderParams
|
||||||
from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
|
from tmtccmd.pus.s8_fsfw_action import create_action_cmd
|
||||||
from tmtccmd.config import OpCodeEntry, TmtcDefinitionWrapper
|
from tmtccmd.config import OpCodeEntry, TmtcDefinitionWrapper
|
||||||
from eive_tmtc.config.object_ids import SCEX_HANDLER_ID
|
from eive_tmtc.config.object_ids import SCEX_HANDLER_ID
|
||||||
|
|
||||||
|
@ -7,9 +7,9 @@ from spacepackets.ecss import PusTelecommand
|
|||||||
from eive_tmtc.tmtc.common import pack_mode_cmd_with_info
|
from eive_tmtc.tmtc.common import pack_mode_cmd_with_info
|
||||||
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
|
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
|
||||||
from tmtccmd.config.tmtc import tmtc_definitions_provider
|
from tmtccmd.config.tmtc import tmtc_definitions_provider
|
||||||
from tmtccmd.tc import service_provider
|
from tmtccmd.tmtc import service_provider
|
||||||
from tmtccmd.tc.decorator import ServiceProviderParams
|
from tmtccmd.tmtc.decorator import ServiceProviderParams
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import Subservice as ModeSubservice
|
from tmtccmd.pus.s200_fsfw_mode import Subservice as ModeSubservice
|
||||||
|
|
||||||
|
|
||||||
class ModeId(enum.IntEnum):
|
class ModeId(enum.IntEnum):
|
||||||
|
@ -19,7 +19,7 @@ from eive_tmtc.tmtc.power.common_power import (
|
|||||||
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
|
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
|
||||||
from tmtccmd.config.tmtc import tmtc_definitions_provider
|
from tmtccmd.config.tmtc import tmtc_definitions_provider
|
||||||
|
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
import eive_tmtc.gomspace.gomspace_common as gs
|
import eive_tmtc.gomspace.gomspace_common as gs
|
||||||
from eive_tmtc.config.object_ids import ACU_HANDLER_ID
|
from eive_tmtc.config.object_ids import ACU_HANDLER_ID
|
||||||
from tmtccmd.util import ObjectIdU32
|
from tmtccmd.util import ObjectIdU32
|
||||||
|
@ -11,12 +11,12 @@ from tmtccmd.config.tmtc import (
|
|||||||
TmtcDefinitionWrapper,
|
TmtcDefinitionWrapper,
|
||||||
OpCodeEntry,
|
OpCodeEntry,
|
||||||
)
|
)
|
||||||
from tmtccmd.tc import service_provider
|
from tmtccmd.tmtc import service_provider
|
||||||
from tmtccmd.tc.decorator import ServiceProviderParams
|
from tmtccmd.tmtc.decorator import ServiceProviderParams
|
||||||
from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
|
from tmtccmd.pus.s8_fsfw_action import create_action_cmd
|
||||||
from tmtccmd.tc.pus_3_fsfw_hk import generate_one_hk_command, make_sid
|
from tmtccmd.pus.tc.s3_fsfw_hk import generate_one_hk_command, make_sid
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import pack_mode_data, Mode
|
from tmtccmd.pus.s200_fsfw_mode import pack_mode_data, Mode
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import Subservice as ModeSubservices
|
from tmtccmd.pus.s200_fsfw_mode import Subservice as ModeSubservices
|
||||||
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,15 +16,15 @@ from eive_tmtc.gomspace.gomspace_common import (
|
|||||||
from eive_tmtc.gomspace.gomspace_pdu_definitions import OUT_ENABLE_LIST
|
from eive_tmtc.gomspace.gomspace_pdu_definitions import OUT_ENABLE_LIST
|
||||||
from spacepackets.ecss import PusTelecommand
|
from spacepackets.ecss import PusTelecommand
|
||||||
from tmtccmd.config import OpCodeEntry
|
from tmtccmd.config import OpCodeEntry
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from tmtccmd.tc.pus_3_fsfw_hk import (
|
from tmtccmd.pus.tc.s3_fsfw_hk import (
|
||||||
make_sid,
|
make_sid,
|
||||||
generate_one_diag_command,
|
generate_one_diag_command,
|
||||||
generate_one_hk_command,
|
generate_one_hk_command,
|
||||||
enable_periodic_hk_command_with_interval,
|
enable_periodic_hk_command_with_interval,
|
||||||
disable_periodic_hk_command,
|
disable_periodic_hk_command,
|
||||||
)
|
)
|
||||||
from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
|
from tmtccmd.pus.s8_fsfw_action import create_action_cmd
|
||||||
from tmtccmd.util import ObjectIdU32, ObjectIdBase
|
from tmtccmd.util import ObjectIdU32, ObjectIdBase
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ from eive_tmtc.tmtc.power.common_power import (
|
|||||||
pack_common_power_cmds,
|
pack_common_power_cmds,
|
||||||
SetId,
|
SetId,
|
||||||
)
|
)
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from eive_tmtc.gomspace.gomspace_common import (
|
from eive_tmtc.gomspace.gomspace_common import (
|
||||||
TableEntry,
|
TableEntry,
|
||||||
Channel,
|
Channel,
|
||||||
|
@ -32,7 +32,7 @@ from spacepackets.ecss import PusTelecommand
|
|||||||
|
|
||||||
from tmtccmd.config import OpCodeEntry, TmtcDefinitionWrapper
|
from tmtccmd.config import OpCodeEntry, TmtcDefinitionWrapper
|
||||||
from tmtccmd.config.tmtc import tmtc_definitions_provider
|
from tmtccmd.config.tmtc import tmtc_definitions_provider
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from tmtccmd.util import ObjectIdU32
|
from tmtccmd.util import ObjectIdU32
|
||||||
|
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ from eive_tmtc.tmtc.power.common_power import (
|
|||||||
from spacepackets.ecss import PusTelecommand
|
from spacepackets.ecss import PusTelecommand
|
||||||
from tmtccmd.config import OpCodeEntry, TmtcDefinitionWrapper
|
from tmtccmd.config import OpCodeEntry, TmtcDefinitionWrapper
|
||||||
from tmtccmd.config.tmtc import tmtc_definitions_provider
|
from tmtccmd.config.tmtc import tmtc_definitions_provider
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from tmtccmd.util import ObjectIdU32
|
from tmtccmd.util import ObjectIdU32
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,12 +32,12 @@ from eive_tmtc.config.object_ids import PCDU_HANDLER_ID
|
|||||||
|
|
||||||
from eive_tmtc.tmtc.power.p60dock import P60OpCode, P60Info, p60_dock_req_hk_cmds
|
from eive_tmtc.tmtc.power.p60dock import P60OpCode, P60Info, p60_dock_req_hk_cmds
|
||||||
from eive_tmtc.tmtc.power.acu import add_acu_cmds, acu_req_hk_cmds
|
from eive_tmtc.tmtc.power.acu import add_acu_cmds, acu_req_hk_cmds
|
||||||
from tmtccmd.tc.pus_3_fsfw_hk import (
|
from tmtccmd.pus.tc.s3_fsfw_hk import (
|
||||||
create_request_one_diag_command,
|
create_request_one_diag_command,
|
||||||
make_sid,
|
make_sid,
|
||||||
)
|
)
|
||||||
from tmtccmd.config.tmtc import tmtc_definitions_provider
|
from tmtccmd.config.tmtc import tmtc_definitions_provider
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
|
|
||||||
|
|
||||||
class SetId(enum.IntEnum):
|
class SetId(enum.IntEnum):
|
||||||
|
@ -11,11 +11,11 @@ from tmtccmd.config.tmtc import (
|
|||||||
TmtcDefinitionWrapper,
|
TmtcDefinitionWrapper,
|
||||||
OpCodeEntry,
|
OpCodeEntry,
|
||||||
)
|
)
|
||||||
from tmtccmd.tc import service_provider
|
from tmtccmd.tmtc import service_provider
|
||||||
from tmtccmd.tc.queue import DefaultPusQueueHelper
|
from tmtccmd.tmtc.queue import DefaultPusQueueHelper
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import Mode, pack_mode_command
|
from tmtccmd.pus.s200_fsfw_mode import Mode, pack_mode_command
|
||||||
from tmtccmd.tc.decorator import ServiceProviderParams
|
from tmtccmd.tmtc.decorator import ServiceProviderParams
|
||||||
from tmtccmd.tc.pus_3_fsfw_hk import (
|
from tmtccmd.pus.tc.s3_fsfw_hk import (
|
||||||
generate_one_hk_command,
|
generate_one_hk_command,
|
||||||
make_sid,
|
make_sid,
|
||||||
enable_periodic_hk_command_with_interval,
|
enable_periodic_hk_command_with_interval,
|
||||||
@ -23,7 +23,7 @@ from tmtccmd.tc.pus_3_fsfw_hk import (
|
|||||||
)
|
)
|
||||||
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
||||||
|
|
||||||
from tmtccmd.tc.pus_20_fsfw_param import create_load_param_cmd
|
from tmtccmd.pus.s20_fsfw_param import create_load_param_cmd
|
||||||
|
|
||||||
from tmtccmd.pus.s20_fsfw_param_defs import (
|
from tmtccmd.pus.s20_fsfw_param_defs import (
|
||||||
create_scalar_float_parameter,
|
create_scalar_float_parameter,
|
||||||
|
@ -10,9 +10,9 @@ from tmtccmd.config.tmtc import (
|
|||||||
TmtcDefinitionWrapper,
|
TmtcDefinitionWrapper,
|
||||||
OpCodeEntry,
|
OpCodeEntry,
|
||||||
)
|
)
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import Subservice as ModeSubservices, Mode
|
from tmtccmd.pus.s200_fsfw_mode import Subservice as ModeSubservices, Mode
|
||||||
from tmtccmd.tc import service_provider
|
from tmtccmd.tmtc import service_provider
|
||||||
from tmtccmd.tc.decorator import ServiceProviderParams
|
from tmtccmd.tmtc.decorator import ServiceProviderParams
|
||||||
|
|
||||||
|
|
||||||
class OpCode(str, enum.Enum):
|
class OpCode(str, enum.Enum):
|
||||||
|
@ -17,9 +17,9 @@ from tmtccmd.config.tmtc import (
|
|||||||
TmtcDefinitionWrapper,
|
TmtcDefinitionWrapper,
|
||||||
OpCodeEntry,
|
OpCodeEntry,
|
||||||
)
|
)
|
||||||
from tmtccmd.tc import service_provider, DefaultPusQueueHelper
|
from tmtccmd.tmtc import service_provider, DefaultPusQueueHelper
|
||||||
from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
|
from tmtccmd.pus.s8_fsfw_action import create_action_cmd
|
||||||
from tmtccmd.tc.decorator import ServiceProviderParams
|
from tmtccmd.tmtc.decorator import ServiceProviderParams
|
||||||
|
|
||||||
|
|
||||||
class OpCode:
|
class OpCode:
|
||||||
|
@ -7,14 +7,14 @@ from tmtccmd.config.tmtc import (
|
|||||||
TmtcDefinitionWrapper,
|
TmtcDefinitionWrapper,
|
||||||
OpCodeEntry,
|
OpCodeEntry,
|
||||||
)
|
)
|
||||||
from tmtccmd.tc import service_provider
|
from tmtccmd.tmtc import service_provider
|
||||||
from eive_tmtc.config.object_ids import EIVE_SYSTEM_ID
|
from eive_tmtc.config.object_ids import EIVE_SYSTEM_ID
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import (
|
from tmtccmd.pus.s200_fsfw_mode import (
|
||||||
create_mode_command,
|
create_mode_command,
|
||||||
create_announce_mode_recursive_command,
|
create_announce_mode_recursive_command,
|
||||||
)
|
)
|
||||||
from tmtccmd.tc.pus_8_fsfw_funccmd import create_action_cmd
|
from tmtccmd.pus.s8_fsfw_action import create_action_cmd
|
||||||
from tmtccmd.tc.decorator import ServiceProviderParams
|
from tmtccmd.tmtc.decorator import ServiceProviderParams
|
||||||
|
|
||||||
|
|
||||||
class SystemMode:
|
class SystemMode:
|
||||||
|
@ -6,8 +6,8 @@ from tmtccmd.config.tmtc import (
|
|||||||
TmtcDefinitionWrapper,
|
TmtcDefinitionWrapper,
|
||||||
OpCodeEntry,
|
OpCodeEntry,
|
||||||
)
|
)
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import Mode
|
from tmtccmd.pus.s200_fsfw_mode import Mode
|
||||||
|
|
||||||
|
|
||||||
class InfoAssy:
|
class InfoAssy:
|
||||||
|
@ -7,8 +7,8 @@ from tmtccmd.config.tmtc import (
|
|||||||
TmtcDefinitionWrapper,
|
TmtcDefinitionWrapper,
|
||||||
OpCodeEntry,
|
OpCodeEntry,
|
||||||
)
|
)
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from tmtccmd.tc.pus_3_fsfw_hk import (
|
from tmtccmd.pus.tc.s3_fsfw_hk import (
|
||||||
make_sid,
|
make_sid,
|
||||||
generate_one_hk_command,
|
generate_one_hk_command,
|
||||||
create_request_one_diag_command,
|
create_request_one_diag_command,
|
||||||
|
@ -10,14 +10,14 @@ from eive_tmtc.config.object_ids import get_object_ids
|
|||||||
from eive_tmtc.tmtc.tcs.defs import Heater
|
from eive_tmtc.tmtc.tcs.defs import Heater
|
||||||
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
|
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
|
||||||
from tmtccmd.config.tmtc import tmtc_definitions_provider
|
from tmtccmd.config.tmtc import tmtc_definitions_provider
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from tmtccmd.util.obj_id import ObjectIdU32
|
from tmtccmd.util.obj_id import ObjectIdU32
|
||||||
from tmtccmd.pus.s201_fsfw_health import (
|
from tmtccmd.pus.s201_fsfw_health import (
|
||||||
pack_set_health_cmd_data,
|
pack_set_health_cmd_data,
|
||||||
FsfwHealth,
|
FsfwHealth,
|
||||||
Subservice,
|
Subservice,
|
||||||
)
|
)
|
||||||
from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
|
from tmtccmd.pus.s8_fsfw_action import create_action_cmd
|
||||||
from spacepackets.ecss.tc import PusTelecommand
|
from spacepackets.ecss.tc import PusTelecommand
|
||||||
|
|
||||||
|
|
||||||
|
@ -8,9 +8,9 @@ from spacepackets.ecss import PusTelecommand
|
|||||||
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
|
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
|
||||||
from tmtccmd.config.tmtc import tmtc_definitions_provider
|
from tmtccmd.config.tmtc import tmtc_definitions_provider
|
||||||
|
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from tmtccmd.util import ObjectIdU32
|
from tmtccmd.util import ObjectIdU32
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import Mode, pack_mode_data, Subservice
|
from tmtccmd.pus.s200_fsfw_mode import Mode, pack_mode_data, Subservice
|
||||||
import eive_tmtc.config.object_ids as oids
|
import eive_tmtc.config.object_ids as oids
|
||||||
from eive_tmtc.config.object_ids import get_object_ids
|
from eive_tmtc.config.object_ids import get_object_ids
|
||||||
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
||||||
|
@ -7,8 +7,8 @@ from tmtccmd.config.tmtc import (
|
|||||||
TmtcDefinitionWrapper,
|
TmtcDefinitionWrapper,
|
||||||
OpCodeEntry,
|
OpCodeEntry,
|
||||||
)
|
)
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import Mode, create_announce_mode_recursive_command
|
from tmtccmd.pus.s200_fsfw_mode import Mode, create_announce_mode_recursive_command
|
||||||
|
|
||||||
|
|
||||||
class OpCode:
|
class OpCode:
|
||||||
|
@ -17,9 +17,9 @@ from tmtccmd.config.tmtc import (
|
|||||||
OpCodeEntry,
|
OpCodeEntry,
|
||||||
)
|
)
|
||||||
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
from tmtccmd.tc.pus_200_fsfw_mode import Mode, pack_mode_data
|
from tmtccmd.pus.s200_fsfw_mode import Mode, pack_mode_data
|
||||||
from tmtccmd.tc.pus_3_fsfw_hk import create_request_one_hk_command, make_sid
|
from tmtccmd.pus.tc.s3_fsfw_hk import create_request_one_hk_command, make_sid
|
||||||
from tmtccmd.util import ObjectIdU32
|
from tmtccmd.util import ObjectIdU32
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,8 +6,8 @@ from tmtccmd.config.tmtc import (
|
|||||||
OpCodeEntry,
|
OpCodeEntry,
|
||||||
)
|
)
|
||||||
from tmtccmd.pus.s17_test import create_service_17_ping_command
|
from tmtccmd.pus.s17_test import create_service_17_ping_command
|
||||||
from tmtccmd.tc import service_provider
|
from tmtccmd.tmtc import service_provider
|
||||||
from tmtccmd.tc.decorator import ServiceProviderParams
|
from tmtccmd.tmtc.decorator import ServiceProviderParams
|
||||||
|
|
||||||
|
|
||||||
class OpCodes:
|
class OpCodes:
|
||||||
|
@ -10,8 +10,8 @@ from tmtccmd.config.tmtc import (
|
|||||||
OpCodeEntry,
|
OpCodeEntry,
|
||||||
)
|
)
|
||||||
|
|
||||||
from tmtccmd.tc import service_provider
|
from tmtccmd.tmtc import service_provider
|
||||||
from tmtccmd.tc.decorator import ServiceProviderParams
|
from tmtccmd.tmtc.decorator import ServiceProviderParams
|
||||||
|
|
||||||
|
|
||||||
class Subservice(enum.IntEnum):
|
class Subservice(enum.IntEnum):
|
||||||
|
@ -15,8 +15,8 @@ from eive_tmtc.config.object_ids import (
|
|||||||
from eive_tmtc.config.definitions import CustomServiceList
|
from eive_tmtc.config.definitions import CustomServiceList
|
||||||
from tmtccmd.config import TmtcDefinitionWrapper
|
from tmtccmd.config import TmtcDefinitionWrapper
|
||||||
from tmtccmd.config.tmtc import tmtc_definitions_provider, OpCodeEntry
|
from tmtccmd.config.tmtc import tmtc_definitions_provider, OpCodeEntry
|
||||||
from tmtccmd.tc import service_provider
|
from tmtccmd.tmtc import service_provider
|
||||||
from tmtccmd.tc.decorator import ServiceProviderParams
|
from tmtccmd.tmtc.decorator import ServiceProviderParams
|
||||||
from dateutil.parser import parse
|
from dateutil.parser import parse
|
||||||
|
|
||||||
from spacepackets.ecss import PusService # noqa
|
from spacepackets.ecss import PusService # noqa
|
||||||
|
@ -4,8 +4,8 @@ from tmtccmd.config.tmtc import (
|
|||||||
TmtcDefinitionWrapper,
|
TmtcDefinitionWrapper,
|
||||||
tmtc_definitions_provider,
|
tmtc_definitions_provider,
|
||||||
)
|
)
|
||||||
from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
|
from tmtccmd.pus.s8_fsfw_action import create_action_cmd
|
||||||
from tmtccmd.tc import DefaultPusQueueHelper
|
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||||
|
|
||||||
from eive_tmtc.config.definitions import CustomServiceList
|
from eive_tmtc.config.definitions import CustomServiceList
|
||||||
from eive_tmtc.config.object_ids import XIPHOS_WDT_ID
|
from eive_tmtc.config.object_ids import XIPHOS_WDT_ID
|
||||||
|
@ -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 = "5.9.0"
|
version = "5.10.1"
|
||||||
requires-python = ">=3.10"
|
requires-python = ">=3.10"
|
||||||
license = {text = "Apache-2.0"}
|
license = {text = "Apache-2.0"}
|
||||||
authors = [
|
authors = [
|
||||||
@ -29,7 +29,7 @@ classifiers = [
|
|||||||
"Topic :: Scientific/Engineering"
|
"Topic :: Scientific/Engineering"
|
||||||
]
|
]
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"tmtccmd ~= 6.0",
|
"tmtccmd ~= 7.0",
|
||||||
"python-dateutil ~= 2.8",
|
"python-dateutil ~= 2.8",
|
||||||
# "tmtccmd @ git+https://github.com/robamu-org/tmtccmd@main"
|
# "tmtccmd @ git+https://github.com/robamu-org/tmtccmd@main"
|
||||||
]
|
]
|
||||||
|
79
tmtcc.py
79
tmtcc.py
@ -2,58 +2,60 @@
|
|||||||
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 tmtccmd.logging import add_colorlog_console_logger
|
from tmtccmd import BackendBase
|
||||||
from tmtccmd.cfdp.handler import CfdpInCcsdsHandler
|
from tmtccmd.cfdp.handler import RemoteEntityCfgTable
|
||||||
|
from eive_tmtc.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.tmtc 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, EiveCheckTimerProvider
|
||||||
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,
|
||||||
)
|
)
|
||||||
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
|
||||||
@ -77,12 +79,19 @@ class PusHandler(SpecificApidHandlerBase):
|
|||||||
self.verif_wrapper = wrapper
|
self.verif_wrapper = wrapper
|
||||||
self.raw_logger = raw_logger
|
self.raw_logger = raw_logger
|
||||||
self.hk_level = hk_level
|
self.hk_level = hk_level
|
||||||
|
self.these_objs_hk_only = []
|
||||||
|
self.hk_filter = HkFilter(object_ids=self.these_objs_hk_only, set_ids=[])
|
||||||
|
|
||||||
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:
|
||||||
# of.write(packet)
|
# of.write(packet)
|
||||||
pus_factory_hook(
|
pus_factory_hook(
|
||||||
packet, self.verif_wrapper, self.printer, self.raw_logger, self.hk_level
|
packet,
|
||||||
|
self.verif_wrapper,
|
||||||
|
self.printer,
|
||||||
|
self.raw_logger,
|
||||||
|
self.hk_level,
|
||||||
|
self.hk_filter,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -98,7 +107,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()
|
||||||
@ -144,7 +153,8 @@ def setup_cfdp_handler() -> CfdpInCcsdsWrapper:
|
|||||||
closure_requested=False,
|
closure_requested=False,
|
||||||
entity_id=CFDP_LOCAL_ENTITY_ID,
|
entity_id=CFDP_LOCAL_ENTITY_ID,
|
||||||
max_file_segment_len=990,
|
max_file_segment_len=990,
|
||||||
check_limit=None,
|
max_packet_len=1024,
|
||||||
|
check_limit=5,
|
||||||
crc_on_transmission=False,
|
crc_on_transmission=False,
|
||||||
crc_type=ChecksumType.CRC_32,
|
crc_type=ChecksumType.CRC_32,
|
||||||
default_transmission_mode=TransmissionMode.UNACKNOWLEDGED,
|
default_transmission_mode=TransmissionMode.UNACKNOWLEDGED,
|
||||||
@ -153,11 +163,13 @@ def setup_cfdp_handler() -> CfdpInCcsdsWrapper:
|
|||||||
closure_requested=False,
|
closure_requested=False,
|
||||||
entity_id=CFDP_REMOTE_ENTITY_ID,
|
entity_id=CFDP_REMOTE_ENTITY_ID,
|
||||||
max_file_segment_len=990,
|
max_file_segment_len=990,
|
||||||
check_limit=None,
|
max_packet_len=1024,
|
||||||
|
check_limit=5,
|
||||||
crc_on_transmission=False,
|
crc_on_transmission=False,
|
||||||
crc_type=ChecksumType.CRC_32,
|
crc_type=ChecksumType.CRC_32,
|
||||||
default_transmission_mode=TransmissionMode.UNACKNOWLEDGED,
|
default_transmission_mode=TransmissionMode.UNACKNOWLEDGED,
|
||||||
)
|
)
|
||||||
|
check_timer_provider = EiveCheckTimerProvider()
|
||||||
cfdp_seq_count_provider = FileSeqCountProvider(
|
cfdp_seq_count_provider = FileSeqCountProvider(
|
||||||
max_bit_width=16, file_name=Path("seqcnt_cfdp_transaction.txt")
|
max_bit_width=16, file_name=Path("seqcnt_cfdp_transaction.txt")
|
||||||
)
|
)
|
||||||
@ -167,7 +179,8 @@ def setup_cfdp_handler() -> CfdpInCcsdsWrapper:
|
|||||||
cfdp_user = EiveCfdpUser()
|
cfdp_user = EiveCfdpUser()
|
||||||
cfdp_in_ccsds_handler = CfdpInCcsdsHandler(
|
cfdp_in_ccsds_handler = CfdpInCcsdsHandler(
|
||||||
cfg=cfdp_cfg,
|
cfg=cfdp_cfg,
|
||||||
remote_cfgs=[remote_cfg, self_as_remote],
|
check_timer_provider=check_timer_provider,
|
||||||
|
remote_cfg_table=RemoteEntityCfgTable([remote_cfg, self_as_remote]),
|
||||||
ccsds_apid=CFDP_APID,
|
ccsds_apid=CFDP_APID,
|
||||||
ccsds_seq_cnt_provider=cfdp_ccsds_seq_count_provider,
|
ccsds_seq_cnt_provider=cfdp_ccsds_seq_count_provider,
|
||||||
cfdp_seq_cnt_provider=cfdp_seq_count_provider,
|
cfdp_seq_cnt_provider=cfdp_seq_count_provider,
|
||||||
@ -182,7 +195,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
|
||||||
|
Reference in New Issue
Block a user