28#define LOGMESSAGE_OPTION_NONE 0x00000000
30#define LOGMESSAGE_OPTION_TIMESTAMP 0x00000100
32#define LOGMESSAGE_OPTION_CONTAINS_DATA 0x00000200
34#define LOGMESSAGE_OPTION_ALERT 0x00000400
36#define LOGMESSAGE_OPTION_DEBUG 0x00000800
38#define LOGMESSAGE_OPTION_UNDEFINED1 0x00001000
40#define LOGMESSAGE_OPTION_UNDEFINED2 0x00002000
42#define LOGMESSAGE_OPTION_UNDEFINED3 0x00004000
44#define LOGMESSAGE_OPTION_UNDEFINED4 0x00008000
47#define USER_LOGMESSAGE_OPTIONS (LOGMESSAGE_OPTION_ALERT | LOGMESSAGE_OPTION_DEBUG)
50#define CONCATENATE_DETAIL(x, y) x##y
52#define CONCATENATE(x, y) CONCATENATE_DETAIL(x, y)
54#define MAKE_UNIQUE(x) CONCATENATE(x, __LINE__)
62 static const char MAKE_UNIQUE(Message)[] __attribute__((section("message"))) = message; \
63 _LogMessage((char*)MAKE_UNIQUE(Message), LOGMESSAGE_OPTION_TIMESTAMP); \
71#define LogMessage(message, Options) \
73 static const char MAKE_UNIQUE(Message)[] __attribute__((section("message"))) = message; \
74 _LogMessage((char*)MAKE_UNIQUE(Message), ((Options) & USER_LOGMESSAGE_OPTIONS) | LOGMESSAGE_OPTION_TIMESTAMP); \
81#define LogMessageAlert(message) \
83 static const char MAKE_UNIQUE(Message)[] __attribute__((section("message"))) = message; \
84 _LogMessage((char*)MAKE_UNIQUE(Message), LOGMESSAGE_OPTION_TIMESTAMP | LOGMESSAGE_OPTION_ALERT); \
92#define LogMessageAppendLine(message) \
94 static const char MAKE_UNIQUE(Message)[] __attribute__((section("message"))) = message; \
95 _LogMessage((char*)MAKE_UNIQUE(Message), 0); \
103#define LogMessageDyn(message, Options) DynamicString(message, ((Options) & USER_LOGMESSAGE_OPTIONS) | LOGMESSAGE_OPTION_TIMESTAMP)
110#define LogMessageDyn_appendLine(message) DynamicString(message, LOGMESSAGE_OPTION_NONE)
119#define LogMessageData1(message, dat1, Options) \
121 static const char MAKE_UNIQUE(Message)[] __attribute__((section("message"))) = message; \
122 if(sizeof(dat1) < 4) \
124 int32_t MAKE_UNIQUE(DataTemp) = dat1; \
125 _LogmessageData((char*)MAKE_UNIQUE(Message), (Options) & USER_LOGMESSAGE_OPTIONS, 1, MAKE_UNIQUE(DataTemp)); \
129 _LogmessageData((char*)MAKE_UNIQUE(Message), (Options) & USER_LOGMESSAGE_OPTIONS, 1, *(int32_t*)&(dat1)); \
140#define LogMessageData2(message, dat1, dat2, Options) \
142 static const char MAKE_UNIQUE(Message)[] __attribute__((section("message"))) = message; \
143 int32_t* MAKE_UNIQUE(pDataTemp1); int32_t* MAKE_UNIQUE(pDataTemp2); \
144 int32_t MAKE_UNIQUE(DataTemp1), MAKE_UNIQUE(DataTemp2); \
145 if(sizeof(dat1) < 4) \
147 MAKE_UNIQUE(DataTemp1) = dat1; \
148 MAKE_UNIQUE(pDataTemp1) = &MAKE_UNIQUE(DataTemp1); \
152 MAKE_UNIQUE(pDataTemp1) = (int32_t*)&dat1; \
154 if(sizeof(dat2) < 4) \
156 MAKE_UNIQUE(DataTemp2) = dat2; \
157 MAKE_UNIQUE(pDataTemp2) = &MAKE_UNIQUE(DataTemp2); \
161 MAKE_UNIQUE(pDataTemp2) = (int32_t*)&dat2; \
163 _LogmessageData((char*)MAKE_UNIQUE(Message), (Options) & USER_LOGMESSAGE_OPTIONS, 2, *MAKE_UNIQUE(pDataTemp1), *MAKE_UNIQUE(pDataTemp2)); \
174#define LogMessageData3(message, dat1, dat2, dat3, Options) \
176 static const char MAKE_UNIQUE(Message)[] __attribute__((section("message"))) = message; \
177 int32_t* MAKE_UNIQUE(pDataTemp1); int32_t* MAKE_UNIQUE(pDataTemp2); int32_t* MAKE_UNIQUE(pDataTemp3); \
178 int32_t MAKE_UNIQUE(DataTemp1), MAKE_UNIQUE(DataTemp2), MAKE_UNIQUE(DataTemp3); \
179 if(sizeof(dat1) < 4) \
181 MAKE_UNIQUE(DataTemp1) = dat1; \
182 MAKE_UNIQUE(pDataTemp1) = &MAKE_UNIQUE(DataTemp1); \
186 MAKE_UNIQUE(pDataTemp1) = (int32_t*)&dat1; \
188 if(sizeof(dat2) < 4) \
190 MAKE_UNIQUE(DataTemp2) = dat2; \
191 MAKE_UNIQUE(pDataTemp2) = &MAKE_UNIQUE(DataTemp2); \
195 MAKE_UNIQUE(pDataTemp2) = (int32_t*)&dat2; \
197 if(sizeof(dat3) < 4) \
199 MAKE_UNIQUE(DataTemp3) = dat3; \
200 MAKE_UNIQUE(pDataTemp3) = &MAKE_UNIQUE(DataTemp3); \
204 MAKE_UNIQUE(pDataTemp3) = (void*)&dat3; \
206 _LogmessageData((char*)MAKE_UNIQUE(Message), (Options) & USER_LOGMESSAGE_OPTIONS, 3, *MAKE_UNIQUE(pDataTemp1), *MAKE_UNIQUE(pDataTemp2), *MAKE_UNIQUE(pDataTemp3)); \
218#define LogMessageData4(message, dat1, dat2, dat3, dat4, Options) \
220 static const char MAKE_UNIQUE(Message)[] __attribute__((section("message"))) = message; \
221 int32_t* MAKE_UNIQUE(pDataTemp1); int32_t* MAKE_UNIQUE(pDataTemp2); int32_t* MAKE_UNIQUE(pDataTemp3); int32_t* MAKE_UNIQUE(pDataTemp4); \
222 int32_t MAKE_UNIQUE(DataTemp1), MAKE_UNIQUE(DataTemp2), MAKE_UNIQUE(DataTemp3), MAKE_UNIQUE(DataTemp4); \
223 if(sizeof(dat1) < 4) \
225 MAKE_UNIQUE(DataTemp1) = dat1; \
226 MAKE_UNIQUE(pDataTemp1) = &MAKE_UNIQUE(DataTemp1); \
230 MAKE_UNIQUE(pDataTemp1) = (int32_t*)&dat1; \
232 if(sizeof(dat2) < 4) \
234 MAKE_UNIQUE(DataTemp2) = dat2; \
235 MAKE_UNIQUE(pDataTemp2) = &MAKE_UNIQUE(DataTemp2); \
239 MAKE_UNIQUE(pDataTemp2) = (int32_t*)&dat2; \
241 if(sizeof(dat3) < 4) \
243 MAKE_UNIQUE(DataTemp3) = dat3; \
244 MAKE_UNIQUE(pDataTemp3) = &MAKE_UNIQUE(DataTemp3); \
248 MAKE_UNIQUE(pDataTemp3) = (int32_t*)&dat3; \
250 if(sizeof(dat4) < 4) \
252 MAKE_UNIQUE(DataTemp4) = dat4; \
253 MAKE_UNIQUE(pDataTemp4) = &MAKE_UNIQUE(DataTemp4); \
257 MAKE_UNIQUE(pDataTemp4) = (int32_t*)&dat4; \
259 _LogmessageData((char*)MAKE_UNIQUE(Message), (Options) & USER_LOGMESSAGE_OPTIONS, 4, *MAKE_UNIQUE(pDataTemp1), *MAKE_UNIQUE(pDataTemp2), *MAKE_UNIQUE(pDataTemp3), *MAKE_UNIQUE(pDataTemp4)); \
266void _LogmessageData(
const char* Message, uint32_t ui32Options, uint32_t ui32DataCount, ...);
#define str(s)
Helper Macro to convert to string.
Definition: Error.h:136
uint32_t g_pui32LogmessageBuffer[]
Buffer for storing the logmessages.
Definition: LogMessage.c:148
const uint32_t cui32_LogmessageBufferSize
Size of the Logmessage buffer.
Definition: LogMessage.c:142
uint32_t g_ui32LogmessageBufferOverflowCounter
Number of overflows of the logmessage buffer.
Definition: LogMessage.c:154
void LogMessage_Init(void)
Init the Logmessage System.
Definition: LogMessage.c:175
void _LogMessage(const char str[], uint32_t ui32Options)
Add a static String to the Message Buffer.
Definition: LogMessage.c:195
void DynamicString(char *str, uint32_t ui32Options)
Add a dynamic String to the Message Buffer.
Definition: LogMessage.c:268
void _LogmessageData(const char *Message, uint32_t ui32Options, uint32_t ui32DataCount,...)
Add a const String to the Message Buffer and adds additional Data.
Definition: LogMessage.c:330
uint32_t g_ui32LogmessageBufferPosition
Actual position in the logmessage buffer.
Definition: LogMessage.c:151
uint32_t g_ui32LogmessageAlertAddress
Address of an alert message.
Definition: LogMessage.c:157