• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 Bestechnic (Shanghai) Co., Ltd. All rights reserved.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #ifndef __HAL_TRACE_H__
16 #define __HAL_TRACE_H__
17 #define __INCLUDE_ASSERT_H
18 #ifndef __ASSEMBLY__
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22 
23 #include "plat_types.h"
24 #include "hal_trace_mod.h"
25 
26 #ifndef AUDIO_DEBUG
27 #if defined(CONFIG_BES_AUDIO_DUMP)
28 #define AUDIO_DEBUG
29 #else
30 // #define AUDIO_DEBUG
31 #endif
32 #endif
33 
34 // #define INTERSYS_RAW_DATA_ONLY
35 
36 #if defined(INTERSYS_RAW_DATA_ONLY)
37 #define NO_REL_TRACE
38 #endif
39 
40 #if defined(__BT_DEBUG_TPORTS__)
41 #ifndef CRASH_REBOOT
42 #define CRASH_REBOOT
43 #endif
44 #endif
45 
46 /*
47  * Total number of core registers stored
48  */
49 #define CRASH_DUMP_REGISTERS_NUM            17
50 #define CRASH_DUMP_REGISTERS_NUM_BYTES      ((CRASH_DUMP_REGISTERS_NUM)*4)
51 
52 /*
53  * Number bytes to store from stack
54  *   - this is total, not per PSP/MSP
55  */
56 #define CRASH_DUMP_STACK_NUM_BYTES          384
57 
58 // Log Attributes
59 #define TR_ATTR_ARG_NUM_SHIFT               0
60 #define TR_ATTR_ARG_NUM_MASK                (0xF << TR_ATTR_ARG_NUM_SHIFT)
61 #define TR_ATTR_ARG_NUM(n)                  BITFIELD_VAL(TR_ATTR_ARG_NUM, n)
62 #define TR_ATTR_LEVEL_SHIFT                 4
63 #define TR_ATTR_LEVEL_MASK                  (0x7 << TR_ATTR_LEVEL_SHIFT)
64 #define TR_ATTR_LEVEL(n)                    BITFIELD_VAL(TR_ATTR_LEVEL, n)
65 #define TR_ATTR_MOD_SHIFT                   7
66 #define TR_ATTR_MOD_MASK                    (0x7F << TR_ATTR_MOD_SHIFT)
67 #define TR_ATTR_MOD(n)                      BITFIELD_VAL(TR_ATTR_MOD, n)
68 #define TR_ATTR_IMM                         (1 << 14)
69 #define TR_ATTR_NO_LF                       (1 << 15)
70 #define TR_ATTR_NO_TS                       (1 << 16)
71 #define TR_ATTR_NO_ID                       (1 << 17)
72 
73 // Count variadic argument number
74 #define _VAR_ARG_17(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, ...) a17
75 #define COUNT_ARG_NUM(...)                  _VAR_ARG_17(unused, ##__VA_ARGS__, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
76 
77 #if defined(TRACE_STR_SECTION) && !(defined(ROM_BUILD) || defined(PROGRAMMER) || defined(FPGA))
78 #define CONCAT_(x,y)                        x##y
79 #define CONCATS(x,y)                        CONCAT_(x,y)
80 #define __trcname                           CONCATS(__trc, __LINE__)
81 #define TRC_STR_LOC                         __attribute__((section(TO_STRING(CONCATS(.trc_str,__LINE__)))))
82 #define TRC_STR(s)                          (({ static const char TRC_STR_LOC __trcname[] = (s); __trcname; }))
83 #else
84 #define TRC_STR_LOC
85 #define TRC_STR(s)                          (s)
86 #endif
87 
88 #define TR_DUMMY(attr, str, ...)            hal_trace_dummy(str, ##__VA_ARGS__)
89 
90 #if defined(NUTTX_BUILD)
91 #undef ASSERT
92 #if !defined(CONFIG_ARCH_CHIP_DEBUG_H)
93 #include "syslog.h"
94 void _assert(FAR const char *filename, int linenum) noreturn_function;
95 #endif
96 #endif
97 #if (defined(DEBUG) || defined(REL_TRACE_ENABLE)) && !defined(NO_REL_TRACE)
98 #define REL_LOG(attr, str, ...)             hal_trace_printf(((attr) & ~TR_ATTR_ARG_NUM_MASK) | \
99                                                             TR_ATTR_ARG_NUM(COUNT_ARG_NUM(unused, ##__VA_ARGS__)), \
100                                                             TRC_STR(str), ##__VA_ARGS__)
101 #define REL_LOG_RAW_OUTPUT(str, len)        hal_raw_trace_output(str, len)
102 #define REL_LOG_FLUSH()                     hal_trace_flush_buffer()
103 #define REL_LOG_SEND()                      hal_trace_send()
104 #define REL_DUMP8(str, buf, cnt)            hal_trace_dump(str, sizeof(uint8_t), cnt, buf)
105 #define REL_DUMP16(str, buf, cnt)           hal_trace_dump(str, sizeof(uint16_t), cnt, buf)
106 #define REL_DUMP32(str, buf, cnt)           hal_trace_dump(str, sizeof(uint32_t), cnt, buf)
107 #else
108 #define REL_LOG(attr, str, ...)             hal_trace_dummy(str, ##__VA_ARGS__)
109 #define REL_LOG_RAW_OUTPUT(str, len)        hal_trace_dummy((const char *)str, len)
110 #define REL_LOG_FLUSH()                     hal_trace_dummy(NULL)
111 #define REL_LOG_SEND()                      hal_trace_dummy(NULL)
112 #define REL_DUMP8(str, buf, cnt)            hal_dump_dummy(str, buf, cnt)
113 #define REL_DUMP16(str, buf, cnt)           hal_dump_dummy(str, buf, cnt)
114 #define REL_DUMP32(str, buf, cnt)           hal_dump_dummy(str, buf, cnt)
115 #endif
116 
117 #if (!defined(DEBUG) && defined(REL_TRACE_ENABLE)) && !defined(NO_TRACE)
118 // To avoid warnings on unused variables
119 #define NORM_LOG(num,str, ...)              hal_trace_dummy(str, ##__VA_ARGS__)
120 #define NORM_LOG_RAW_OUTPUT(str, len)       hal_trace_dummy((const char *)str, len)
121 #define NORM_LOG_FLUSH()                    hal_trace_dummy(NULL)
122 #define NORM_LOG_SEND()                     hal_trace_dummy(NULL)
123 #define DUMP8(str, buf, cnt)                hal_dump_dummy(str, buf, cnt)
124 #define DUMP16(str, buf, cnt)               hal_dump_dummy(str, buf, cnt)
125 #define DUMP32(str, buf, cnt)               hal_dump_dummy(str, buf, cnt)
126 #else
127 #define NORM_LOG                            REL_LOG
128 #define NORM_LOG_RAW_OUTPUT                 REL_LOG_RAW_OUTPUT
129 #define NORM_LOG_FLUSH                      REL_TRACE_FLUSH
130 #define NORM_LOG_SEND                       REL_LOG_SEND
131 #define DUMP8                               REL_DUMP8
132 #define DUMP16                              REL_DUMP16
133 #define DUMP32                              REL_DUMP32
134 #endif
135 
136 #define R_TR_CRITICAL(attr, str, ...)       REL_LOG(((attr) & ~TR_ATTR_LEVEL_MASK) | TR_ATTR_LEVEL(TR_LEVEL_CRITICAL), \
137                                                     str, ##__VA_ARGS__)
138 #define R_TR_ERROR(attr, str, ...)          REL_LOG(((attr) & ~TR_ATTR_LEVEL_MASK) | TR_ATTR_LEVEL(TR_LEVEL_ERROR), \
139                                                     str, ##__VA_ARGS__)
140 #define R_TR_WARN(attr, str, ...)           REL_LOG(((attr) & ~TR_ATTR_LEVEL_MASK) | TR_ATTR_LEVEL(TR_LEVEL_WARN), \
141                                                     str, ##__VA_ARGS__)
142 #define R_TR_NOTIF(attr, str, ...)          REL_LOG(((attr) & ~TR_ATTR_LEVEL_MASK) | TR_ATTR_LEVEL(TR_LEVEL_NOTIF), \
143                                                     str, ##__VA_ARGS__)
144 #define R_TR_INFO(attr, str, ...)           REL_LOG(((attr) & ~TR_ATTR_LEVEL_MASK) | TR_ATTR_LEVEL(TR_LEVEL_INFO), \
145                                                     str, ##__VA_ARGS__)
146 #define R_TR_DEBUG(attr, str, ...)          REL_LOG(((attr) & ~TR_ATTR_LEVEL_MASK) | TR_ATTR_LEVEL(TR_LEVEL_DEBUG), \
147                                                     str, ##__VA_ARGS__)
148 #define R_TR_VERBOSE(attr, str, ...)        REL_LOG(((attr) & ~TR_ATTR_LEVEL_MASK) | TR_ATTR_LEVEL(TR_LEVEL_VERBOSE), \
149                                                     str, ##__VA_ARGS__)
150 
151 #define TR_CRITICAL(attr, str, ...)         NORM_LOG(((attr) & ~TR_ATTR_LEVEL_MASK) | TR_ATTR_LEVEL(TR_LEVEL_CRITICAL), \
152                                                     str, ##__VA_ARGS__)
153 #define TR_ERROR(attr, str, ...)            NORM_LOG(((attr) & ~TR_ATTR_LEVEL_MASK) | TR_ATTR_LEVEL(TR_LEVEL_ERROR), \
154                                                     str, ##__VA_ARGS__)
155 #define TR_WARN(attr, str, ...)             NORM_LOG(((attr) & ~TR_ATTR_LEVEL_MASK) | TR_ATTR_LEVEL(TR_LEVEL_WARN), \
156                                                     str, ##__VA_ARGS__)
157 #define TR_NOTIF(attr, str, ...)            NORM_LOG(((attr) & ~TR_ATTR_LEVEL_MASK) | TR_ATTR_LEVEL(TR_LEVEL_NOTIF), \
158                                                     str, ##__VA_ARGS__)
159 #define TR_INFO(attr, str, ...)             NORM_LOG(((attr) & ~TR_ATTR_LEVEL_MASK) | TR_ATTR_LEVEL(TR_LEVEL_INFO), \
160                                                     str, ##__VA_ARGS__)
161 #define TR_DEBUG(attr, str, ...)            NORM_LOG(((attr) & ~TR_ATTR_LEVEL_MASK) | TR_ATTR_LEVEL(TR_LEVEL_DEBUG), \
162                                                     str, ##__VA_ARGS__)
163 #define TR_VERBOSE(attr, str, ...)          NORM_LOG(((attr) & ~TR_ATTR_LEVEL_MASK) | TR_ATTR_LEVEL(TR_LEVEL_VERBOSE), \
164                                                     str, ##__VA_ARGS__)
165 
166 #define REL_TRACE(attr, str, ...)           R_TR_NOTIF(attr, str, ##__VA_ARGS__)
167 #define REL_TRACE_IMM(attr, str, ...)       R_TR_NOTIF((attr) | TR_ATTR_IMM, str, ##__VA_ARGS__)
168 #define REL_TRACE_NOCRLF(attr, str, ...)    R_TR_NOTIF((attr) | TR_ATTR_NO_LF, str, ##__VA_ARGS__)
169 #define REL_TRACE_NOTS(attr, str, ...)      R_TR_NOTIF((attr) | TR_ATTR_NO_TS, str, ##__VA_ARGS__)
170 #define REL_TRACE_IMM_NOTS(attr, str, ...)  R_TR_NOTIF((attr) | TR_ATTR_IMM | TR_ATTR_NO_TS, str, ##__VA_ARGS__)
171 #define REL_TRACE_NOCRLF_NOTS(attr, str, ...) R_TR_NOTIF((attr) | TR_ATTR_NO_LF | TR_ATTR_NO_TS, str, ##__VA_ARGS__)
172 #define REL_FUNC_ENTRY_TRACE()              R_TR_NOTIF(1, "%s", __FUNCTION__)
173 #define REL_TRACE_OUTPUT(str, len)          REL_LOG_RAW_OUTPUT(str, len)
174 #define REL_TRACE_FLUSH()                   REL_LOG_FLUSH()
175 
176 #define TRACE(attr, str, ...)               TR_INFO(attr, str, ##__VA_ARGS__)
177 #define TRACE_IMM(attr, str, ...)           TR_INFO((attr) | TR_ATTR_IMM, str, ##__VA_ARGS__)
178 #define TRACE_NOCRLF(attr, str, ...)        TR_INFO((attr) | TR_ATTR_NO_LF, str, ##__VA_ARGS__)
179 #define FUNC_ENTRY_TRACE()                  TR_INFO(1, "%s", __FUNCTION__)
180 #define TRACE_OUTPUT(str, len)              NORM_LOG_RAW_OUTPUT(str, len)
181 #define TRACE_FLUSH()                       NORM_LOG_FLUSH()
182 #define TRACE_SEND()                        NORM_LOG_SEND()
183 #ifdef BES_AUTOMATE_TEST
184 #define AUTO_TEST_TRACE(attr, str, ...)     TR_INFO(attr, "_AT_" str, ##__VA_ARGS__)
185 #else
186 #define AUTO_TEST_TRACE(attr, str, ...)     TR_INFO(attr, str, ##__VA_ARGS__)
187 #endif
188 
189 #define TRACE_DUMMY(attr, str, ...)         TR_DUMMY(attr, str, ##__VA_ARGS__)
190 
191 #if (defined(DEBUG) || defined(REL_TRACE_ENABLE)) && defined(ASSERT_SHOW_FILE_FUNC)
192 #define ASSERT(cond, str, ...)      { if (!(cond)) { hal_trace_assert_dump(__FILE__, __FUNCTION__, __LINE__, str, ##__VA_ARGS__); } }
193 #define ASSERT_DUMP_ARGS            const char *file, const char *func, unsigned int line, const char *fmt, ...
194 #define ASSERT_FMT_ARG_IDX          4
195 #elif (defined(DEBUG) || defined(REL_TRACE_ENABLE)) && defined(ASSERT_SHOW_FILE)
196 #define ASSERT(cond, str, ...)      { if (!(cond)) { hal_trace_assert_dump(__FILE__, __LINE__, str, ##__VA_ARGS__); } }
197 #define ASSERT_DUMP_ARGS            const char *file, const char *func, unsigned int line, const char *fmt, ...
198 #define ASSERT_FMT_ARG_IDX          4
199 #elif (defined(DEBUG) || defined(REL_TRACE_ENABLE)) && defined(ASSERT_SHOW_FUNC)
200 #define ASSERT(cond, str, ...)      { if (!(cond)) { hal_trace_assert_dump(__FUNCTION__, __LINE__, str, ##__VA_ARGS__); } }
201 #define ASSERT_DUMP_ARGS            const char *scope, unsigned int line, const char *fmt, ...
202 #define ASSERT_FMT_ARG_IDX          3
203 #elif (defined(DEBUG) || defined(REL_TRACE_ENABLE))
204 #define ASSERT(cond, str, ...)      { if (!(cond)) { hal_trace_assert_dump(str, ##__VA_ARGS__); } }
205 #define ASSERT_DUMP_ARGS            const char *fmt, ...
206 #define ASSERT_FMT_ARG_IDX          1
207 #else
208 #define ASSERT(cond, str, ...)      { if (!(cond)) { hal_trace_dummy(str, ##__VA_ARGS__); hal_trace_assert_dump(NULL); } }
209 #define ASSERT_DUMP_ARGS            const char *fmt
210 #define ASSERT_FMT_ARG_IDX          0
211 #endif
212 
213 #if defined(NUTTX_BUILD) && !defined(CONFIG_ARCH_CHIP_DEBUG_H)
214 #undef ASSERT
215 #define ASSERT(cond, str, ...)      { if (!(cond)) { _assert(str,1); } }
216 #endif
217 
218 #if (defined(DEBUG) || defined(REL_TRACE_ENABLE))
219 #define TRACE_FUNC_DECLARE(d, r)    d
220 #else
221 #ifndef TRACE_FUNC_SPEC
222 #define TRACE_FUNC_SPEC             static inline
223 #endif
224 #define TRACE_FUNC_DECLARE(d, r)    TRACE_FUNC_SPEC d { r; }
225 #endif
226 
227 #if defined(__GNUC__) && !defined(NO_CHK_TRC_FMT)
228 #define TRC_FMT_CHK(sidx, vaidx)    __attribute__((format(printf, (sidx), (vaidx))))
229 #else
230 #define TRC_FMT_CHK(sidx, vaidx)
231 #endif
232 
233 #define ASSERT_NODUMP(cond)         { if (!(cond)) { SAFE_PROGRAM_STOP(); } }
234 
235 #ifdef CHIP_BEST1000
236 // Avoid CPU instruction fetch blocking the system bus on BEST1000
237 #define SAFE_PROGRAM_STOP()         do { asm volatile("nop; nop; nop; nop"); } while (1)
238 #else
239 #define SAFE_PROGRAM_STOP()         do { } while (1)
240 #endif
241 
242 /// definitions for easier debug
243 #define _ENUM_DEF(prefix, detail)                     prefix ## detail
244 
245 enum HAL_TRACE_TRANSPORT_T {
246 #ifdef CHIP_HAS_USB
247     HAL_TRACE_TRANSPORT_USB,
248 #endif
249     HAL_TRACE_TRANSPORT_UART0,
250 #if (CHIP_HAS_UART >= 2)
251     HAL_TRACE_TRANSPORT_UART1,
252 #endif
253 #if (CHIP_HAS_UART >= 3)
254     HAL_TRACE_TRANSPORT_UART2,
255 #endif
256 #if defined(CHIP_BEST2001) || defined(CHIP_BEST2003)
257     HAL_TRACE_TRANSPORT_TRANSQ1,
258 #if defined (CP_BOOT) ||defined (CP_BUILD)
259     HAL_TRACE_TRANSPORT_CPIPC,
260 #endif
261 #endif
262     HAL_TRACE_TRANSPORT_QTY
263 };
264 
265 enum HAL_TRACE_STATE_T {
266     HAL_TRACE_STATE_CRASH_ASSERT_START,
267     HAL_TRACE_STATE_CRASH_FAULT_START,
268     HAL_TRACE_STATE_CRASH_END,
269 };
270 
271 enum HAL_TRACE_BUF_STATE_T {
272     HAL_TRACE_BUF_STATE_FLUSH,
273     HAL_TRACE_BUF_STATE_NEAR_FULL,
274     HAL_TRACE_BUF_STATE_FULL,
275 };
276 
277 enum HAL_TRACE_CRASH_DUMP_MODULE_T {
278     HAL_TRACE_CRASH_DUMP_MODULE_SYS = 0,
279     HAL_TRACE_CRASH_DUMP_MODULE_ID1 = 1,
280     HAL_TRACE_CRASH_DUMP_MODULE_ID2 = 2,
281     HAL_TRACE_CRASH_DUMP_MODULE_BTH = 3,
282     HAL_TRACE_CRASH_DUMP_MODULE_BT  = 4,
283     HAL_TRACE_CRASH_DUMP_MODULE_END = 5,
284 };
285 
286 enum HAL_TRACE_APP_REG_ID_T {
287     HAL_TRACE_APP_REG_ID_0,
288     HAL_TRACE_APP_REG_ID_1,
289 
290     HAL_TRACE_APP_REG_ID_QTY,
291 };
292 
293 enum TR_LEVEL_T {
294     TR_LEVEL_CRITICAL   = 0,
295     TR_LEVEL_ERROR      = 1,
296     TR_LEVEL_WARN       = 2,
297     TR_LEVEL_NOTIF      = 3,
298     TR_LEVEL_INFO       = 4,
299     TR_LEVEL_DEBUG      = 5,
300     TR_LEVEL_VERBOSE    = 6,
301 
302     TR_LEVEL_QTY,
303 };
304 
305 typedef void (*HAL_TRACE_CRASH_DUMP_CB_T)(void);
306 
307 typedef void (*HAL_TRACE_APP_NOTIFY_T)(enum HAL_TRACE_STATE_T state);
308 
309 typedef void (*HAL_TRACE_APP_OUTPUT_T)(const unsigned char *buf, unsigned int buf_len);
310 
311 typedef void (*HAL_TRACE_BUF_CTRL_T)(enum HAL_TRACE_BUF_STATE_T buf_ctrl);
312 
313 typedef int (*HAL_TRACE_GLOBAL_TAG_CB_T)(char *buf, unsigned int buf_len);
314 
315 typedef void (*HAL_TRACE_SAVE_PLAYBACK_DEVICE_T)(void);
316 
317 int hal_trace_open(enum HAL_TRACE_TRANSPORT_T transport);
318 
319 //int hal_trace_set_log_level(enum TR_LEVEL_T level);
320 
321 TRACE_FUNC_DECLARE(int hal_trace_switch(enum HAL_TRACE_TRANSPORT_T transport), return 0);
322 
323 TRACE_FUNC_DECLARE(int hal_trace_close(void), return 0);
324 
325 TRACE_FUNC_DECLARE(enum HAL_TRACE_TRANSPORT_T hal_trace_get_transport(void), return HAL_TRACE_TRANSPORT_QTY);
326 
327 TRACE_FUNC_DECLARE(int hal_trace_enable_log_module(enum TR_MODULE_T module), return 0);
328 
329 TRACE_FUNC_DECLARE(int hal_trace_disable_log_module(enum TR_MODULE_T module), return 0);
330 
331 TRACE_FUNC_DECLARE(int hal_trace_set_log_module(const uint32_t *map, uint32_t word_cnt), return 0);
332 
333 TRACE_FUNC_DECLARE(int hal_trace_set_log_level(enum TR_LEVEL_T level), return 0);
334 
335 TRACE_FUNC_DECLARE(void hal_trace_get_history_buffer(const uint8_t **buf1, uint32_t *len1, const uint8_t **buf2, uint32_t *len2), \
336     { if (buf1) { *buf1 = NULL; } if (len1) { *len1 = 0; } if (buf2) { *buf2 = NULL; } if (len2) { *len2 = 0; } });
337 
338 TRACE_FUNC_DECLARE(int hal_raw_trace_output(const unsigned char *buf, unsigned int buf_len), return 0);
339 
340 TRACE_FUNC_DECLARE(int hal_trace_output(const unsigned char *buf, unsigned int buf_len), return 0);
341 
342 TRC_FMT_CHK(2, 3)
343 TRACE_FUNC_DECLARE(int hal_trace_printf(uint32_t attr, const char *fmt, ...), return 0);
344 
345 TRACE_FUNC_DECLARE(int hal_trace_dump(const char *fmt, unsigned int size,  unsigned int count, const void *buffer), return 0);
346 
347 TRACE_FUNC_DECLARE(int hal_trace_busy(void), return 0);
348 
349 TRACE_FUNC_DECLARE(int hal_trace_pause(void), return 0);
350 
351 TRACE_FUNC_DECLARE(int hal_trace_continue(void), return 0);
352 
353 TRACE_FUNC_DECLARE(int hal_trace_flush_buffer(void), return 0);
354 
355 TRACE_FUNC_DECLARE(int hal_trace_flush_output(void), return 0);
356 
357 TRACE_FUNC_DECLARE(void hal_trace_send(void), return);
358 
359 TRACE_FUNC_DECLARE(int hal_trace_crash_dump_register(enum HAL_TRACE_CRASH_DUMP_MODULE_T module, HAL_TRACE_CRASH_DUMP_CB_T cb), return 0);
360 
361 TRACE_FUNC_DECLARE(void hal_trace_crash_dump_callback(void), return);
362 
363 TRACE_FUNC_DECLARE(int hal_trace_app_register(enum HAL_TRACE_APP_REG_ID_T id, HAL_TRACE_APP_NOTIFY_T notify_cb, HAL_TRACE_APP_OUTPUT_T output_cb), return 0);
364 
365 TRACE_FUNC_DECLARE(void hal_trace_app_notify_callback(enum HAL_TRACE_STATE_T state), return);
366 
367 TRACE_FUNC_DECLARE(void hal_trace_app_custom_register(HAL_TRACE_APP_NOTIFY_T notify_cb, HAL_TRACE_APP_OUTPUT_T output_cb, HAL_TRACE_APP_OUTPUT_T crash_custom_cb), return);
368 
369 TRACE_FUNC_DECLARE(void hal_trace_global_tag_register(HAL_TRACE_GLOBAL_TAG_CB_T tag_cb), return);
370 
371 TRACE_FUNC_DECLARE(int hal_trace_open_cp(HAL_TRACE_BUF_CTRL_T buf_cb, HAL_TRACE_APP_NOTIFY_T notify_cb), return 0);
372 
373 TRACE_FUNC_DECLARE(int hal_trace_close_cp(void), return 0);
374 
375 TRACE_FUNC_DECLARE(void hal_trace_print_backtrace(uint32_t addr, uint32_t search_cnt, uint32_t print_cnt), return);
376 
377 TRACE_FUNC_DECLARE(bool hal_trace_in_crash_dump(void), return false);
378 
379 TRACE_FUNC_DECLARE (uint32_t hal_trace_get_id(void), return 0);
380 
381 TRACE_FUNC_DECLARE(uint32_t hal_trace_get_baudrate(void), return 0);
382 
383 TRC_FMT_CHK(1, 2)
hal_trace_dummy(const char * fmt,...)384 static inline void hal_trace_dummy(const char *fmt, ...) { }
385 
hal_dump_dummy(const char * fmt,...)386 static inline void hal_dump_dummy(const char *fmt, ...) { }
387 
388 #if (ASSERT_FMT_ARG_IDX > 0)
389 TRC_FMT_CHK(ASSERT_FMT_ARG_IDX, ASSERT_FMT_ARG_IDX + 1)
390 #endif
391 void NORETURN hal_trace_assert_dump(ASSERT_DUMP_ARGS);
392 
393 int hal_trace_address_writable(uint32_t addr);
394 
395 int hal_trace_address_executable(uint32_t addr);
396 
397 int hal_trace_address_readable(uint32_t addr);
398 
399 
400 //==============================================================================
401 // AUDIO_DEBUG
402 //==============================================================================
403 
404 #ifdef AUDIO_DEBUG
405 #define AUDIO_DEBUG_TRACE(str, ...)         hal_trace_printf(str, ##__VA_ARGS__)
406 #define AUDIO_DEBUG_DUMP(buf, cnt)          hal_trace_output(buf, cnt)
407 #endif
408 
409 
410 //==============================================================================
411 // INTERSYS_RAW_DATA_ONLY
412 //==============================================================================
413 
414 #ifdef INTERSYS_RAW_DATA_ONLY
415 #define TRACE_RAW(str, ...)                 hal_trace_printf(str, ##__VA_ARGS__)
416 #define DUMP8_RAW(str, buf, cnt)            hal_trace_dump(str, sizeof(uint8_t), cnt, buf)
417 #endif
418 
419 //==============================================================================
420 // TRACE RX
421 //==============================================================================
422 
423 typedef unsigned int (*HAL_TRACE_RX_CALLBACK_T)(unsigned char *buf, unsigned int len);
424 
425 TRACE_FUNC_DECLARE(int hal_trace_rx_open(unsigned char *buf, unsigned int len, HAL_TRACE_RX_CALLBACK_T rx_callback), return 0);
426 
427 TRACE_FUNC_DECLARE(int hal_trace_rx_close(void), return 0);
428 
429 TRACE_FUNC_DECLARE(int hal_trace_rx_sleep(void), return 0);
430 
431 TRACE_FUNC_DECLARE(int hal_trace_rx_wakeup(void), return 0);
432 
433 #ifdef assert
434 #undef assert
435 #endif
436 #ifdef NDEBUG
437 #  define assert(f)
438 #else
439 #  define assert(f) ASSERT(f,"%s:%d",__func__,__LINE__)
440 #endif
441 
442 #include "stdarg.h"
443 typedef int (*HAL_TRACE_OUTPUT_HOOK_T)(const char *tag, const char *fmt, uint32_t len);
444 void hal_trace_register_hook(HAL_TRACE_OUTPUT_HOOK_T hook);
445 void hal_trace_unregister_hook(HAL_TRACE_OUTPUT_HOOK_T hook);
446 typedef int (*HAL_TRACE_PRINTF_HOOK_T)(const char *tag, const char *fmt, va_list ap);
447 void hal_trace_printf_register_hook(HAL_TRACE_PRINTF_HOOK_T hook);
448 void hal_trace_printf_unregister_hook(HAL_TRACE_PRINTF_HOOK_T hook);
449 int hal_trace_output_block(const unsigned char *buf, unsigned int len);
450 void hal_trace_print_a7(const unsigned char *buf, unsigned int buf_len);
451 void hal_trace_print_a7_flush(int onoff);
452 extern int hal_trace_printf_without_crlf_ts(const char *fmt, ...);
453 #define printf                         hal_trace_printf_without_crlf_ts
454 int hal_trace_set_onoff(uint32_t onoff);
455 void hal_trace_register_cp_hook(HAL_TRACE_OUTPUT_HOOK_T hook);
456 void hal_trace_unregister_cp_hook(HAL_TRACE_OUTPUT_HOOK_T hook);
457 #ifdef __cplusplus
458 }
459 #endif
460 #endif
461 #endif
462