/*
 * 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);
