From 7c6a5e54d16917ff3bda1bd26ee99bb00e56795b Mon Sep 17 00:00:00 2001 From: Stanislav Pankevich Date: Wed, 2 Aug 2023 16:08:12 +0200 Subject: [PATCH] Update the SCH codebase to the more recent cFS revision (March 2023) This changeset contains 98%+ fixes that are needed to have this SCH working against the more recent cFS setup as of March 2023. The cFS revision that this is compiled against: 192f2ea3061bfe722b8ed1d72b7adecbf36d4f6e https://github.com/nasa/cFS/commit/192f2ea3061bfe722b8ed1d72b7adecbf36d4f6e Known issues: - The changeset contains minor formatting issues but I am deciding to ignore them because the SCH itself needs to be Clang Formatted and I didn't find an existing .clang-format in the repository. - This changeset does not touch anything related to setting up the table files in the CMake build system. There are other patches that are attempting to fix those issues: https://github.com/nasa/SCH/pull/6/files - We are still reworking the SCH codebase to fit our needs, so it may be that a few lines were missed and they will not compile. --- fsw/platform_inc/sch_platform_cfg.h | 5 +- fsw/public_inc/sch_api.h | 2 +- fsw/src/sch_apipriv.h | 2 +- fsw/src/sch_app.c | 263 ++++++++++++--------- fsw/src/sch_app.h | 2 +- fsw/src/sch_cmds.c | 344 +++++++++++++++------------- fsw/src/sch_cmds.h | 142 ++++++------ fsw/src/sch_custom.c | 15 +- fsw/src/sch_msg.h | 20 +- 9 files changed, 434 insertions(+), 361 deletions(-) diff --git a/fsw/platform_inc/sch_platform_cfg.h b/fsw/platform_inc/sch_platform_cfg.h index 9ac2fc6..552542e 100644 --- a/fsw/platform_inc/sch_platform_cfg.h +++ b/fsw/platform_inc/sch_platform_cfg.h @@ -94,10 +94,11 @@ ** Dictates the maximum message ID that can be used in the Message Definition Table. ** ** \par Limits -** Must be less than or equal to #CFE_SB_HIGHEST_VALID_MSGID and greater than SCH_MDT_MIN_MSG_ID +** Must be less than or equal to #CFE_PLATFORM_SB_HIGHEST_VALID_MSGID and greater than +*SCH_MDT_MIN_MSG_ID */ -#define SCH_MDT_MAX_MSG_ID CFE_SB_HIGHEST_VALID_MSGID +#define SCH_MDT_MAX_MSG_ID CFE_PLATFORM_SB_HIGHEST_VALID_MSGID /** ** \schcfg Maximum Length, in Words, of a Message diff --git a/fsw/public_inc/sch_api.h b/fsw/public_inc/sch_api.h index 4e07f80..28b3e44 100644 --- a/fsw/public_inc/sch_api.h +++ b/fsw/public_inc/sch_api.h @@ -82,7 +82,7 @@ void SCH_DisableProcessing(void); ** ** ******************************************************************************/ -boolean SCH_GetProcessingState(void); +bool SCH_GetProcessingState(void); #endif /* _sch_api_ */ diff --git a/fsw/src/sch_apipriv.h b/fsw/src/sch_apipriv.h index efc367f..a765f0f 100644 --- a/fsw/src/sch_apipriv.h +++ b/fsw/src/sch_apipriv.h @@ -102,7 +102,7 @@ void SCH_DisableProcessing(void); ** None ** *************************************************************************/ -boolean SCH_GetProcessingState(void); +bool SCH_GetProcessingState(void); #endif /* _sch_apipriv_ */ diff --git a/fsw/src/sch_app.c b/fsw/src/sch_app.c index 3b3b6e4..ed2e7e1 100644 --- a/fsw/src/sch_app.c +++ b/fsw/src/sch_app.c @@ -41,7 +41,6 @@ #include "sch_cmds.h" #include "sch_version.h" -#include "cfe_time_msg.h" #include "sch_verify.h" #include "cfe_platform_cfg.h" /* for CFE_SB_HIGHEST_VALID_MSGID */ @@ -122,18 +121,13 @@ SCH_AppData_t SCH_AppData; void SCH_AppMain(void) { int32 Status = CFE_SUCCESS; - uint32 RunStatus = CFE_ES_APP_RUN; + uint32 RunStatus = CFE_ES_RunStatus_APP_RUN; /* ** Performance Log (start time counter) */ CFE_ES_PerfLogEntry(SCH_APPMAIN_PERF_ID); - /* - ** Register application - */ - Status = CFE_ES_RegisterApp(); - /* ** Perform application specific initialization */ @@ -148,9 +142,10 @@ void SCH_AppMain(void) Status = SCH_CustomLateInit(); if (Status != CFE_SUCCESS) { - CFE_EVS_SendEvent(SCH_MAJOR_FRAME_SUB_ERR_EID, CFE_EVS_ERROR, - "Error initializing Timers (RC=0x%08X)", - (unsigned int)Status); + CFE_EVS_SendEvent(SCH_MAJOR_FRAME_SUB_ERR_EID, + CFE_EVS_EventType_ERROR, + "Error initializing Timers (RC=0x%08X)", + (unsigned int)Status); } } @@ -162,7 +157,7 @@ void SCH_AppMain(void) /* ** Set request to terminate main loop */ - RunStatus = CFE_ES_APP_ERROR; + RunStatus = CFE_ES_RunStatus_APP_ERROR; } /* @@ -188,27 +183,28 @@ void SCH_AppMain(void) /* ** Report if during the previous frame the major has determined to be unstable */ - if (SCH_AppData.IgnoreMajorFrame == TRUE) + if (SCH_AppData.IgnoreMajorFrame == true) { - if (SCH_AppData.IgnoreMajorFrameMsgSent == FALSE) + if (SCH_AppData.IgnoreMajorFrameMsgSent == false) { - CFE_EVS_SendEvent(SCH_NOISY_MAJOR_FRAME_ERR_EID, CFE_EVS_ERROR, - "Major Frame Sync too noisy (Slot %d). Disabling synchronization.", - SCH_AppData.MinorFramesSinceTone); - SCH_AppData.IgnoreMajorFrameMsgSent = TRUE; + CFE_EVS_SendEvent( + SCH_NOISY_MAJOR_FRAME_ERR_EID, + CFE_EVS_EventType_ERROR, + "Major Frame Sync too noisy (Slot %d). Disabling synchronization.", + SCH_AppData.MinorFramesSinceTone); + SCH_AppData.IgnoreMajorFrameMsgSent = true; } } else { - SCH_AppData.IgnoreMajorFrameMsgSent = FALSE; + SCH_AppData.IgnoreMajorFrameMsgSent = false; } /* ** Process schedule table activities */ #if SCH_LIB_PRESENCE == 1 - if ((Status == OS_SUCCESS) && - (SCH_GetProcessingState() == TRUE)) + if ((Status == OS_SUCCESS) && (SCH_GetProcessingState() == true)) { Status = SCH_ProcessScheduleTable(); } @@ -229,7 +225,7 @@ void SCH_AppMain(void) /* ** Set request to terminate main loop */ - RunStatus = CFE_ES_APP_ERROR; + RunStatus = CFE_ES_RunStatus_APP_ERROR; } } /* End of while */ @@ -242,8 +238,10 @@ void SCH_AppMain(void) /* ** Send an event describing the reason for the termination */ - CFE_EVS_SendEvent(SCH_APP_EXIT_EID, CFE_EVS_CRITICAL, - "SCH App: terminating, err = 0x%08X", (unsigned int)Status); + CFE_EVS_SendEvent(SCH_APP_EXIT_EID, + CFE_EVS_EventType_CRITICAL, + "SCH App: terminating, err = 0x%08X", + (unsigned int)Status); /* ** In case cFE Event Services is not working @@ -343,7 +341,7 @@ int32 SCH_AppInit(void) ** Application startup event message */ Status = CFE_EVS_SendEvent(SCH_INITSTATS_INF_EID, - CFE_EVS_INFORMATION, + CFE_EVS_EventType_INFORMATION, "SCH Initialized. Version %d.%d.%d.%d", SCH_MAJOR_VERSION, SCH_MINOR_VERSION, @@ -384,7 +382,7 @@ int32 SCH_EvsInit(void) /* ** Register for event services */ - Status = CFE_EVS_Register(SCH_AppData.EventFilters, SCH_FILTER_COUNT, CFE_EVS_BINARY_FILTER); + Status = CFE_EVS_Register(SCH_AppData.EventFilters, SCH_FILTER_COUNT, CFE_EVS_EventFilter_BINARY); if (Status != CFE_SUCCESS) { CFE_ES_WriteToSysLog("SCH App: Error Registering For Event Services, RC=0x%08X\n", (unsigned int)Status); @@ -405,19 +403,20 @@ int32 SCH_EvsInit(void) int32 SCH_SbInit(void) { int32 Status = CFE_SUCCESS; - - SCH_AppData.MsgPtr = (CFE_SB_MsgPtr_t) NULL; + + SCH_AppData.MsgPtr = NULL; SCH_AppData.CmdPipe = 0; + /* ** Initialize housekeeping packet (clear user data area) */ - CFE_SB_InitMsg(&SCH_AppData.HkPacket, SCH_HK_TLM_MID, sizeof(SCH_HkPacket_t), TRUE); - + CFE_MSG_Init(CFE_MSG_PTR(SCH_AppData.HkPacket.TlmHeader), CFE_SB_ValueToMsgId(SCH_HK_TLM_MID), sizeof(SCH_HkPacket_t)); + /* ** Initialize diagnostic packet (clear user data area) */ - CFE_SB_InitMsg(&SCH_AppData.DiagPacket, SCH_DIAG_TLM_MID, sizeof(SCH_DiagPacket_t), TRUE); + CFE_MSG_Init(CFE_MSG_PTR(SCH_AppData.DiagPacket.TlmHeader), CFE_SB_ValueToMsgId(SCH_DIAG_TLM_MID), sizeof(SCH_DiagPacket_t)); /* ** Create Software Bus message pipe @@ -425,33 +424,39 @@ int32 SCH_SbInit(void) Status = CFE_SB_CreatePipe(&SCH_AppData.CmdPipe, SCH_PIPE_DEPTH, SCH_PIPE_NAME); if (Status != CFE_SUCCESS) { - CFE_EVS_SendEvent(SCH_CR_PIPE_ERR_EID, CFE_EVS_ERROR, - "Error Creating SB Pipe, RC=0x%08X", (unsigned int)Status); - return(Status); + CFE_EVS_SendEvent(SCH_CR_PIPE_ERR_EID, + CFE_EVS_EventType_ERROR, + "Error Creating SB Pipe, RC=0x%08X", + (unsigned int)Status); + return (Status); } /* ** Subscribe to Housekeeping request commands */ - Status = CFE_SB_Subscribe(SCH_SEND_HK_MID, SCH_AppData.CmdPipe); + Status = CFE_SB_Subscribe(CFE_SB_ValueToMsgId(SCH_SEND_HK_MID), SCH_AppData.CmdPipe); if (Status != CFE_SUCCESS) { - CFE_EVS_SendEvent(SCH_SUB_HK_REQ_ERR_EID, CFE_EVS_ERROR, - "Error Subscribing to HK Request(MID=0x%04X), RC=0x%08X", - SCH_SEND_HK_MID, (unsigned int)Status); - return(Status); + CFE_EVS_SendEvent(SCH_SUB_HK_REQ_ERR_EID, + CFE_EVS_EventType_ERROR, + "Error Subscribing to HK Request(MID=0x%04X), RC=0x%08X", + SCH_SEND_HK_MID, + (unsigned int)Status); + return (Status); } /* ** Subscribe to SCH ground command packets */ - Status = CFE_SB_Subscribe(SCH_CMD_MID, SCH_AppData.CmdPipe); + Status = CFE_SB_Subscribe(CFE_SB_ValueToMsgId(SCH_CMD_MID), SCH_AppData.CmdPipe); if (Status != CFE_SUCCESS) { - CFE_EVS_SendEvent(SCH_SUB_GND_CMD_ERR_EID, CFE_EVS_ERROR, - "Error Subscribing to GND CMD(MID=0x%04X), RC=0x%08X", - SCH_CMD_MID, (unsigned int)Status); - return(Status); + CFE_EVS_SendEvent(SCH_SUB_GND_CMD_ERR_EID, + CFE_EVS_EventType_ERROR, + "Error Subscribing to GND CMD(MID=0x%04X), RC=0x%08X", + SCH_CMD_MID, + (unsigned int)Status); + return (Status); } return(Status); @@ -474,8 +479,8 @@ int32 SCH_TblInit(void) /* ** Initialize SCH table variables */ - SCH_AppData.ScheduleTable = (SCH_ScheduleEntry_t *) NULL; - SCH_AppData.MessageTable = (SCH_MessageEntry_t *) NULL; + SCH_AppData.ScheduleTable = (SCH_ScheduleEntry_t *)NULL; + SCH_AppData.MessageTable = (SCH_MessageEntry_t *)NULL; SCH_AppData.ScheduleTableHandle = CFE_TBL_BAD_TABLE_HANDLE; SCH_AppData.MessageTableHandle = CFE_TBL_BAD_TABLE_HANDLE; @@ -498,10 +503,11 @@ int32 SCH_TblInit(void) if (Status != CFE_SUCCESS) { - CFE_EVS_SendEvent(SCH_SDT_REG_ERR_EID, CFE_EVS_ERROR, - "Error Registering SDT, RC=0x%08X", - (unsigned int)Status); - return(Status); + CFE_EVS_SendEvent(SCH_SDT_REG_ERR_EID, + CFE_EVS_EventType_ERROR, + "Error Registering SDT, RC=0x%08X", + (unsigned int)Status); + return (Status); } /* @@ -517,10 +523,11 @@ int32 SCH_TblInit(void) if (Status != CFE_SUCCESS) { - CFE_EVS_SendEvent(SCH_MDT_REG_ERR_EID, CFE_EVS_ERROR, - "Error Registering MDT, RC=0x%08X", - (unsigned int)Status); - return(Status); + CFE_EVS_SendEvent(SCH_MDT_REG_ERR_EID, + CFE_EVS_EventType_ERROR, + "Error Registering MDT, RC=0x%08X", + (unsigned int)Status); + return (Status); } /* @@ -532,10 +539,12 @@ int32 SCH_TblInit(void) if (Status != CFE_SUCCESS) { - CFE_EVS_SendEvent(SCH_SDT_LOAD_ERR_EID, CFE_EVS_ERROR, - "Error (RC=0x%08X) Loading SDT with %s", - (unsigned int)Status, SCH_SCHEDULE_FILENAME); - return(Status); + CFE_EVS_SendEvent(SCH_SDT_LOAD_ERR_EID, + CFE_EVS_EventType_ERROR, + "Error (RC=0x%08X) Loading SDT with %s", + (unsigned int)Status, + SCH_SCHEDULE_FILENAME); + return (Status); } /* @@ -547,10 +556,12 @@ int32 SCH_TblInit(void) if (Status != CFE_SUCCESS) { - CFE_EVS_SendEvent(SCH_MDT_LOAD_ERR_EID, CFE_EVS_ERROR, - "Error (RC=0x%08X) Loading MDT with %s", - (unsigned int)Status, SCH_MESSAGE_FILENAME); - return(Status); + CFE_EVS_SendEvent(SCH_MDT_LOAD_ERR_EID, + CFE_EVS_EventType_ERROR, + "Error (RC=0x%08X) Loading MDT with %s", + (unsigned int)Status, + SCH_MESSAGE_FILENAME); + return (Status); } @@ -561,10 +572,11 @@ int32 SCH_TblInit(void) if (Status != CFE_SUCCESS) { - CFE_EVS_SendEvent(SCH_ACQ_PTR_ERR_EID, CFE_EVS_ERROR, - "Error Acquiring Tbl Ptrs (RC=0x%08X)", - (unsigned int)Status); - return(Status); + CFE_EVS_SendEvent(SCH_ACQ_PTR_ERR_EID, + CFE_EVS_EventType_ERROR, + "Error Acquiring Tbl Ptrs (RC=0x%08X)", + (unsigned int)Status); + return (Status); } return(Status); @@ -587,9 +599,6 @@ int32 SCH_TimerInit(void) ** Start off assuming Major Frame synch is normal ** and should be coming at any moment */ - SCH_AppData.IgnoreMajorFrame = FALSE; - SCH_AppData.IgnoreMajorFrameMsgSent = FALSE; - SCH_AppData.UnexpectedMajorFrame = FALSE; SCH_AppData.SyncToMET = SCH_NOT_SYNCHRONIZED; SCH_AppData.MajorFrameSource = SCH_MAJOR_FS_NONE; SCH_AppData.NextSlotNumber = 0; @@ -597,6 +606,10 @@ int32 SCH_TimerInit(void) SCH_AppData.LastSyncMETSlot = 0; SCH_AppData.SyncAttemptsLeft = 0; + SCH_AppData.IgnoreMajorFrame = false; + SCH_AppData.IgnoreMajorFrameMsgSent = false; + SCH_AppData.UnexpectedMajorFrame = false; + SCH_AppData.UnexpectedMajorFrameCount = 0; SCH_AppData.MissedMajorFrameCount = 0; SCH_AppData.ValidMajorFrameCount = 0; @@ -613,10 +626,11 @@ int32 SCH_TimerInit(void) if (Status != CFE_SUCCESS) { - CFE_EVS_SendEvent(SCH_MINOR_FRAME_TIMER_CREATE_ERR_EID, CFE_EVS_ERROR, - "Error creating Timer (RC=0x%08X)", - (unsigned int)Status); - return(Status); + CFE_EVS_SendEvent(SCH_MINOR_FRAME_TIMER_CREATE_ERR_EID, + CFE_EVS_EventType_ERROR, + "Error creating Timer (RC=0x%08X)", + (unsigned int)Status); + return (Status); } /* @@ -624,7 +638,8 @@ int32 SCH_TimerInit(void) */ if (SCH_AppData.ClockAccuracy > SCH_WORST_CLOCK_ACCURACY) { - CFE_EVS_SendEvent(SCH_MINOR_FRAME_TIMER_ACC_WARN_EID, CFE_EVS_INFORMATION, + CFE_EVS_SendEvent(SCH_MINOR_FRAME_TIMER_ACC_WARN_EID, + CFE_EVS_EventType_INFORMATION, "OS Timer Accuracy (%d > reqd %d usec) requires Minor Frame MET sync", (int)SCH_AppData.ClockAccuracy, SCH_WORST_CLOCK_ACCURACY); @@ -641,10 +656,11 @@ int32 SCH_TimerInit(void) Status = OS_BinSemCreate(&SCH_AppData.TimeSemaphore, SCH_SEM_NAME, SCH_SEM_VALUE, SCH_SEM_OPTIONS); if (Status != CFE_SUCCESS) { - CFE_EVS_SendEvent(SCH_SEM_CREATE_ERR_EID, CFE_EVS_ERROR, - "Error creating Main Loop Timing Semaphore (RC=0x%08X)", - (unsigned int)Status); - return(Status); + CFE_EVS_SendEvent(SCH_SEM_CREATE_ERR_EID, + CFE_EVS_EventType_ERROR, + "Error creating Main Loop Timing Semaphore (RC=0x%08X)", + (unsigned int)Status); + return (Status); } return(Status); @@ -732,7 +748,8 @@ int32 SCH_ProcessScheduleTable(void) { SCH_AppData.SameSlotCount++; - CFE_EVS_SendEvent(SCH_SAME_SLOT_EID, CFE_EVS_DEBUG, + CFE_EVS_SendEvent(SCH_SAME_SLOT_EID, + CFE_EVS_EventType_DEBUG, "Slot did not increment: slot = %d", (int)CurrentSlot); ProcessCount = 0; @@ -745,9 +762,11 @@ int32 SCH_ProcessScheduleTable(void) { SCH_AppData.SkippedSlotsCount++; - CFE_EVS_SendEvent(SCH_SKIPPED_SLOTS_EID, CFE_EVS_ERROR, + CFE_EVS_SendEvent(SCH_SKIPPED_SLOTS_EID, + CFE_EVS_EventType_ERROR, "Slots skipped: slot = %d, count = %d", - SCH_AppData.NextSlotNumber, (int)(ProcessCount - 1)); + SCH_AppData.NextSlotNumber, + (int)(ProcessCount - 1)); /* ** Update the pass counter if we are skipping the rollover slot @@ -789,12 +808,16 @@ int32 SCH_ProcessScheduleTable(void) { SCH_AppData.MultipleSlotsCount++; - /* Generate an event message if not syncing to MET or when there is more than two being processed */ - if ((ProcessCount > SCH_AppData.WorstCaseSlotsPerMinorFrame) || (SCH_AppData.SyncToMET == SCH_NOT_SYNCHRONIZED)) + /* Generate an event message if not syncing to MET or when there is more than two being + * processed */ + if ((ProcessCount > SCH_AppData.WorstCaseSlotsPerMinorFrame) || + (SCH_AppData.SyncToMET == SCH_NOT_SYNCHRONIZED)) { - CFE_EVS_SendEvent(SCH_MULTI_SLOTS_EID, CFE_EVS_INFORMATION, + CFE_EVS_SendEvent(SCH_MULTI_SLOTS_EID, + CFE_EVS_EventType_INFORMATION, "Multiple slots processed: slot = %d, count = %d", - SCH_AppData.NextSlotNumber, (int)ProcessCount); + SCH_AppData.NextSlotNumber, + (int)ProcessCount); } } @@ -903,11 +926,13 @@ void SCH_ProcessNextEntry(SCH_ScheduleEntry_t *NextEntry, int32 EntryNumber) /* ** Too much data for just one event */ - CFE_EVS_SendEvent(SCH_CORRUPTION_EID, CFE_EVS_ERROR, + CFE_EVS_SendEvent(SCH_CORRUPTION_EID, + CFE_EVS_EventType_ERROR, "Corrupt data error (1): slot = %d, entry = %d", SCH_AppData.NextSlotNumber, (int)EntryNumber); - CFE_EVS_SendEvent(SCH_CORRUPTION_EID, CFE_EVS_ERROR, + CFE_EVS_SendEvent(SCH_CORRUPTION_EID, + CFE_EVS_EventType_ERROR, "Corrupt data error (2): msg = %d, freq = %d, type = %d, rem = %d", NextEntry->MessageIndex, NextEntry->Frequency, @@ -930,8 +955,8 @@ void SCH_ProcessNextEntry(SCH_ScheduleEntry_t *NextEntry, int32 EntryNumber) if (Remainder == NextEntry->Remainder) { Message = SCH_AppData.MessageTable[NextEntry->MessageIndex].MessageBuffer; - Status = CFE_SB_SendMsg((CFE_SB_Msg_t *) Message); - + Status = CFE_SB_TransmitMsg((CFE_MSG_Message_t *)Message, true); + /* If additional activity types are added in the future, a switch statement */ /* would be useful, as shown below: */ /* NOTE: The "default" clause should never be able to be executed but is */ @@ -957,9 +982,12 @@ void SCH_ProcessNextEntry(SCH_ScheduleEntry_t *NextEntry, int32 EntryNumber) { SCH_AppData.ScheduleActivityFailureCount++; - CFE_EVS_SendEvent(SCH_PACKET_SEND_EID, CFE_EVS_ERROR, + CFE_EVS_SendEvent(SCH_PACKET_SEND_EID, + CFE_EVS_EventType_ERROR, "Activity error: slot = %d, entry = %d, err = 0x%08X", - SCH_AppData.NextSlotNumber, (int)EntryNumber, (unsigned int)Status); + SCH_AppData.NextSlotNumber, + (int)EntryNumber, + (unsigned int)Status); } } } @@ -985,7 +1013,7 @@ int32 SCH_ProcessCommands(void) /* ** Process pending Software Bus messages */ - Status = CFE_SB_RcvMsg(&SCH_AppData.MsgPtr, SCH_AppData.CmdPipe, CFE_SB_POLL); + Status = CFE_SB_ReceiveBuffer(&SCH_AppData.MsgPtr, SCH_AppData.CmdPipe, CFE_SB_POLL); if (Status == CFE_SUCCESS) { @@ -1118,16 +1146,25 @@ int32 SCH_ValidateScheduleData(void *TableData) { TableResult = EntryResult; - CFE_EVS_SendEvent(SCH_SCHEDULE_TBL_ERR_EID, CFE_EVS_ERROR, - "Schedule tbl verify error - idx[%d] ena[%d] typ[%d] fre[%d] rem[%d] msg[%d] grp[0x%08X]", - (int)TableIndex, EnableState, Type, Frequency, Remainder, MessageIndex, (unsigned int)GroupData); + CFE_EVS_SendEvent(SCH_SCHEDULE_TBL_ERR_EID, + CFE_EVS_EventType_ERROR, + "Schedule tbl verify error - idx[%d] ena[%d] typ[%d] fre[%d] rem[%d] " + "msg[%d] grp[0x%08X]", + (int)TableIndex, + EnableState, + Type, + Frequency, + Remainder, + MessageIndex, + (unsigned int)GroupData); } } /* ** Send event describing results */ - CFE_EVS_SendEvent(SCH_SCHEDULE_TABLE_EID, CFE_EVS_DEBUG, + CFE_EVS_SendEvent(SCH_SCHEDULE_TABLE_EID, + CFE_EVS_EventType_DEBUG, "Schedule table verify results -- good[%d] bad[%d] unused[%d]", (int)GoodCount, (int)BadCount, (int)UnusedCount); /* @@ -1166,10 +1203,10 @@ int32 SCH_ValidateMessageData(void *TableData) uint16 *MessageBuffer; uint16 *UserDataPtr; - uint16 MessageLength; - CFE_SB_MsgId_t MessageID; - CFE_SB_MsgId_t MaxValue = (CFE_SB_MsgId_t) SCH_MDT_MAX_MSG_ID; - CFE_SB_MsgId_t MinValue = (CFE_SB_MsgId_t) SCH_MDT_MIN_MSG_ID; + CFE_MSG_Size_t MessageLength; + CFE_SB_MsgId_t MessageID; + CFE_SB_MsgId_t MaxValue = CFE_SB_ValueToMsgId(SCH_MDT_MAX_MSG_ID); + CFE_SB_MsgId_t MinValue = CFE_SB_ValueToMsgId(SCH_MDT_MIN_MSG_ID); int32 GoodCount = 0; int32 BadCount = 0; @@ -1184,17 +1221,19 @@ int32 SCH_ValidateMessageData(void *TableData) BufferIndex = 0; MessageBuffer = &TableArray[TableIndex].MessageBuffer[0]; - MessageID = CFE_SB_GetMsgId((CFE_SB_MsgPtr_t) MessageBuffer); - MessageLength = CFE_SB_GetTotalMsgLength((CFE_SB_MsgPtr_t) MessageBuffer); + CFE_MSG_Message_t *const MessagePtr = (CFE_MSG_Message_t *)MessageBuffer; + + CFE_MSG_GetMsgId(MessagePtr, &MessageID); + CFE_MSG_GetSize(MessagePtr, &MessageLength); - if (MessageID == SCH_UNUSED_MID) + if (MessageID.Value == SCH_UNUSED_MID) { /* ** If message ID is unused, then look for junk in user data portion */ UnusedCount++; - UserDataPtr = (uint16 *)CFE_SB_GetUserData((CFE_SB_MsgPtr_t) MessageBuffer); - while (UserDataPtr < &TableArray[TableIndex+1].MessageBuffer[0]) + UserDataPtr = (uint16 *)CFE_SB_GetUserData(MessagePtr); + while (UserDataPtr < &TableArray[TableIndex + 1].MessageBuffer[0]) { if (*UserDataPtr != SCH_UNUSED) { @@ -1206,8 +1245,7 @@ int32 SCH_ValidateMessageData(void *TableData) UserDataPtr++; } } - else if ((MessageID <= MaxValue) && - (MessageID >= MinValue)) + else if ((MessageID.Value <= MaxValue.Value) && (MessageID.Value >= MinValue.Value)) { /* ** If message ID is valid, then check message length @@ -1237,16 +1275,21 @@ int32 SCH_ValidateMessageData(void *TableData) { TableResult = EntryResult; - CFE_EVS_SendEvent(SCH_MESSAGE_TBL_ERR_EID, CFE_EVS_ERROR, - "Message tbl verify err - idx[%d] mid[0x%X] len[%d] buf[%d]", - (int)TableIndex, MessageID, MessageLength, (int)BufferIndex); + CFE_EVS_SendEvent(SCH_MESSAGE_TBL_ERR_EID, + CFE_EVS_EventType_ERROR, + "Message tbl verify err - idx[0x%02X] mid[0x%X] len[%zu] buf[%d]", + (int)TableIndex, + MessageID.Value, + MessageLength, + (int)BufferIndex); } } /* ** Send event describing results */ - CFE_EVS_SendEvent(SCH_MESSAGE_TABLE_EID, CFE_EVS_DEBUG, + CFE_EVS_SendEvent(SCH_MESSAGE_TABLE_EID, + CFE_EVS_EventType_DEBUG, "Message tbl verify results - good[%d] bad[%d] unused[%d]", (int)GoodCount, (int)BadCount, (int)UnusedCount); /* diff --git a/fsw/src/sch_app.h b/fsw/src/sch_app.h index ed509e6..8c532a4 100644 --- a/fsw/src/sch_app.h +++ b/fsw/src/sch_app.h @@ -137,7 +137,7 @@ typedef struct /* ** Operational data */ - CFE_SB_MsgPtr_t MsgPtr; /**< \brief Ptr to most recently received cmd message */ + CFE_SB_Buffer_t *MsgPtr; /**< \brief Ptr to most recently received cmd message */ CFE_SB_PipeId_t CmdPipe; /**< \brief Pipe ID for SCH Command Pipe */ SCH_MessageEntry_t *MessageTable; /**< \brief Ptr to Message Table contents */ diff --git a/fsw/src/sch_cmds.c b/fsw/src/sch_cmds.c index bcc641b..37bc457 100644 --- a/fsw/src/sch_cmds.c +++ b/fsw/src/sch_cmds.c @@ -33,8 +33,6 @@ #include "sch_cmds.h" #include "sch_version.h" -#include "cfe_time_msg.h" - /************************************************************************* ** ** Exported data @@ -63,83 +61,89 @@ extern SCH_AppData_t SCH_AppData; ** NOTE: For complete prolog information, see 'sch_cmds.h' ********************************************************************/ -int32 SCH_AppPipe(CFE_SB_MsgPtr_t MessagePtr) +int32 SCH_AppPipe(CFE_SB_Buffer_t *SBBufPtr) { - int32 Result = CFE_SUCCESS; - CFE_SB_MsgId_t MessageID = 0; - uint16 CommandCode = 0; + int32 Result = CFE_SUCCESS; + CFE_MSG_FcnCode_t CommandCode = 0; - MessageID = CFE_SB_GetMsgId(MessagePtr); - switch (MessageID) - { - /* - ** Housekeeping telemetry request - */ - case SCH_SEND_HK_MID: - Result = SCH_HousekeepingCmd(MessagePtr); - break; + CFE_MSG_Message_t *MessagePtr = &SBBufPtr->Msg; - /* - ** SCH ground commands - */ - case SCH_CMD_MID: + CFE_SB_MsgId_t MessageID = CFE_SB_INVALID_MSG_ID; + CFE_MSG_GetMsgId(MessagePtr, &MessageID); - CommandCode = CFE_SB_GetCmdCode(MessagePtr); - switch (CommandCode) - { - case SCH_NOOP_CC: - SCH_NoopCmd(MessagePtr); - break; + switch (MessageID.Value) + { + /* + ** Housekeeping telemetry request + */ + case SCH_SEND_HK_MID: + Result = SCH_HousekeepingCmd(MessagePtr); + break; - case SCH_RESET_CC: - SCH_ResetCmd(MessagePtr); - break; + /* + ** SCH ground commands + */ + case SCH_CMD_MID: - case SCH_ENABLE_CC: - SCH_EnableCmd(MessagePtr); - break; + CFE_MSG_GetFcnCode(MessagePtr, &CommandCode); + switch (CommandCode) + { + case SCH_NOOP_CC: + SCH_NoopCmd(MessagePtr); + break; - case SCH_DISABLE_CC: - SCH_DisableCmd(MessagePtr); - break; + case SCH_RESET_CC: + SCH_ResetCmd(MessagePtr); + break; - case SCH_ENABLE_GROUP_CC: - SCH_EnableGroupCmd(MessagePtr); - break; + case SCH_ENABLE_CC: + SCH_EnableCmd(MessagePtr); + break; - case SCH_DISABLE_GROUP_CC: - SCH_DisableGroupCmd(MessagePtr); - break; + case SCH_DISABLE_CC: + SCH_DisableCmd(MessagePtr); + break; - case SCH_ENABLE_SYNC_CC: - SCH_EnableSyncCmd(MessagePtr); - break; + case SCH_ENABLE_GROUP_CC: + SCH_EnableGroupCmd(MessagePtr); + break; - case SCH_SEND_DIAG_TLM_CC: - SCH_SendDiagTlmCmd(MessagePtr); - break; + case SCH_DISABLE_GROUP_CC: + SCH_DisableGroupCmd(MessagePtr); + break; - /* - ** SCH ground commands with unknown command codes... - */ - default: - CFE_EVS_SendEvent(SCH_CC_ERR_EID, CFE_EVS_ERROR, - "Invalid command code: ID = 0x%04X, CC = %d", - MessageID, CommandCode); + case SCH_ENABLE_SYNC_CC: + SCH_EnableSyncCmd(MessagePtr); + break; - SCH_AppData.ErrCounter++; - break; - } + case SCH_SEND_DIAG_TLM_CC: + SCH_SendDiagTlmCmd(MessagePtr); break; /* - ** Unknown message ID's + ** SCH ground commands with unknown command codes... */ default: - CFE_EVS_SendEvent(SCH_MD_ERR_EID, CFE_EVS_ERROR, - "Msg with Invalid message ID Rcvd -- ID = 0x%04X", - MessageID); + CFE_EVS_SendEvent(SCH_CC_ERR_EID, + CFE_EVS_EventType_ERROR, + "Invalid command code: ID = 0x%04X, CC = %d", + MessageID.Value, + CommandCode); + + SCH_AppData.ErrCounter++; break; + } + break; + + /* + ** Unknown message ID's + */ + default: + CFE_EVS_SendEvent(SCH_MD_ERR_EID, + CFE_EVS_EventType_ERROR, + "Msg with Invalid message ID Rcvd -- ID = 0x%04X", + MessageID.Value); + break; } return(Result); @@ -154,11 +158,11 @@ int32 SCH_AppPipe(CFE_SB_MsgPtr_t MessagePtr) ** NOTE: For complete prolog information, see above ********************************************************************/ -int32 SCH_HousekeepingCmd(CFE_SB_MsgPtr_t MessagePtr) +int32 SCH_HousekeepingCmd(CFE_MSG_Message_t *MessagePtr) { - int32 TableResult = SCH_SUCCESS; + int32 TableResult = SCH_SUCCESS; - if(SCH_VerifyCmdLength(MessagePtr, sizeof(SCH_NoArgsCmd_t)) == SCH_SUCCESS) + if (SCH_VerifyCmdLength(MessagePtr, sizeof(SCH_NoArgsCmd_t)) == SCH_SUCCESS) { /* ** Update contents of Housekeeping Packet @@ -189,8 +193,8 @@ int32 SCH_HousekeepingCmd(CFE_SB_MsgPtr_t MessagePtr) /* ** Timestamps and send housekeeping packet */ - CFE_SB_TimeStampMsg((CFE_SB_Msg_t *) &SCH_AppData.HkPacket); - CFE_SB_SendMsg((CFE_SB_Msg_t *) &SCH_AppData.HkPacket); + CFE_SB_TimeStampMsg((CFE_MSG_Message_t *)&SCH_AppData.HkPacket); + CFE_SB_TransmitMsg((CFE_MSG_Message_t *)&SCH_AppData.HkPacket, true); /* ** Reset "high rate" event filters @@ -226,9 +230,9 @@ int32 SCH_HousekeepingCmd(CFE_SB_MsgPtr_t MessagePtr) ** NOTE: For complete prolog information, see above ********************************************************************/ -void SCH_NoopCmd(CFE_SB_MsgPtr_t MessagePtr) +void SCH_NoopCmd(CFE_MSG_Message_t *MessagePtr) { - if(SCH_VerifyCmdLength(MessagePtr, sizeof(SCH_NoArgsCmd_t)) != SCH_SUCCESS) + if (SCH_VerifyCmdLength(MessagePtr, sizeof(SCH_NoArgsCmd_t)) != SCH_SUCCESS) { SCH_AppData.ErrCounter++; } @@ -239,7 +243,8 @@ void SCH_NoopCmd(CFE_SB_MsgPtr_t MessagePtr) */ SCH_AppData.CmdCounter++; - CFE_EVS_SendEvent(SCH_NOOP_CMD_EID, CFE_EVS_INFORMATION, + CFE_EVS_SendEvent(SCH_NOOP_CMD_EID, + CFE_EVS_EventType_INFORMATION, "NO-op command. Version %d.%d.%d.%d", SCH_MAJOR_VERSION, SCH_MINOR_VERSION, @@ -259,9 +264,9 @@ void SCH_NoopCmd(CFE_SB_MsgPtr_t MessagePtr) ** NOTE: For complete prolog information, see above ********************************************************************/ -void SCH_ResetCmd(CFE_SB_MsgPtr_t MessagePtr) +void SCH_ResetCmd(CFE_MSG_Message_t *MessagePtr) { - if(SCH_VerifyCmdLength(MessagePtr, sizeof(SCH_NoArgsCmd_t)) != SCH_SUCCESS) + if (SCH_VerifyCmdLength(MessagePtr, sizeof(SCH_NoArgsCmd_t)) != SCH_SUCCESS) { SCH_AppData.ErrCounter++; } @@ -289,8 +294,7 @@ void SCH_ResetCmd(CFE_SB_MsgPtr_t MessagePtr) SCH_AppData.MissedMajorFrameCount = 0; SCH_AppData.UnexpectedMajorFrameCount = 0; - CFE_EVS_SendEvent(SCH_RESET_CMD_EID, CFE_EVS_DEBUG, - "RESET command"); + CFE_EVS_SendEvent(SCH_RESET_CMD_EID, CFE_EVS_EventType_DEBUG, "RESET command"); } return; @@ -305,20 +309,21 @@ void SCH_ResetCmd(CFE_SB_MsgPtr_t MessagePtr) ** NOTE: For complete prolog information, see above ********************************************************************/ -void SCH_EnableCmd(CFE_SB_MsgPtr_t MessagePtr) +void SCH_EnableCmd(CFE_MSG_Message_t *MessagePtr) { - boolean GoodCommand = FALSE; - SCH_EntryCmd_t *EnableCmd = NULL; - uint16 SlotNumber = 0; + bool GoodCommand = false; + SCH_EntryCmd_t *EnableCmd = NULL; + uint16 SlotNumber = 0; uint16 EntryNumber = 0; - uint16 TableIndex = 0; - + uint16 TableIndex = 0; + /* ** Extract contents of command */ EnableCmd = (SCH_EntryCmd_t *) MessagePtr; if(SCH_VerifyCmdLength(MessagePtr, sizeof(SCH_EntryCmd_t)) == SCH_SUCCESS) + { { SlotNumber = EnableCmd->SlotNumber; EntryNumber = EnableCmd->EntryNumber; @@ -329,10 +334,13 @@ void SCH_EnableCmd(CFE_SB_MsgPtr_t MessagePtr) /* ** Invalid command packet argument */ - CFE_EVS_SendEvent(SCH_ENABLE_CMD_ARG_ERR_EID, CFE_EVS_ERROR, + CFE_EVS_SendEvent(SCH_ENABLE_CMD_ARG_ERR_EID, + CFE_EVS_EventType_ERROR, "ENABLE cmd: invalid argument, slot=%d (<%d), entry=%d (<%d)", - SlotNumber, SCH_TOTAL_SLOTS, - EntryNumber, SCH_ENTRIES_PER_SLOT); + SlotNumber, + SCH_TOTAL_SLOTS, + EntryNumber, + SCH_ENTRIES_PER_SLOT); } else if ((SCH_AppData.ScheduleTable[TableIndex].EnableState != SCH_ENABLED) && (SCH_AppData.ScheduleTable[TableIndex].EnableState != SCH_DISABLED)) @@ -340,24 +348,28 @@ void SCH_EnableCmd(CFE_SB_MsgPtr_t MessagePtr) /* ** Invalid schedule table enable state (unused or corrupt) */ - CFE_EVS_SendEvent(SCH_ENABLE_CMD_ENTRY_ERR_EID, CFE_EVS_ERROR, + CFE_EVS_SendEvent(SCH_ENABLE_CMD_ENTRY_ERR_EID, + CFE_EVS_EventType_ERROR, "ENABLE command: invalid state = %d, slot = %d, entry = %d", SCH_AppData.ScheduleTable[TableIndex].EnableState, - SlotNumber, EntryNumber); + SlotNumber, + EntryNumber); } else { /* ** Success */ - GoodCommand = TRUE; - + GoodCommand = true; + SCH_AppData.ScheduleTable[TableIndex].EnableState = SCH_ENABLED; CFE_TBL_Modified(SCH_AppData.ScheduleTableHandle); - - CFE_EVS_SendEvent(SCH_ENABLE_CMD_EID, CFE_EVS_DEBUG, + + CFE_EVS_SendEvent(SCH_ENABLE_CMD_EID, + CFE_EVS_EventType_DEBUG, "ENABLE command: slot = %d, entry = %d", - SlotNumber, EntryNumber ); + SlotNumber, + EntryNumber); } } @@ -375,9 +387,9 @@ void SCH_EnableCmd(CFE_SB_MsgPtr_t MessagePtr) ** NOTE: For complete prolog information, see above ********************************************************************/ -void SCH_DisableCmd(CFE_SB_MsgPtr_t MessagePtr) +void SCH_DisableCmd(CFE_MSG_Message_t *MessagePtr) { - boolean GoodCommand = FALSE; + bool GoodCommand = false; SCH_EntryCmd_t *DisableCmd = NULL; uint16 SlotNumber = 0; uint16 EntryNumber = 0; @@ -388,7 +400,7 @@ void SCH_DisableCmd(CFE_SB_MsgPtr_t MessagePtr) */ DisableCmd = (SCH_EntryCmd_t *) MessagePtr; - if(SCH_VerifyCmdLength(MessagePtr, sizeof(SCH_EntryCmd_t)) == SCH_SUCCESS) + if (SCH_VerifyCmdLength(MessagePtr, sizeof(SCH_EntryCmd_t)) == SCH_SUCCESS) { SlotNumber = DisableCmd->SlotNumber; EntryNumber = DisableCmd->EntryNumber; @@ -399,10 +411,13 @@ void SCH_DisableCmd(CFE_SB_MsgPtr_t MessagePtr) /* ** Invalid command packet argument */ - CFE_EVS_SendEvent(SCH_DISABLE_CMD_ARG_ERR_EID, CFE_EVS_ERROR, + CFE_EVS_SendEvent(SCH_DISABLE_CMD_ARG_ERR_EID, + CFE_EVS_EventType_ERROR, "DISABLE cmd: invalid argument, slot=%d (<%d), entry=%d (<%d)", - SlotNumber, SCH_TOTAL_SLOTS, - EntryNumber, SCH_ENTRIES_PER_SLOT); + SlotNumber, + SCH_TOTAL_SLOTS, + EntryNumber, + SCH_ENTRIES_PER_SLOT); } else if ((SCH_AppData.ScheduleTable[TableIndex].EnableState != SCH_ENABLED) && (SCH_AppData.ScheduleTable[TableIndex].EnableState != SCH_DISABLED)) @@ -410,24 +425,28 @@ void SCH_DisableCmd(CFE_SB_MsgPtr_t MessagePtr) /* ** Invalid schedule table enable state (unused or corrupt) */ - CFE_EVS_SendEvent(SCH_DISABLE_CMD_ENTRY_ERR_EID, CFE_EVS_ERROR, + CFE_EVS_SendEvent(SCH_DISABLE_CMD_ENTRY_ERR_EID, + CFE_EVS_EventType_ERROR, "DISABLE command: invalid state = %d, slot = %d, entry = %d", SCH_AppData.ScheduleTable[TableIndex].EnableState, - SlotNumber, EntryNumber); + SlotNumber, + EntryNumber); } else { /* ** Success */ - GoodCommand = TRUE; - + GoodCommand = true; + SCH_AppData.ScheduleTable[TableIndex].EnableState = SCH_DISABLED; CFE_TBL_Modified(SCH_AppData.ScheduleTableHandle); - - CFE_EVS_SendEvent(SCH_DISABLE_CMD_EID, CFE_EVS_DEBUG, + + CFE_EVS_SendEvent(SCH_DISABLE_CMD_EID, + CFE_EVS_EventType_DEBUG, "DISABLE command: slot = %d, entry = %d", - SlotNumber, EntryNumber); + SlotNumber, + EntryNumber); } } @@ -445,26 +464,26 @@ void SCH_DisableCmd(CFE_SB_MsgPtr_t MessagePtr) ** NOTE: For complete prolog information, see above ********************************************************************/ -void SCH_EnableGroupCmd(CFE_SB_MsgPtr_t MessagePtr) +void SCH_EnableGroupCmd(CFE_MSG_Message_t *MessagePtr) { - boolean GoodCommand = FALSE; + bool GoodCommand = false; uint32 TblGroupNumber = 0; - uint32 TblMultiGroup = 0; - int32 LoopCount = 0; - int32 MatchCount = 0; - SCH_GroupCmd_t *EnableCmd = NULL; - SCH_ScheduleEntry_t *TableEntry = NULL; + uint32 TblMultiGroup = 0; + int32 LoopCount = 0; + int32 MatchCount = 0; + SCH_GroupCmd_t *EnableCmd = NULL; + SCH_ScheduleEntry_t *TableEntry = NULL; uint32 CmdGroupNumber = 0; uint32 CmdMultiGroup = 0; /* ** Extract command parameters */ - EnableCmd = (SCH_GroupCmd_t *) MessagePtr; + EnableCmd = (SCH_GroupCmd_t *)MessagePtr; - if(SCH_VerifyCmdLength(MessagePtr, sizeof(SCH_GroupCmd_t)) == SCH_SUCCESS) + if (SCH_VerifyCmdLength(MessagePtr, sizeof(SCH_GroupCmd_t)) == SCH_SUCCESS) { - TableEntry = &SCH_AppData.ScheduleTable[0]; + TableEntry = &SCH_AppData.ScheduleTable[0]; CmdGroupNumber = EnableCmd->GroupData & SCH_GROUP_NUMBER_BIT_MASK; CmdMultiGroup = EnableCmd->GroupData & SCH_MULTI_GROUP_BIT_MASK; @@ -473,7 +492,8 @@ void SCH_EnableGroupCmd(CFE_SB_MsgPtr_t MessagePtr) /* ** No groups selected */ - CFE_EVS_SendEvent(SCH_ENA_GRP_CMD_ERR_EID, CFE_EVS_ERROR, + CFE_EVS_SendEvent(SCH_ENA_GRP_CMD_ERR_EID, + CFE_EVS_EventType_ERROR, "ENABLE GROUP command: invalid argument, no groups selected"); } else @@ -508,16 +528,20 @@ void SCH_EnableGroupCmd(CFE_SB_MsgPtr_t MessagePtr) if (MatchCount > 0) { CFE_TBL_Modified(SCH_AppData.ScheduleTableHandle); - CFE_EVS_SendEvent(SCH_ENA_GRP_CMD_EID, CFE_EVS_DEBUG, + CFE_EVS_SendEvent(SCH_ENA_GRP_CMD_EID, + CFE_EVS_EventType_DEBUG, "ENABLE GROUP command: match count = %d", (int)MatchCount); - GoodCommand = TRUE; + GoodCommand = true; } else { - CFE_EVS_SendEvent(SCH_ENA_GRP_NOT_FOUND_ERR_EID, CFE_EVS_ERROR, - "ENABLE GROUP command: Neither Group %d nor Multi-Group 0x%06X found", - (int)(CmdGroupNumber>>24), (unsigned int)CmdMultiGroup); + CFE_EVS_SendEvent( + SCH_ENA_GRP_NOT_FOUND_ERR_EID, + CFE_EVS_EventType_ERROR, + "ENABLE GROUP command: Neither Group %d nor Multi-Group 0x%06X found", + (int)(CmdGroupNumber >> 24), + (unsigned int)CmdMultiGroup); } } } @@ -536,9 +560,9 @@ void SCH_EnableGroupCmd(CFE_SB_MsgPtr_t MessagePtr) ** NOTE: For complete prolog information, see above ********************************************************************/ -void SCH_DisableGroupCmd(CFE_SB_MsgPtr_t MessagePtr) +void SCH_DisableGroupCmd(CFE_MSG_Message_t *MessagePtr) { - boolean GoodCommand = FALSE; + bool GoodCommand = false; uint32 TblGroupNumber = 0; uint32 TblMultiGroup = 0; int32 LoopCount = 0; @@ -551,11 +575,11 @@ void SCH_DisableGroupCmd(CFE_SB_MsgPtr_t MessagePtr) /* ** Extract command parameters */ - DisableCmd = (SCH_GroupCmd_t *) MessagePtr; + DisableCmd = (SCH_GroupCmd_t *)MessagePtr; - if(SCH_VerifyCmdLength(MessagePtr, sizeof(SCH_GroupCmd_t)) == SCH_SUCCESS) + if (SCH_VerifyCmdLength(MessagePtr, sizeof(SCH_GroupCmd_t)) == SCH_SUCCESS) { - TableEntry = &SCH_AppData.ScheduleTable[0]; + TableEntry = &SCH_AppData.ScheduleTable[0]; CmdGroupNumber = DisableCmd->GroupData & SCH_GROUP_NUMBER_BIT_MASK; CmdMultiGroup = DisableCmd->GroupData & SCH_MULTI_GROUP_BIT_MASK; @@ -564,7 +588,8 @@ void SCH_DisableGroupCmd(CFE_SB_MsgPtr_t MessagePtr) /* ** No groups selected */ - CFE_EVS_SendEvent(SCH_DIS_GRP_CMD_ERR_EID, CFE_EVS_ERROR, + CFE_EVS_SendEvent(SCH_DIS_GRP_CMD_ERR_EID, + CFE_EVS_EventType_ERROR, "DISABLE GROUP command: invalid argument, no groups selected"); } else @@ -592,23 +617,27 @@ void SCH_DisableGroupCmd(CFE_SB_MsgPtr_t MessagePtr) TableEntry->EnableState = SCH_DISABLED; } } - + TableEntry++; } if (MatchCount > 0) { CFE_TBL_Modified(SCH_AppData.ScheduleTableHandle); - CFE_EVS_SendEvent(SCH_DIS_GRP_CMD_EID, CFE_EVS_DEBUG, + CFE_EVS_SendEvent(SCH_DIS_GRP_CMD_EID, + CFE_EVS_EventType_DEBUG, "DISABLE GROUP command: match count = %d", (int)MatchCount); - GoodCommand = TRUE; + GoodCommand = true; } else { - CFE_EVS_SendEvent(SCH_DIS_GRP_NOT_FOUND_ERR_EID, CFE_EVS_ERROR, - "DISABLE GROUP command: Neither Group %d nor Multi-Group 0x%06X found", - (int)(CmdGroupNumber>>24), (unsigned int)CmdMultiGroup); + CFE_EVS_SendEvent( + SCH_DIS_GRP_NOT_FOUND_ERR_EID, + CFE_EVS_EventType_ERROR, + "DISABLE GROUP command: Neither Group %d nor Multi-Group 0x%06X found", + (int)(CmdGroupNumber >> 24), + (unsigned int)CmdMultiGroup); } } } @@ -627,20 +656,20 @@ void SCH_DisableGroupCmd(CFE_SB_MsgPtr_t MessagePtr) ** NOTE: For complete prolog information, see above ********************************************************************/ -void SCH_EnableSyncCmd(CFE_SB_MsgPtr_t MessagePtr) +void SCH_EnableSyncCmd(CFE_MSG_Message_t *MessagePtr) { - boolean GoodCommand = FALSE; + bool GoodCommand = false; - if(SCH_VerifyCmdLength(MessagePtr, sizeof(SCH_NoArgsCmd_t)) == SCH_SUCCESS) + if (SCH_VerifyCmdLength(MessagePtr, sizeof(SCH_NoArgsCmd_t)) == SCH_SUCCESS) { - GoodCommand = TRUE; - - SCH_AppData.IgnoreMajorFrame = FALSE; - SCH_AppData.UnexpectedMajorFrame = FALSE; + GoodCommand = true; + + SCH_AppData.IgnoreMajorFrame = false; + SCH_AppData.UnexpectedMajorFrame = false; SCH_AppData.ConsecutiveNoisyFrameCounter = 0; - - CFE_EVS_SendEvent(SCH_ENA_SYNC_CMD_EID, CFE_EVS_DEBUG, - "Major Frame Synchronization Enabled"); + + CFE_EVS_SendEvent( + SCH_ENA_SYNC_CMD_EID, CFE_EVS_EventType_DEBUG, "Major Frame Synchronization Enabled"); } SCH_PostCommandResult(GoodCommand); @@ -659,22 +688,22 @@ void SCH_EnableSyncCmd(CFE_SB_MsgPtr_t MessagePtr) ** NOTE: For complete prolog information, see above ********************************************************************/ -void SCH_SendDiagTlmCmd(CFE_SB_MsgPtr_t MessagePtr) +void SCH_SendDiagTlmCmd(CFE_MSG_Message_t *MessagePtr) { - boolean GoodCommand = FALSE; uint32 TblIndex = 0; uint32 WordIndex = 0; uint32 BitIndex = 0; SCH_ScheduleEntry_t *TableEntry = NULL; + bool GoodCommand = false; - if(SCH_VerifyCmdLength(MessagePtr, sizeof(SCH_NoArgsCmd_t)) == SCH_SUCCESS) + if (SCH_VerifyCmdLength(MessagePtr, sizeof(SCH_NoArgsCmd_t)) == SCH_SUCCESS) { - GoodCommand = TRUE; - + GoodCommand = true; + /* Zero out the previous entry states */ CFE_PSP_MemSet(&SCH_AppData.DiagPacket.EntryStates[0], 0x0, SCH_NUM_STATUS_BYTES_REQD); - - for (TblIndex=0; TblIndexEnableState == SCH_ENABLED) { SCH_AppData.DiagPacket.EntryStates[WordIndex] |= (1 << BitIndex); - SCH_AppData.DiagPacket.MsgIDs[TblIndex] = - CFE_SB_GetMsgId((CFE_SB_MsgPtr_t)&SCH_AppData.MessageTable[SCH_AppData.ScheduleTable[TblIndex].MessageIndex]); + CFE_MSG_GetMsgId( + (CFE_MSG_Message_t *)&SCH_AppData + .MessageTable[SCH_AppData.ScheduleTable[TblIndex].MessageIndex], + &SCH_AppData.DiagPacket.MsgIDs[TblIndex] + ); } else if (TableEntry->EnableState == SCH_DISABLED) { SCH_AppData.DiagPacket.EntryStates[WordIndex] |= (2 << BitIndex); - SCH_AppData.DiagPacket.MsgIDs[TblIndex] = - CFE_SB_GetMsgId((CFE_SB_MsgPtr_t)&SCH_AppData.MessageTable[SCH_AppData.ScheduleTable[TblIndex].MessageIndex]); + CFE_MSG_GetMsgId( + (CFE_MSG_Message_t *)&SCH_AppData + .MessageTable[SCH_AppData.ScheduleTable[TblIndex].MessageIndex], + &SCH_AppData.DiagPacket.MsgIDs[TblIndex] + ); } else { - SCH_AppData.DiagPacket.MsgIDs[TblIndex] = 0x0000; + SCH_AppData.DiagPacket.MsgIDs[TblIndex] = CFE_SB_ValueToMsgId(0x0000); } } /* ** Timestamp and send diagnostic packet */ - CFE_SB_TimeStampMsg((CFE_SB_Msg_t *) &SCH_AppData.DiagPacket); - CFE_SB_SendMsg((CFE_SB_Msg_t *) &SCH_AppData.DiagPacket); + CFE_SB_TimeStampMsg((CFE_MSG_Message_t *)&SCH_AppData.DiagPacket); + CFE_SB_TransmitMsg((CFE_MSG_Message_t *)&SCH_AppData.DiagPacket, true); - CFE_EVS_SendEvent(SCH_SEND_DIAG_CMD_EID, CFE_EVS_DEBUG, - "Transmitting Diagnostic Message"); + CFE_EVS_SendEvent(SCH_SEND_DIAG_CMD_EID, CFE_EVS_EventType_DEBUG, "Transmitting Diagnostic Message"); } SCH_PostCommandResult(GoodCommand); diff --git a/fsw/src/sch_cmds.h b/fsw/src/sch_cmds.h index e0efdc2..a38fae8 100644 --- a/fsw/src/sch_cmds.h +++ b/fsw/src/sch_cmds.h @@ -76,18 +76,18 @@ ** \sa #CFE_SB_RcvMsg ** *************************************************************************/ -int32 SCH_AppPipe(CFE_SB_MsgPtr_t MessagePtr); +int32 SCH_AppPipe(CFE_SB_Buffer_t *MessagePtr); /************************************************************************/ /** \brief Manages Scheduler's Schedule and Message Definition Tables -** +** ** \par Description ** This function manages the contents of the Schedule and Message ** Definition Tables. ** ** \par Assumptions, External Events, and Notes: ** None -** +** ** \returns ** \retcode #CFE_SUCCESS \retdesc \copydoc CFE_SUCCESS \endcode ** \retstmt Return codes from #CFE_EVS_Register \endcode @@ -100,16 +100,16 @@ int32 SCH_AcquirePointers(void); /************************************************************************/ /** \brief Process housekeeping request -** +** ** \par Description ** Processes an on-board housekeeping request message. ** ** \par Assumptions, External Events, and Notes: ** This command does not affect the command execution counter -** -** \param [in] MessagePtr A #CFE_SB_MsgPtr_t pointer that -** references the software bus message -** +** +** \param [in] MessagePtr A #CFE_SB_MsgId_t pointer that +** references the software bus message +** ** \returns ** \retcode #CFE_SUCCESS \retdesc \copydoc CFE_SUCCESS \endcode ** \retstmt Return codes from #CFE_EVS_Register \endcode @@ -118,31 +118,31 @@ int32 SCH_AcquirePointers(void); ** \endreturns ** *************************************************************************/ -int32 SCH_HousekeepingCmd(CFE_SB_MsgPtr_t MessagePtr); +int32 SCH_HousekeepingCmd(CFE_MSG_Message_t *MessagePtr); /* ** Application command handlers */ /************************************************************************/ /** \brief Process noop command -** +** ** \par Description ** Processes a noop ground command. ** ** \par Assumptions, External Events, and Notes: ** None -** -** \param [in] MessagePtr A #CFE_SB_MsgPtr_t pointer that -** references the software bus message +** +** \param [in] MessagePtr A #CFE_SB_MsgId_t pointer that +** references the software bus message ** ** \sa #SCH_NOOP_CC ** *************************************************************************/ -void SCH_NoopCmd(CFE_SB_MsgPtr_t MessagePtr); +void SCH_NoopCmd(CFE_MSG_Message_t *MessagePtr); /************************************************************************/ /** \brief Process reset counters command -** +** ** \par Description ** Processes a reset counters ground command which will reset ** the Scheduler commmand error, command execution and performance @@ -150,90 +150,90 @@ void SCH_NoopCmd(CFE_SB_MsgPtr_t MessagePtr); ** ** \par Assumptions, External Events, and Notes: ** None -** -** \param [in] MessagePtr A #CFE_SB_MsgPtr_t pointer that -** references the software bus message +** +** \param [in] MessagePtr A #CFE_SB_MsgId_t pointer that +** references the software bus message ** ** \sa #SCH_RESET_CC ** *************************************************************************/ -void SCH_ResetCmd(CFE_SB_MsgPtr_t MessagePtr); +void SCH_ResetCmd(CFE_MSG_Message_t *MessagePtr); /************************************************************************/ /** \brief Enable a Single Activity Command -** +** ** \par Description -** Command to Enable a specific activity in the Schedule +** Command to Enable a specific activity in the Schedule ** Definition Table. ** ** \par Assumptions, External Events, and Notes: ** None -** -** \param [in] MessagePtr A #CFE_SB_MsgPtr_t pointer that -** references the software bus message -** +** +** \param [in] MessagePtr A #CFE_SB_MsgId_t pointer that +** references the software bus message +** ** \sa #SCH_ENABLE_CC, #SCH_DISABLE_CC, #SCH_ENABLE_GROUP_CC, #SCH_DISABLE_GROUP_CC ** *************************************************************************/ -void SCH_EnableCmd(CFE_SB_MsgPtr_t MessagePtr); +void SCH_EnableCmd(CFE_MSG_Message_t *MessagePtr); /************************************************************************/ /** \brief Disable a Single Activity Command -** +** ** \par Description -** Command to Disable a specific activity in the Schedule +** Command to Disable a specific activity in the Schedule ** Definition Table. ** ** \par Assumptions, External Events, and Notes: ** None -** -** \param [in] MessagePtr A #CFE_SB_MsgPtr_t pointer that -** references the software bus message -** +** +** \param [in] MessagePtr A #CFE_SB_MsgId_t pointer that +** references the software bus message +** ** \sa #SCH_ENABLE_CC, #SCH_DISABLE_CC, #SCH_ENABLE_GROUP_CC, #SCH_DISABLE_GROUP_CC ** *************************************************************************/ -void SCH_DisableCmd(CFE_SB_MsgPtr_t MessagePtr); +void SCH_DisableCmd(CFE_MSG_Message_t *MessagePtr); /************************************************************************/ /** \brief Enable a Group and/or Multi-Group(s) Command -** +** ** \par Description ** Command to Enable a single Group and/or one or more Multi-Groups ** of activities. ** ** \par Assumptions, External Events, and Notes: ** None -** -** \param [in] MessagePtr A #CFE_SB_MsgPtr_t pointer that -** references the software bus message -** +** +** \param [in] MessagePtr A #CFE_SB_MsgId_t pointer that +** references the software bus message +** ** \sa #SCH_ENABLE_CC, #SCH_DISABLE_CC, #SCH_ENABLE_GROUP_CC, #SCH_DISABLE_GROUP_CC ** *************************************************************************/ -void SCH_EnableGroupCmd(CFE_SB_MsgPtr_t MessagePtr); +void SCH_EnableGroupCmd(CFE_MSG_Message_t *MessagePtr); /************************************************************************/ /** \brief Disable a Group and/or Multi-Group(s) Command -** +** ** \par Description ** Command to Disable a single Group and/or one or more Multi-Groups ** of activities. ** ** \par Assumptions, External Events, and Notes: ** None -** -** \param [in] MessagePtr A #CFE_SB_MsgPtr_t pointer that -** references the software bus message -** +** +** \param [in] MessagePtr A #CFE_SB_MsgId_t pointer that +** references the software bus message +** ** \sa #SCH_ENABLE_CC, #SCH_DISABLE_CC, #SCH_ENABLE_GROUP_CC, #SCH_DISABLE_GROUP_CC ** *************************************************************************/ -void SCH_DisableGroupCmd(CFE_SB_MsgPtr_t MessagePtr); +void SCH_DisableGroupCmd(CFE_MSG_Message_t *MessagePtr); /************************************************************************/ /** \brief Enables Major Frame Synchronization -** +** ** \par Description ** Command to enable synchronization of Schedule Definition Table to ** the Major Frame Sync signal. The synchronization can become @@ -241,33 +241,33 @@ void SCH_DisableGroupCmd(CFE_SB_MsgPtr_t MessagePtr); ** ** \par Assumptions, External Events, and Notes: ** None -** -** \param [in] MessagePtr A #CFE_SB_MsgPtr_t pointer that -** references the software bus message -** +** +** \param [in] MessagePtr A #CFE_SB_MsgId_t pointer that +** references the software bus message +** ** \sa #SCH_ENABLE_CC, #SCH_DISABLE_CC, #SCH_ENABLE_GROUP_CC, #SCH_DISABLE_GROUP_CC ** *************************************************************************/ -void SCH_EnableSyncCmd(CFE_SB_MsgPtr_t MessagePtr); +void SCH_EnableSyncCmd(CFE_MSG_Message_t *MessagePtr); /************************************************************************/ /** \brief Creates and sends diagnostic message packet -** +** ** \par Description ** Command to send the Scheduler diagnostic message. ** ** \par Assumptions, External Events, and Notes: ** None -** -** \param [in] MessagePtr A #CFE_SB_MsgPtr_t pointer that -** references the software bus message -** +** +** \param [in] MessagePtr A #CFE_SB_MsgId_t pointer that +** references the software bus message +** *************************************************************************/ -void SCH_SendDiagTlmCmd(CFE_SB_MsgPtr_t MessagePtr); +void SCH_SendDiagTlmCmd(CFE_MSG_Message_t *MessagePtr); /************************************************************************/ /** \brief Updates appropriate command counters following command execution -** +** ** \par Description ** This function updates the ground or on-board command counter or ** command error counter depending upon the success of the command @@ -275,17 +275,17 @@ void SCH_SendDiagTlmCmd(CFE_SB_MsgPtr_t MessagePtr); ** ** \par Assumptions, External Events, and Notes: ** None -** +** ** \param [in] GoodCommand Indicates the command was successfully ** performed (=TRUE) or contained an error -** (=FALSE). -** +** (=FALSE). +** *************************************************************************/ -void SCH_PostCommandResult(boolean GoodCommand); +void SCH_PostCommandResult(bool GoodCommand); /************************************************************************/ /** \brief Verifies the length of the specified message -** +** ** \par Description ** This function determines whether the specified message is of the ** specified expected length. If not, an event message is generated @@ -295,14 +295,14 @@ void SCH_PostCommandResult(boolean GoodCommand); ** ** \par Assumptions, External Events, and Notes: ** None -** -** -** \param [in] MessagePtr A #CFE_SB_MsgPtr_t pointer that -** references the software bus message -** +** +** +** \param [in] MessagePtr A #CFE_SB_MsgId_t pointer that +** references the software bus message +** ** \param [in] ExpectedLength The size, in bytes, that the specified -** message should be equal to. -** +** message should be equal to. +** ** \returns ** \retcode #CFE_SUCCESS \retdesc \copydoc CFE_SUCCESS \endcode ** \retstmt Return codes from #CFE_EVS_Register \endcode @@ -311,7 +311,7 @@ void SCH_PostCommandResult(boolean GoodCommand); ** \endreturns ** *************************************************************************/ -int32 SCH_VerifyCmdLength (CFE_SB_MsgPtr_t MessagePtr, uint32 ExpectedLength); +int32 SCH_VerifyCmdLength(CFE_MSG_Message_t *MessagePtr, uint32 ExpectedLength); #endif /* _sch_cmds_ */ diff --git a/fsw/src/sch_custom.c b/fsw/src/sch_custom.c index ab8d72c..4abb349 100644 --- a/fsw/src/sch_custom.c +++ b/fsw/src/sch_custom.c @@ -30,9 +30,6 @@ #include "sch_app.h" #include "sch_custom.h" -#include "cfe_time_msg.h" - - /************************************************************************* ** ** Macro definitions @@ -238,8 +235,8 @@ void SCH_MajorFrameCallback(void) ** If cFE TIME is in FLYWHEEL mode, then ignore all synchronization signals */ StateFlags = CFE_TIME_GetClockInfo(); - - if ((StateFlags & CFE_TIME_FLAG_FLYING) == 0) + + if ((StateFlags & CFE_TIME_FlagBit_FLYING) == 0) { /* ** Determine whether the major frame is noisy or not @@ -265,7 +262,7 @@ void SCH_MajorFrameCallback(void) ** of noisy major frames. Also, indicate in telemetry that this particular ** Major Frame signal is considered noisy. */ - SCH_AppData.UnexpectedMajorFrame = TRUE; + SCH_AppData.UnexpectedMajorFrame = true; SCH_AppData.UnexpectedMajorFrameCount++; /* @@ -281,20 +278,20 @@ void SCH_MajorFrameCallback(void) */ if (SCH_AppData.ConsecutiveNoisyFrameCounter >= SCH_MAX_NOISY_MAJORF) { - SCH_AppData.IgnoreMajorFrame = TRUE; + SCH_AppData.IgnoreMajorFrame = true; } } } else /* Major Frame occurred when expected */ { - SCH_AppData.UnexpectedMajorFrame = FALSE; + SCH_AppData.UnexpectedMajorFrame = false; SCH_AppData.ConsecutiveNoisyFrameCounter = 0; } /* ** Ignore this callback if SCH has detected a noisy Major Frame Synch signal */ - if (SCH_AppData.IgnoreMajorFrame == FALSE) + if (SCH_AppData.IgnoreMajorFrame == false) { /* ** Stop Minor Frame Timer (which should be waiting for an unusually long diff --git a/fsw/src/sch_msg.h b/fsw/src/sch_msg.h index 8f5fb25..317d515 100644 --- a/fsw/src/sch_msg.h +++ b/fsw/src/sch_msg.h @@ -54,8 +54,7 @@ */ typedef struct { - uint8 CmdHeader[CFE_SB_CMD_HDR_SIZE]; /**< \brief cFE Software Bus Command Message Header */ - + CFE_MSG_CommandHeader_t CmdHeader; } SCH_NoArgsCmd_t; /* @@ -68,13 +67,12 @@ typedef struct */ typedef struct { - uint8 CmdHeader[CFE_SB_CMD_HDR_SIZE]; /**< \brief cFE Software Bus Command Message Header */ - - uint16 SlotNumber; /**< \brief Slot Number of Activity whose state is to change */ - /**< \details Valid Range is zero to (#SCH_TOTAL_SLOTS - 1) */ - uint16 EntryNumber; /**< \brief Entry Number of Activity whose state is to change - \details Valid Range is zero to (#SCH_ENTRIES_PER_SLOT - 1) */ + CFE_MSG_CommandHeader_t CmdHeader; + uint16 SlotNumber; /**< \brief Slot Number of Activity whose state is to change */ + /**< \details Valid Range is zero to (#SCH_TOTAL_SLOTS - 1) */ + uint16 EntryNumber; /**< \brief Entry Number of Activity whose state is to change + \details Valid Range is zero to (#SCH_ENTRIES_PER_SLOT - 1) */ } SCH_EntryCmd_t; /* @@ -87,7 +85,7 @@ typedef struct */ typedef struct { - uint8 CmdHeader[CFE_SB_CMD_HDR_SIZE]; /**< \brief cFE Software Bus Command Message Header */ + CFE_MSG_CommandHeader_t CmdHeader; uint32 GroupData; /**< \brief Group and Multi-Group Identifiers \details Most Significant Byte contains a Group ID of 1 to 255, @@ -107,7 +105,7 @@ typedef struct typedef struct { - uint8 TlmHeader[CFE_SB_TLM_HDR_SIZE]; /**< \brief cFE Software Bus Telemetry Message Header */ + CFE_MSG_TelemetryHeader_t TlmHeader; /* ** Command execution counters (ground commands) @@ -229,7 +227,7 @@ typedef struct typedef struct { - uint8 TlmHeader[CFE_SB_TLM_HDR_SIZE]; /**< \brief cFE Software Bus Telemetry Message Header */ + CFE_MSG_TelemetryHeader_t TlmHeader; /**< \brief cFE Software Bus Telemetry Message Header */ uint16 EntryStates[SCH_NUM_STATUS_BYTES_REQD/2]; /**< \schtlmmnemonic \SCH_ENTRYSTATES