void CFE_TIME_AdjustCmd(CFE_SB_MsgPtr_t MessagePtr, int16 Direction)
{
    CFE_TIME_TimeCmd_t *CommandPtr = (CFE_TIME_TimeCmd_t *) MessagePtr;

    /*
    ** Verify command arguments...
    */
    if (CommandPtr->MicroSeconds < 1000000)
    {
        #if (CFE_TIME_CFG_SERVER == TRUE)

        CFE_TIME_SysTime_t Adjust;

        Adjust.Seconds = CommandPtr->Seconds;
        Adjust.Subseconds = CFE_TIME_Micro2SubSecs(CommandPtr->MicroSeconds);

        CFE_TIME_SetAdjust(Adjust, Direction);

        CFE_TIME_TaskData.CmdCounter++;
        CFE_EVS_SendEvent(CFE_TIME_DELTA_EID, CFE_EVS_INFORMATION,
           "STCF Adjust -- secs = %d, usecs = %d, ssecs = 0x%X, dir[1=Pos, 2=Neg] = %d",
                          CommandPtr->Seconds, CommandPtr->MicroSeconds,
                          CFE_TIME_Micro2SubSecs(CommandPtr->MicroSeconds),
                          Direction);

        #else /* not CFE_TIME_CFG_SERVER */
        /*
        ** We want to know if disabled commands are being sent...
        */
        CFE_TIME_TaskData.ErrCounter++;

        CFE_EVS_SendEvent(CFE_TIME_DELTA_CFG_EID, CFE_EVS_ERROR,
           "STCF Adjust commands invalid without CFE_TIME_CFG_SERVER set to TRUE");

        #endif /* CFE_TIME_CFG_SERVER */
    }
    else
    {
        CFE_TIME_TaskData.ErrCounter++;
        CFE_EVS_SendEvent(CFE_TIME_DELTA_ERR_EID, CFE_EVS_ERROR,
           "Invalid STCF Adjust -- secs = %d, usecs = %d, dir[1=Pos, 2=Neg] = %d",
                          CommandPtr->Seconds, CommandPtr->MicroSeconds, Direction);
    }

    return;

} /* End of CFE_TIME_AdjustCmd() */
void CFE_TIME_SetDelayCmd(CFE_SB_MsgPtr_t MessagePtr, int16 Direction)
{
    CFE_TIME_TimeCmd_t *CommandPtr = (CFE_TIME_TimeCmd_t *) MessagePtr;

    /*
    ** Verify "micro-seconds" command argument...
    */
    if (CommandPtr->MicroSeconds < 1000000)
    {
        #if (CFE_TIME_CFG_CLIENT == TRUE)

        CFE_TIME_SysTime_t Delay;

        Delay.Seconds = CommandPtr->Seconds;
        Delay.Subseconds = CFE_TIME_Micro2SubSecs(CommandPtr->MicroSeconds);

        CFE_TIME_SetDelay(Delay, Direction);

        CFE_TIME_TaskData.CmdCounter++;
        CFE_EVS_SendEvent(CFE_TIME_DELAY_EID, CFE_EVS_INFORMATION,
           "Set Tone Delay -- secs = %d, usecs = %d, ssecs = 0x%X, dir = %d",
                          CommandPtr->Seconds, CommandPtr->MicroSeconds,
                          CFE_TIME_Micro2SubSecs(CommandPtr->MicroSeconds),
                          Direction);

        #else /* not CFE_TIME_CFG_CLIENT */
        /*
        ** We want to know if disabled commands are being sent...
        */
        CFE_TIME_TaskData.ErrCounter++;

        CFE_EVS_SendEvent(CFE_TIME_DELAY_CFG_EID, CFE_EVS_ERROR,
        "Set Delay commands invalid without CFE_TIME_CFG_CLIENT set to TRUE");

        #endif /* CFE_TIME_CFG_CLIENT */
    }
    else
    {
        CFE_TIME_TaskData.ErrCounter++;
        CFE_EVS_SendEvent(CFE_TIME_DELAY_ERR_EID, CFE_EVS_ERROR,
               "Invalid Tone Delay -- secs = %d, usecs = %d",
                          CommandPtr->Seconds, CommandPtr->MicroSeconds);
    }

    return;

} /* End of CFE_TIME_SetDelayCmd() */
void CFE_TIME_SetSTCFCmd(CFE_SB_MsgPtr_t MessagePtr)
{
    CFE_TIME_TimeCmd_t *CommandPtr = (CFE_TIME_TimeCmd_t *) MessagePtr;

    /*
    ** Verify "micro-seconds" command argument...
    */
    if (CommandPtr->MicroSeconds < 1000000)
    {
        #if (CFE_TIME_CFG_SERVER == TRUE)

        CFE_TIME_SysTime_t NewSTCF;

        NewSTCF.Seconds = CommandPtr->Seconds;
        NewSTCF.Subseconds = CFE_TIME_Micro2SubSecs(CommandPtr->MicroSeconds);

        CFE_TIME_SetSTCF(NewSTCF);

        CFE_TIME_TaskData.CmdCounter++;
        CFE_EVS_SendEvent(CFE_TIME_STCF_EID, CFE_EVS_INFORMATION,
                         "Set STCF -- secs = %d, usecs = %d, ssecs = 0x%X",
                          CommandPtr->Seconds, CommandPtr->MicroSeconds,
                          CFE_TIME_Micro2SubSecs(CommandPtr->MicroSeconds));

        #else /* not CFE_TIME_CFG_SERVER */
        /*
        ** We want to know if disabled commands are being sent...
        */
        CFE_TIME_TaskData.ErrCounter++;

        CFE_EVS_SendEvent(CFE_TIME_STCF_CFG_EID, CFE_EVS_ERROR,
           "Set STCF commands invalid without CFE_TIME_CFG_SERVER set to TRUE");

        #endif /* CFE_TIME_CFG_SERVER */
    }
    else
    {
        CFE_TIME_TaskData.ErrCounter++;
        CFE_EVS_SendEvent(CFE_TIME_STCF_ERR_EID, CFE_EVS_ERROR,
                         "Invalid STCF -- secs = %d, usecs = %d",
                          CommandPtr->Seconds, CommandPtr->MicroSeconds);
    }

    return;

} /* End of CFE_TIME_SetSTCFCmd() */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
CFE_TIME_SysTime_t CFE_TIME_LatchClock(void)
{
    CFE_TIME_SysTime_t LatchTime;
    OS_time_t LocalTime;

    /*
    ** Get time in O/S format (seconds : microseconds)...
    */
    CFE_PSP_GetTime(&LocalTime);

    /*
    ** Convert time to cFE format (seconds : 1/2^32 subseconds)...
    */
    LatchTime.Seconds = LocalTime.seconds;
    LatchTime.Subseconds = CFE_TIME_Micro2SubSecs(LocalTime.microsecs);

    return(LatchTime);

} /* End of CFE_TIME_LatchClock() */