source: svn/newcon3bcm2_21bu/dst/dhl/api/include/DHL_DBG.h @ 45

Last change on this file since 45 was 45, checked in by megakiss, 11 years ago
  • Property svn:executable set to *
File size: 10.6 KB
Line 
1/**
2        @file
3                DHL_DBG.h
4
5        @brief
6                DHL Debug support APIs
7
8        Copyright 2006~2010 Digital STREAM Technology, Inc.
9        All Rights Reserved
10*/
11
12
13#ifndef __DHL_DEBUG_API_H__
14#define __DHL_DEBUG_API_H__
15
16
17#include "DHL_OSAL.h"
18
19//#include <stdarg.h> /* for va_list */
20
21#include "bstd_defs.h" /* for va_list */
22#include "ministd.h"
23
24
25#ifdef __cplusplus
26extern "C" {
27#endif
28
29
30
31#if COMMENT
32____Overview____(){}
33#endif
34
35/**
36        @file DHL_DBG.h
37       
38        À̰÷¿¡ ÀÌ ¸ðµâ¿¡ ´ëÇØ ¼³¸íÀÌ ÇÊ¿äÇÑ °¢Á¾ ³»¿ë ±â¼ú..
39       
40        module overview
41                -
42                -
43
44        APIs
45       
46        implementations
47       
48        dependencies           
49       
50        nv parameters
51               
52*/
53
54
55#if COMMENT
56____Config____(){}
57#endif
58
59/*
60        ÀÌ ºÎºÐÀº º°µµÀÇ DHL_XXX_Config configuration file À»
61        Ȱ¿ëÇÏ´Â °ÍÀÌ ÁÁÀ» °Í °°À½.
62*/
63
64
65#if COMMENT
66____Types____(){}
67#endif
68
69
70
71#if COMMENT
72____Defines____(){}
73#endif
74
75
76/** @brief ÁÖ¾îÁø Á¶°ÇÀÌ true°¡ ¾Æ´Ï¸é fault ¹ß»ý.
77
78        ÁÖ¾îÁø Á¶°ÇÀÌ ÂüÀÌ ¾Æ´Ï¸é assert¸¦ ¹ß»ý½ÃŲ´Ù.
79        ÇöÀç assert´Â ÀÎÅÍ·´Æ®¸¦ disable ÇÏ°í ¹«ÇÑ´ë±â»óÅ·ΠºüÁö´Â °ÍÀÌ´Ù.
80
81        @param[in] cond true/false¸¦ ÆÇ´ÜÇÒ Á¶°Ç.
82        @param[in] msg  formatted ÅØ½ºÆ®´Â ÀԷ¹ÞÁö ¸øÇÔ.
83
84*/
85#define DHL_ASSERT(cond, msg) DHL_DBG_GenerateAssert(cond, msg, __FILE__, __LINE__)
86
87/** @brief ÀÌ ÇÔ¼ö´Â ³»ºÎ¿ëÀÌ´Ù. DHL_ASSERT¸¦ »ç¿ëÇϱ⠹ٶ÷.
88
89*/
90void DHL_DBG_GenerateAssert(BOOL cond, const char *msg, const char *file, unsigned line);
91
92
93#define DHL_UNUSED(p) (void)p
94
95
96#if COMMENT
97____Module_Print____(){}
98#endif
99
100/* cafrii 090721 change
101        if same module_name is specified in different source file, keep previous module level settings.
102        to do this, we first check that 'module' is really new one.
103*/
104
105#if 0
106// ¾ÆÁ÷ ModulePrint°¡ ±¸ÇöÀÌ ¾ÈµÇ¾úÀ» °æ¿ì OS printf¸¦ ÀÌ¿ëÇÑ Àӽà ±¸Çö..
107#define DHL_MODULE(str,lvl) \
108        static int dprint(int level, char *fmt, ...) /* selective print by module level */\
109        {\
110                char tmpbuf[200];\
111                va_list v;\
112                va_start(v, fmt);\
113                vsnprintf(tmpbuf, sizeof(tmpbuf)-1, fmt, v);\
114                DHL_OS_Printf(fmt, v);\
115                va_end(v);\
116                return 1;\
117        }\
118        static int dprint(int level, char *fmt, ...)
119#else
120#define DHL_MODULE(str,lvl) \
121        static char *p_module_name=str; \
122        static BOOL p_is_dbg_inited; \
123        static int dprint(int level, char *fmt, ...) /* selective print by module level */\
124        {\
125                va_list v;\
126                int n;\
127                if(!p_is_dbg_inited) {\
128                        DHL_DBG_CheckAndInitModuleLevel(p_module_name, lvl); \
129                        p_is_dbg_inited=TRUE;\
130                }\
131                va_start(v, fmt);\
132                n = DHL_DBG_LevelPrint(p_module_name, level, fmt, v);\
133                va_end(v);\
134                return n;\
135        }\
136        /* »ç½Ç ÀÌ dprint2 ÇÔ¼ö´Â ¹Ýµå½Ã ÇÊ¿äÇÏÁö´Â ¾Ê´Ù. ±×³É DHL API·Î Á¦°øÇصµ µÇ´Â ÇÔ¼öÀÓ. */ \
137        static int dprint2(char *key, char *fmt, ...) /* selective print by keyword */\
138        {\
139                va_list v;\
140                int n;\
141                va_start(v, fmt);\
142                n = DHL_DBG_KeyPrint(key, fmt, v);\
143                va_end(v);\
144                return n;\
145        }\
146        static inline BOOL dprintable(int level) \
147        {  return DHL_DBG_CheckPrintable(DHL_DBG_GetModuleLevel(p_module_name), level); } \
148        static BOOL dprintable(int level)
149
150/* cafrii 090720 comment
151        ¸¶Áö¸· ¶óÀÎ ¼±¾ð ºÎºÐÀº extra ';' ·Î ÀÎÇÑ warningÀ» ¾ø¾Ö±â À§ÇÑ         trickÀÓ.
152        °¢ ¼Ò½º ÆÄÀÏ¿¡¼­´Â DHL_DBG("module", 0); ¿Í °°Àº ½ÄÀ¸·Î ¸¶Áö¸·¿¡ ';'¸¦ ºÙ¿©Áà¾ß
153        source insight ¿¡¼­ symbol ÀνĿ¡ ¹®Á¦°¡ ¾ø´Ù.
154*/
155#endif
156
157#if COMMENT
158dprintable(){} // this is linker for source insight to find here..
159dprint(){}
160dprint2(){}
161#endif
162
163
164/** @brief ¸ðµâ ¹× print ·¹º§
165
166        - ¿ëµµ: ÀÌ °ªÀº µÎ ±ºµ¥¼­ »ç¿ë °¡´ÉÇÏ´Ù.
167                - DHL_MODULE(.., m) ¿¡¼­ ¸ðµâ ·¹º§À» ÁöÁ¤ÇÒ ¶§
168                        - Silent ÀÌ»óÀÇ °ªÀ» ÁöÁ¤ °¡´ÉÇÏ´Ù.
169                        - °¢ print ·¹º§ÀÌ ¸ðµâ ·¹º§º¸´Ù À۰ųª °°À¸¸é Ãâ·ÂµÈ´Ù.
170                - dprint(n, ..) ¿¡¼­ print ·¹º§À» ÁöÁ¤ÇÒ °æ¿ì.
171                        - Error ÀÌ»óÀÇ °ªÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
172                        - ÀÌ ·¹º§ÀÌ ¸ðµâ ·¹º§ ÀÌ»óÀ̶ó¸é Ãâ·Â µÈ´Ù.
173
174        - print ·¹º§Àº ¾Æ·¡ÀÇ usage¸¦ µû¸£¸ç, (Error, Warn, Info, ..)
175        ÀϹÝÀûÀ¸·Î ¸ðµâ ·¹º§À» Error¸¦ ÁöÁ¤ÇÑ´Ù. (¿¡·¯ ¸Þ½ÃÁö¸¸ Ãâ·ÂµÇµµ·Ï ÇÔ)
176
177        - Ưº°È÷ ƯÁ¤ ¸ðµâÀ» µð¹ö±ë ÇϰíÀÚ ÇÑ´Ù¸é..
178                - ¸ðµâ ·¹º§À» Warn ÀÌ»óÀ¸·Î ¿Ã¸°´Ù.
179
180        - ÀǵµÀûÀ¸·Î ÇØ´ç ¸ðµâÀÇ ¸ðµç ¸Þ½ÃÁö¸¦ ¸·°í ½Í´Ù¸é..
181                - ±× ¸ðµâÀÇ ·¹º§À» Silent·Î ¼³Á¤ÇÑ´Ù.
182*/
183typedef enum 
184{
185        eDBG_MODULE_LVL_Unknown = -100,
186        eDBG_MODULE_LVL_Silent = -1,  ///< ÀÌ °ªÀº print ·¹º§·Î´Â »ç¿ë ±ÝÁö! ¸ðµâ ·¹º§·Î¸¸ Àû¿ë °¡´É.
187        eDBG_MODULE_LVL_Error = 0,     ///< ¿¡·¯ ¸Þ½ÃÁö¸¸ Ç¥½ÃÇ϶ó´Â ÀǹÌ.
188        eDBG_MODULE_LVL_Warn = 1,      ///< ¿¡·¯¿Í °æ°í ¸Þ½ÃÁö¸¸ Ç¥½ÃÇ϶ó´Â ÀǹÌ.
189        eDBG_MODULE_LVL_Info = 2,      ///< ¿¡·¯, °æ°í, ÀÎÆ÷ ¸Þ½ÃÁö¸¦ Ç¥½ÃÇ϶ó´Â ÀǹÌ.
190        eDBG_MODULE_LVL_Verbose = 3,   ///< ¾Æ¹« ¸¹Àº ¸Þ½ÃÁö¸¦ Ç¥½ÃÇ϶ó..
191        /* you can use bigger values.. */
192
193} tDBG_MODULE_LVL;     
194
195/*
196        source code ³»¿¡¼­ run-time ½Ã¿¡ debug level °ü¸®¸¦ ÇϰíÀÚ ÇÏ´Â °æ¿ì »ç¿ë.
197        Shell »ó¿¡¼­ Á¶ÀÛÇÏ´Â °æ¿ì´Â pml, sml, pdt, sdt µîÀÇ alias ÀÌ¿ëÇÏ¸é ÆíÇÏ´Ù.
198*/
199
200/** @brief ¸ðµâÀÇ µð¹ö±× ·¹º§À» º¯°æÇÑ´Ù.
201
202        À̸§Àº Á¤È®ÇÏ°Ô ÀÏÄ¡ÇØ¾ß ÇÑ´Ù.
203        ¸¸¾à ¸ðµâ ¸®½ºÆ®¿¡ ÁöÁ¤ÇÑ À̸§ÀÇ ¸ðµâÀÌ ¾ø´Ù¸é »õ·Ó°Ô Ãß°¡µÈ´Ù.
204
205        @param[in] name  º¯°æÇϰíÀÚ ÇÏ´Â ¸ðµâ À̸§
206        @param[in] level  º¯°æÇÒ ·¹º§. Silent ÀÌ»óÀÇ °ª ÁöÁ¤ °¡´É.
207*/
208void DHL_DBG_SetModuleLevel(char *name, int level);
209
210/** @brief ¸ðµâÀÇ ·¹º§À» ¸®ÅÏÇÑ´Ù.
211
212        @param[in] name  ¾Ë°íÀÚ ÇÏ´Â ¸ðµâ À̸§
213        return ¸ðµâ ·¹º§
214*/
215int  DHL_DBG_GetModuleLevel(char *name);
216
217/**
218
219*/
220int  DHL_DBG_CheckAndInitModuleLevel(char *module_name, int level);
221
222/*
223        level check ÇÏ´Â ·çƾÀ» ÇÑ ±ºµ¥·Î ÅëÇÕÇÑ´Ù.
224        DHL_DBG_LevelPrint, dprintable, ±âŸ ÇÊ¿äÇÑ °÷¿¡¼­ ÀÌ macro¸¦ »ç¿ëÇϵµ·Ï ÇÑ´Ù.
225
226        TRUE À̸é ÇØ´ç print ¹®Àº Ãâ·ÂÀÌ °¡´ÉÇÏ´Ù´Â ÀǹÌÀÓ. FALSEÀÌ´Â Ãâ·ÂÀÌ ºÒ°¡´ÉÇÑ ·¹º§.
227*/
228#define DHL_DBG_CheckPrintable(module_level, print_level) \
229                ((module_level) >= (print_level) ? TRUE : FALSE)
230
231
232/** @brief
233        ÇØ´ç LevelÀ» ÆÇ´ÜÇÏ¿© PrintÀÇ ¿©ºÎ¸¦ °áÁ¤ÇÑ´Ù.
234
235        @param[in] prefix ¸ðµâ ±¸ºÐ ¹®ÀÚ¿­. ÃÖ´ë 6ÀÚ ±îÁö¸¸ Áö¿øÇÑ´Ù.
236        @param[in] level  print ·¹º§. enum ´ë½Å ±×³É ¼ýÀÚ·Î ÁöÁ¤À» ÇÑ´Ù.
237        @param[in] format
238        @param[in] ap
239*/
240int DHL_DBG_LevelPrint(char *prefix, int level, char *format, va_list ap);
241
242/*
243*/
244int DHL_DBG_KeyPrint(char *prefix, char *format, va_list ap);
245
246/*
247*/
248int DHL_DBG_SetDbgKey(char *text_name, BOOL is_on);
249
250/**
251
252*/
253void DHL_DBG_PrintModuleLevel(const char *substr);
254
255
256#if COMMENT
257____Alias_Symbol____(){}
258#endif
259
260/** @name DHL Symbol Table (Alias Symbol)
261        @{
262
263        DHL ¿¡¼­ Á¦°øÇÏ´Â symbol table.
264
265        °³¹ß Åø, ¶Ç´Â OS¿¡¼­ ÀÚüÀûÀ¸·Î Á¦°øÇÏ´Â symtabÀÌ ¾ø´Â °æ¿ì
266        »ç¿ëÇÏ¸é µÈ´Ù.
267
268        ´Ù¸¥ symtabÀÌ ÀÖ´Â °æ¿ì¿¡µµ short cut ±â´É µîÀ» »ç¿ëÇÒ °æ¿ì
269        ÇÊ¿äÇÏ´Ù.
270       
271*/
272
273#define DHL_SYM_NONE  0
274
275#define DHL_SYM_V1    1  // == sizeof(UINT8)
276#define DHL_SYM_V2    2  // == sizeof(UINT16)
277#define DHL_SYM_V4    4  // == sizeof(UINT32)
278#define DHL_SYM_Vx    8  // no information about data size.
279
280#define DHL_SYM_FN  0x10
281
282#define DHL_SYM_ALL 0xf // purpose??
283
284
285
286/** @brief DHL¿¡¼­ °ü¸®ÇÏ´Â alias symbol node.
287
288        Á¤È®È÷ Ç¥ÇöÇÏÀÚ¸é SymbolEntry ¶ó°í ÇØ¾ß ¸Â´Ù.
289        ±×·¯³ª ÀÌ Å¸ÀÔÀ» »ç¿ëÇÏ´Â °÷ÀÌ ³Ê¹« ¸¹À¸¹Ç·Î ÀÌ À̸§À» ±×´ë·Î »ç¿ëÇϵµ·Ï ÇÑ´Ù.
290*/
291typedef struct 
292{
293        char *name;
294        void *ptr;
295        UINT8 type;    // DHL_SYM_XX
296       
297} DHL_SymbolTable;
298
299#define DHL_NUMSYMBOLS(tbl) (sizeof((tbl))/sizeof((tbl)[0]))
300
301
302//
303// symbol table Á¤ÀǸ¦ ½±°Ô ÇÒ ¼ö ÀÖ´Â macro
304//
305#define DHL_FNC_SYM_ENTRY(fn) { #fn, (void *)fn, DHL_SYM_FN, }
306#define DHL_VAR_SYM_ENTRY(va) { #va, &va, sizeof(va), }
307
308#define DHL_FNC_SYM_ENTRY2(name, fn) { name, (void *)fn, DHL_SYM_FN, }
309
310#define DHL_FNC_SYM_ARGS(fn)  #fn, fn
311#define DHL_VAR_SYM_ARGS(va)  #va, &va, sizeof(va)
312
313
314/** @brief Symbol Å×À̺í Ãâ·Â.
315
316        ÁöÁ¤ÇÑ ¹®ÀÚ¿­À» substringÀ¸·Î °®´Â symbol tableÀ» ¸ðµÎ Ãâ·ÂÇÑ´Ù.
317        Ãâ·ÂÀº OS DbgPrintf ¸¦ »ç¿ëÇÑ´Ù.
318
319        ShellÀÇ ³»ºÎ "show" ¸í·É¿¡¼­ »ç¿ëÇÑ´Ù.
320*/
321void DHL_DBG_PrintSymbolTable(int showmask, char *substr);
322
323/** @brief ÇÔ¼ö symbol µî·Ï API
324
325        ¸ÅÅ©·Î¸¦ »ç¿ëÇÏ¸é ´õ ½±°Ô µî·ÏÇÒ ¼ö ÀÖ´Ù.
326*/
327void DHL_DBG_RegisterFunctionSymbol(char *name, void *ptr);
328
329/** @brief º¯¼ö symbol µî·Ï API
330
331        ¸ÅÅ©·Î¸¦ »ç¿ëÇÏ¸é ´õ ½±°Ô µî·ÏÇÒ ¼ö ÀÖ´Ù.
332*/
333void DHL_DBG_RegisterVarSymbol(char *name, void *ptr, int size);
334
335/** @brief ÇÔ¼ö/º¯¼ö symbol list µî·Ï API
336
337        ¹Ì¸® Á¤ÀÇµÈ symbol list¸¦ ÇѲ¨¹ø¿¡ µî·ÏÇÑ´Ù.
338*/
339void DHL_DBG_RegisterSymbols(DHL_SymbolTable *tbls, int n);
340
341/** @brief DHL Symbol °Ë»ö API
342
343        À̸§À¸·Î symbol Á¤º¸¸¦ ã´Â ÇÔ¼ö. symbol pointer¿Í typeÀÌ ¸®ÅϵȴÙ.
344        ¹ß°ßµÇÁö ¾ÊÀ¸¸é ¿¡·¯ ¸®ÅÏ.
345
346        Shell ¿¡¼­ ÀÔ·ÂÇÑ command¸¦ parsingÇÏ¿© ½ÇÇàÇÒ ¶§ »ç¿ëµÈ´Ù.
347*/
348DHL_RESULT DHL_DBG_QuerySymbol(char *name, void **pptr, int *ptype);
349
350
351/*@}*/
352
353
354
355
356#if COMMENT
357____Shell____(){}
358#endif
359
360
361typedef struct
362{
363        BOOL started;       ///< true if dbg shell running.
364        DHL_OS_TASK_ID tid;  ///< task id of running shell.
365       
366} DHL_DBG_SHELL_INFO;
367
368/** @brief Debug shell À» ±âµ¿ÇÑ´Ù.
369
370        shell ¿¡¼­ Áö¿ø °¡´ÉÇÑ ¸í·É¾î´Â ÇØ´ç module ¼Ò½º Âü°í.
371
372        »ç½Ç ÀÌ ÇÔ¼ö´Â ¿ÜºÎ¿¡¼­ »ç¿ëÇÒ °æ¿ì´Â ¾ø°í, DHL ³»ºÎ ±¸Çö½Ã »ç¿ëÇÑ´Ù.
373        µû¶ó¼­ API¿¡ Æ÷Ç﵃ ÇÊ¿ä´Â ¾øÀ¸³ª, ÀÏ´Ü ¿©±â¿¡ µÎµµ·Ï ÇÏÀÚ.
374
375        @todo
376                DHL DBG Private Çì´õ ÆÄÀÏ ÇÊ¿ä.
377*/
378void DHL_DBG_StartDbgShell(void);
379
380/** @brief Debug shellÀÇ Á¤º¸¸¦ °¡Á®¿Â´Ù.
381
382        @param[out] pInfo ½© Á¤º¸°¡ ÀúÀåµÉ °÷.
383*/
384void DHL_DBG_GetDbgShellInfo(DHL_DBG_SHELL_INFO *pInfo);
385
386/** @brief ÇöÀç task°¡ shell taskÀÎÁö üũ.
387
388        @return ÇöÀç task°¡ shell À̶ó¸é TRUE¸¦ ¸®ÅÏÇÑ´Ù.
389*/
390BOOL DHL_DBG_IsDbgShell(void);
391
392/** @brief shell¿¡¼­ ¸í·É ÀÔ·ÂÀÌ µÇ´Â °Íó·³ emulation ÇÑ´Ù.
393
394        @param[in] cmd  ¿¡¹Ä·¹ÀÌ¼Ç ¼öÇà ÇÒ ¸í·É.
395*/
396void DHL_DBG_EmulateCommand(const char *cmd);
397
398
399#if COMMENT
400____MemDump____(){}
401#endif
402
403
404#define MEMDUMP_ALIGN 0x1
405#define MEMDUMP_NOHDR 0x2
406
407
408/** @brief Á¤ÇØÁø ¸Þ¸ð¸® ¿µ¿ªÀÇ ³»¿ëÀ» È­¸é¿¡ Ãâ·ÂÇÑ´Ù.
409
410        @param[in] buf ´ýÇÁÇÒ ¸Þ¸ð¸® ¿µ¿ª.
411        @param[in] size ¸Þ¸ð¸® ´ýÇÁ »çÀÌÁî.
412        @param[in] msg
413        @param[in] off off´Â displayed address¸¦ ¸ÂÃß±â À§ÇØ »ç¿ëµÇ´Â offset
414        @param[in] flag
415*/
416void DHL_DBG_MemDump3(void *buf, int size, char *msg, UINT32 off, UINT32 flag);
417
418
419/** @brief
420                DHL_MemDump3(buf0, size, msg, off, MEMDUMP_ALIGN);
421*/
422void DHL_DBG_MemDump2(void *buf, int size, char *msg, UINT32 off);
423
424
425/** @brief
426                DHL_MemDump3(buf, size, msg, 0, MEMDUMP_ALIGN);
427*/
428void DHL_DBG_MemDump (void *buf, int size, char *msg);
429       
430#define memdump DHL_DBG_MemDump
431#define memdump2 DHL_DBG_MemDump2
432#define memdump3 DHL_DBG_MemDump3
433
434
435/** @brief
436                µÎ °³ÀÇ ¸Þ¸ð¸® ¿µ¿ªÀ» ºñ±³ÇÑ´Ù.
437
438                C standard library¿¡ ÀÖ´Â memcmp¿Í ºñ½ÁÇÑ ±â´ÉÀ» ÇÏÁö¸¸ ¸®ÅϰªÀÌ ´Ù¸£´Ù.
439                °°À¸¸é -1À» ¸®ÅÏÇϰí, ´Ù¸£¸é mismatch°¡ ½ÃÀÛµÈ ±× offsetÀ» ¸®ÅÏÇÑ´Ù.
440 
441        @param[in] s1 ù ¹øÂ° ºñ±³ ´ë»ó ¸Þ¸ð¸® ¿µ¿ª
442        @param[in] s2 µÎ ¹øÂ° ºñ±³ ´ë»ó ¸Þ¸ð¸® ¿µ¿ª
443        @param[in] len ºñ±³ °Ë»çÇÒ ¿µ¿ªÀÇ ±æÀÌ
444*/
445int DHL_DBG_MemCmp(const unsigned char *s1, const unsigned char *s2, int len);
446
447
448
449#if COMMENT
450____Init____(){}
451#endif
452
453/**
454
455*/
456void DHL_DBG_Init(void);
457
458//void DHL_DBG_Uninit(void);
459
460
461
462
463
464#ifdef __cplusplus
465} /* extern "C" */
466#endif
467
468
469
470#endif  /* __DHL_DEBUG_API_H__ */
471
Note: See TracBrowser for help on using the repository browser.