/*
 * Copyright (c) 2012-2014 Wind River Systems, Inc.
 * Copyright (c) 2021 Intel Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <inttypes.h>
#include <zephyr/kernel.h>
#include <string.h>
#include <zephyr/sys/printk.h>
#include <zephyr/logging/log.h>

LOG_MODULE_REGISTER(hello_world, 4);

static const char *hexdump_msg = "HEXDUMP! HEXDUMP@ HEXDUMP#";

int main(void)
{
	int8_t i8 = 1;
	uint8_t u8 = 2;
	int16_t i16 = 16;
	uint16_t u16 = 17;
	int32_t i32 = 32;
	uint32_t u32 = 33;
	int64_t i64 = 64;
	uint64_t u64 = 65;
	char c = '!';
	char *s = "static str";
	char *s1 = "c str";
	char vs0[32];
	char vs1[32];
	void *p = s;

	printk("Hello World! %s\n", CONFIG_BOARD);

	LOG_ERR("error string");
	LOG_DBG("debug string");
	LOG_INF("info string");

	LOG_DBG("int8_t %" PRId8 ", uint8_t %" PRIu8, i8, u8);
	LOG_DBG("int16_t %" PRId16 ", uint16_t %" PRIu16, i16, u16);
	LOG_DBG("int32_t %" PRId32 ", uint32_t %" PRIu32, i32, u32);
	LOG_DBG("int64_t %" PRId64 ", uint64_t %" PRIu64, i64, u64);

	memset(vs0, 0, sizeof(vs0));
	snprintk(&vs0[0], sizeof(vs0), "%s", "dynamic str");

	memset(vs1, 0, sizeof(vs1));
	snprintk(&vs1[0], sizeof(vs1), "%s", "another dynamic str");

	LOG_DBG("char %c", c);
	LOG_DBG("s str %s %s", s, s1);
	LOG_DBG("d str %s", vs0);
	LOG_DBG("mixed str %s %s %s %s %s %s %s", vs0, "---", vs0, "---", vs1, "---", vs1);
	LOG_DBG("mixed c/s %c %s %s %s %c", c, s, vs0, s, c);

	LOG_DBG("pointer %p", p);

	LOG_HEXDUMP_DBG(hexdump_msg, strlen(hexdump_msg), "For HeXdUmP!");

#ifdef CONFIG_FPU
	float f = 66.67;
	double d = 68.69;

	LOG_DBG("float %f, double %f", (double)f, d);
#ifdef CONFIG_CBPRINTF_PACKAGE_LONGDOUBLE
	long double ld = 70.71;

	LOG_DBG("long double %Lf", ld);
#endif
#endif
	return 0;
}
