diff --git a/config/default_mm_msgdefs.h b/config/default_mm_msgdefs.h index 5a6a5e7..a0145de 100644 --- a/config/default_mm_msgdefs.h +++ b/config/default_mm_msgdefs.h @@ -157,6 +157,24 @@ typedef struct { applicable */ } MM_HkTlm_Payload_t; +/** + * \brief Peek Packet Payload + */ +typedef struct { + MM_MemType_Enum_t MemType; /**< \brief Memory type */ + uint32 DataValue; /**< \brief Data from peek */ + MM_MemAddress_t Address; /**< \brief Fully resolved address */ + MM_MemSize_t BytesProcessed; /**< \brief Bytes processed */ +} MM_PeekPacket_Payload_t; + +/** + * \brief Symbol Lookup Packet Payload + */ +typedef struct { + char SymName[CFE_MISSION_MAX_API_LEN]; /**< \brief Symbol name */ + MM_MemAddress_t Address; /**< \brief Fully resolved address */ +} MM_SymLookupPacket_Payload_t; + #endif /* DEFAULT_MM_MSGDEFS_H */ -/**\}*/ \ No newline at end of file +/**\}*/ diff --git a/config/default_mm_msgids.h b/config/default_mm_msgids.h index a862b9e..a158f25 100644 --- a/config/default_mm_msgids.h +++ b/config/default_mm_msgids.h @@ -50,6 +50,8 @@ */ #define MM_HK_TLM_MID MM_TLM_PLATFORM_MIDVAL(HK_TLM) +#define MM_PEEK_TLM_MID MM_TLM_PLATFORM_MIDVAL(PEEK_TLM) +#define MM_SYM_LOOKUP_TLM_MID MM_TLM_PLATFORM_MIDVAL(SYM_LOOKUP) #endif /* DEFAULT_MM_MSGIDS_H */ diff --git a/config/default_mm_msgstruct.h b/config/default_mm_msgstruct.h index 6b66b1f..5dab917 100644 --- a/config/default_mm_msgstruct.h +++ b/config/default_mm_msgstruct.h @@ -178,6 +178,22 @@ typedef struct { CFE_MSG_TelemetryHeader_t TelemetryHeader; } MM_SendHkCmd_t; +/** + * \brief Symbol Lookup Packet Structure + */ +typedef struct { + CFE_MSG_TelemetryHeader_t TlmHeader; /**< \brief Telemetry header */ + MM_SymLookupPacket_Payload_t Payload; /**< \brief Symbol Lookup Packet Payload */ +} MM_SymLookupPacket_t; + +/** + * \brief Peek Packet Structure + */ +typedef struct { + CFE_MSG_TelemetryHeader_t TlmHeader; /**< \brief Telemetry header */ + MM_PeekPacket_Payload_t Payload; /**< \brief Peek Packet Payload */ +} MM_PeekPacket_t; + #endif /* DEFAULT_MM_MSGSTRUCT_H */ -/**\}*/ \ No newline at end of file +/**\}*/ diff --git a/docs/mm_FunctionalRequirements.csv b/docs/mm_FunctionalRequirements.csv index d05a27c..f0810a7 100644 --- a/docs/mm_FunctionalRequirements.csv +++ b/docs/mm_FunctionalRequirements.csv @@ -20,7 +20,7 @@ b) length of data written c) value of the data written ",Confirms memory poke operations MM2000.2,MM2000.2,"When MM receives a Poke command, if the data size is not 8, 16, or 32 bits, MM shall reject the command.",Ensure writes happen at 8-bit boundaries -MM2002,MM2002,"Upon receipt of a Peek command, MM shall read 8, 16, or 32 bits of data from the command-specified RAM address and telemeter the following information in the HK packet + issue an event message containing: +MM2002,MM2002,"Upon receipt of a Peek command, MM shall read 8, 16, or 32 bits of data from the command-specified RAM address and telemeter the following information in the HK and Peek packet + issue an event message containing: a) address read b) length of data read c) value of the data read diff --git a/eds/mm.xml b/eds/mm.xml index 215903e..a8d3c9b 100644 --- a/eds/mm.xml +++ b/eds/mm.xml @@ -208,6 +208,22 @@ + + + + + + + + + + + + + + + + @@ -343,6 +359,18 @@ + + + + + + + + + + + + @@ -365,6 +393,18 @@ + + + + + + + + + + + + @@ -372,15 +412,19 @@ + + + + - \ No newline at end of file + diff --git a/fsw/inc/mm_topicids.h b/fsw/inc/mm_topicids.h index e2eaa99..dcc532c 100644 --- a/fsw/inc/mm_topicids.h +++ b/fsw/inc/mm_topicids.h @@ -32,4 +32,10 @@ #define MM_MISSION_HK_TLM_TOPICID MM_MISSION_TIDVAL(HK_TLM) #define DEFAULT_MM_MISSION_HK_TLM_TOPICID 0x87 -#endif /* MM_TOPICIDS_H */ \ No newline at end of file +#define MM_MISSION_PEEK_TLM_TOPICID MM_MISSION_TIDVAL(PEEK_TLM) +#define DEFAULT_MM_MISSION_PEEK_TLM_TOPICID 0x88 + +#define MM_MISSION_SYM_LOOKUP_TOPICID MM_MISSION_TIDVAL(SYM_LOOKUP) +#define DEFAULT_MM_MISSION_SYM_LOOKUP_TOPICID 0x89 + +#endif /* MM_TOPICIDS_H */ diff --git a/fsw/src/mm_app.c b/fsw/src/mm_app.c index afc573d..15c6780 100644 --- a/fsw/src/mm_app.c +++ b/fsw/src/mm_app.c @@ -159,6 +159,17 @@ CFE_Status_t MM_AppInit(void) { CFE_MSG_Init(CFE_MSG_PTR(MM_AppData.HkTlm.TelemetryHeader), CFE_SB_ValueToMsgId(MM_HK_TLM_MID), sizeof(MM_HkTlm_t)); + /* + ** Initialize the local peek telemetry packet (clear user data area) + */ + CFE_MSG_Init(CFE_MSG_PTR(MM_AppData.PeekPacket.TlmHeader), CFE_SB_ValueToMsgId(MM_PEEK_TLM_MID), sizeof(MM_PeekPacket_t)); + + /* + ** Initialize the local symbol lookup telemetry packet (clear user data area) + */ + CFE_MSG_Init(CFE_MSG_PTR(MM_AppData.SymLookupPacket.TlmHeader), CFE_SB_ValueToMsgId(MM_SYM_LOOKUP_TLM_MID), sizeof(MM_SymLookupPacket_t)); + + /* ** Create Software Bus message pipe */ diff --git a/fsw/src/mm_app.h b/fsw/src/mm_app.h index 697337c..6dd8b44 100644 --- a/fsw/src/mm_app.h +++ b/fsw/src/mm_app.h @@ -61,6 +61,10 @@ typedef struct { MM_HkTlm_t HkTlm; /**< \brief Housekeeping telemetry packet */ + MM_SymLookupPacket_t SymLookupPacket; /**< \brief Symbol lookup telemetry packet */ + + MM_PeekPacket_t PeekPacket; /**< \brief Memory peek telemetry packet */ + CFE_SB_PipeId_t CmdPipe; /**< \brief Command pipe ID */ uint32 RunStatus; /**< \brief Application run status */ @@ -108,4 +112,4 @@ void MM_AppMain(void); */ CFE_Status_t MM_AppInit(void); -#endif \ No newline at end of file +#endif diff --git a/fsw/src/mm_cmds.c b/fsw/src/mm_cmds.c index 8fc56a6..3bcc439 100644 --- a/fsw/src/mm_cmds.c +++ b/fsw/src/mm_cmds.c @@ -140,6 +140,13 @@ CFE_Status_t MM_LookupSymCmd(const MM_LookupSymCmd_t *Msg) { CFE_EVS_SendEvent(MM_SYM_LOOKUP_INF_EID, CFE_EVS_EventType_INFORMATION, "Symbol Lookup Command: Name = '%s' Addr = %p", SymName, (void *)ResolvedAddr); + + /* Update Symbol Look Up Tlm */ + strncpy(MM_AppData.SymLookupPacket.Payload.SymName, SymName, sizeof(MM_AppData.SymLookupPacket.Payload.SymName)); + + MM_AppData.SymLookupPacket.Payload.Address = ResolvedAddr; + CFE_SB_TimeStampMsg(CFE_MSG_PTR(MM_AppData.SymLookupPacket.TlmHeader)); + CFE_SB_TransmitMsg(CFE_MSG_PTR(MM_AppData.SymLookupPacket.TlmHeader), true); } else { MM_AppData.HkTlm.Payload.ErrCounter++; CFE_EVS_SendEvent(MM_SYMNAME_ERR_EID, CFE_EVS_EventType_ERROR, diff --git a/fsw/src/mm_dump.c b/fsw/src/mm_dump.c index 7c0fe11..12f980d 100644 --- a/fsw/src/mm_dump.c +++ b/fsw/src/mm_dump.c @@ -110,6 +110,15 @@ int32 MM_PeekMem(const MM_PeekCmd_t *CmdPtr, cpuaddr SrcAddress) { "Peek Command: Addr = %p Size = %u bits Data = 0x%08X", (void *)SrcAddress, (unsigned int)DataSize, (unsigned int)DataValue); + + /* Update Peek TLM Packet */ + MM_AppData.PeekPacket.Payload.MemType = CmdPtr->Payload.MemType; + MM_AppData.PeekPacket.Payload.Address = SrcAddress; + MM_AppData.PeekPacket.Payload.BytesProcessed = BytesProcessed; + MM_AppData.PeekPacket.Payload.DataValue = DataValue; + + CFE_SB_TimeStampMsg(CFE_MSG_PTR(MM_AppData.PeekPacket.TlmHeader)); + CFE_SB_TransmitMsg(CFE_MSG_PTR(MM_AppData.PeekPacket.TlmHeader), true); } else { CFE_EVS_SendEvent(MM_PSP_READ_ERR_EID, CFE_EVS_EventType_ERROR, "PSP read memory error: RC=%d, Address=%p, MemType=MEM%u",