Compare commits
26 Commits
b160f079b1
...
v6.2.0
Author | SHA1 | Date | |
---|---|---|---|
a8d0143b1e | |||
a0ad5f8948 | |||
20ecef5838 | |||
6d97841cbf | |||
512f0e4530 | |||
e2f0221681 | |||
e9eb45c088 | |||
ea72087d87 | |||
d48c029b85 | |||
b5f4f2ddab
|
|||
64dd19bd12 | |||
102821fc71 | |||
24f3abdd5a | |||
a880db5655 | |||
4e0cbb1034 | |||
96636d59e9 | |||
7dfdd40963 | |||
6282686f2f | |||
5af69eb14e | |||
5a0edbefa8 | |||
5bdba2dbad | |||
3ae6ccfb77 | |||
de84bf112b | |||
d182a9d5ec | |||
c72a04b262 | |||
492d364246 |
11
CHANGELOG.md
11
CHANGELOG.md
@@ -10,13 +10,22 @@ list yields a list of all related PRs for each release.
|
||||
|
||||
# [unreleased]
|
||||
|
||||
# [v6.2.0] 2024-04-10
|
||||
|
||||
## Added
|
||||
|
||||
- Added version set for STR
|
||||
- Added version set for STR.
|
||||
- Command for relative timeshift.
|
||||
- Health commands for payload components.
|
||||
|
||||
## Fixed
|
||||
|
||||
- EPS power commands working again.
|
||||
- GNSS commands working again.
|
||||
|
||||
## Changed
|
||||
|
||||
- Fixed PLOC commanding
|
||||
|
||||
# [v6.1.1] 2024-03-06
|
||||
|
||||
|
@@ -75,9 +75,12 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path
|
||||
7902;0x1ede;BIT_LOCK;INFO;A Bit Lock signal. Was detected. P1: raw BLO state, P2: 0;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
|
||||
7903;0x1edf;BIT_LOCK_LOST;INFO;A previously found Bit Lock signal was lost. P1: raw BLO state, P2: 0;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
|
||||
7905;0x1ee1;FRAME_PROCESSING_FAILED;LOW;The CCSDS Board could not interpret a TC;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
|
||||
8900;0x22c4;CLOCK_SET;INFO;No description;fsfw/src/fsfw/pus/Service9TimeManagement.h
|
||||
8901;0x22c5;CLOCK_DUMP;INFO;No description;fsfw/src/fsfw/pus/Service9TimeManagement.h
|
||||
8902;0x22c6;CLOCK_SET_FAILURE;LOW;No description;fsfw/src/fsfw/pus/Service9TimeManagement.h
|
||||
8900;0x22c4;CLOCK_SET;INFO;Clock has been set. P1: old timeval seconds. P2: new timeval seconds.;fsfw/src/fsfw/pus/Service9TimeManagement.h
|
||||
8901;0x22c5;CLOCK_DUMP_LEGACY;INFO;Clock dump event. P1: timeval seconds P2: timeval milliseconds.;fsfw/src/fsfw/pus/Service9TimeManagement.h
|
||||
8902;0x22c6;CLOCK_SET_FAILURE;LOW;Clock could not be set. P1: Returncode.;fsfw/src/fsfw/pus/Service9TimeManagement.h
|
||||
8903;0x22c7;CLOCK_DUMP;INFO;Clock dump event. P1: timeval seconds P2: timeval microseconds.;fsfw/src/fsfw/pus/Service9TimeManagement.h
|
||||
8904;0x22c8;CLOCK_DUMP_BEFORE_SETTING_TIME;INFO;No description;fsfw/src/fsfw/pus/Service9TimeManagement.h
|
||||
8905;0x22c9;CLOCK_DUMP_AFTER_SETTING_TIME;INFO;No description;fsfw/src/fsfw/pus/Service9TimeManagement.h
|
||||
9100;0x238c;TC_DELETION_FAILED;MEDIUM;Deletion of a TC from the map failed. P1: First 32 bit of request ID, P2. Last 32 bit of Request ID;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
|
||||
9700;0x25e4;TEST;INFO;No description;fsfw/src/fsfw/pus/Service17Test.h
|
||||
10600;0x2968;CHANGE_OF_SETUP_PARAMETER;LOW;No description;fsfw/src/fsfw_hal/devicehandlers/MgmLIS3MDLHandler.h
|
||||
@@ -233,8 +236,9 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path
|
||||
12902;0x3266;POWER_STATE_MACHINE_TIMEOUT;MEDIUM;No description;mission/system/acs/SusAssembly.h
|
||||
12903;0x3267;SIDE_SWITCH_TRANSITION_NOT_ALLOWED;LOW;Not implemented, would increase already high complexity. Operator should instead command the assembly off first and then command the assembly on into the desired mode/submode combination;mission/system/acs/SusAssembly.h
|
||||
13000;0x32c8;CHILDREN_LOST_MODE;MEDIUM;No description;mission/system/tcs/TcsBoardAssembly.h
|
||||
13100;0x332c;GPS_FIX_CHANGE;INFO;Fix has changed. P1: Old fix. P2: New fix 0: Not seen, 1: No Fix, 2: 2D-Fix, 3: 3D-Fix;mission/acs/archive/GPSDefinitions.h
|
||||
13101;0x332d;CANT_GET_FIX;LOW;Could not get fix in maximum allowed time. P1: Maximum allowed time to get a fix after the GPS was switched on.;mission/acs/archive/GPSDefinitions.h
|
||||
13100;0x332c;GPS_FIX_CHANGE;INFO;Fix has changed. P1: New fix. P2: Missed fix changes 0: Not seen, 1: No Fix, 2: 2D-Fix, 3: 3D-Fix;linux/acs/GPSDefinitions.h
|
||||
13101;0x332d;CANT_GET_FIX;MEDIUM;Could not get fix in maximum allowed time. Trying to reset both GNSS devices. P1: Maximum allowed time to get a fix after the GPS was switched on.;linux/acs/GPSDefinitions.h
|
||||
13102;0x332e;RESET_FAIL;HIGH;Failed to reset an GNNS Device. P1: Board-Side.;linux/acs/GPSDefinitions.h
|
||||
13200;0x3390;P60_BOOT_COUNT;INFO;P60 boot count is broadcasted once at SW startup. P1: Boot count;mission/power/P60DockHandler.h
|
||||
13201;0x3391;BATT_MODE;INFO;Battery mode is broadcasted at startup. P1: Mode;mission/power/P60DockHandler.h
|
||||
13202;0x3392;BATT_MODE_CHANGED;MEDIUM;Battery mode has changed. P1: Old mode. P2: New mode;mission/power/P60DockHandler.h
|
||||
|
|
@@ -122,12 +122,18 @@ def handle_event_packet( # noqa C901: Complexity okay here
|
||||
new_time_dt = datetime.datetime.fromtimestamp(new_time, datetime.timezone.utc)
|
||||
pw.dlog(f"Old time (UTC): {old_time_dt}")
|
||||
pw.dlog(f"New time (UTC): {new_time_dt}")
|
||||
if info.name == "CLOCK_DUMP":
|
||||
if info.name == "CLOCK_DUMP_LEGACY":
|
||||
specific_handler = True
|
||||
# param 1 is timeval seconds, param 2 is timeval subsecond milliseconds
|
||||
time = event_def.param1 + event_def.param2 / 1000.0
|
||||
time_dt = datetime.datetime.fromtimestamp(time, datetime.timezone.utc)
|
||||
pw.dlog(f"Current time: {time_dt}")
|
||||
if info.name == "CLOCK_DUMP":
|
||||
specific_handler = True
|
||||
# param 1 is timeval seconds, param 2 is timeval subsecond microseconds
|
||||
time = event_def.param1 + event_def.param2 / 1000000.0
|
||||
time_dt = datetime.datetime.fromtimestamp(time, datetime.timezone.utc)
|
||||
pw.dlog(f"Current time: {time_dt}")
|
||||
if info.name == "ACTIVE_SD_INFO":
|
||||
sd_0_state = (event_def.param2 >> 16) & 0xFFFF
|
||||
sd_1_state = event_def.param2 & 0xFFFF
|
||||
|
@@ -3,10 +3,8 @@ import enum
|
||||
import logging
|
||||
import struct
|
||||
|
||||
from eive_tmtc.config.definitions import CustomServiceList
|
||||
from eive_tmtc.pus_tm.defs import PrintWrapper
|
||||
from tmtccmd.config import CmdTreeNode, TmtcDefinitionWrapper, OpCodeEntry
|
||||
from tmtccmd.config.tmtc import tmtc_definitions_provider
|
||||
from tmtccmd.config import CmdTreeNode
|
||||
from tmtccmd.pus.s200_fsfw_mode import create_mode_command, Mode
|
||||
from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||
from tmtccmd.pus.tc.s3_fsfw_hk import (
|
||||
@@ -15,6 +13,7 @@ from tmtccmd.pus.tc.s3_fsfw_hk import (
|
||||
create_enable_periodic_hk_command_with_interval_with_diag,
|
||||
create_disable_periodic_hk_command_with_diag,
|
||||
)
|
||||
from tmtccmd.pus.tc.s8_fsfw_action import create_action_cmd
|
||||
from tmtccmd.fsfw.tmtc_printer import FsfwTmTcPrinter
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
@@ -24,6 +23,11 @@ class GpsInfo:
|
||||
MAX_SATELLITES = 30
|
||||
|
||||
|
||||
class GnssChip(enum.IntEnum):
|
||||
A_SIDE = 0
|
||||
B_SIDE = 1
|
||||
|
||||
|
||||
class OpCode:
|
||||
OFF = "off"
|
||||
ON = "on"
|
||||
@@ -59,36 +63,25 @@ def create_gnss_node() -> CmdTreeNode:
|
||||
]
|
||||
info_strs = [getattr(Info, key) for key in dir(OpCode) if not key.startswith("__")]
|
||||
combined_dict = dict(zip(op_code_strs, info_strs))
|
||||
node = CmdTreeNode("gnss", "GNSS device", hide_children_for_print=True)
|
||||
node = CmdTreeNode("gnss_devs", "GNSS Controller", hide_children_for_print=True)
|
||||
for op_code, info in combined_dict.items():
|
||||
node.add_child(CmdTreeNode(op_code, info))
|
||||
return node
|
||||
|
||||
|
||||
@tmtc_definitions_provider
|
||||
def add_gps_cmds(defs: TmtcDefinitionWrapper):
|
||||
oce = OpCodeEntry()
|
||||
oce.add(keys=OpCode.OFF, info=Info.OFF)
|
||||
oce.add(keys=OpCode.ON, info=Info.ON)
|
||||
oce.add(keys=OpCode.RESET_GNSS, info=Info.RESET_GNSS)
|
||||
oce.add(keys=OpCode.REQ_CORE_HK, info=Info.REQ_CORE_HK)
|
||||
oce.add(keys=OpCode.ENABLE_CORE_HK, info=Info.ENABLE_CORE_HK)
|
||||
oce.add(keys=OpCode.DISABLE_CORE_HK, info=Info.DISABLE_CORE_HK)
|
||||
oce.add(keys=OpCode.REQ_SKYVIEW_HK, info=Info.REQ_SKYVIEW_HK)
|
||||
oce.add(keys=OpCode.ENABLE_SKYVIEW_HK, info=Info.ENABLE_SKYVIEW_HK)
|
||||
oce.add(keys=OpCode.DISABLE_SKYVIEW_HK, info=Info.DISABLE_SKYVIEW_HK)
|
||||
defs.add_service(
|
||||
name=CustomServiceList.GPS_CTRL.value,
|
||||
info="GPS/GNSS Controller",
|
||||
op_code_entry=oce,
|
||||
)
|
||||
|
||||
|
||||
def pack_gps_command( # noqa: C901
|
||||
object_id: bytes, q: DefaultPusQueueHelper, cmd_str: str
|
||||
): # noqa: C901:
|
||||
if cmd_str == OpCode.RESET_GNSS:
|
||||
# TODO: This needs to be re-implemented
|
||||
for val in GnssChip:
|
||||
print("{:<2}: {:<20}".format(val, val.name))
|
||||
chip: str = ""
|
||||
while chip not in ["0", "1"]:
|
||||
chip = input("Please specify which chip to reset: ")
|
||||
q.add_log_cmd(f"gps: {Info.DISABLE_CORE_HK}")
|
||||
q.add_pus_tc(
|
||||
create_action_cmd(object_id=object_id, action_id=5, user_data=chip.encode())
|
||||
)
|
||||
_LOGGER.warning("Reset pin handling needs to be re-implemented")
|
||||
if cmd_str == OpCode.ENABLE_CORE_HK:
|
||||
interval = float(input("Please specify interval in floating point seconds: "))
|
||||
|
@@ -6,6 +6,8 @@ from eive_tmtc.config.object_ids import (
|
||||
GYRO_1_L3G_HANDLER_ID,
|
||||
GYRO_2_ADIS_HANDLER_ID,
|
||||
ACS_BOARD_ASS_ID,
|
||||
PLOC_MPSOC_ID,
|
||||
PLOC_SUPV_ID,
|
||||
RW_ASSEMBLY,
|
||||
SUS_BOARD_ASS_ID,
|
||||
MGM_0_LIS3_HANDLER_ID,
|
||||
@@ -28,6 +30,7 @@ SUBSYSTEM_DICT = {
|
||||
0: "acs",
|
||||
1: "tcs",
|
||||
2: "com",
|
||||
3: "payload",
|
||||
}
|
||||
|
||||
ACS_OBJ_DICT = {
|
||||
@@ -59,6 +62,11 @@ TCS_OBJ_DICT = {
|
||||
5: ("TMP1075 IF BOARD", TMP1075_HANDLER_IF_BRD_ID),
|
||||
}
|
||||
|
||||
PAYLOAD_OBJ_DICT = {
|
||||
0: ("Payload MPSoC", PLOC_MPSOC_ID),
|
||||
1: ("Payload Supervisor", PLOC_SUPV_ID),
|
||||
}
|
||||
|
||||
|
||||
def get_obj_if_from_dict(lut: dict) -> bytes:
|
||||
for k, v in lut.items():
|
||||
@@ -81,6 +89,8 @@ def prompt_object() -> bytes:
|
||||
return get_obj_if_from_dict(ACS_OBJ_DICT)
|
||||
elif subsystem == "tcs":
|
||||
return get_obj_if_from_dict(TCS_OBJ_DICT)
|
||||
elif subsystem == "payload":
|
||||
return get_obj_if_from_dict(PAYLOAD_OBJ_DICT)
|
||||
else:
|
||||
print(f"No object for subsystem {subsystem}")
|
||||
return bytes()
|
||||
|
@@ -1,6 +1,7 @@
|
||||
import enum
|
||||
import struct
|
||||
import logging
|
||||
from datetime import datetime
|
||||
import datetime
|
||||
|
||||
from spacepackets.ecss import PusTelecommand, PusService
|
||||
|
||||
@@ -8,28 +9,34 @@ from tmtccmd.tmtc import DefaultPusQueueHelper
|
||||
from tmtccmd.config import CmdTreeNode
|
||||
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Subservice(enum.IntEnum):
|
||||
SET_TIME = 128
|
||||
DUMP_TIME = 129
|
||||
RELATIVE_TIMESHIFT = 130
|
||||
|
||||
|
||||
class CmdStr:
|
||||
SET_CURRENT_TIME = "set_curr_time"
|
||||
RELATIVE_TIMESHIFT = "relative_timeshift"
|
||||
DUMP_TIME = "dump_time"
|
||||
|
||||
|
||||
class Info:
|
||||
SET_CURRENT_TIME = "Setting current time in ASCII format"
|
||||
RELATIVE_TIMESHIFT = "Shift time with a relative offset"
|
||||
DUMP_TIME = "Dump system time as event"
|
||||
|
||||
|
||||
def pack_time_management_cmd(q: DefaultPusQueueHelper, cmd_str: str):
|
||||
if cmd_str == CmdStr.SET_CURRENT_TIME:
|
||||
current_time = datetime.utcnow().isoformat() + "Z" + "\0"
|
||||
current_time_ascii = current_time.encode("ascii")
|
||||
logging.getLogger(__name__).info(
|
||||
f"Current time in ASCII format: {current_time_ascii}"
|
||||
current_time = (
|
||||
datetime.datetime.now(datetime.timezone.utc).isoformat() + "Z" + "\0"
|
||||
)
|
||||
current_time_ascii = current_time.encode("ascii")
|
||||
_LOGGER.info(f"Current time in ASCII format: {current_time_ascii}")
|
||||
q.add_log_cmd(Info.SET_CURRENT_TIME)
|
||||
q.add_pus_tc(
|
||||
PusTelecommand(
|
||||
@@ -38,6 +45,17 @@ def pack_time_management_cmd(q: DefaultPusQueueHelper, cmd_str: str):
|
||||
app_data=current_time_ascii,
|
||||
)
|
||||
)
|
||||
elif cmd_str == CmdStr.RELATIVE_TIMESHIFT:
|
||||
nanos = int(input("Specify relative timeshift in nanoseconds: "))
|
||||
nanos_packed = struct.pack("!q", nanos)
|
||||
q.add_log_cmd(Info.RELATIVE_TIMESHIFT)
|
||||
q.add_pus_tc(
|
||||
PusTelecommand(
|
||||
service=PusService.S9_TIME_MGMT,
|
||||
subservice=Subservice.RELATIVE_TIMESHIFT,
|
||||
app_data=nanos_packed,
|
||||
)
|
||||
)
|
||||
elif cmd_str == CmdStr.DUMP_TIME:
|
||||
q.add_log_cmd(Info.DUMP_TIME)
|
||||
q.add_pus_tc(
|
||||
@@ -51,4 +69,5 @@ def create_time_node() -> CmdTreeNode:
|
||||
time_node = CmdTreeNode("time", "Time Management")
|
||||
time_node.add_child(CmdTreeNode(CmdStr.SET_CURRENT_TIME, "Set current time"))
|
||||
time_node.add_child(CmdTreeNode(CmdStr.DUMP_TIME, "Dumpy current time"))
|
||||
time_node.add_child(CmdTreeNode(CmdStr.RELATIVE_TIMESHIFT, Info.RELATIVE_TIMESHIFT))
|
||||
return time_node
|
||||
|
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
|
||||
name = "eive-tmtc"
|
||||
description = "TMTC Commander EIVE"
|
||||
readme = "README.md"
|
||||
version = "6.1.1"
|
||||
version = "6.2.0"
|
||||
requires-python = ">=3.10"
|
||||
license = {text = "Apache-2.0"}
|
||||
authors = [
|
||||
|
Reference in New Issue
Block a user