/*
 * Copyright (c) 2015 Intel Corporation.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr.h>
#include <toolchain.h>


#include <misc/printk.h>
#include <stdio.h>

#ifdef CONFIG_OBJECTS_WHILELOOP
volatile int i;
#endif

#define IRQ_LINE          10
#define IRQ_PRIORITY      3
#define TEST_SOFT_INT     64
#define TEST_IRQ_OFFLOAD_VECTOR 32

#define THREAD_STACK_SIZE  CONFIG_THREAD_STACK_SIZE

typedef void * (*pfunc) (void *);

/* variables */

#define MESSAGE "Running maximal kernel configuration\n"

/* stack used by thread */
#ifdef CONFIG_OBJECTS_THREAD
static char __stack pStack[THREAD_STACK_SIZE];
static struct k_thread objects_thread;
#endif

/* pointer array ensures specified functions are linked into the image */
volatile pfunc func_array[] = {
	/* timer functions */
#ifdef CONFIG_OBJECTS_TIMER
	(pfunc)k_timer_init,
	(pfunc)k_timer_stop,
	(pfunc)k_timer_status_get,
	(pfunc)k_timer_status_sync,
	(pfunc)k_timer_remaining_get,
	(pfunc)k_uptime_get,
	(pfunc)k_uptime_get_32,
	(pfunc)k_uptime_delta,
	(pfunc)k_uptime_delta_32,
#endif

	/* semaphore functions */
#ifdef CONFIG_OBJECTS_SEMAPHORE
	(pfunc)k_sem_init,
	(pfunc)k_sem_take,
	(pfunc)k_sem_give,
	(pfunc)k_sem_reset,
	(pfunc)k_sem_count_get,
#endif

	/* LIFO functions */
#ifdef CONFIG_OBJECTS_LIFO
	(pfunc)k_queue_prepend,
	(pfunc)k_queue_init,
	(pfunc)k_queue_get,
#endif
	/* stack functions */
#ifdef CONFIG_OBJECTS_STACK
	(pfunc)k_stack_init,
	(pfunc)k_stack_push,
	(pfunc)k_stack_pop,
#endif
	/* FIFO functions */
#ifdef CONFIG_OBJECTS_FIFO
	(pfunc)k_queue_prepend,
	(pfunc)k_queue_init,
	(pfunc)k_queue_get,
#endif

};

void dummy_isr(void *unused)
{
	ARG_UNUSED(unused);
}

#ifdef CONFIG_OBJECTS_THREAD

/**
 *
 * @brief Trivial thread
 *
 * @param message   Message to be printed.
 * @param arg1	Unused.
 *
 * @return N/A
 */
static void thread_entry(void *arg1, void *arg2, void *arg3)
{
	ARG_UNUSED(arg2);
	ARG_UNUSED(arg3);
	printk("%s\n", (char *)arg1);
}
#endif



void main(void)
{
#ifdef CONFIG_OBJECTS_PRINTK
	printk("Using printk\n");
#endif

#if CONFIG_STATIC_ISR
	IRQ_CONNECT(IRQ_LINE, IRQ_PRIORITY, dummy_isr, NULL, 0);
#endif

#ifdef CONFIG_OBJECTS_THREAD
	/* start a trivial fiber */
	k_thread_create(&objects_thread, pStack, THREAD_STACK_SIZE,
			thread_entry, MESSAGE, (void *)func_array,
			NULL, 10, 0, K_NO_WAIT);
#endif

#ifdef CONFIG_OBJECTS_WHILELOOP
	i = 0;
	while (1) {
		i++;
	}
#endif
}
