• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
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  * Description:   LOG PRINTF MODULE
15  * Author:
16  * Create:
17  */
18 
19 #include "log_printf.h"
20 #include "log_common.h"
21 #if defined(SUPPORT_CONNECTIVITY) && defined(SUPPORT_IPC)
22 #include "connectivity_log.h"
23 #endif
24 
25 #include "log_buffer.h"
26 #include "systick.h"
27 #ifdef SUPPORT_IPC
28 #include "ipc.h"
29 #endif
30 
31 #define CHR_SECOND_PER_DAY  86400
32 #define CHR_MS_PER_SECOND   1000
33 
34 #define LOG_MAX_ARGS_COUNT   7
35 #define LOG_MAX_ARGS_EXTEND_COUNT   7
36 #define LOG_SYNC_TIME_TIMEOUT_MS    5
37 
38 #define LOG_CONTENT_INDEX2  2
39 #define LOG_OFFSET_18       18
40 #define LOG_OFFSET_4        4
41 
42 static uint64_t g_log_basetime_ms = 0;
43 static uint32_t g_chr_basegmt_s = 0;
44 
get_log_basetime_ms(void)45 uint64_t get_log_basetime_ms(void)
46 {
47     return g_log_basetime_ms;
48 }
49 
get_chr_basegmt_s(void)50 uint32_t get_chr_basegmt_s(void)
51 {
52     return g_chr_basegmt_s;
53 }
54 
set_chr_basegmt_s(uint32_t t)55 void set_chr_basegmt_s(uint32_t t)
56 {
57     g_chr_basegmt_s = t;
58     return;
59 }
60 
61 #if CORE == APPS
62 #ifdef SUPPORT_IPC
set_log_time(uint32_t rtc_time_s)63 void set_log_time(uint32_t rtc_time_s)
64 {
65     uint64_t temp = rtc_time_s;
66     g_log_basetime_ms = ((temp % CHR_SECOND_PER_DAY) * CHR_MS_PER_SECOND) - uapi_systick_get_ms();
67     g_chr_basegmt_s = (uint32_t)(rtc_time_s - uapi_systick_get_s());
68 
69     log_set_sharemem_timestamp(g_log_basetime_ms);
70     ipc_status_t ret = ipc_spin_send_message_timeout(CORES_BT_CORE,
71                                                      IPC_ACTION_SET_LOG_TIME,
72                                                      (ipc_payload *)(uintptr_t)&rtc_time_s,
73                                                      sizeof(uint32_t),
74                                                      IPC_PRIORITY_LOWEST,
75                                                      false,
76                                                      LOG_SYNC_TIME_TIMEOUT_MS);
77     if (ret != IPC_STATUS_OK) {
78         UNUSED(ret);
79     }
80 }
81 #endif
82 #else
83 #ifdef IPC_NEW
84 #elif (defined CONFIG_DFX_SUPPORT_CUSTOM_LOG) && (CONFIG_DFX_SUPPORT_CUSTOM_LOG == DFX_YES)
85 #else
set_log_time_action_handler(ipc_action_t message,const volatile ipc_payload * payload_p,cores_t src,uint32_t id)86 bool set_log_time_action_handler(ipc_action_t message, const volatile ipc_payload *payload_p, cores_t src, uint32_t id)
87 {
88     UNUSED(message);
89     UNUSED(id);
90     UNUSED(src);
91 
92     uint64_t temp;
93 
94     temp = *(uint32_t *)payload_p;
95     g_log_basetime_ms = (uint64_t)(((temp % CHR_SECOND_PER_DAY) * CHR_MS_PER_SECOND) - uapi_systick_get_ms());
96     g_chr_basegmt_s = (uint32_t)(temp - uapi_systick_get_s());
97     return true;
98 }
99 #endif
100 #endif
101 
102 #if (USE_COMPRESS_LOG_INSTEAD_OF_SDT_LOG == YES)
103 
104 #define LOG_HEADER_LEN_IN_UINT32_T    (sizeof(compress_log_header_t) / sizeof(uint32_t))
105 #define TEN_MS_AS_BASE              10
106 #define COMPRESS_LOG_MAGIC_HEADER   (0xA8 >> 3)
107 #define LOG_LIMIT_TIMEOUT_MS        5000
108 #define COMPRESS_LOG_COUNT_MARK     0
109 
110 enum COMPRESS_LOG_CORE {
111     COMPRESS_LOG_CORE_EXTEND,
112     COMPRESS_LOG_CORE_BT,
113     COMPRESS_LOG_CORE_HIFI,
114     COMPRESS_LOG_CORE_BT_STATUS,
115 };
116 
117 enum COMPRESS_LOG_EXTEND_CORE {
118     COMPRESS_LOG_EXTEND_CORE_APP,
119     COMPRESS_LOG_EXTEND_CORE_GNSS,
120 };
121 
122 typedef struct {
123     uint32_t level : 3;       // log level in enLogLevel
124     uint32_t magic : 5;       // 0xA8 >> 3
125     uint32_t core : 2;        // 0: EXTEND CORE, 1: BT, 2:HIFI, 3:BT STATUS
126     uint32_t count : 3;       // count of variable params
127     uint32_t addr : 19;       // address in .logstr
128     uint32_t psn : 8;         // log sequence number
129     uint32_t timestamp : 24;  // system time
130     uint32_t code : 24;       // domain|module|sub module|log number
131     uint32_t ext_core : 2;    // 0:APP, 1:GNSS, using with core
132     uint32_t ext_count : 3;   // extended count of variable params
133     uint32_t reserved : 3;
134 } compress_log_header_t;
135 
136 typedef struct {
137     uint16_t domain;
138     uint16_t module;
139     bool op;
140 } log_switch_cmd_t;
141 
142 static uint8_t g_psn = 0;
143 static uint64_t  g_log_marktime_ms = 0;
144 static uint32_t  g_log_count_limit = 0;
145 
146 static uint16_t g_log_switch_control[LOG_DOMAIN_MAX];
147 
log_switch_is_open(uint16_t domain,uint16_t module)148 bool log_switch_is_open(uint16_t domain, uint16_t module)
149 {
150     if ((domain >= LOG_DOMAIN_MAX) || (module >= LIB_LOG_MODULE_MAX)) {
151         return true; /* default true, even if input is invalid */
152     }
153 
154     if (g_log_switch_control[domain] & (1U << module)) {
155         return true;
156     }
157     return false;
158 }
159 
set_log_switch(uint16_t domain,uint16_t module,bool op)160 int16_t set_log_switch(uint16_t domain, uint16_t module, bool op)
161 {
162     if ((domain > LOG_DOMAIN_MAX) || (module > LIB_LOG_MODULE_MAX)) {
163         return ERR;
164     }
165 
166     if (domain == LOG_DOMAIN_MAX) {
167         reset_log_switch(op);
168         return SUCC;
169     }
170 
171     if (module == LIB_LOG_MODULE_MAX) {
172         g_log_switch_control[domain] = op ? 0xFFFF : 0;
173         return SUCC;
174     }
175 
176     if (op) { /* op == true means on, otherwise off */
177         g_log_switch_control[domain] |= (uint16_t)(1U << module);
178     } else {
179         g_log_switch_control[domain] &= (uint16_t)(~(1U << module));
180     }
181 
182     return SUCC;
183 }
184 
185 #if CORE == APPS
remote_config_log_switch(cores_t dst,uint16_t domain,uint16_t module,bool op)186 uint16_t remote_config_log_switch(cores_t dst, uint16_t domain, uint16_t module, bool op)
187 {
188     log_switch_cmd_t cmd = {domain, module, op};
189 
190     return ipc_spin_send_message_timeout(dst,
191                                          IPC_ACTION_SET_LOG_SWITCH,
192                                          (ipc_payload *)&cmd,
193                                          sizeof(log_switch_cmd_t),
194                                          IPC_PRIORITY_LOWEST,
195                                          false,
196                                          LOG_SYNC_TIME_TIMEOUT_MS);
197 }
198 #else
set_log_switch_action_handler(ipc_action_t message,const volatile ipc_payload * payload_p,cores_t src,uint32_t id)199 bool set_log_switch_action_handler(ipc_action_t message, const volatile ipc_payload *payload_p,
200                                    cores_t src, uint32_t id)
201 {
202     UNUSED(message);
203     UNUSED(id);
204     UNUSED(src);
205 
206     log_switch_cmd_t *cmd = (log_switch_cmd_t *)payload_p;
207     if (set_log_switch(cmd->domain, cmd->module, cmd->op) != SUCC) {
208         return false;
209     }
210 
211     return true;
212 }
213 #endif
214 
reset_log_switch(bool op)215 void reset_log_switch(bool op)
216 {
217     uint16_t i;
218     uint16_t reset_val = op ? 0xFFFF : 0;
219 
220     for (i = 0; i < LOG_DOMAIN_MAX; i++) {
221         g_log_switch_control[i] = reset_val;
222     }
223 }
224 
check_log_switch(log_level_e log_lvl,uint32_t log_header)225 static bool check_log_switch(log_level_e log_lvl, uint32_t log_header)
226 {
227     if (log_lvl < LOG_LEVEL_INFO) {
228         return true; /* only filter log level INFO and DEBUG */
229     }
230     uint16_t domain = (uint16_t)get_log_domain(log_header);
231     uint16_t module = (uint16_t)get_log_module(log_header);
232 
233     return log_switch_is_open(domain, module);
234 }
235 
check_compress_log_printf_threshold(void)236 bool check_compress_log_printf_threshold(void)
237 {
238     uint64_t log_time;
239     static uint32_t  log_count = 0;
240     log_count++;
241     if (log_count > g_log_count_limit) {
242         log_time = uapi_systick_get_ms();
243         if ((log_time - g_log_marktime_ms) > LOG_LIMIT_TIMEOUT_MS) {
244             g_log_marktime_ms = log_time;
245             log_count = COMPRESS_LOG_COUNT_MARK;
246             return true;
247         } else {
248             return false;
249         }
250     }
251     return true;
252 }
253 
compress_log_init(void)254 void compress_log_init(void)
255 {
256     g_log_count_limit = COMPRESS_LOG_COUNT_THRESHOLD;
257     reset_log_switch(true);
258 }
259 
set_compress_log_count_threshold(uint32_t threshold)260 void set_compress_log_count_threshold(uint32_t threshold)
261 {
262     g_log_count_limit = threshold;
263 }
264 
compress_printf_store_in_flash(uint32_t log_addr,uint32_t log_header,va_list args)265 static void compress_printf_store_in_flash(uint32_t log_addr, uint32_t log_header, va_list args)
266 {
267     log_level_e log_lvl = (log_level_e)get_log_lvl(log_header);
268     if (log_lvl > log_get_local_log_level()) { return; }
269     if (check_log_switch(log_lvl, log_header) == false) { return; }
270     if (check_compress_log_printf_threshold() == false) { return; }
271 
272     uint32_t args_count = get_log_args_cnt(log_header);
273     if (args_count > LOG_MAX_ARGS_COUNT + LOG_MAX_ARGS_EXTEND_COUNT) {
274         args_count = LOG_MAX_ARGS_COUNT + LOG_MAX_ARGS_EXTEND_COUNT;
275     }
276 
277     uint32_t log_code = get_log_code(log_header);
278     uint32_t log_content_len = sizeof(compress_log_header_t) + args_count * sizeof(uint32_t);
279     uint32_t log_content[LOG_HEADER_LEN_IN_UINT32_T + LOG_MAX_ARGS_COUNT + LOG_MAX_ARGS_EXTEND_COUNT];
280 
281     ((compress_log_header_t *)log_content)->level = (uint32_t)log_lvl;
282     ((compress_log_header_t *)log_content)->magic = COMPRESS_LOG_MAGIC_HEADER;
283 #if CORE == BT
284     if (log_code == BTC_MAGIC_LOG_CODE) {
285         ((compress_log_header_t *)log_content)->core = COMPRESS_LOG_CORE_BT_STATUS;
286     } else {
287         ((compress_log_header_t *)log_content)->core = COMPRESS_LOG_CORE_BT;
288     }
289 #elif CORE == APPS
290     ((compress_log_header_t *)log_content)->core = COMPRESS_LOG_CORE_EXTEND;
291     ((compress_log_header_t *)log_content)->ext_core = COMPRESS_LOG_EXTEND_CORE_APP;
292 #elif CORE == GNSS
293     ((compress_log_header_t *)log_content)->core = COMPRESS_LOG_CORE_EXTEND;
294     ((compress_log_header_t *)log_content)->ext_core = COMPRESS_LOG_EXTEND_CORE_GNSS;
295 #else
296     ((compress_log_header_t *)log_content)->core = COMPRESS_LOG_CORE_HIFI;
297 #endif
298     if (args_count > LOG_MAX_ARGS_COUNT) {
299         ((compress_log_header_t *)log_content)->count = LOG_MAX_ARGS_COUNT;
300         ((compress_log_header_t *)log_content)->ext_count = args_count - LOG_MAX_ARGS_COUNT;
301     } else {
302         ((compress_log_header_t *)log_content)->count = args_count;
303         ((compress_log_header_t *)log_content)->ext_count = 0;
304     }
305     ((compress_log_header_t *)log_content)->addr = log_addr;
306     ((compress_log_header_t *)log_content)->code = log_code;
307     ((compress_log_header_t *)log_content)->timestamp = (uapi_systick_get_ms() + g_log_basetime_ms) / TEN_MS_AS_BASE;
308     ((compress_log_header_t *)log_content)->psn = g_psn;
309     g_psn++;
310 
311     if (args_count > 0) {
312         for (uint32_t temp_index = 0; temp_index < args_count; temp_index++) {
313             log_content[LOG_HEADER_LEN_IN_UINT32_T + temp_index] = va_arg(args, uint32_t);
314         }
315     }
316 
317     compress_log_write((const uint8_t *)log_content, log_content_len);
318 }
319 
compress_printf(uint32_t log_addr,uint32_t log_header,...)320 void compress_printf(uint32_t log_addr, uint32_t log_header, ...)
321 {
322     va_list args;
323     va_start(args, log_header);
324     compress_printf_store_in_flash(log_addr, log_header, args);
325     va_end(args);
326 }
327 
328 /*
329 * +                     16 Bits                    + 10 Bits  +   4 Bits    +    4 Bits    +
330 * +--------------+--------------+------------------+----------+-------------+--------------+
331 * |                     log_module                 |  log_id  |             |              |
332 * |--------------+--------------+------------------+----------|   log_lvl   |  args_count  |
333 * |                     LOG_BCORE_BTC              |    0     |             |              |
334 * +-----------------------------------------------------------+-------------+--------------+
335 */
compress_printf_btc_info0(uint32_t log_addr,...)336 void compress_printf_btc_info0(uint32_t log_addr, ...)
337 {
338     va_list args;
339     va_start(args, log_addr);
340     compress_printf_store_in_flash(log_addr, ((uint32_t)(LOG_BCORE_BTC << LOG_OFFSET_18) |
341          (uint32_t)(LOG_LEVEL_INFO << LOG_OFFSET_4) | (uint32_t)(NO_ARG)), args);
342     va_end(args);
343 }
344 
compress_printf_btc_info1(uint32_t log_addr,...)345 void compress_printf_btc_info1(uint32_t log_addr, ...)
346 {
347     va_list args;
348     va_start(args, log_addr);
349     compress_printf_store_in_flash(log_addr, ((uint32_t)(LOG_BCORE_BTC << LOG_OFFSET_18) |
350         (uint32_t)(LOG_LEVEL_INFO << LOG_OFFSET_4) | (uint32_t)(ONE_ARG)), args);
351     va_end(args);
352 }
353 
compress_printf_btc_info2(uint32_t log_addr,...)354 void compress_printf_btc_info2(uint32_t log_addr, ...)
355 {
356     va_list args;
357     va_start(args, log_addr);
358     compress_printf_store_in_flash(log_addr, ((uint32_t)(LOG_BCORE_BTC << LOG_OFFSET_18) |
359         (uint32_t)(LOG_LEVEL_INFO << LOG_OFFSET_4) | (uint32_t)(TWO_ARG)), args);
360     va_end(args);
361 }
362 
compress_printf_btc_info3(uint32_t log_addr,...)363 void compress_printf_btc_info3(uint32_t log_addr, ...)
364 {
365     va_list args;
366     va_start(args, log_addr);
367     compress_printf_store_in_flash(log_addr, ((uint32_t)(LOG_BCORE_BTC << LOG_OFFSET_18) |
368         (uint32_t)(LOG_LEVEL_INFO << LOG_OFFSET_4) | (uint32_t)(THREE_ARG)), args);
369     va_end(args);
370 }
371 
compress_printf_btc_info4(uint32_t log_addr,...)372 void compress_printf_btc_info4(uint32_t log_addr, ...)
373 {
374     va_list args;
375     va_start(args, log_addr);
376     compress_printf_store_in_flash(log_addr, ((uint32_t)(LOG_BCORE_BTC << LOG_OFFSET_18) |
377         (uint32_t)(LOG_LEVEL_INFO << LOG_OFFSET_4) | (uint32_t)(FOUR_ARG)), args);
378     va_end(args);
379 }
380 
compress_printf_btc_warn0(uint32_t log_addr,...)381 void compress_printf_btc_warn0(uint32_t log_addr, ...)
382 {
383     va_list args;
384     va_start(args, log_addr);
385     compress_printf_store_in_flash(log_addr, ((uint32_t)(LOG_BCORE_BTC << LOG_OFFSET_18) |
386         (uint32_t)(LOG_LEVEL_WARNING << LOG_OFFSET_4) | (uint32_t)(NO_ARG)), args);
387     va_end(args);
388 }
389 
compress_printf_btc_warn1(uint32_t log_addr,...)390 void compress_printf_btc_warn1(uint32_t log_addr, ...)
391 {
392     va_list args;
393     va_start(args, log_addr);
394     compress_printf_store_in_flash(log_addr, ((uint32_t)(LOG_BCORE_BTC << LOG_OFFSET_18) |
395         (uint32_t)(LOG_LEVEL_WARNING << LOG_OFFSET_4) | (uint32_t)(ONE_ARG)), args);
396     va_end(args);
397 }
398 
compress_printf_btc_warn2(uint32_t log_addr,...)399 void compress_printf_btc_warn2(uint32_t log_addr, ...)
400 {
401     va_list args;
402     va_start(args, log_addr);
403     compress_printf_store_in_flash(log_addr, ((uint32_t)(LOG_BCORE_BTC << LOG_OFFSET_18) |
404         (uint32_t)(LOG_LEVEL_WARNING << LOG_OFFSET_4) | (uint32_t)(TWO_ARG)), args);
405     va_end(args);
406 }
407 
compress_printf_btc_warn3(uint32_t log_addr,...)408 void compress_printf_btc_warn3(uint32_t log_addr, ...)
409 {
410     va_list args;
411     va_start(args, log_addr);
412     compress_printf_store_in_flash(log_addr, ((uint32_t)(LOG_BCORE_BTC << LOG_OFFSET_18) |
413         (uint32_t)(LOG_LEVEL_WARNING << LOG_OFFSET_4) | (uint32_t)(THREE_ARG)), args);
414     va_end(args);
415 }
416 
compress_printf_btc_warn4(uint32_t log_addr,...)417 void compress_printf_btc_warn4(uint32_t log_addr, ...)
418 {
419     va_list args;
420     va_start(args, log_addr);
421     compress_printf_store_in_flash(log_addr, ((uint32_t)(LOG_BCORE_BTC << LOG_OFFSET_18) |
422         (uint32_t)(LOG_LEVEL_WARNING << LOG_OFFSET_4) | (uint32_t)(FOUR_ARG)), args);
423     va_end(args);
424 }
425 
426 #else /* USE_COMPRESS_LOG_INSTEAD_OF_SDT_LOG == NO */
427 #include "log_def.h"
428 #include "log_oam_logger.h"
429 
430 #ifndef CONFIG_LOG_USE_DIAG_FRAME
compress_printf_output_by_uart(uint32_t log_header,va_list args)431 static void compress_printf_output_by_uart(uint32_t log_header, va_list args)
432 {
433     log_level_e log_lvl = (log_level_e)(get_log_lvl(log_header));
434     if (log_lvl > log_get_local_log_level()) {
435         return;
436     }
437 
438     uint32_t log_content[OML_LOG_HEADER_ARRAY_LENTH + LOG_MAX_ARGS_COUNT + OML_LOG_TAIL_LENTH];
439     uint32_t log_mod;
440     uint32_t uc_loop = 0;
441     uint32_t file_id = get_file_id(log_header);
442     uint32_t args_count = get_log_args_cnt(log_header);
443     if (args_count > LOG_MAX_ARGS_COUNT) {
444         args_count = LOG_MAX_ARGS_COUNT;
445     }
446 #if CORE == BT || CHIP_BS2X
447     log_content[0] = log_head_press(OM_BT);
448     log_mod = LOG_BTMODULE;
449 #elif CORE == APPS
450     log_content[0] = log_head_press(OM_IR);
451     log_mod = LOG_PFMODULE;
452 #else
453     log_mod = LOG_PFMODULE;
454 #endif
455     log_content[1] = (uint32_t)log_lenth_and_sn_press(args_count, (uint32_t)get_log_sn_number());
456     log_content[LOG_CONTENT_INDEX2] = para_press(log_mod, (uint32_t)log_lvl,
457                                                  file_id, get_log_line(log_header));
458 
459     if (args_count > 0) {
460         for (uc_loop = 0; uc_loop < args_count; uc_loop++) {
461             log_content[OML_LOG_HEADER_ARRAY_LENTH + uc_loop] = (uint32_t)va_arg(args, uint32_t);
462         }
463     }
464 
465     log_content[OML_LOG_HEADER_ARRAY_LENTH + uc_loop] = OM_FRAME_DELIMITER;
466     log_event((uint8_t *)log_content, (uint16_t)oal_log_lenth(args_count));
467 }
468 #else
469 #include "diag_rom_api.h"
470 
compress_printf_output_by_uart(uint32_t log_header,va_list args)471 static void compress_printf_output_by_uart(uint32_t log_header, va_list args)
472 {
473     uint8_t log_lvl = get_log_lvl(log_header);
474     if (log_lvl > log_get_local_log_level()) {
475         return;
476     }
477 
478     uint32_t log_data[OML_LOG_ALTER_PARA_MAX_NUM];
479     uint8_t log_mod_id;
480     uint32_t log_mod;
481     uint32_t uc_loop = 0;
482     uint32_t args_count = get_log_args_cnt(log_header);
483     if (args_count > LOG_MAX_ARGS_COUNT) {
484         args_count = LOG_MAX_ARGS_COUNT;
485     }
486 #if CORE == BT
487     log_mod_id = OM_BT;
488     log_mod = LOG_BTMODULE;
489 #elif CORE == APPS
490     log_mod_id = OM_IR;
491     log_mod = LOG_PFMODULE;
492 #else
493     log_mod = LOG_PFMODULE;
494 #endif
495     log_lvl = sdt_to_diag_log_level(log_lvl);
496     uint32_t msg_id = para_press(log_mod, log_lvl, get_file_id(log_header), get_log_line(log_header));
497 
498     if (args_count > 0) {
499         for (uc_loop = 0; uc_loop < args_count; uc_loop++) {
500             log_data[uc_loop] = (uint32_t)va_arg(args, uint32_t);
501         }
502     }
503 
504     uapi_diag_report_sys_msg(log_mod_id, msg_id, (uint8_t *)log_data, sizeof(uint32_t) * args_count, log_lvl);
505 }
506 #endif
507 
compress_printf(uint32_t log_header,...)508 void compress_printf(uint32_t log_header, ...)
509 {
510     va_list args;
511     va_start(args, log_header);
512     compress_printf_output_by_uart(log_header, args);
513     va_end(args);
514 }
515 
compress_printf_nolog(uint32_t log_header,...)516 void compress_printf_nolog(uint32_t log_header, ...)
517 {
518     unused(log_header);
519     return;
520 }
521 
522 #endif /* USE_COMPRESS_LOG_INSTEAD_OF_SDT_LOG */
523 
524 
compress_printf_rom_callback(uint32_t log_addr,uint32_t log_header_user,uint32_t log_header_eng,va_list args)525 void compress_printf_rom_callback(uint32_t log_addr, uint32_t log_header_user, uint32_t log_header_eng, va_list args)
526 {
527     (void)log_addr;
528     (void)log_header_user;
529     (void)log_header_eng;
530 #if (USE_COMPRESS_LOG_INSTEAD_OF_SDT_LOG == YES)
531     compress_printf_store_in_flash(log_addr, log_header_user, args);
532 #else
533     compress_printf_output_by_uart(log_header_eng, args);
534 #endif
535 }
536 
537 #if CHIP_LIBRA || CHIP_SOCMN1 || CHIP_BS25 || CHIP_BRANDY
compress_log_no_print_rom_callback(uint32_t log_addr,uint32_t log_header_user,uint32_t log_header_eng,va_list args)538 void compress_log_no_print_rom_callback(uint32_t log_addr, uint32_t log_header_user,
539                                         uint32_t log_header_eng, va_list args)
540 {
541     (void)log_addr;
542     (void)log_header_user;
543     (void)log_header_eng;
544     (void)args;
545 #if (USE_COMPRESS_LOG_INSTEAD_OF_SDT_LOG == NO)
546     compress_printf_output_by_uart(log_header_eng, args);
547 #endif
548 }
549 #endif
550