Boot Linux faster!

Check our new training course

Boot Linux faster!

Check our new training course
and Creative Commons CC-BY-SA
lecture and lab materials

Bootlin logo

Elixir Cross Referencer

/*
 * Copyright (c) 2018 Oticon A/S
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include "soc.h"
#include "kernel.h"
#include "posix_board_if.h"

/**
 * @brief Test NATIVE_TASK hook for native builds
 *
 * Verify that the NATIVE_TASK hooks are registered and called.
 * Note that the ztest framework cannot be used as we are testing
 * functionality which executes before and after all Zephyr threads have been
 * terminated.
 */
static void test_check(int hook)
{
	static int call_nbr;
	static int failed;
	static int expected_order[8] = {1, 2, 3, 8, 6, 5, 4, 7};

	if (failed) {
		return;
	}

	posix_print_trace("test_hook%i called\n", hook);

	if (expected_order[call_nbr] != hook) {
		failed = 1;
		posix_print_trace("PROJECT EXECUTION FAILED\n");
	}

	if (call_nbr++ == 7) {
		posix_print_trace("PROJECT EXECUTION SUCCESSFUL\n");
	}
}

#define TEST_HOOK(n)			\
	static void test_hook##n(void)	\
	{				\
		test_check(n);	\
	}

TEST_HOOK(1);
TEST_HOOK(2);
TEST_HOOK(3);
TEST_HOOK(4);
TEST_HOOK(5);
TEST_HOOK(6);
TEST_HOOK(7);
TEST_HOOK(8);

NATIVE_TASK(test_hook1, PRE_BOOT_1, 1);
NATIVE_TASK(test_hook2, PRE_BOOT_2, 200);
NATIVE_TASK(test_hook3, PRE_BOOT_3, 20);
NATIVE_TASK(test_hook8, FIRST_SLEEP, 5);
NATIVE_TASK(test_hook4, ON_EXIT, 200);
NATIVE_TASK(test_hook5, ON_EXIT, 20);
NATIVE_TASK(test_hook6, ON_EXIT, 1);
NATIVE_TASK(test_hook7, ON_EXIT, 310);

void main(void)
{
	k_sleep(K_MSEC(100));
	posix_exit(0);
}