nasa / HS

The Core Flight System (cFS) Health and Safety (HS) application.
Apache License 2.0
36 stars 23 forks source link

Standardization of Command Responses #126

Open dmknutsen opened 1 month ago

dmknutsen commented 1 month ago

Checklist (Please check before submitting)

Is your feature request related to a problem? Please describe. cFS should have standardized command responses for commands that set a state/mode like enable/disable, on/off, true/false, start/stop/pause/resume, etc.

For those commands, the app should respond as describe below:

The following event IDs issued for successful commands are debug type - which does not align with the standard:

HS_RESET_DBG_EID
HS_DISABLE_APPMON_DBG_EID
HS_ENABLE_EVENTMON_DBG_EID
HS_DISABLE_EVENTMON_DBG_EID
HS_ENABLE_ALIVENESS_DBG_EID
HS_DISABLE_ALIVENESS_DBG_EID
HS_ENABLE_CPUHOG_DBG_EID
HS_DISABLE_CPUHOG_DBG_EID
HS_RESET_RESETS_DBG_EID
HS_SET_MAX_RESETS_DBG_EID

Describe the solution you'd like Update logic to align with the standard.

Requester Info Dan Knutsen NASA Goddard

thnkslprpt commented 1 month ago

There's one more that wasn't listed: HS_ENABLE_APPMON_DBG_EID

dmknutsen commented 1 month ago

Thanks for the heads up!

thnkslprpt commented 1 month ago

@dmknutsen Something like this?:

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*                                                                 */
/* Disable applications monitor command                            */
/*                                                                 */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
CFE_Status_t HS_DisableAppMonCmd(const HS_DisableAppMonCmd_t *BufPtr)
{
    HS_AppData.CmdCount++;

    if (HS_AppData.CurrentAppMonState == HS_STATE_DISABLED)
    {
        CFE_EVS_SendEvent(HS_DISABLE_APPMON_INF_EID, CFE_EVS_EventType_INFORMATION, "Application Monitoring *already* Disabled");
    }
    else
    {
        HS_AppData.CurrentAppMonState = HS_STATE_DISABLED;
        CFE_EVS_SendEvent(HS_DISABLE_APPMON_INF_EID, CFE_EVS_EventType_INFORMATION, "Application Monitoring Disabled");
    }

    return CFE_SUCCESS;
}

A separate question - create a new EID for these 'already in that state' events or re-use the successful command EIDs? (as per the above code snippet)

skliper commented 1 month ago

Consider setting a string based on state and just have one SendEvent call (with the same EID) for slightly less duplication.

thnkslprpt commented 1 month ago

OK, so how's this? ping @dmknutsen and/or @skliper

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*                                                                 */
/* Disable applications monitor command                            */
/*                                                                 */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
CFE_Status_t HS_DisableAppMonCmd(const HS_DisableAppMonCmd_t *BufPtr)
{
    char EventText[CFE_MISSION_EVS_MAX_MESSAGE_LENGTH];

    HS_AppData.CmdCount++; /* Currently always successful*/

    /* Check if already in the commanded state */
    if (HS_AppData.CurrentAppMonState == HS_STATE_DISABLED)
    {
        snprintf(EventText, CFE_MISSION_EVS_MAX_MESSAGE_LENGTH, "Application Monitoring *already* Disabled");
    }
    else
    {
        HS_AppData.CurrentAppMonState = HS_STATE_DISABLED;
        snprintf(EventText, CFE_MISSION_EVS_MAX_MESSAGE_LENGTH, "Application Monitoring Disabled");
    }

    CFE_EVS_SendEvent(HS_DISABLE_APPMON_INF_EID, CFE_EVS_EventType_INFORMATION, EventText);

    return CFE_SUCCESS; /* Currently always returns success*/
}

In the end the 'less duplicative' version is longer...

dmknutsen commented 1 month ago

Either look good to me!

thnkslprpt commented 1 month ago

Either look good to me!

Went with option 1.