diff --git a/.run/OBSW Switch to Both SDs.run.xml b/.run/OBSW Switch to Both SDs.run.xml new file mode 100644 index 0000000..4ea5335 --- /dev/null +++ b/.run/OBSW Switch to Both SDs.run.xml @@ -0,0 +1,24 @@ + + + + + \ No newline at end of file diff --git a/.run/OBSW Switch to SD 0.run.xml b/.run/OBSW Switch to SD 0.run.xml new file mode 100644 index 0000000..9a05d45 --- /dev/null +++ b/.run/OBSW Switch to SD 0.run.xml @@ -0,0 +1,24 @@ + + + + + \ No newline at end of file diff --git a/.run/OBSW Switch to SD 1.run.xml b/.run/OBSW Switch to SD 1.run.xml new file mode 100644 index 0000000..6fb2e13 --- /dev/null +++ b/.run/OBSW Switch to SD 1.run.xml @@ -0,0 +1,24 @@ + + + + + \ No newline at end of file diff --git a/.run/OBSW Update from SD 0.run.xml b/.run/OBSW Update from SD 0.run.xml new file mode 100644 index 0000000..ec2cf39 --- /dev/null +++ b/.run/OBSW Update from SD 0.run.xml @@ -0,0 +1,24 @@ + + + + + \ No newline at end of file diff --git a/.run/OBSW Update from SD 1.run.xml b/.run/OBSW Update from SD 1.run.xml new file mode 100644 index 0000000..4392ea7 --- /dev/null +++ b/.run/OBSW Update from SD 1.run.xml @@ -0,0 +1,24 @@ + + + + + \ No newline at end of file diff --git a/.run/OBSW Update from tmp.run.xml b/.run/OBSW Update from tmp.run.xml new file mode 100644 index 0000000..744b032 --- /dev/null +++ b/.run/OBSW Update from tmp.run.xml @@ -0,0 +1,24 @@ + + + + + \ No newline at end of file diff --git a/.run/Transfer OBSW CFDP.run.xml b/.run/Transfer OBSW CFDP.run.xml new file mode 100644 index 0000000..f9ee452 --- /dev/null +++ b/.run/Transfer OBSW CFDP.run.xml @@ -0,0 +1,24 @@ + + + + + \ No newline at end of file diff --git a/config/events.csv b/config/events.csv index a38aa4e..17361eb 100644 --- a/config/events.csv +++ b/config/events.csv @@ -69,6 +69,7 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path 7510;0x1d56;TRYING_RECOVERY;MEDIUM;;fsfw/src/fsfw/health/HasHealthIF.h 7511;0x1d57;RECOVERY_STEP;MEDIUM;;fsfw/src/fsfw/health/HasHealthIF.h 7512;0x1d58;RECOVERY_DONE;MEDIUM;;fsfw/src/fsfw/health/HasHealthIF.h +7600;0x1db0;HANDLE_PACKET_FAILED;LOW;;fsfw/src/fsfw/tcdistribution/definitions.h 7900;0x1edc;RF_AVAILABLE;INFO;A RF available signal was detected. P1: raw RFA state, P2: 0;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h 7901;0x1edd;RF_LOST;INFO;A previously found RF available signal was lost. P1: raw RFA state, P2: 0;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h 7902;0x1ede;BIT_LOCK;INFO;A Bit Lock signal. Was detected. P1: raw BLO state, P2: 0;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h @@ -119,8 +120,8 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path 12003;0x2ee3;SUPV_EXE_FAILURE;LOW;PLOC received execution failure report P1: ID of command for which the execution failed P2: Status code sent by the supervisor handler;linux/devices/ploc/PlocSupervisorHandler.h 12004;0x2ee4;SUPV_CRC_FAILURE_EVENT;LOW;PLOC supervisor reply has invalid crc;linux/devices/ploc/PlocSupervisorHandler.h 12005;0x2ee5;SUPV_MPSOC_SHUWDOWN_BUILD_FAILED;LOW;Failed to build the command to shutdown the MPSoC;linux/devices/ploc/PlocSupervisorHandler.h -12100;0x2f44;SANITIZATION_FAILED;LOW;;bsp_q7s/memory/SdCardManager.h -12101;0x2f45;MOUNTED_SD_CARD;INFO;;bsp_q7s/memory/SdCardManager.h +12100;0x2f44;SANITIZATION_FAILED;LOW;;bsp_q7s/fs/SdCardManager.h +12101;0x2f45;MOUNTED_SD_CARD;INFO;;bsp_q7s/fs/SdCardManager.h 12300;0x300c;SEND_MRAM_DUMP_FAILED;LOW;Failed to send mram dump command to supervisor handler P1: Return value of commandAction function P2: Start address of MRAM to dump with this command;linux/devices/ploc/PlocMemoryDumper.h 12301;0x300d;MRAM_DUMP_FAILED;LOW;Received completion failure report form PLOC supervisor handler P1: MRAM start address of failing dump command;linux/devices/ploc/PlocMemoryDumper.h 12302;0x300e;MRAM_DUMP_FINISHED;LOW;MRAM dump finished successfully;linux/devices/ploc/PlocMemoryDumper.h @@ -215,6 +216,3 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path 13701;0x3585;REBOOT_SW;MEDIUM; Software reboot occurred. Can also be a systemd reboot. P1: Current Chip, P2: Current Copy;bsp_q7s/core/CoreController.h 13702;0x3586;REBOOT_MECHANISM_TRIGGERED;MEDIUM;The reboot mechanism was triggered. P1: First 16 bits: Last Chip, Last 16 bits: Last Copy, P2: Each byte is the respective reboot count for the slots;bsp_q7s/core/CoreController.h 13703;0x3587;REBOOT_HW;MEDIUM;;bsp_q7s/core/CoreController.h -13800;0x35e8;MISSING_PACKET;LOW;;mission/devices/devicedefinitions/ScexDefinitions.h -13801;0x35e9;EXPERIMENT_TIMEDOUT;LOW;;mission/devices/devicedefinitions/ScexDefinitions.h -13802;0x35ea;MULTI_PACKET_COMMAND_DONE;INFO;;mission/devices/devicedefinitions/ScexDefinitions.h diff --git a/config/objects.csv b/config/objects.csv index 04f3910..924ae0a 100644 --- a/config/objects.csv +++ b/config/objects.csv @@ -46,7 +46,6 @@ 0x44330015;PLOC_MPSOC_HANDLER 0x44330016;PLOC_SUPERVISOR_HANDLER 0x44330017;PLOC_SUPERVISOR_HELPER -0x44330032;SCEX 0x444100A2;SOLAR_ARRAY_DEPL_HANDLER 0x444100A4;HEATER_HANDLER 0x44420004;TMP1075_HANDLER_1 @@ -70,7 +69,6 @@ 0x445300A3;SYRLINKS_HK_HANDLER 0x49000000;ARDUINO_COM_IF 0x49010005;GPIO_IF -0x49010006;SCEX_UART_READER 0x49020004;SPI_MAIN_COM_IF 0x49020005;SPI_RW_COM_IF 0x49020006;SPI_RTD_COM_IF @@ -130,6 +128,8 @@ 0x73000002;SUS_BOARD_ASS 0x73000003;TCS_BOARD_ASS 0x73000004;RW_ASS +0x73000005;CFDP_HANDLER +0x73000006;CFDP_DISTRIBUTOR 0x73000100;TM_FUNNEL 0x73500000;CCSDS_IP_CORE_BRIDGE 0xFFFFFFFF;NO_OBJECT diff --git a/config/returnvalues.csv b/config/returnvalues.csv index 7a1e52f..f464a43 100644 --- a/config/returnvalues.csv +++ b/config/returnvalues.csv @@ -89,17 +89,6 @@ Full ID (hex); Name; Description; Unique ID; Subsytem Name; File Path 0x06e2;PP_InvalidContent;;226;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h 0x06e3;PP_UnalignedAccess;;227;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h 0x06e4;PP_WriteProtected;;228;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h -0x4300;FILS_GenericFileError;;0;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h -0x4301;FILS_IsBusy;;1;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h -0x4302;FILS_InvalidParameters;;2;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h -0x4305;FILS_FileDoesNotExist;;5;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h -0x4306;FILS_FileAlreadyExists;;6;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h -0x4307;FILS_FileLocked;;7;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h -0x430a;FILS_DirectoryDoesNotExist;;10;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h -0x430b;FILS_DirectoryAlreadyExists;;11;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h -0x430c;FILS_DirectoryNotEmpty;;12;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h -0x430f;FILS_SequencePacketMissingWrite;;15;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h -0x4310;FILS_SequencePacketMissingRead;;16;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h 0x13e0;MH_UnknownCmd;;224;MEMORY_HELPER;fsfw/src/fsfw/memory/MemoryHelper.h 0x13e1;MH_InvalidAddress;;225;MEMORY_HELPER;fsfw/src/fsfw/memory/MemoryHelper.h 0x13e2;MH_InvalidSize;;226;MEMORY_HELPER;fsfw/src/fsfw/memory/MemoryHelper.h @@ -215,19 +204,20 @@ Full ID (hex); Name; Description; Unique ID; Subsytem Name; File Path 0x0804;DPS_DataSetUninitialised;;4;DATA_SET_CLASS;fsfw/src/fsfw/datapool/DataSetIF.h 0x0805;DPS_DataSetFull;;5;DATA_SET_CLASS;fsfw/src/fsfw/datapool/DataSetIF.h 0x0806;DPS_PoolVarNull;;6;DATA_SET_CLASS;fsfw/src/fsfw/datapool/DataSetIF.h -0x1c01;TCD_PacketLost;;1;PACKET_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/TcDistributor.h -0x1c02;TCD_DestinationNotFound;;2;PACKET_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/TcDistributor.h -0x1c03;TCD_ServiceIdAlreadyExists;;3;PACKET_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/TcDistributor.h -0x1b00;TCC_InvalidCcsdsVersion;;0;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h -0x1b01;TCC_InvalidApid;;1;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h -0x1b02;TCC_InvalidPacketType;;2;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h -0x1b03;TCC_InvalidSecHeaderField;;3;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h -0x1b04;TCC_IncorrectPrimaryHeader;;4;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h -0x1b05;TCC_IncompletePacket;;5;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h -0x1b06;TCC_InvalidPusVersion;;6;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h -0x1b07;TCC_IncorrectChecksum;;7;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h -0x1b08;TCC_IllegalPacketSubtype;;8;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h -0x1b09;TCC_IncorrectSecondaryHeader;;9;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h +0x1c01;TCD_PacketLost;;1;PACKET_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/TcDistributorBase.h +0x1c02;TCD_DestinationNotFound;;2;PACKET_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/TcDistributorBase.h +0x1c03;TCD_ServiceIdAlreadyExists;;3;PACKET_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/TcDistributorBase.h +0x1b00;TCC_NoDestinationFound;;0;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h +0x1b01;TCC_InvalidCcsdsVersion;;1;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h +0x1b02;TCC_InvalidApid;;2;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h +0x1b03;TCC_InvalidPacketType;;3;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h +0x1b04;TCC_InvalidSecHeaderField;;4;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h +0x1b05;TCC_IncorrectPrimaryHeader;;5;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h +0x1b07;TCC_IncompletePacket;;7;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h +0x1b08;TCC_InvalidPusVersion;;8;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h +0x1b09;TCC_IncorrectChecksum;;9;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h +0x1b0a;TCC_IllegalPacketSubtype;;10;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h +0x1b0b;TCC_IncorrectSecondaryHeader;;11;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h 0x3001;POS_InPowerTransition;;1;POWER_SWITCHER;fsfw/src/fsfw/power/PowerSwitcher.h 0x3002;POS_SwitchStateMismatch;;2;POWER_SWITCHER;fsfw/src/fsfw/power/PowerSwitcher.h 0x0501;PS_SwitchOn;;1;POWER_SWITCH_IF;fsfw/src/fsfw/power/PowerSwitchIF.h @@ -324,13 +314,31 @@ Full ID (hex); Name; Description; Unique ID; Subsytem Name; File Path 0x31e3;LIM_WrongLimitId;;227;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h 0x31ee;LIM_MonitorNotFound;;238;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h 0x3601;CFDP_InvalidTlvType;;1;CFDP;fsfw/src/fsfw/cfdp/definitions.h -0x3602;CFDP_InvalidDirectiveFields;;2;CFDP;fsfw/src/fsfw/cfdp/definitions.h +0x3602;CFDP_InvalidDirectiveField;;2;CFDP;fsfw/src/fsfw/cfdp/definitions.h 0x3603;CFDP_InvalidPduDatafieldLen;;3;CFDP;fsfw/src/fsfw/cfdp/definitions.h 0x3604;CFDP_InvalidAckDirectiveFields;;4;CFDP;fsfw/src/fsfw/cfdp/definitions.h 0x3605;CFDP_MetadataCantParseOptions;;5;CFDP;fsfw/src/fsfw/cfdp/definitions.h -0x3606;CFDP_FinishedCantParseFsResponses;;6;CFDP;fsfw/src/fsfw/cfdp/definitions.h +0x3606;CFDP_NakCantParseOptions;;6;CFDP;fsfw/src/fsfw/cfdp/definitions.h +0x3607;CFDP_FinishedCantParseFsResponses;;7;CFDP;fsfw/src/fsfw/cfdp/definitions.h 0x3608;CFDP_FilestoreRequiresSecondFile;;8;CFDP;fsfw/src/fsfw/cfdp/definitions.h 0x3609;CFDP_FilestoreResponseCantParseFsMessage;;9;CFDP;fsfw/src/fsfw/cfdp/definitions.h +0x360a;CFDP_InvalidPduFormat;;10;CFDP;fsfw/src/fsfw/cfdp/definitions.h +0x4300;FILS_GenericFileError;;0;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h +0x4301;FILS_GenericDirError;;1;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h +0x4303;FILS_GenericRenameError;;3;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h +0x4304;FILS_IsBusy;;4;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h +0x4305;FILS_InvalidParameters;;5;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h +0x430a;FILS_FileDoesNotExist;;10;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h +0x430b;FILS_FileAlreadyExists;;11;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h +0x430c;FILS_NotAFile;;12;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h +0x430d;FILS_FileLocked;;13;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h +0x430e;FILS_PermissionDenied;;14;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h +0x4315;FILS_DirectoryDoesNotExist;;21;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h +0x4316;FILS_DirectoryAlreadyExists;;22;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h +0x4317;FILS_NotADirectory;;23;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h +0x4318;FILS_DirectoryNotEmpty;;24;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h +0x431e;FILS_SequencePacketMissingWrite;;30;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h +0x431f;FILS_SequencePacketMissingRead;;31;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h 0x2c01;CCS_BcIsSetVrCommand;;1;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h 0x2c02;CCS_BcIsUnlockCommand;;2;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h 0x2cb0;CCS_BcIllegalCommand;;176;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h @@ -458,15 +466,15 @@ Full ID (hex); Name; Description; Unique ID; Subsytem Name; File Path 0x1d04;ATC_SendTmFailed;;4;ACCEPTS_TELECOMMANDS_IF;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h 0x1d05;ATC_Timeout;;5;ACCEPTS_TELECOMMANDS_IF;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h 0x6b00;SCBU_KeyNotFound;;0;SCRATCH_BUFFER;bsp_q7s/memory/scratchApi.h -0x64a0;FSHLP_SdNotMounted;SD card specified with path string not mounted;160;FILE_SYSTEM_HELPER;bsp_q7s/memory/FilesystemHelper.h -0x64a1;FSHLP_FileNotExists;Specified file does not exist on filesystem;161;FILE_SYSTEM_HELPER;bsp_q7s/memory/FilesystemHelper.h -0x6a00;SDMA_OpOngoing;;0;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h -0x6a01;SDMA_AlreadyOn;;1;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h -0x6a02;SDMA_AlreadyMounted;;2;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h -0x6a03;SDMA_AlreadyOff;;3;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h -0x6a0a;SDMA_StatusFileNexists;;10;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h -0x6a0b;SDMA_StatusFileFormatInvalid;;11;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h -0x6a0c;SDMA_MountError;;12;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h -0x6a0d;SDMA_UnmountError;;13;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h -0x6a0e;SDMA_SystemCallError;;14;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h -0x6a0f;SDMA_PopenCallError;;15;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h +0x64a0;FSHLP_SdNotMounted;SD card specified with path string not mounted;160;FILE_SYSTEM_HELPER;bsp_q7s/fs/FilesystemHelper.h +0x64a1;FSHLP_FileNotExists;Specified file does not exist on filesystem;161;FILE_SYSTEM_HELPER;bsp_q7s/fs/FilesystemHelper.h +0x6a00;SDMA_OpOngoing;;0;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h +0x6a01;SDMA_AlreadyOn;;1;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h +0x6a02;SDMA_AlreadyMounted;;2;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h +0x6a03;SDMA_AlreadyOff;;3;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h +0x6a0a;SDMA_StatusFileNexists;;10;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h +0x6a0b;SDMA_StatusFileFormatInvalid;;11;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h +0x6a0c;SDMA_MountError;;12;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h +0x6a0d;SDMA_UnmountError;;13;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h +0x6a0e;SDMA_SystemCallError;;14;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h +0x6a0f;SDMA_PopenCallError;;15;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h diff --git a/pus_tc/system/core.py b/pus_tc/system/core.py index a7a2e92..e1b685d 100644 --- a/pus_tc/system/core.py +++ b/pus_tc/system/core.py @@ -1,6 +1,7 @@ import enum from config.definitions import CustomServiceList +from spacepackets.ecss import PusTelecommand from tmtccmd.config import TmtcDefinitionWrapper from tmtccmd.tc import DefaultPusQueueHelper @@ -17,12 +18,15 @@ LOGGER = get_console_logger() class ActionIds(enum.IntEnum): LIST_DIR_INTO_FILE = 0 SWITCH_REBOOT_FILE_HANDLING = 5 - RESET_ALL_REBOOT_COUNTERS = 6 - RESET_REBOOT_COUNTER_00 = 7 - RESET_REBOOT_COUNTER_01 = 8 - RESET_REBOOT_COUNTER_10 = 9 - RESET_REBOOT_COUNTER_11 = 10 - SET_MAX_REBOOT_CNT = 11 + RESET_REBOOT_COUNTER = 6 + SWITCH_IMG_LOCK = 7 + SET_MAX_REBOOT_CNT = 8 + UPDATE_OBSW_FROM_SD_0 = 10 + UPDATE_OBSW_FROM_SD_1 = 11 + UPDATE_OBSW_FROM_TMP = 12 + SWITCH_TO_SD_0 = 16 + SWITCH_TO_SD_1 = 17 + SWITCH_TO_BOTH_SD_CARDS = 18 XSC_REBOOT = 32 FULL_REBOOT = 34 @@ -40,6 +44,12 @@ class OpCodes: XSC_REBOOT_1_1 = ["5", "reboot_11"] REBOOT_FULL = ["6", "reboot_regular"] GET_HK = ["7", "get_hk"] + OBSW_UPDATE_FROM_SD_0 = ["obsw_update_sd0"] + OBSW_UPDATE_FROM_SD_1 = ["obsw_update_sd1"] + OBSW_UPDATE_FROM_TMP = ["obsw_update_tmp"] + SWITCH_TO_SD_0 = ["switch_to_sd_0"] + SWITCH_TO_SD_1 = ["switch_to_sd_1"] + SWITCH_TO_BOTH_SD_CARDS = ["switch_to_both_sd_cards"] ENABLE_REBOOT_FILE_HANDLING = ["32", "rbh_off"] DISABLE_REBOOT_FILE_HANDLING = ["33", "rbh_on"] RESET_ALL_REBOOT_COUNTERS = ["34", "rbh_reset_a"] @@ -53,6 +63,12 @@ class OpCodes: class Info: REBOOT_XSC = "XSC reboot with prompt" REBOOT_FULL = "Full regular reboot" + OBSW_UPDATE_FROM_SD_0 = "Update OBSW from SD Card 0" + OBSW_UPDATE_FROM_SD_1 = "Update OBSW from SD Card 1" + OBSW_UPDATE_FROM_TMP = "Update OBSW from tmp folder" + SWITCH_TO_SD_0 = "Switch to SD card 0" + SWITCH_TO_SD_1 = "Switch to SD card 1" + SWITCH_TO_BOTH_SD_CARDS = "Switch to both SD cards with specified active card" class Chip(enum.IntEnum): @@ -110,6 +126,12 @@ def add_core_controller_definitions(defs: TmtcDefinitionWrapper): keys=OpCodes.RESET_REBOOT_COUNTER_11, info="Reset reboot counter 1 1", ) + oce.add(keys=OpCodes.OBSW_UPDATE_FROM_SD_0, info=Info.OBSW_UPDATE_FROM_SD_0) + oce.add(keys=OpCodes.OBSW_UPDATE_FROM_SD_1, info=Info.OBSW_UPDATE_FROM_SD_1) + oce.add(keys=OpCodes.OBSW_UPDATE_FROM_TMP, info=Info.OBSW_UPDATE_FROM_TMP) + oce.add(keys=OpCodes.SWITCH_TO_SD_0, info=Info.SWITCH_TO_SD_0) + oce.add(keys=OpCodes.SWITCH_TO_SD_1, info=Info.SWITCH_TO_SD_1) + oce.add(keys=OpCodes.SWITCH_TO_BOTH_SD_CARDS, info=Info.SWITCH_TO_BOTH_SD_CARDS) defs.add_service(CustomServiceList.CORE.value, "Core Controller", oce) @@ -155,44 +177,76 @@ def pack_core_commands(q: DefaultPusQueueHelper, op_code: str): ) if op_code in OpCodes.DISABLE_REBOOT_FILE_HANDLING: q.add_log_cmd("Disabling reboot file handling") - app_data = bytearray([0]) - make_fsfw_action_cmd( - object_id=CORE_CONTROLLER_ID, - action_id=ActionIds.SWITCH_REBOOT_FILE_HANDLING, - user_data=app_data, + user_data = bytearray([0]) + q.add_pus_tc( + make_fsfw_action_cmd( + object_id=CORE_CONTROLLER_ID, + action_id=ActionIds.SWITCH_REBOOT_FILE_HANDLING, + user_data=user_data, + ) ) if op_code in OpCodes.ENABLE_REBOOT_FILE_HANDLING: q.add_log_cmd("Enabling reboot file handling") - app_data = bytearray([1]) - make_fsfw_action_cmd( - object_id=CORE_CONTROLLER_ID, - action_id=ActionIds.SWITCH_REBOOT_FILE_HANDLING, - user_data=app_data, + user_data = bytearray([1]) + q.add_pus_tc( + make_fsfw_action_cmd( + object_id=CORE_CONTROLLER_ID, + action_id=ActionIds.SWITCH_REBOOT_FILE_HANDLING, + user_data=user_data, + ) ) if op_code in OpCodes.RESET_ALL_REBOOT_COUNTERS: q.add_log_cmd("Resetting all reboot counters") - make_fsfw_action_cmd( - object_id=CORE_CONTROLLER_ID, action_id=ActionIds.RESET_ALL_REBOOT_COUNTERS + q.add_pus_tc( + make_fsfw_action_cmd( + object_id=CORE_CONTROLLER_ID, + action_id=ActionIds.RESET_REBOOT_COUNTER, + ) ) if op_code in OpCodes.RESET_REBOOT_COUNTER_00: - q.add_log_cmd("Resetting reboot counter 0 0") - make_fsfw_action_cmd( - object_id=CORE_CONTROLLER_ID, action_id=ActionIds.RESET_REBOOT_COUNTER_00 - ) + reset_specific_boot_counter(q, 0, 0) if op_code in OpCodes.RESET_REBOOT_COUNTER_01: - q.add_log_cmd("Resetting reboot counter 0 1") - make_fsfw_action_cmd( - object_id=CORE_CONTROLLER_ID, action_id=ActionIds.RESET_REBOOT_COUNTER_01 - ) + reset_specific_boot_counter(q, 0, 1) if op_code in OpCodes.RESET_REBOOT_COUNTER_10: - q.add_log_cmd("Resetting reboot counter 1 0") - make_fsfw_action_cmd( - object_id=CORE_CONTROLLER_ID, action_id=ActionIds.RESET_REBOOT_COUNTER_10 - ) + reset_specific_boot_counter(q, 1, 0) if op_code in OpCodes.RESET_REBOOT_COUNTER_11: - q.add_log_cmd("Resetting reboot counter 1 1") - make_fsfw_action_cmd( - object_id=CORE_CONTROLLER_ID, action_id=ActionIds.RESET_REBOOT_COUNTER_11 + reset_specific_boot_counter(q, 1, 1) + if op_code in OpCodes.OBSW_UPDATE_FROM_SD_0: + q.add_log_cmd(Info.OBSW_UPDATE_FROM_SD_0) + q.add_pus_tc(pack_obsw_update_cmd(ActionIds.UPDATE_OBSW_FROM_SD_0)) + if op_code in OpCodes.OBSW_UPDATE_FROM_SD_1: + q.add_log_cmd(Info.OBSW_UPDATE_FROM_SD_1) + q.add_pus_tc(pack_obsw_update_cmd(ActionIds.UPDATE_OBSW_FROM_SD_1)) + if op_code in OpCodes.OBSW_UPDATE_FROM_TMP: + q.add_log_cmd(Info.OBSW_UPDATE_FROM_TMP) + q.add_pus_tc(pack_obsw_update_cmd(ActionIds.UPDATE_OBSW_FROM_TMP)) + if op_code in OpCodes.SWITCH_TO_SD_0: + q.add_log_cmd(Info.SWITCH_TO_SD_0) + q.add_pus_tc( + make_fsfw_action_cmd( + object_id=CORE_CONTROLLER_ID, action_id=ActionIds.SWITCH_TO_SD_0 + ) + ) + if op_code in OpCodes.SWITCH_TO_SD_1: + q.add_log_cmd(Info.SWITCH_TO_SD_1) + q.add_pus_tc( + make_fsfw_action_cmd( + object_id=CORE_CONTROLLER_ID, action_id=ActionIds.SWITCH_TO_SD_1 + ) + ) + if op_code in OpCodes.SWITCH_TO_BOTH_SD_CARDS: + while True: + active_sd_card = int(input("Please specify active SD cqrd [0/1]: ")) + if active_sd_card not in [0, 1]: + LOGGER.warning("Invalid SD card specified. Try again") + break + q.add_log_cmd(Info.SWITCH_TO_BOTH_SD_CARDS) + q.add_pus_tc( + make_fsfw_action_cmd( + object_id=CORE_CONTROLLER_ID, + action_id=ActionIds.SWITCH_TO_BOTH_SD_CARDS, + user_data=bytes([active_sd_card]), + ) ) if op_code in OpCodes.GET_HK: q.add_log_cmd("Requesting housekeeping set") @@ -200,6 +254,17 @@ def pack_core_commands(q: DefaultPusQueueHelper, op_code: str): q.add_pus_tc(generate_one_hk_command(sid)) +def reset_specific_boot_counter(q: DefaultPusQueueHelper, chip: int, copy: int): + q.add_log_cmd(f"Resetting boot counter {chip} {copy}") + q.add_pus_tc( + make_fsfw_action_cmd( + object_id=CORE_CONTROLLER_ID, + action_id=ActionIds.RESET_REBOOT_COUNTER, + user_data=bytes([chip, copy]), + ) + ) + + def determine_reboot_params() -> (bool, Chip, Copy): chip_select = -1 copy_select = -1 @@ -208,6 +273,10 @@ def determine_reboot_params() -> (bool, Chip, Copy): LOGGER.info("Rebooting currently running image") return True, chip_select, copy_select LOGGER.info("Rebooting image specified by chip and copy") + return False, determine_chip_and_copy() + + +def determine_chip_and_copy() -> (int, int): while True: chip_select = input("Chip select [0/1]: ") if chip_select in ["0", "1"]: @@ -228,7 +297,15 @@ def determine_reboot_params() -> (bool, Chip, Copy): break else: LOGGER.warning("Invalid copy select value. Try again") - return False, chip_select, copy_select + return chip_select, copy_select + + +def pack_obsw_update_cmd(action_id: int) -> PusTelecommand: + chip, copy = determine_chip_and_copy() + user_data = bytes([chip, copy]) + return make_fsfw_action_cmd( + object_id=CORE_CONTROLLER_ID, action_id=action_id, user_data=user_data + ) def perform_reboot_cmd(