Skip to content

Commit

Permalink
Fix nasa#711, Add unit tests and improve error logic
Browse files Browse the repository at this point in the history
  • Loading branch information
skliper committed Aug 7, 2020
1 parent 3ff06f3 commit b5467c1
Show file tree
Hide file tree
Showing 12 changed files with 1,160 additions and 15 deletions.
29 changes: 20 additions & 9 deletions modules/msg/src/cfe_msg_ccsdsext.c
Original file line number Diff line number Diff line change
Expand Up @@ -74,13 +74,12 @@ int32 CFE_MSG_GetEDSVersion(const CFE_MSG_Message_t *MsgPtr, CFE_MSG_EDSVersion_
*/
int32 CFE_MSG_SetEDSVersion(CFE_MSG_Message_t *MsgPtr, CFE_MSG_EDSVersion_t Version)
{
Version <<= CFE_MSG_EDSVER_SHIFT;
if (MsgPtr == NULL || ((Version & ~CFE_MSG_EDSVER_MASK) != 0))
if (MsgPtr == NULL || (Version > (CFE_MSG_EDSVER_MASK >> CFE_MSG_EDSVER_SHIFT)))
{
return CFE_MSG_BAD_ARGUMENT;
}

CFE_MSG_SetHeaderField(MsgPtr->CCSDS.Ext.Subsystem, Version, CFE_MSG_EDSVER_MASK);
CFE_MSG_SetHeaderField(MsgPtr->CCSDS.Ext.Subsystem, Version << CFE_MSG_EDSVER_SHIFT, CFE_MSG_EDSVER_MASK);

return CFE_SUCCESS;
}
Expand Down Expand Up @@ -113,7 +112,9 @@ int32 CFE_MSG_GetEndian(const CFE_MSG_Message_t *MsgPtr, CFE_MSG_Endian_t *Endia
*/
int32 CFE_MSG_SetEndian(CFE_MSG_Message_t *MsgPtr, CFE_MSG_Endian_t Endian)
{
if (MsgPtr == NULL || Endian == CFE_MSG_Endian_Invalid)
int32 status = CFE_SUCCESS;

if (MsgPtr == NULL)
{
return CFE_MSG_BAD_ARGUMENT;
}
Expand All @@ -122,12 +123,16 @@ int32 CFE_MSG_SetEndian(CFE_MSG_Message_t *MsgPtr, CFE_MSG_Endian_t Endian)
{
MsgPtr->CCSDS.Ext.Subsystem[0] |= CFE_MSG_ENDIAN_MASK >> 8;
}
else
else if (Endian == CFE_MSG_Endian_Big)
{
MsgPtr->CCSDS.Ext.Subsystem[0] &= ~(CFE_MSG_ENDIAN_MASK >> 8);
}
else
{
status = CFE_MSG_BAD_ARGUMENT;
}

return CFE_SUCCESS;
return status;
}

/******************************************************************************
Expand Down Expand Up @@ -158,7 +163,9 @@ int32 CFE_MSG_GetPlaybackFlag(const CFE_MSG_Message_t *MsgPtr, CFE_MSG_PlaybackF
*/
int32 CFE_MSG_SetPlaybackFlag(CFE_MSG_Message_t *MsgPtr, CFE_MSG_PlaybackFlag_t PlayFlag)
{
if (MsgPtr == NULL || PlayFlag == CFE_MSG_PlayFlag_Invalid)
int32 status = CFE_SUCCESS;

if (MsgPtr == NULL)
{
return CFE_MSG_BAD_ARGUMENT;
}
Expand All @@ -167,12 +174,16 @@ int32 CFE_MSG_SetPlaybackFlag(CFE_MSG_Message_t *MsgPtr, CFE_MSG_PlaybackFlag_t
{
MsgPtr->CCSDS.Ext.Subsystem[0] |= CFE_MSG_PLAYBACK_MASK >> 8;
}
else
else if (PlayFlag == CFE_MSG_PlayFlag_Original)
{
MsgPtr->CCSDS.Ext.Subsystem[0] &= ~(CFE_MSG_PLAYBACK_MASK >> 8);
}
else
{
status = CFE_MSG_BAD_ARGUMENT;
}

return CFE_SUCCESS;
return status;
}

/******************************************************************************
Expand Down
17 changes: 11 additions & 6 deletions modules/msg/src/cfe_msg_ccsdspri.c
Original file line number Diff line number Diff line change
Expand Up @@ -81,13 +81,12 @@ int32 CFE_MSG_GetHeaderVersion(const CFE_MSG_Message_t *MsgPtr, CFE_MSG_HeaderVe
*/
int32 CFE_MSG_SetHeaderVersion(CFE_MSG_Message_t *MsgPtr, CFE_MSG_HeaderVersion_t Version)
{
Version <<= CFE_MSG_CCSDSVER_SHIFT;
if (MsgPtr == NULL || ((Version & ~CFE_MSG_CCSDSVER_MASK) != 0))
if (MsgPtr == NULL || (Version > (CFE_MSG_CCSDSVER_MASK >> CFE_MSG_CCSDSVER_SHIFT)))
{
return CFE_MSG_BAD_ARGUMENT;
}

CFE_MSG_SetHeaderField(MsgPtr->CCSDS.Pri.StreamId, Version, CFE_MSG_CCSDSVER_MASK);
CFE_MSG_SetHeaderField(MsgPtr->CCSDS.Pri.StreamId, Version << CFE_MSG_CCSDSVER_SHIFT, CFE_MSG_CCSDSVER_MASK);

return CFE_SUCCESS;
}
Expand Down Expand Up @@ -120,7 +119,9 @@ int32 CFE_MSG_GetType(const CFE_MSG_Message_t *MsgPtr, CFE_MSG_Type_t *Type)
*/
int32 CFE_MSG_SetType(CFE_MSG_Message_t *MsgPtr, CFE_MSG_Type_t Type)
{
if (MsgPtr == NULL || Type == CFE_MSG_Type_Invalid)
int32 status = CFE_SUCCESS;

if (MsgPtr == NULL)
{
return CFE_MSG_BAD_ARGUMENT;
}
Expand All @@ -129,12 +130,16 @@ int32 CFE_MSG_SetType(CFE_MSG_Message_t *MsgPtr, CFE_MSG_Type_t Type)
{
MsgPtr->CCSDS.Pri.StreamId[0] |= CFE_MSG_TYPE_MASK >> 8;
}
else
else if (Type == CFE_MSG_Type_Tlm)
{
MsgPtr->CCSDS.Pri.StreamId[0] &= ~(CFE_MSG_TYPE_MASK >> 8);
}
else
{
status = CFE_MSG_BAD_ARGUMENT;
}

return CFE_SUCCESS;
return status;
}

/******************************************************************************
Expand Down
Loading

0 comments on commit b5467c1

Please sign in to comment.