2020-02-06 11:59:54 +08:00
|
|
|
/*
|
|
|
|
* Copyright (c) 2018 Oticon A/S
|
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <soc.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <kernel.h>
|
|
|
|
#include <cmdline.h>
|
|
|
|
#include <sys/__assert.h>
|
|
|
|
#include <tracing_backend.h>
|
|
|
|
|
|
|
|
static void *out_stream;
|
|
|
|
static const char *file_name;
|
|
|
|
|
|
|
|
static void tracing_backend_posix_init(void)
|
|
|
|
{
|
|
|
|
if (file_name == NULL) {
|
|
|
|
file_name = "channel0_0";
|
|
|
|
}
|
|
|
|
|
|
|
|
out_stream = (void *)fopen(file_name, "wb");
|
|
|
|
|
|
|
|
__ASSERT(out_stream != NULL, "posix backend init failed");
|
|
|
|
}
|
|
|
|
|
|
|
|
static void tracing_backend_posix_output(
|
|
|
|
const struct tracing_backend *backend,
|
2020-05-28 00:26:57 +08:00
|
|
|
uint8_t *data, uint32_t length)
|
2020-02-06 11:59:54 +08:00
|
|
|
{
|
|
|
|
fwrite(data, length, 1, (FILE *)out_stream);
|
|
|
|
|
|
|
|
if (!k_is_in_isr()) {
|
|
|
|
fflush((FILE *)out_stream);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
const struct tracing_backend_api tracing_backend_posix_api = {
|
|
|
|
.init = tracing_backend_posix_init,
|
|
|
|
.output = tracing_backend_posix_output
|
|
|
|
};
|
|
|
|
|
|
|
|
TRACING_BACKEND_DEFINE(tracing_backend_posix, tracing_backend_posix_api);
|
|
|
|
|
|
|
|
void tracing_backend_posix_option(void)
|
|
|
|
{
|
|
|
|
static struct args_struct_t tracing_backend_option[] = {
|
|
|
|
{
|
|
|
|
.manual = false,
|
|
|
|
.is_mandatory = false,
|
|
|
|
.is_switch = false,
|
|
|
|
.option = "trace-file",
|
|
|
|
.name = "file_name",
|
|
|
|
.type = 's',
|
|
|
|
.dest = (void *)&file_name,
|
|
|
|
.call_when_found = NULL,
|
|
|
|
.descript = "File name for tracing output.",
|
|
|
|
},
|
|
|
|
ARG_TABLE_ENDMARKER
|
|
|
|
};
|
|
|
|
|
|
|
|
native_add_command_line_opts(tracing_backend_option);
|
|
|
|
}
|
|
|
|
|
|
|
|
NATIVE_TASK(tracing_backend_posix_option, PRE_BOOT_1, 1);
|