First, this commit adds user interface in tracing_format.h which can trace both string format and data format packet. Second, it adds method both for asynchronous and synchronous way. For asynchronous method, tracing packet will be buffered in tracing buffer first, tracing thread will output the stream data with the help of tracing backend when tracing thread get scheduled. Third, it adds UART and USB tracing backend for asynchronous tracing method, and adds POSIX tracing backend for synchronous tracing way. Also it can receive command from host to dynamically enable and disable tracing to have host capture tracing data conveniently. Signed-off-by: Wentong Wu <wentong.wu@intel.com>
75 lines
1.5 KiB
C
75 lines
1.5 KiB
C
/*
|
|
* Copyright (c) 2019 Intel corporation
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#include <tracing_core.h>
|
|
#include <tracing_buffer.h>
|
|
#include <tracing_format_common.h>
|
|
|
|
void tracing_format_string(const char *str, ...)
|
|
{
|
|
u8_t *data;
|
|
va_list args;
|
|
bool put_success;
|
|
u32_t length, tracing_buffer_size;
|
|
|
|
if (!is_tracing_enabled()) {
|
|
return;
|
|
}
|
|
|
|
tracing_buffer_size = tracing_buffer_capacity_get();
|
|
|
|
va_start(args, str);
|
|
|
|
TRACING_LOCK();
|
|
put_success = tracing_format_string_put(str, args);
|
|
|
|
if (put_success) {
|
|
length = tracing_buffer_get_claim(&data, tracing_buffer_size);
|
|
tracing_buffer_handle(data, length);
|
|
tracing_buffer_get_finish(length);
|
|
} else {
|
|
tracing_packet_drop_handle();
|
|
}
|
|
TRACING_UNLOCK();
|
|
|
|
va_end(args);
|
|
}
|
|
|
|
void tracing_format_raw_data(u8_t *data, u32_t length)
|
|
{
|
|
if (!is_tracing_enabled()) {
|
|
return;
|
|
}
|
|
|
|
TRACING_LOCK();
|
|
tracing_buffer_handle(data, length);
|
|
TRACING_UNLOCK();
|
|
}
|
|
|
|
void tracing_format_data(tracing_data_t *tracing_data_array, u32_t count)
|
|
{
|
|
u8_t *data;
|
|
bool put_success;
|
|
u32_t length, tracing_buffer_size;
|
|
|
|
if (!is_tracing_enabled()) {
|
|
return;
|
|
}
|
|
|
|
tracing_buffer_size = tracing_buffer_capacity_get();
|
|
|
|
TRACING_LOCK();
|
|
put_success = tracing_format_data_put(tracing_data_array, count);
|
|
|
|
if (put_success) {
|
|
length = tracing_buffer_get_claim(&data, tracing_buffer_size);
|
|
tracing_buffer_handle(data, length);
|
|
tracing_buffer_get_finish(length);
|
|
} else {
|
|
tracing_packet_drop_handle();
|
|
}
|
|
TRACING_UNLOCK();
|
|
}
|