/*
 * Copyright (c) 2021 IoT.bzh
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <ctype.h>
#include <kernel.h>
#include <string.h>
#include <tracing_core.h>
#include <tracing_buffer.h>
#include <tracing_backend.h>

uint8_t ram_tracing[CONFIG_RAM_TRACING_BUFFER_SIZE];
static uint32_t pos;
static bool buffer_full;

static void tracing_backend_ram_output(
		const struct tracing_backend *backend,
		uint8_t *data, uint32_t length)
{
	if (buffer_full) {
		return;
	}

	if ((pos + length) > CONFIG_RAM_TRACING_BUFFER_SIZE) {
		buffer_full = true;
		return;
	}

	memcpy(ram_tracing + pos, data, length);
	pos += length;
}

static void tracing_backend_ram_init(void)
{
	memset(ram_tracing, 0, CONFIG_RAM_TRACING_BUFFER_SIZE);
}

const struct tracing_backend_api tracing_backend_ram_api = {
	.init = tracing_backend_ram_init,
	.output  = tracing_backend_ram_output
};

TRACING_BACKEND_DEFINE(tracing_backend_ram, tracing_backend_ram_api);