trace.h 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. /*
  2. * SPDX-FileCopyrightText: 2017 Nordic Semiconductor ASA
  3. * SPDX-FileCopyrightText: 2015-2016 Intel Corporation
  4. * SPDX-FileContributor: 2018-2021 Espressif Systems (Shanghai) CO LTD
  5. *
  6. * SPDX-License-Identifier: Apache-2.0
  7. */
  8. #ifndef _BLE_MESH_TRACE_H_
  9. #define _BLE_MESH_TRACE_H_
  10. #include <assert.h>
  11. #include "esp_log.h"
  12. #include "mesh/utils.h"
  13. #include "esp_rom_sys.h"
  14. #ifdef __cplusplus
  15. extern "C" {
  16. #endif
  17. /* Define common tracing for all */
  18. #ifndef BLE_MESH_LOG_LEVEL_ERROR
  19. #define BLE_MESH_LOG_LEVEL_ERROR 1
  20. #endif /* BLE_MESH_LOG_LEVEL_ERROR */
  21. #ifndef BLE_MESH_LOG_LEVEL_WARN
  22. #define BLE_MESH_LOG_LEVEL_WARN 2
  23. #endif /* BLE_MESH_LOG_LEVEL_WARN */
  24. #ifndef BLE_MESH_LOG_LEVEL_INFO
  25. #define BLE_MESH_LOG_LEVEL_INFO 3
  26. #endif /* BLE_MESH_LOG_LEVEL_INFO */
  27. #ifndef BLE_MESH_LOG_LEVEL_DEBUG
  28. #define BLE_MESH_LOG_LEVEL_DEBUG 4
  29. #endif /* BLE_MESH_LOG_LEVEL_DEBUG */
  30. #ifndef BLE_MESH_LOG_LEVEL_VERBOSE
  31. #define BLE_MESH_LOG_LEVEL_VERBOSE 5
  32. #endif /*BLE_MESH_LOG_LEVEL_VERBOSE */
  33. #ifdef CONFIG_BLE_MESH_STACK_TRACE_LEVEL
  34. #define BLE_MESH_LOG_LEVEL CONFIG_BLE_MESH_STACK_TRACE_LEVEL
  35. #else
  36. #define BLE_MESH_LOG_LEVEL BLE_MESH_LOG_LEVEL_WARN
  37. #endif
  38. #ifdef CONFIG_BLE_MESH_NET_BUF_TRACE_LEVEL
  39. #define BLE_MESH_NET_BUF_LOG_LEVEL CONFIG_BLE_MESH_NET_BUF_TRACE_LEVEL
  40. #else
  41. #define BLE_MESH_NET_BUF_LOG_LEVEL BLE_MESH_LOG_LEVEL_WARN
  42. #endif
  43. #define BLE_MESH_TRACE_TAG "BLE_MESH"
  44. #if (LOG_LOCAL_LEVEL >= 4)
  45. #define BLE_MESH_LOG_LOCAL_LEVEL_MAPPING (LOG_LOCAL_LEVEL + 1)
  46. #else
  47. #define BLE_MESH_LOG_LOCAL_LEVEL_MAPPING LOG_LOCAL_LEVEL
  48. #endif
  49. #define BLE_MESH_LOG_LEVEL_CHECK(LAYER, LEVEL) (MAX(LAYER##_LOG_LEVEL, BLE_MESH_LOG_LOCAL_LEVEL_MAPPING) >= BLE_MESH_LOG_LEVEL_##LEVEL)
  50. #define BLE_MESH_PRINT_E(tag, format, ...) {esp_log_write(ESP_LOG_ERROR, tag, LOG_FORMAT(E, format), esp_log_timestamp(), tag, ##__VA_ARGS__); }
  51. #define BLE_MESH_PRINT_W(tag, format, ...) {esp_log_write(ESP_LOG_WARN, tag, LOG_FORMAT(W, format), esp_log_timestamp(), tag, ##__VA_ARGS__); }
  52. #define BLE_MESH_PRINT_I(tag, format, ...) {esp_log_write(ESP_LOG_INFO, tag, LOG_FORMAT(I, format), esp_log_timestamp(), tag, ##__VA_ARGS__); }
  53. #define BLE_MESH_PRINT_D(tag, format, ...) {esp_log_write(ESP_LOG_DEBUG, tag, LOG_FORMAT(D, format), esp_log_timestamp(), tag, ##__VA_ARGS__); }
  54. #define BLE_MESH_PRINT_V(tag, format, ...) {esp_log_write(ESP_LOG_VERBOSE, tag, LOG_FORMAT(V, format), esp_log_timestamp(), tag, ##__VA_ARGS__); }
  55. #define printk esp_rom_printf
  56. #define _STRINGIFY(x) #x
  57. #define STRINGIFY(s) _STRINGIFY(s)
  58. #ifndef __ASSERT
  59. #define __ASSERT(test, str) assert(test)
  60. #endif
  61. #ifndef __ASSERT_NO_MSG
  62. #define __ASSERT_NO_MSG(x) assert(x)
  63. #endif
  64. #if !CONFIG_BLE_MESH_NO_LOG
  65. #define BT_ERR(fmt, args...) do {if ((BLE_MESH_LOG_LEVEL >= BLE_MESH_LOG_LEVEL_ERROR) && BLE_MESH_LOG_LEVEL_CHECK(BLE_MESH, ERROR)) BLE_MESH_PRINT_E(BLE_MESH_TRACE_TAG, fmt, ## args);} while(0)
  66. #define BT_WARN(fmt, args...) do {if ((BLE_MESH_LOG_LEVEL >= BLE_MESH_LOG_LEVEL_WARN) && BLE_MESH_LOG_LEVEL_CHECK(BLE_MESH, WARN)) BLE_MESH_PRINT_W(BLE_MESH_TRACE_TAG, fmt, ## args);} while(0)
  67. #define BT_INFO(fmt, args...) do {if ((BLE_MESH_LOG_LEVEL >= BLE_MESH_LOG_LEVEL_INFO) && BLE_MESH_LOG_LEVEL_CHECK(BLE_MESH, INFO)) BLE_MESH_PRINT_I(BLE_MESH_TRACE_TAG, fmt, ## args);} while(0)
  68. #define BT_DBG(fmt, args...) do {if ((BLE_MESH_LOG_LEVEL >= BLE_MESH_LOG_LEVEL_DEBUG) && BLE_MESH_LOG_LEVEL_CHECK(BLE_MESH, DEBUG)) BLE_MESH_PRINT_D(BLE_MESH_TRACE_TAG, fmt, ## args);} while(0)
  69. #else
  70. #define BT_ERR(fmt, args...)
  71. #define BT_WARN(fmt, args...)
  72. #define BT_INFO(fmt, args...)
  73. #define BT_DBG(fmt, args...)
  74. #endif
  75. #if (CONFIG_BLE_MESH_NET_BUF_LOG && !CONFIG_BLE_MESH_NO_LOG)
  76. #define NET_BUF_ERR(fmt, args...) do {if ((BLE_MESH_NET_BUF_LOG_LEVEL >= BLE_MESH_LOG_LEVEL_ERROR) && BLE_MESH_LOG_LEVEL_CHECK(BLE_MESH_NET_BUF, ERROR)) BLE_MESH_PRINT_E(BLE_MESH_TRACE_TAG, fmt, ## args);} while(0)
  77. #define NET_BUF_WARN(fmt, args...) do {if ((BLE_MESH_NET_BUF_LOG_LEVEL >= BLE_MESH_LOG_LEVEL_WARN) && BLE_MESH_LOG_LEVEL_CHECK(BLE_MESH_NET_BUF, WARN)) BLE_MESH_PRINT_W(BLE_MESH_TRACE_TAG, fmt, ## args);} while(0)
  78. #define NET_BUF_INFO(fmt, args...) do {if ((BLE_MESH_NET_BUF_LOG_LEVEL >= BLE_MESH_LOG_LEVEL_INFO) && BLE_MESH_LOG_LEVEL_CHECK(BLE_MESH_NET_BUF, INFO)) BLE_MESH_PRINT_I(BLE_MESH_TRACE_TAG, fmt, ## args);} while(0)
  79. #define NET_BUF_DBG(fmt, args...) do {if ((BLE_MESH_NET_BUF_LOG_LEVEL >= BLE_MESH_LOG_LEVEL_DEBUG) && BLE_MESH_LOG_LEVEL_CHECK(BLE_MESH_NET_BUF, DEBUG)) BLE_MESH_PRINT_D(BLE_MESH_TRACE_TAG, fmt, ## args);} while(0)
  80. #define NET_BUF_ASSERT(cond) __ASSERT_NO_MSG(cond)
  81. #else
  82. #define NET_BUF_ERR(fmt, args...)
  83. #define NET_BUF_WARN(fmt, args...)
  84. #define NET_BUF_INFO(fmt, args...)
  85. #define NET_BUF_DBG(fmt, args...)
  86. #define NET_BUF_ASSERT(cond)
  87. #endif
  88. #if (CONFIG_BLE_MESH_NET_BUF_SIMPLE_LOG && !CONFIG_BLE_MESH_NO_LOG)
  89. #define NET_BUF_SIMPLE_ERR(fmt, args...) do {if ((BLE_MESH_NET_BUF_LOG_LEVEL >= BLE_MESH_LOG_LEVEL_ERROR) && BLE_MESH_LOG_LEVEL_CHECK(BLE_MESH_NET_BUF, ERROR)) BLE_MESH_PRINT_E(BLE_MESH_TRACE_TAG, fmt, ## args);} while(0)
  90. #define NET_BUF_SIMPLE_WARN(fmt, args...) do {if ((BLE_MESH_NET_BUF_LOG_LEVEL >= BLE_MESH_LOG_LEVEL_WARN) && BLE_MESH_LOG_LEVEL_CHECK(BLE_MESH_NET_BUF, WARN)) BLE_MESH_PRINT_W(BLE_MESH_TRACE_TAG, fmt, ## args);} while(0)
  91. #define NET_BUF_SIMPLE_INFO(fmt, args...) do {if ((BLE_MESH_NET_BUF_LOG_LEVEL >= BLE_MESH_LOG_LEVEL_INFO) && BLE_MESH_LOG_LEVEL_CHECK(BLE_MESH_NET_BUF, INFO)) BLE_MESH_PRINT_I(BLE_MESH_TRACE_TAG, fmt, ## args);} while(0)
  92. #define NET_BUF_SIMPLE_DBG(fmt, args...) do {if ((BLE_MESH_NET_BUF_LOG_LEVEL >= BLE_MESH_LOG_LEVEL_DEBUG) && BLE_MESH_LOG_LEVEL_CHECK(BLE_MESH_NET_BUF, DEBUG)) BLE_MESH_PRINT_D(BLE_MESH_TRACE_TAG, fmt, ## args);} while(0)
  93. #define NET_BUF_SIMPLE_ASSERT(cond) __ASSERT_NO_MSG(cond)
  94. #else
  95. #define NET_BUF_SIMPLE_ERR(fmt, args...)
  96. #define NET_BUF_SIMPLE_WARN(fmt, args...)
  97. #define NET_BUF_SIMPLE_INFO(fmt, args...)
  98. #define NET_BUF_SIMPLE_DBG(fmt, args...)
  99. #define NET_BUF_SIMPLE_ASSERT(cond)
  100. #endif
  101. #if CONFIG_BLE_MESH_BQB_TEST_LOG
  102. /**
  103. * For example, the test case "MESH/NODE/TNPT/BV-01-C"
  104. * could use BT_BQB(BLE_MESH_BQB_TEST_LOG_LEVEL_PRIMARY_ID_NODE | BLE_MESH_BQB_TEST_LOG_LEVEL_SUB_ID_TNPT, "msg %s", msg)
  105. * to print some message.
  106. */
  107. enum BLE_MESH_BQB_TEST_LOG_LEVEL {
  108. BLE_MESH_BQB_TEST_LOG_LEVEL_OUTPUT_ALL = 0, /* Output all BQB related test log */
  109. BLE_MESH_BQB_TEST_LOG_LEVEL_PRIMARY_ID_NODE = BIT(0),
  110. BLE_MESH_BQB_TEST_LOG_LEVEL_PRIMARY_ID_PVNR = BIT(1),
  111. BLE_MESH_BQB_TEST_LOG_LEVEL_PRIMARY_ID_CFGCL = BIT(2),
  112. BLE_MESH_BQB_TEST_LOG_LEVEL_PRIMARY_ID_SR = BIT(3),
  113. BLE_MESH_BQB_TEST_LOG_LEVEL_PRIMARY_ID_CL = BIT(4),
  114. BLE_MESH_BQB_TEST_LOG_LEVEL_SUB_ID_PBADV = BIT(5),
  115. BLE_MESH_BQB_TEST_LOG_LEVEL_SUB_ID_MPS = BIT(6),
  116. BLE_MESH_BQB_TEST_LOG_LEVEL_SUB_ID_PROV = BIT(7),
  117. BLE_MESH_BQB_TEST_LOG_LEVEL_SUB_ID_BCN = BIT(8),
  118. BLE_MESH_BQB_TEST_LOG_LEVEL_SUB_ID_NET = BIT(9),
  119. BLE_MESH_BQB_TEST_LOG_LEVEL_SUB_ID_RLY = BIT(10),
  120. BLE_MESH_BQB_TEST_LOG_LEVEL_SUB_ID_TNPT = BIT(11),
  121. BLE_MESH_BQB_TEST_LOG_LEVEL_SUB_ID_IVU = BIT(12),
  122. BLE_MESH_BQB_TEST_LOG_LEVEL_SUB_ID_KR = BIT(13),
  123. BLE_MESH_BQB_TEST_LOG_LEVEL_SUB_ID_FRND_FN = BIT(14),
  124. BLE_MESH_BQB_TEST_LOG_LEVEL_SUB_ID_FRND_LPN = BIT(15),
  125. BLE_MESH_BQB_TEST_LOG_LEVEL_SUB_ID_PROX = BIT(16),
  126. BLE_MESH_BQB_TEST_LOG_LEVEL_SUB_ID_MPXS = BIT(17),
  127. BLE_MESH_BQB_TEST_LOG_LEVEL_SUB_ID_CFG = BIT(18),
  128. BLE_MESH_BQB_TEST_LOG_LEVEL_SUB_ID_HM = BIT(19),
  129. };
  130. #define BLE_MESH_BQB_TEST_LOG_LEVEL_OUTPUT_NONE 0x000FFFFF
  131. #endif /* CONFIG_BLE_MESH_BQB_TEST_LOG */
  132. #if (CONFIG_BLE_MESH_BQB_TEST_LOG && !CONFIG_BLE_MESH_NO_LOG)
  133. extern bool bt_mesh_bqb_test_flag_check(uint32_t flag_mask);
  134. extern int bt_mesh_bqb_test_flag_set(uint32_t value);
  135. #define BT_BQB(flag_mask, fmt, args...) \
  136. do { \
  137. if (bt_mesh_bqb_test_flag_check(flag_mask)) \
  138. BLE_MESH_PRINT_I("BLE_MESH_BQB", fmt, ## args); \
  139. } while (0)
  140. #else
  141. #define BT_BQB(flag_mask, fmt, args...)
  142. #endif
  143. #ifdef __cplusplus
  144. }
  145. #endif
  146. #endif /* _BLE_MESH_TRACE_H_ */