-
Notifications
You must be signed in to change notification settings - Fork 28
/
mm_msg.h
251 lines (217 loc) · 8.27 KB
/
mm_msg.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
/************************************************************************
* NASA Docket No. GSC-18,923-1, and identified as “Core Flight
* System (cFS) Memory Manager Application version 2.5.1”
*
* Copyright (c) 2021 United States Government as represented by the
* Administrator of the National Aeronautics and Space Administration.
* All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
************************************************************************/
/**
* @file
* Specification for the CFS Memory Manager command and telemetry
* message data types.
*
* @note
* Constant and enumerated types related to these message structures
* are defined in mm_msgdefs.h. They are kept separate to allow easy
* integration with ASIST RDL files which can't handle typedef
* declarations (see the main comment block in mm_msgdefs.h for more
* info).
**/
#ifndef MM_MSG_H
#define MM_MSG_H
/************************************************************************
* Includes
************************************************************************/
#include "mm_platform_cfg.h"
#include "cfe.h"
#include "mm_msgdefs.h"
/************************************************************************
* Type Definitions
************************************************************************/
/**
* \defgroup cfsmmcmdstructs CFS Memory Manager Command Structures
* \{
*/
/**
* \brief Symbolic Address Type
*/
typedef struct
{
cpuaddr Offset; /**< \brief Optional offset that is used as the
absolute address if the SymName string is NUL */
char SymName[OS_MAX_SYM_LEN]; /**< \brief Symbol name string */
} MM_SymAddr_t;
/**
* \brief No Arguments Command
*
* For command details see #MM_NOOP_CC, #MM_RESET_CC
*/
typedef struct
{
CFE_MSG_CommandHeader_t CmdHeader; /**< \brief Command header */
} MM_NoArgsCmd_t;
/**
* \brief Memory Peek Command
*
* For command details see #MM_PEEK_CC
*/
typedef struct
{
CFE_MSG_CommandHeader_t CmdHeader; /**< \brief Command header */
uint8 DataSize; /**< \brief Size of the data to be read */
uint8 MemType; /**< \brief Memory type to peek data from */
uint8 Padding[2]; /**< \brief Structure padding */
MM_SymAddr_t SrcSymAddress; /**< \brief Symbolic source peek address */
} MM_PeekCmd_t;
/**
* \brief Memory Poke Command
*
* For command details see #MM_POKE_CC
*/
typedef struct
{
CFE_MSG_CommandHeader_t CmdHeader; /**< \brief Command header */
uint8 DataSize; /**< \brief Size of the data to be written */
uint8 MemType; /**< \brief Memory type to poke data to */
uint8 Padding[2]; /**< \brief Structure padding */
uint32 Data; /**< \brief Data to be written */
MM_SymAddr_t DestSymAddress; /**< \brief Symbolic destination poke address */
} MM_PokeCmd_t;
/**
* \brief Memory Load With Interrupts Disabled Command
*
* For command details see #MM_LOAD_MEM_WID_CC
*/
typedef struct
{
CFE_MSG_CommandHeader_t CmdHeader; /**< \brief Command header */
uint8 NumOfBytes; /**< \brief Number of bytes to be loaded */
uint8 Padding[3]; /**< \brief Structure padding */
uint32 Crc; /**< \brief Data check value */
MM_SymAddr_t DestSymAddress; /**< \brief Symbolic destination load address */
uint8 DataArray[MM_MAX_UNINTERRUPTIBLE_DATA]; /**< \brief Data to be loaded */
} MM_LoadMemWIDCmd_t;
/**
* \brief Dump Memory In Event Message Command
*
* For command details see #MM_DUMP_IN_EVENT_CC
*/
typedef struct
{
CFE_MSG_CommandHeader_t CmdHeader; /**< \brief Command header */
uint8 MemType; /**< \brief Memory dump type */
uint8 NumOfBytes; /**< \brief Number of bytes to be dumped */
uint16 Padding; /**< \brief Structure padding */
MM_SymAddr_t SrcSymAddress; /**< \brief Symbolic source address */
} MM_DumpInEventCmd_t;
/**
* \brief Memory Load From File Command
*
* For command details see #MM_LOAD_MEM_FROM_FILE_CC
*/
typedef struct
{
CFE_MSG_CommandHeader_t CmdHeader; /**< \brief Command header */
char FileName[OS_MAX_PATH_LEN]; /**< \brief Name of memory load file */
} MM_LoadMemFromFileCmd_t;
/**
* \brief Memory Dump To File Command
*
* For command details see #MM_DUMP_MEM_TO_FILE_CC
*/
typedef struct
{
CFE_MSG_CommandHeader_t CmdHeader; /**< \brief Command header */
uint8 MemType; /**< \brief Memory dump type */
uint8 Padding[3]; /**< \brief Structure padding */
uint32 NumOfBytes; /**< \brief Number of bytes to be dumped */
MM_SymAddr_t SrcSymAddress; /**< \brief Symbol plus optional offset */
char FileName[OS_MAX_PATH_LEN]; /**< \brief Name of memory dump file */
} MM_DumpMemToFileCmd_t;
/**
* \brief Memory Fill Command
*
* For command details see #MM_FILL_MEM_CC
*/
typedef struct
{
CFE_MSG_CommandHeader_t CmdHeader; /**< \brief Command header */
uint8 MemType; /**< \brief Memory type */
uint8 Padding[3]; /**< \brief Structure padding */
uint32 NumOfBytes; /**< \brief Number of bytes to fill */
uint32 FillPattern; /**< \brief Fill pattern to use */
MM_SymAddr_t DestSymAddress; /**< \brief Symbol plus optional offset */
} MM_FillMemCmd_t;
/**
* \brief Symbol Table Lookup Command
*
* For command details see #MM_LOOKUP_SYM_CC
*/
typedef struct
{
CFE_MSG_CommandHeader_t CmdHeader; /**< \brief Command header */
char SymName[OS_MAX_SYM_LEN]; /**< \brief Symbol name string */
} MM_LookupSymCmd_t;
/**
* \brief Save Symbol Table To File Command
*
* For command details see #MM_SYMTBL_TO_FILE_CC
*/
typedef struct
{
CFE_MSG_CommandHeader_t CmdHeader; /**< \brief Command header */
char FileName[OS_MAX_PATH_LEN]; /**< \brief Name of symbol dump file */
} MM_SymTblToFileCmd_t;
/**
* \brief EEPROM Write Enable Command
*
* For command details see #MM_ENABLE_EEPROM_WRITE_CC
*/
typedef struct
{
CFE_MSG_CommandHeader_t CmdHeader; /**< \brief Command header */
uint32 Bank; /**< \brief EEPROM bank number to write-enable */
} MM_EepromWriteEnaCmd_t;
/**
* \brief EEPROM Write Disable Command
*
* For command details see #MM_DISABLE_EEPROM_WRITE_CC
*/
typedef struct
{
CFE_MSG_CommandHeader_t CmdHeader; /**< \brief Command header */
uint32 Bank; /**< \brief EEPROM bank number to write-disable */
} MM_EepromWriteDisCmd_t;
/**\}*/
/**
* \defgroup cfsmmtlm CFS Memory Manager Telemetry
* \{
*/
/**
* \brief Housekeeping Packet Structure
*/
typedef struct
{
CFE_MSG_TelemetryHeader_t TlmHeader; /**< \brief Telemetry header */
uint8 CmdCounter; /**< \brief MM Application Command Counter */
uint8 ErrCounter; /**< \brief MM Application Command Error Counter */
uint8 LastAction; /**< \brief Last command action executed */
uint8 MemType; /**< \brief Memory type for last command */
cpuaddr Address; /**< \brief Fully resolved address used for last command */
uint32 DataValue; /**< \brief Last command data (fill pattern or peek/poke value) */
uint32 BytesProcessed; /**< \brief Bytes processed for last command */
char FileName[OS_MAX_PATH_LEN]; /**< \brief Name of the data file used for last command, where applicable */
} MM_HkPacket_t;
/**\}*/
#endif