Пример #1
0
CFE_TIME_SysTime_t Ut_CFE_SB_GetMsgTimeHook(CFE_SB_MsgPtr_t MsgPtr)
{
#ifdef MESSAGE_FORMAT_IS_CCSDS

    CFE_TIME_SysTime_t  TimeFromMsg;
    CFE_SB_TlmHdr_t     *TlmHdrPtr;

    /* if msg type is a command or msg has no secondary hdr, return 0 */
    if((CCSDS_RD_TYPE(MsgPtr->Hdr) == CCSDS_CMD)||(CCSDS_RD_SHDR(MsgPtr->Hdr) == 0)){
        TimeFromMsg.Seconds    =  0;
        TimeFromMsg.Subseconds =  0;
    }else{
        TlmHdrPtr = (CFE_SB_TlmHdr_t *)MsgPtr;

        TimeFromMsg.Seconds    =  *((uint32 *)&TlmHdrPtr->Sec.Time[0]);

        /* Get the 16 bit subsecond field from the header and place it in the    */
        /* upper 16 bits of the 32 bit subsecond field of the CFE_TIME_SysTime_t */
        TimeFromMsg.Subseconds =  *((uint16 *)&TlmHdrPtr->Sec.Time[4]) << 16;

    }/* end if */

    return TimeFromMsg;

#endif
}/* end Ut_CFE_SB_GetMsgTimeHook */
Пример #2
0
uint16 Ut_CFE_SB_MsgHdrSizeHook(CFE_SB_MsgId_t MsgId)
{
#ifdef MESSAGE_FORMAT_IS_CCSDS

    uint16 size;
    CCSDS_PriHdr_t  CCSDSPriHdr;

    CCSDS_WR_SID(CCSDSPriHdr,MsgId);

	  /* if secondary hdr is not present... */
	  if(CCSDS_RD_SHDR(CCSDSPriHdr) == 0){

	    size = sizeof(CCSDS_PriHdr_t);

	  }else if(CCSDS_RD_TYPE(CCSDSPriHdr) == CCSDS_CMD){

        size = CFE_SB_CMD_HDR_SIZE;

	  }else{

        size = CFE_SB_TLM_HDR_SIZE;
	  }

    return size;

#endif
}/* end Ut_CFE_SB_MsgHdrSizeHook */
/**
** \brief CFE_SB_GetCmdCode stub function
**
** \par Description
**        This function is used to mimic the response of the cFE SB function
**        CFE_SB_GetCmdCode.
**
** \par Assumptions, External Events, and Notes:
**        None
**
** \returns
**        Returns either the function code from command secondary header or
**        CFE_SUCCESS.
**
******************************************************************************/
uint16 CFE_SB_GetCmdCode(CFE_SB_MsgPtr_t MsgPtr)
{
    uint16          status = CFE_SUCCESS;
    CFE_SB_CmdHdr_t *CmdHdrPtr;

    /* If msg type isn't telemetry */
    if (CCSDS_RD_TYPE(MsgPtr->Hdr) != CCSDS_TLM)
    {
        /* Cast the input pointer to a Cmd Msg pointer */
        CmdHdrPtr = (CFE_SB_CmdHdr_t *)MsgPtr;
        status = CCSDS_RD_FC(CmdHdrPtr->Sec);
    }

    return status;
}
Пример #4
0
boolean Ut_CFE_SB_ValidateChecksumHook(CFE_SB_MsgPtr_t MsgPtr)
{
#ifdef MESSAGE_FORMAT_IS_CCSDS

    CCSDS_CmdPkt_t    *CmdPktPtr;

    /* if msg type is telemetry or there is no secondary hdr... */
    if((CCSDS_RD_TYPE(MsgPtr->Hdr) == CCSDS_TLM)||(CCSDS_RD_SHDR(MsgPtr->Hdr) == 0)){
        return FALSE;
    }/* end if */

    CmdPktPtr = (CCSDS_CmdPkt_t *)MsgPtr;

    return CCSDS_ValidCheckSum (CmdPktPtr);

#endif
}/* end Ut_CFE_SB_ValidateChecksumHook */
Пример #5
0
uint16 Ut_CFE_SB_GetChecksumHook(CFE_SB_MsgPtr_t MsgPtr)
{
#ifdef MESSAGE_FORMAT_IS_CCSDS

    CFE_SB_CmdHdr_t     *CmdHdrPtr;

    /* if msg type is telemetry or there is no secondary hdr... */
    if((CCSDS_RD_TYPE(MsgPtr->Hdr) == CCSDS_TLM)||(CCSDS_RD_SHDR(MsgPtr->Hdr) == 0)){
        return 0;
    }/* end if */

    /* cast the input pointer to a Cmd Msg pointer */
    CmdHdrPtr = (CFE_SB_CmdHdr_t *)MsgPtr;

    return CCSDS_RD_CHECKSUM(CmdHdrPtr->Sec);

#endif
}/* end Ut_CFE_SB_GetChecksumHook */
/**
** \brief CFE_SB_SetCmdCode stub function
**
** \par Description
**        This function is used to mimic the response of the cFE SB function
**        CFE_SB_SetCmdCode.
**
** \par Assumptions, External Events, and Notes:
**        None
**
** \returns
**        Returns either CFE_SB_WRONG_MSG_TYPE or CFE_SUCCESS.
**
******************************************************************************/
int32 CFE_SB_SetCmdCode(CFE_SB_MsgPtr_t MsgPtr, uint16 CmdCode)
{
    int32           status = CFE_SUCCESS;
    CFE_SB_CmdHdr_t *CmdHdrPtr;

    /* If msg type is telemetry, ignore the request */
    if (CCSDS_RD_TYPE(MsgPtr->Hdr) == CCSDS_TLM)
    {
        status = CFE_SB_WRONG_MSG_TYPE;
    }
    else
    {
        /* Cast the input pointer to a Cmd Msg pointer */
        CmdHdrPtr = (CFE_SB_CmdHdr_t *) MsgPtr;
        CCSDS_WR_FC(CmdHdrPtr->Sec,CmdCode);
    }

    return status;
}
Пример #7
0
/******************************************************************************
**  Function:  CFE_SB_GetMsgTime()
**
**  Purpose:
**    Get the time field from a message.
**
**  Arguments:
**    MsgPtr - Pointer to a CFE_SB_Msg_t
**
**  Return:
**    Time field from message or
**    Time value of zero for msgs that do not have a Time field in header
*/
CFE_TIME_SysTime_t CFE_SB_GetMsgTime(CFE_SB_MsgPtr_t MsgPtr)
{
    CFE_TIME_SysTime_t TimeFromMsg;
    uint32 LocalSecs32 = 0;
    uint32 LocalSubs32 = 0;

    #ifdef MESSAGE_FORMAT_IS_CCSDS

    #if (CFE_SB_PACKET_TIME_FORMAT == CFE_SB_TIME_32_16_SUBS)
    uint16 LocalSubs16;
    #endif

    CFE_SB_TlmHdr_t *TlmHdrPtr;

    /* if msg type is a command or msg has no secondary hdr, time = 0 */
    if ((CCSDS_RD_TYPE(MsgPtr->Hdr) != CCSDS_CMD) && (CCSDS_RD_SHDR(MsgPtr->Hdr) != 0)) {

        /* copy time data to/from packets to eliminate alignment issues */
        TlmHdrPtr = (CFE_SB_TlmHdr_t *)MsgPtr;

        #if (CFE_SB_PACKET_TIME_FORMAT == CFE_SB_TIME_32_16_SUBS)

        CFE_PSP_MemCpy(&LocalSecs32, &TlmHdrPtr->Sec.Time[0], 4);
        CFE_PSP_MemCpy(&LocalSubs16, &TlmHdrPtr->Sec.Time[4], 2);
        /* convert packet data into CFE_TIME_SysTime_t format */
        LocalSubs32 = ((uint32) LocalSubs16) << 16;

        #elif (CFE_SB_PACKET_TIME_FORMAT == CFE_SB_TIME_32_32_SUBS)

        CFE_PSP_MemCpy(&LocalSecs32, &TlmHdrPtr->Sec.Time[0], 4);
        CFE_PSP_MemCpy(&LocalSubs32, &TlmHdrPtr->Sec.Time[4], 4);
        /* no conversion necessary -- packet format = CFE_TIME_SysTime_t format */

        #elif (CFE_SB_PACKET_TIME_FORMAT == CFE_SB_TIME_32_32_M_20)

        CFE_PSP_MemCpy(&LocalSecs32, &TlmHdrPtr->Sec.Time[0], 4);
        CFE_PSP_MemCpy(&LocalSubs32, &TlmHdrPtr->Sec.Time[4], 4);
        /* convert packet data into CFE_TIME_SysTime_t format */
        LocalSubs32 = CFE_TIME_Micro2SubSecs((LocalSubs32 >> 12));

        #endif
    }
Пример #8
0
int32 Ut_CFE_SB_SetMsgTimeHook(CFE_SB_MsgPtr_t MsgPtr,
                       CFE_TIME_SysTime_t Time)
{
#ifdef MESSAGE_FORMAT_IS_CCSDS

    CFE_SB_TlmHdr_t *TlmHdrPtr;

   /* if msg type is a command or secondary header is not present... */
    if((CCSDS_RD_TYPE(MsgPtr->Hdr) == CCSDS_CMD)||(CCSDS_RD_SHDR(MsgPtr->Hdr) == 0)){ 
        return CFE_SB_WRONG_MSG_TYPE;
    }/* end if */

    TlmHdrPtr = (CFE_SB_TlmHdr_t *)MsgPtr;

    *((uint32 *)&TlmHdrPtr->Sec.Time[0]) = Time.Seconds;
    *((uint16 *)&TlmHdrPtr->Sec.Time[4]) = Time.Subseconds >> 16;

    return CFE_SUCCESS;

#endif
}/* end Ut_CFE_SB_SetMsgTimeHook */
Пример #9
0
int32 Ut_CFE_SB_SetCmdCodeHook(CFE_SB_MsgPtr_t MsgPtr,
                      uint16 CmdCode)
{
#ifdef MESSAGE_FORMAT_IS_CCSDS

    CFE_SB_CmdHdr_t     *CmdHdrPtr;

    /* if msg type is telemetry or there is no secondary hdr... */
    if((CCSDS_RD_TYPE(MsgPtr->Hdr) == CCSDS_TLM)||(CCSDS_RD_SHDR(MsgPtr->Hdr) == 0)){
        return CFE_SB_WRONG_MSG_TYPE;
    }/* end if */

    /* Cast the input pointer to a Cmd Msg pointer */
    CmdHdrPtr = (CFE_SB_CmdHdr_t *)MsgPtr;

    CCSDS_WR_FC(CmdHdrPtr->Sec,CmdCode);

    return CFE_SUCCESS;

#endif

}/* end Ut_CFE_SB_SetCmdCodeHook */