mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-03 20:54:32 +02:00
feat(ble): support host & hci log module
This commit is contained in:
@@ -27,6 +27,14 @@ config BT_BLE_LOG_SPI_OUT_HCI_ENABLED
|
||||
help
|
||||
Enable logging of HCI packets to the SPI bus when BLE SPI log output is enabled.
|
||||
|
||||
config BT_BLE_LOG_SPI_OUT_HCI_BUF_SIZE
|
||||
int "SPI transaction buffer size for HCI logs"
|
||||
depends on BT_BLE_LOG_SPI_OUT_HCI_ENABLED
|
||||
default 1024
|
||||
help
|
||||
SPI transaction buffer size for HCI logs.
|
||||
There will be 2 SPI DMA buffers with the same size.
|
||||
|
||||
config BT_BLE_LOG_SPI_OUT_HOST_ENABLED
|
||||
bool "Enable Host log output to SPI"
|
||||
depends on BT_BLE_LOG_SPI_OUT_ENABLED
|
||||
@@ -35,6 +43,14 @@ config BT_BLE_LOG_SPI_OUT_HOST_ENABLED
|
||||
This configuration applies to the logs of both Bluedroid Host and NimBLE Host.
|
||||
When BLE SPI log output is enabled, this option allows host logs to be transmitted via SPI.
|
||||
|
||||
config BT_BLE_LOG_SPI_OUT_HOST_BUF_SIZE
|
||||
int "SPI transaction buffer size for host logs"
|
||||
depends on BT_BLE_LOG_SPI_OUT_HOST_ENABLED
|
||||
default 1024
|
||||
help
|
||||
SPI transaction buffer size for host logs.
|
||||
There will be 2 SPI DMA buffers with the same size.
|
||||
|
||||
config BT_BLE_LOG_SPI_OUT_LL_ENABLED
|
||||
bool "Enable Controller log output to SPI"
|
||||
depends on BT_BLE_LOG_SPI_OUT_ENABLED
|
||||
|
@@ -26,6 +26,10 @@
|
||||
#define SPI_OUT_FLUSH_TIMEOUT_US (CONFIG_BT_BLE_LOG_SPI_OUT_FLUSH_TIMEOUT * 1000)
|
||||
#define SPI_OUT_LE_AUDIO_ENABLED CONFIG_BT_BLE_LOG_SPI_OUT_LE_AUDIO_ENABLED
|
||||
#define SPI_OUT_LE_AUDIO_BUF_SIZE CONFIG_BT_BLE_LOG_SPI_OUT_LE_AUDIO_BUF_SIZE
|
||||
#define SPI_OUT_HOST_ENABLED CONFIG_BT_BLE_LOG_SPI_OUT_HOST_ENABLED
|
||||
#define SPI_OUT_HOST_BUF_SIZE CONFIG_BT_BLE_LOG_SPI_OUT_HOST_BUF_SIZE
|
||||
#define SPI_OUT_HCI_ENABLED CONFIG_BT_BLE_LOG_SPI_OUT_HCI_ENABLED
|
||||
#define SPI_OUT_HCI_BUF_SIZE CONFIG_BT_BLE_LOG_SPI_OUT_HCI_BUF_SIZE
|
||||
|
||||
// Private defines
|
||||
#define BLE_LOG_TAG "BLE_LOG"
|
||||
@@ -60,9 +64,23 @@
|
||||
#define SPI_OUT_LE_AUDIO_QUEUE_SIZE (0)
|
||||
#endif // SPI_OUT_LE_AUDIO_ENABLED
|
||||
|
||||
#if SPI_OUT_HOST_ENABLED
|
||||
#define SPI_OUT_HOST_QUEUE_SIZE (SPI_OUT_PING_PONG_BUF_CNT)
|
||||
#else
|
||||
#define SPI_OUT_HOST_QUEUE_SIZE (0)
|
||||
#endif // SPI_OUT_HOST_ENABLED
|
||||
|
||||
#if SPI_OUT_HCI_ENABLED
|
||||
#define SPI_OUT_HCI_QUEUE_SIZE (SPI_OUT_PING_PONG_BUF_CNT)
|
||||
#else
|
||||
#define SPI_OUT_HCI_QUEUE_SIZE (0)
|
||||
#endif // SPI_OUT_HCI_ENABLED
|
||||
|
||||
#define SPI_OUT_SPI_MASTER_QUEUE_SIZE (SPI_OUT_UL_QUEUE_SIZE +\
|
||||
SPI_OUT_LL_QUEUE_SIZE +\
|
||||
SPI_OUT_LE_AUDIO_QUEUE_SIZE)
|
||||
SPI_OUT_LE_AUDIO_QUEUE_SIZE +\
|
||||
SPI_OUT_HOST_QUEUE_SIZE +\
|
||||
SPI_OUT_HCI_QUEUE_SIZE)
|
||||
|
||||
// Private typedefs
|
||||
typedef struct {
|
||||
@@ -114,6 +132,8 @@ enum {
|
||||
LOG_CB_TYPE_LL_ISR,
|
||||
LOG_CB_TYPE_LL_HCI,
|
||||
LOG_CB_TYPE_LE_AUDIO,
|
||||
LOG_CB_TYPE_HOST,
|
||||
LOG_CB_TYPE_HCI,
|
||||
};
|
||||
|
||||
enum {
|
||||
@@ -123,6 +143,7 @@ enum {
|
||||
LL_LOG_FLAG_ISR,
|
||||
LL_LOG_FLAG_HCI,
|
||||
LL_LOG_FLAG_RAW,
|
||||
LL_LOG_FLAG_HCI_UPSTREAM,
|
||||
};
|
||||
|
||||
enum {
|
||||
@@ -180,10 +201,9 @@ static void spi_out_log_cb_write_loss(spi_out_log_cb_t *log_cb);
|
||||
static void spi_out_log_cb_dump(spi_out_log_cb_t *log_cb);
|
||||
static void spi_out_log_flush(void);
|
||||
|
||||
static inline spi_out_log_cb_t *spi_out_get_log_cb(uint8_t source);
|
||||
static inline uint8_t *spi_out_get_str_buf(uint8_t source);
|
||||
static void spi_out_log_write(uint8_t source, const uint8_t *addr, uint16_t len, bool with_ts);
|
||||
static bool spi_out_log_printf(uint8_t source, const char *format, va_list args, int offset);
|
||||
static void spi_out_write_hex(spi_out_log_cb_t *log_cb, uint8_t source,
|
||||
const uint8_t *addr, uint16_t len, bool with_ts);
|
||||
static int spi_out_write_str(uint8_t *str_buf, const char *format, va_list args, int offset);
|
||||
|
||||
#if SPI_OUT_LL_ENABLED
|
||||
static int spi_out_ll_log_init(void);
|
||||
@@ -314,6 +334,14 @@ DECLARE_LOG_MODULE(ul, LOG_CB_TYPE_UL, SPI_OUT_UL_TASK_BUF_SIZE, 1, 1)
|
||||
DECLARE_LOG_MODULE(le_audio, LOG_CB_TYPE_LE_AUDIO, SPI_OUT_LE_AUDIO_BUF_SIZE, 0, 0)
|
||||
#endif // SPI_OUT_LE_AUDIO_ENABLED
|
||||
|
||||
#if SPI_OUT_HOST_ENABLED
|
||||
DECLARE_LOG_MODULE(host, LOG_CB_TYPE_HOST, SPI_OUT_HOST_BUF_SIZE, 0, 1)
|
||||
#endif // SPI_OUT_HOST_ENABLED
|
||||
|
||||
#if SPI_OUT_HCI_ENABLED
|
||||
DECLARE_LOG_MODULE(hci, LOG_CB_TYPE_HCI, SPI_OUT_HCI_BUF_SIZE, 0, 0)
|
||||
#endif // SPI_OUT_HCI_ENABLED
|
||||
|
||||
// Private functions
|
||||
static int spi_out_init_trans(spi_out_trans_cb_t **trans_cb, uint16_t buf_size)
|
||||
{
|
||||
@@ -581,6 +609,14 @@ static void spi_out_log_flush(void)
|
||||
#if SPI_OUT_LE_AUDIO_ENABLED
|
||||
LOG_MODULE_FLUSH(le_audio)();
|
||||
#endif // SPI_OUT_LE_AUDIO_ENABLED
|
||||
|
||||
#if SPI_OUT_HOST_ENABLED
|
||||
LOG_MODULE_FLUSH(host)();
|
||||
#endif // SPI_OUT_HOST_ENABLED
|
||||
|
||||
#if SPI_OUT_HCI_ENABLED
|
||||
LOG_MODULE_FLUSH(hci)();
|
||||
#endif // SPI_OUT_HCI_ENABLED
|
||||
}
|
||||
|
||||
#if SPI_OUT_FLUSH_TIMER_ENABLED
|
||||
@@ -592,31 +628,11 @@ static void esp_timer_cb_log_flush(void)
|
||||
}
|
||||
#endif // SPI_OUT_FLUSH_TIMER_ENABLED
|
||||
|
||||
static inline spi_out_log_cb_t *spi_out_get_log_cb(uint8_t source)
|
||||
{
|
||||
spi_out_log_cb_t *log_cb;
|
||||
switch (source) {
|
||||
default:
|
||||
log_cb = LOG_MODULE_CB(ul);
|
||||
}
|
||||
return log_cb;
|
||||
}
|
||||
|
||||
static inline uint8_t *spi_out_get_str_buf(uint8_t source)
|
||||
{
|
||||
uint8_t *str_buf;
|
||||
switch (source) {
|
||||
default:
|
||||
str_buf = LOG_MODULE_STR_BUF(ul);
|
||||
}
|
||||
return str_buf;
|
||||
}
|
||||
|
||||
static void spi_out_log_write(uint8_t source, const uint8_t *addr, uint16_t len, bool with_ts)
|
||||
static void spi_out_write_hex(spi_out_log_cb_t *log_cb, uint8_t source,
|
||||
const uint8_t *addr, uint16_t len, bool with_ts)
|
||||
{
|
||||
uint16_t total_len = with_ts? (len + sizeof(uint32_t)): len;
|
||||
bool need_append;
|
||||
spi_out_log_cb_t *log_cb = spi_out_get_log_cb(source);
|
||||
if (spi_out_log_cb_check_trans(log_cb, total_len, &need_append)) {
|
||||
if (with_ts) {
|
||||
uint32_t os_ts = pdTICKS_TO_MS(xTaskGetTickCount());
|
||||
@@ -632,24 +648,19 @@ static void spi_out_log_write(uint8_t source, const uint8_t *addr, uint16_t len,
|
||||
spi_out_log_cb_write_loss(log_cb);
|
||||
}
|
||||
|
||||
static bool spi_out_log_printf(uint8_t source, const char *format, va_list args, int offset)
|
||||
static int spi_out_write_str(uint8_t *str_buf, const char *format, va_list args, int offset)
|
||||
{
|
||||
uint8_t *str_buf = spi_out_get_str_buf(source);
|
||||
int len = vsnprintf((char *)(str_buf + offset),
|
||||
SPI_OUT_LOG_STR_BUF_SIZE - offset, format, args);
|
||||
int len = vsnprintf((char *)(str_buf + offset), SPI_OUT_LOG_STR_BUF_SIZE - offset, format, args);
|
||||
if (len < 0) {
|
||||
return false;
|
||||
return 0;
|
||||
}
|
||||
len += offset;
|
||||
|
||||
// Truncate string if overflowed
|
||||
if (len >= SPI_OUT_LOG_STR_BUF_SIZE) {
|
||||
len = SPI_OUT_LOG_STR_BUF_SIZE - 1;
|
||||
str_buf[len] = '\0';
|
||||
}
|
||||
|
||||
spi_out_log_write(source, str_buf, len, true);
|
||||
return true;
|
||||
return len;
|
||||
}
|
||||
|
||||
#if SPI_OUT_LL_ENABLED
|
||||
@@ -919,6 +930,18 @@ int ble_log_spi_out_init(void)
|
||||
}
|
||||
#endif // SPI_OUT_LE_AUDIO_ENABLED
|
||||
|
||||
#if SPI_OUT_HOST_ENABLED
|
||||
if (LOG_MODULE_INIT(host)() != 0) {
|
||||
goto host_init_failed;
|
||||
}
|
||||
#endif // SPI_OUT_HOST_ENABLED
|
||||
|
||||
#if SPI_OUT_HCI_ENABLED
|
||||
if (LOG_MODULE_INIT(hci)() != 0) {
|
||||
goto hci_init_failed;
|
||||
}
|
||||
#endif // SPI_OUT_HCI_ENABLED
|
||||
|
||||
#if SPI_OUT_FLUSH_TIMER_ENABLED
|
||||
esp_timer_create_args_t timer_args = {
|
||||
.callback = (esp_timer_cb_t)esp_timer_cb_log_flush,
|
||||
@@ -943,6 +966,14 @@ int ble_log_spi_out_init(void)
|
||||
#if SPI_OUT_FLUSH_TIMER_ENABLED
|
||||
timer_init_failed:
|
||||
#endif // SPI_OUT_FLUSH_TIMER_ENABLED
|
||||
#if SPI_OUT_HCI_ENABLED
|
||||
LOG_MODULE_DEINIT(hci)();
|
||||
hci_init_failed:
|
||||
#endif // SPI_OUT_HCI_ENABLED
|
||||
#if SPI_OUT_HOST_ENABLED
|
||||
LOG_MODULE_DEINIT(host)();
|
||||
host_init_failed:
|
||||
#endif // SPI_OUT_HOST_ENABLED
|
||||
#if SPI_OUT_LE_AUDIO_ENABLED
|
||||
LOG_MODULE_DEINIT(le_audio)();
|
||||
le_audio_init_failed:
|
||||
@@ -995,6 +1026,14 @@ void ble_log_spi_out_deinit(void)
|
||||
spi_out_ts_sync_deinit();
|
||||
#endif // SPI_OUT_TS_SYNC_ENABLED
|
||||
|
||||
#if SPI_OUT_HCI_ENABLED
|
||||
LOG_MODULE_DEINIT(hci)();
|
||||
#endif // SPI_OUT_HCI_ENABLED
|
||||
|
||||
#if SPI_OUT_HOST_ENABLED
|
||||
LOG_MODULE_DEINIT(host)();
|
||||
#endif // SPI_OUT_HOST_ENABLED
|
||||
|
||||
#if SPI_OUT_LE_AUDIO_ENABLED
|
||||
LOG_MODULE_DEINIT(le_audio)();
|
||||
#endif // SPI_OUT_LE_AUDIO_ENABLED
|
||||
@@ -1056,6 +1095,9 @@ IRAM_ATTR void ble_log_spi_out_ll_write(uint32_t len, const uint8_t *addr, uint3
|
||||
} else if (flag & BIT(LL_LOG_FLAG_HCI)) {
|
||||
log_cb = ll_hci_log_cb;
|
||||
source = BLE_LOG_SPI_OUT_SOURCE_LL_HCI;
|
||||
} else if (flag & BIT(LL_LOG_FLAG_HCI_UPSTREAM)) {
|
||||
log_cb = ll_hci_log_cb;
|
||||
source = BLE_LOG_SPI_OUT_SOURCE_HCI_UPSTREAM;
|
||||
} else {
|
||||
log_cb = ll_task_log_cb;
|
||||
source = BLE_LOG_SPI_OUT_SOURCE_ESP;
|
||||
@@ -1116,77 +1158,7 @@ int ble_log_spi_out_write(uint8_t source, const uint8_t *addr, uint16_t len)
|
||||
}
|
||||
|
||||
xSemaphoreTake(LOG_MODULE_MUTEX(ul), portMAX_DELAY);
|
||||
spi_out_log_write(source, addr, len, false);
|
||||
xSemaphoreGive(LOG_MODULE_MUTEX(ul));
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ble_log_spi_out_printf(uint8_t source, const char *format, ...)
|
||||
{
|
||||
if (!LOG_MODULE_INIT_FLAG(ul)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!format) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Get arguments
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
|
||||
va_list args_copy;
|
||||
va_copy(args_copy, args);
|
||||
|
||||
xSemaphoreTake(LOG_MODULE_MUTEX(ul), portMAX_DELAY);
|
||||
bool ret = spi_out_log_printf(source, format, args_copy, 0);
|
||||
xSemaphoreGive(LOG_MODULE_MUTEX(ul));
|
||||
|
||||
va_end(args_copy);
|
||||
va_end(args);
|
||||
return ret? 0: -1;
|
||||
}
|
||||
|
||||
int ble_log_spi_out_printf_enh(uint8_t source, uint8_t level, const char *tag, const char *format, ...)
|
||||
{
|
||||
if (!LOG_MODULE_INIT_FLAG(ul)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!tag || !format) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
|
||||
va_list args_copy;
|
||||
va_copy(args_copy, args);
|
||||
|
||||
// Create log prefix in the format: "[level][tag] "
|
||||
bool ret = false;
|
||||
xSemaphoreTake(LOG_MODULE_MUTEX(ul), portMAX_DELAY);
|
||||
int prefix_len = snprintf((char *)LOG_MODULE_STR_BUF(ul), SPI_OUT_LOG_STR_BUF_SIZE,
|
||||
"[%d][%s]", level, tag? tag: "NULL");
|
||||
if ((prefix_len < 0) || (prefix_len >= SPI_OUT_LOG_STR_BUF_SIZE)) {
|
||||
goto exit;
|
||||
}
|
||||
ret = spi_out_log_printf(source, format, args_copy, prefix_len);
|
||||
exit:
|
||||
xSemaphoreGive(LOG_MODULE_MUTEX(ul));
|
||||
va_end(args_copy);
|
||||
va_end(args);
|
||||
return ret? 0: -1;
|
||||
}
|
||||
|
||||
int ble_log_spi_out_write_with_ts(uint8_t source, const uint8_t *addr, uint16_t len)
|
||||
{
|
||||
if (!LOG_MODULE_INIT_FLAG(ul)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
xSemaphoreTake(LOG_MODULE_MUTEX(ul), portMAX_DELAY);
|
||||
spi_out_log_write(source, addr, len, true);
|
||||
spi_out_write_hex(LOG_MODULE_CB(ul), source, addr, len, false);
|
||||
xSemaphoreGive(LOG_MODULE_MUTEX(ul));
|
||||
return 0;
|
||||
}
|
||||
@@ -1232,6 +1204,23 @@ void ble_log_spi_out_dump_all(void)
|
||||
}
|
||||
#endif // SPI_OUT_LE_AUDIO_ENABLED
|
||||
|
||||
|
||||
#if SPI_OUT_HOST_ENABLED
|
||||
if (LOG_MODULE_INIT_FLAG(host)) {
|
||||
esp_rom_printf("[HOST_LOG_DUMP_START:\n");
|
||||
spi_out_log_cb_dump(LOG_MODULE_CB(host));
|
||||
esp_rom_printf("\n:HOST_LOG_DUMP_END]\n\n");
|
||||
}
|
||||
#endif // SPI_OUT_HOST_ENABLED
|
||||
|
||||
#if SPI_OUT_HCI_ENABLED
|
||||
if (LOG_MODULE_INIT_FLAG(hci)) {
|
||||
esp_rom_printf("[HCI_LOG_DUMP_START:\n");
|
||||
spi_out_log_cb_dump(LOG_MODULE_CB(hci));
|
||||
esp_rom_printf("\n:HCI_LOG_DUMP_END]\n\n");
|
||||
}
|
||||
#endif // SPI_OUT_HCI_ENABLED
|
||||
|
||||
portEXIT_CRITICAL_SAFE(&spinlock);
|
||||
}
|
||||
|
||||
@@ -1278,4 +1267,53 @@ IRAM_ATTR void ble_log_spi_out_le_audio_write(const uint8_t *addr, uint16_t len)
|
||||
return;
|
||||
}
|
||||
#endif // CONFIG_BT_BLE_LOG_SPI_OUT_LE_AUDIO_ENABLED
|
||||
|
||||
#if SPI_OUT_HOST_ENABLED
|
||||
int ble_log_spi_out_host_write(uint8_t source, const char *prefix, const char *format, ...)
|
||||
{
|
||||
if (!LOG_MODULE_INIT_FLAG(host) || !prefix || !format) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Copy prefix to string buffer
|
||||
int prefix_len = strlen(prefix);
|
||||
if (prefix_len >= SPI_OUT_LOG_STR_BUF_SIZE) {
|
||||
return -1;
|
||||
}
|
||||
memcpy(LOG_MODULE_STR_BUF(host), prefix, prefix_len);
|
||||
|
||||
// Write string buffer
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
int total_len = spi_out_write_str(LOG_MODULE_STR_BUF(host), format, args, prefix_len);
|
||||
va_end(args);
|
||||
if (total_len == 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Write log control block buffer
|
||||
spi_out_write_hex(LOG_MODULE_CB(host), source,
|
||||
LOG_MODULE_STR_BUF(host), (uint16_t)total_len, true);
|
||||
return 0;
|
||||
}
|
||||
#endif // SPI_OUT_HOST_ENABLED
|
||||
|
||||
#if SPI_OUT_HCI_ENABLED
|
||||
int ble_log_spi_out_hci_write(uint8_t source, const uint8_t *addr, uint16_t len)
|
||||
{
|
||||
if (!LOG_MODULE_INIT_FLAG(hci)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (source == BLE_LOG_SPI_OUT_SOURCE_HCI_UPSTREAM) {
|
||||
#if SPI_OUT_LL_ENABLED
|
||||
ble_log_spi_out_ll_write(len, addr, 0, NULL, BIT(LL_LOG_FLAG_HCI_UPSTREAM));
|
||||
#endif // SPI_OUT_LL_ENABLED
|
||||
}
|
||||
if (source == BLE_LOG_SPI_OUT_SOURCE_HCI_DOWNSTREAM) {
|
||||
spi_out_write_hex(LOG_MODULE_CB(hci), source, addr, len, true);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif // SPI_OUT_HCI_ENABLED
|
||||
#endif // CONFIG_BT_BLE_LOG_SPI_OUT_ENABLED
|
||||
|
@@ -33,15 +33,15 @@ enum {
|
||||
BLE_LOG_SPI_OUT_SOURCE_LOSS,
|
||||
};
|
||||
|
||||
enum {
|
||||
BLE_LOG_SPI_OUT_LEVEL_NONE = 0,
|
||||
BLE_LOG_SPI_OUT_LEVEL_ERROR,
|
||||
BLE_LOG_SPI_OUT_LEVEL_WARN,
|
||||
BLE_LOG_SPI_OUT_LEVEL_INFO,
|
||||
BLE_LOG_SPI_OUT_LEVEL_DEBUG,
|
||||
BLE_LOG_SPI_OUT_LEVEL_VERBOSE,
|
||||
BLE_LOG_SPI_OUT_LEVEL_MAX,
|
||||
};
|
||||
#define BLE_LOG_SPI_OUT_LEVEL_NONE 0
|
||||
#define BLE_LOG_SPI_OUT_LEVEL_ERROR 1
|
||||
#define BLE_LOG_SPI_OUT_LEVEL_WARN 2
|
||||
#define BLE_LOG_SPI_OUT_LEVEL_INFO 3
|
||||
#define BLE_LOG_SPI_OUT_LEVEL_DEBUG 4
|
||||
#define BLE_LOG_SPI_OUT_LEVEL_VERBOSE 5
|
||||
#define BLE_LOG_SPI_OUT_STR(x) #x
|
||||
#define BLE_LOG_SPI_OUT_XSTR(x) BLE_LOG_SPI_OUT_STR(x)
|
||||
#define BLE_LOG_SPI_OUT_BUILD_PREFIX(LEVEL, TAG) "[" BLE_LOG_SPI_OUT_XSTR(LEVEL) "][" TAG "]"
|
||||
|
||||
// Public functions
|
||||
int ble_log_spi_out_init(void);
|
||||
@@ -53,12 +53,11 @@ void ble_log_spi_out_ll_write(uint32_t len, const uint8_t *addr, uint32_t len_ap
|
||||
void ble_log_spi_out_ll_log_ev_proc(void);
|
||||
void ble_log_spi_out_ts_sync_start(void);
|
||||
void ble_log_spi_out_ts_sync_stop(void);
|
||||
int ble_log_spi_out_printf(uint8_t source, const char *format, ...);
|
||||
int ble_log_spi_out_printf_enh(uint8_t source, uint8_t level, const char *tag, const char *format, ...);
|
||||
int ble_log_spi_out_write_with_ts(uint8_t source, const uint8_t *addr, uint16_t len);
|
||||
void ble_log_spi_out_dump_all(void);
|
||||
void ble_log_spi_out_enable(bool enable);
|
||||
void ble_log_spi_out_flush(void);
|
||||
void ble_log_spi_out_le_audio_write(const uint8_t *addr, uint16_t len);
|
||||
int ble_log_spi_out_host_write(uint8_t source, const char *prefix, const char *format, ...);
|
||||
int ble_log_spi_out_hci_write(uint8_t source, const uint8_t *addr, uint16_t len);
|
||||
|
||||
#endif // __BT_SPI_OUT_H__
|
||||
|
@@ -231,12 +231,14 @@ static inline void trc_dump_buffer(const char *prefix, uint8_t *data, uint16_t l
|
||||
}
|
||||
|
||||
#define BTM_TRACE_API(fmt, args...) { \
|
||||
ble_log_spi_out_printf_enh(BLE_LOG_SPI_OUT_SOURCE_BLUEDROID, BLE_LOG_SPI_OUT_LEVEL_INFO, "BT_BTM", fmt, ## args); \
|
||||
ble_log_spi_out_host_write(BLE_LOG_SPI_OUT_SOURCE_BLUEDROID, \
|
||||
BLE_LOG_SPI_OUT_BUILD_PREFIX(BLE_LOG_SPI_OUT_LEVEL_INFO, "BT_BTM"), fmt, ## args); \
|
||||
if (btm_cb.trace_level >= BT_TRACE_LEVEL_API && BT_LOG_LEVEL_CHECK(BTM, API)) BT_PRINT_I("BT_BTM", fmt, ## args); \
|
||||
}
|
||||
|
||||
#define BTM_TRACE_EVENT(fmt, args...) { \
|
||||
ble_log_spi_out_printf_enh(BLE_LOG_SPI_OUT_SOURCE_BLUEDROID, BLE_LOG_SPI_OUT_LEVEL_DEBUG, "BT_BTM", fmt, ## args); \
|
||||
ble_log_spi_out_host_write(BLE_LOG_SPI_OUT_SOURCE_BLUEDROID, \
|
||||
BLE_LOG_SPI_OUT_BUILD_PREFIX(BLE_LOG_SPI_OUT_LEVEL_DEBUG, "BT_BTM"), fmt, ## args); \
|
||||
if (btm_cb.trace_level >= BT_TRACE_LEVEL_EVENT && BT_LOG_LEVEL_CHECK(BTM, EVENT)) BT_PRINT_D("BT_BTM", fmt, ## args); \
|
||||
}
|
||||
|
||||
@@ -267,7 +269,8 @@ static inline void trc_dump_buffer(const char *prefix, uint8_t *data, uint16_t l
|
||||
}
|
||||
|
||||
#define L2CAP_TRACE_API(fmt, args...) { \
|
||||
ble_log_spi_out_printf_enh(BLE_LOG_SPI_OUT_SOURCE_BLUEDROID, BLE_LOG_SPI_OUT_LEVEL_INFO, "BT_L2CAP", fmt, ## args); \
|
||||
ble_log_spi_out_host_write(BLE_LOG_SPI_OUT_SOURCE_BLUEDROID, \
|
||||
BLE_LOG_SPI_OUT_BUILD_PREFIX(BLE_LOG_SPI_OUT_LEVEL_INFO, "BT_L2CAP"), fmt, ## args); \
|
||||
if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_API && BT_LOG_LEVEL_CHECK(L2CAP, API)) BT_PRINT_I("BT_L2CAP", fmt, ## args); \
|
||||
}
|
||||
|
||||
@@ -318,7 +321,8 @@ static inline void trc_dump_buffer(const char *prefix, uint8_t *data, uint16_t l
|
||||
}
|
||||
|
||||
#define GAP_TRACE_API(fmt, args...) { \
|
||||
ble_log_spi_out_printf_enh(BLE_LOG_SPI_OUT_SOURCE_BLUEDROID, BLE_LOG_SPI_OUT_LEVEL_INFO, "BT_GAP", fmt, ## args); \
|
||||
ble_log_spi_out_host_write(BLE_LOG_SPI_OUT_SOURCE_BLUEDROID, \
|
||||
BLE_LOG_SPI_OUT_BUILD_PREFIX(BLE_LOG_SPI_OUT_LEVEL_INFO, "BT_GAP"), fmt, ## args); \
|
||||
if (gap_cb.trace_level >= BT_TRACE_LEVEL_API && BT_LOG_LEVEL_CHECK(GAP, API)) BT_PRINT_I("BT_GAP", fmt, ## args); \
|
||||
}
|
||||
|
||||
@@ -420,7 +424,8 @@ static inline void trc_dump_buffer(const char *prefix, uint8_t *data, uint16_t l
|
||||
}
|
||||
|
||||
#define GATT_TRACE_API(fmt, args...) { \
|
||||
ble_log_spi_out_printf_enh(BLE_LOG_SPI_OUT_SOURCE_BLUEDROID, BLE_LOG_SPI_OUT_LEVEL_INFO, "BT_GATT", fmt, ## args); \
|
||||
ble_log_spi_out_host_write(BLE_LOG_SPI_OUT_SOURCE_BLUEDROID, \
|
||||
BLE_LOG_SPI_OUT_BUILD_PREFIX(BLE_LOG_SPI_OUT_LEVEL_INFO, "BT_GATT"), fmt, ## args); \
|
||||
if (gatt_cb.trace_level >= BT_TRACE_LEVEL_API && BT_LOG_LEVEL_CHECK(GATT, API)) BT_PRINT_I("BT_GATT", fmt, ## args); \
|
||||
}
|
||||
|
||||
@@ -455,7 +460,8 @@ static inline void trc_dump_buffer(const char *prefix, uint8_t *data, uint16_t l
|
||||
}
|
||||
|
||||
#define SMP_TRACE_API(fmt, args...) { \
|
||||
ble_log_spi_out_printf_enh(BLE_LOG_SPI_OUT_SOURCE_BLUEDROID, BLE_LOG_SPI_OUT_LEVEL_INFO, "BT_SMP", fmt, ## args); \
|
||||
ble_log_spi_out_host_write(BLE_LOG_SPI_OUT_SOURCE_BLUEDROID, \
|
||||
BLE_LOG_SPI_OUT_BUILD_PREFIX(BLE_LOG_SPI_OUT_LEVEL_INFO, "BT_SMP"), fmt, ## args); \
|
||||
if (smp_cb.trace_level >= BT_TRACE_LEVEL_API && BT_LOG_LEVEL_CHECK(SMP, API)) BT_PRINT_I("BT_SMP", fmt, ## args); \
|
||||
}
|
||||
|
||||
|
@@ -219,9 +219,9 @@ static uint16_t transmit_data(serial_data_type_t type,
|
||||
#if (BT_HCI_LOG_INCLUDED == TRUE)
|
||||
bt_hci_log_record_hci_data(data[0], &data[1], length - 1);
|
||||
#endif
|
||||
#if (CONFIG_BT_BLE_LOG_SPI_OUT_HCI_ENABLED && !SOC_ESP_NIMBLE_CONTROLLER)
|
||||
ble_log_spi_out_write_with_ts(BLE_LOG_SPI_OUT_SOURCE_NIMBLE, data, length);
|
||||
#endif // (CONFIG_BT_BLE_LOG_SPI_OUT_HCI_ENABLED && !SOC_ESP_NIMBLE_CONTROLLER)
|
||||
#if CONFIG_BT_BLE_LOG_SPI_OUT_HCI_ENABLED
|
||||
ble_log_spi_out_hci_write(BLE_LOG_SPI_OUT_SOURCE_HCI_DOWNSTREAM, data, length);
|
||||
#endif // CONFIG_BT_BLE_LOG_SPI_OUT_HCI_ENABLED
|
||||
// TX Data to target
|
||||
esp_vhci_host_send_packet(data, length);
|
||||
|
||||
@@ -570,7 +570,7 @@ void bt_record_hci_data(uint8_t *data, uint16_t len)
|
||||
static int host_recv_pkt_cb(uint8_t *data, uint16_t len)
|
||||
{
|
||||
#if (BT_BLE_LOG_SPI_OUT_HCI_ENABLED && !SOC_ESP_NIMBLE_CONTROLLER)
|
||||
ble_log_spi_out_write_with_ts(BLE_LOG_SPI_OUT_SOURCE_HCI_UPSTREAM, data, len);
|
||||
ble_log_spi_out_hci_write(BLE_LOG_SPI_OUT_SOURCE_HCI_UPSTREAM, data, len);
|
||||
#endif // (BT_BLE_LOG_SPI_OUT_HCI_ENABLED && !SOC_ESP_NIMBLE_CONTROLLER)
|
||||
//Target has packet to host, malloc new buffer for packet
|
||||
BT_HDR *pkt = NULL;
|
||||
|
@@ -73,7 +73,7 @@ void esp_vhci_host_send_packet_wrapper(uint8_t *data, uint16_t len)
|
||||
bt_hci_log_record_hci_data(data[0], &data[1], len - 1);
|
||||
#endif
|
||||
#if (CONFIG_BT_BLE_LOG_SPI_OUT_HCI_ENABLED && !SOC_ESP_NIMBLE_CONTROLLER)
|
||||
ble_log_spi_out_write_with_ts(BLE_LOG_SPI_OUT_SOURCE_HCI_DOWNSTREAM, data, len);
|
||||
ble_log_spi_out_hci_write(BLE_LOG_SPI_OUT_SOURCE_HCI_DOWNSTREAM, data, len);
|
||||
#endif // (CONFIG_BT_BLE_LOG_SPI_OUT_HCI_ENABLED && !SOC_ESP_NIMBLE_CONTROLLER)
|
||||
esp_vhci_host_send_packet(data, len);
|
||||
}
|
||||
@@ -227,7 +227,7 @@ static int dummy_host_rcv_pkt(uint8_t *data, uint16_t len)
|
||||
static int host_rcv_pkt(uint8_t *data, uint16_t len)
|
||||
{
|
||||
#if (CONFIG_BT_BLE_LOG_SPI_OUT_HCI_ENABLED && !SOC_ESP_NIMBLE_CONTROLLER)
|
||||
ble_log_spi_out_write_with_ts(BLE_LOG_SPI_OUT_SOURCE_HCI_UPSTREAM, data, len);
|
||||
ble_log_spi_out_hci_write(BLE_LOG_SPI_OUT_SOURCE_HCI_UPSTREAM, data, len);
|
||||
#endif // (CONFIG_BT_BLE_LOG_SPI_OUT_HCI_ENABLED && !SOC_ESP_NIMBLE_CONTROLLER)
|
||||
|
||||
bt_record_hci_data(data, len);
|
||||
|
Reference in New Issue
Block a user