mirror of
https://github.com/zephyrproject-rtos/zephyr
synced 2025-09-11 07:52:39 +00:00
With this change, drivers or components can register on runtime their own command line arguments. What this change does is to use the dynamic command line arguments API from BabbleSim's libUtil and provides a function for the drivers to add their own. Note that this change requires v1.3 of the HW models (which remove a dependency on the board command line arguments structure) Signed-off-by: Alberto Escolar Piedras <alpi@oticon.com>
116 lines
2.6 KiB
C
116 lines
2.6 KiB
C
/*
|
|
* Copyright (c) 2017-2018 Oticon A/S
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
#include "soc.h"
|
|
#include "posix_soc.h"
|
|
#include "NRF_HW_model_top.h"
|
|
#include "NRF_HWLowL.h"
|
|
#include "bs_tracing.h"
|
|
#include "bs_symbols.h"
|
|
#include "bs_types.h"
|
|
#include "bs_utils.h"
|
|
#include "bs_rand_main.h"
|
|
#include "bs_pc_backchannel.h"
|
|
#include "bs_dump_files.h"
|
|
#include "time_machine.h"
|
|
#include "argparse.h"
|
|
#include "bstests.h"
|
|
#include <stdlib.h>
|
|
|
|
uint8_t inner_main_clean_up(int exit_code)
|
|
{
|
|
static int max_exit_code;
|
|
|
|
max_exit_code = BS_MAX(exit_code, max_exit_code);
|
|
|
|
/*
|
|
* posix_soc_clean_up may not return if this is called from a SW thread,
|
|
* but instead it would get posix_exit() recalled again
|
|
* ASAP from the HW thread
|
|
*/
|
|
posix_soc_clean_up();
|
|
|
|
hwll_terminate_simulation();
|
|
nrf_hw_models_free_all();
|
|
bs_dump_files_close_all();
|
|
|
|
bs_clean_back_channels();
|
|
|
|
u8_t bst_result = bst_delete();
|
|
|
|
if (bst_result != 0) {
|
|
bs_trace_raw_time(2, "main: The TESTCASE FAILED with return "
|
|
"code %u\n", bst_result);
|
|
}
|
|
return BS_MAX(bst_result, max_exit_code);
|
|
}
|
|
|
|
uint8_t main_clean_up_trace_wrap(void)
|
|
{
|
|
return inner_main_clean_up(0);
|
|
}
|
|
|
|
void posix_exit(int exit_code)
|
|
{
|
|
exit(inner_main_clean_up(exit_code));
|
|
}
|
|
|
|
uint global_device_nbr;
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
/*
|
|
* Let's ensure that even if we are redirecting to a file, we get stdout
|
|
* and stderr line buffered (default for console)
|
|
* Note that glibc ignores size. But just in case we set a reasonable
|
|
* number in case somebody tries to compile against a different library
|
|
*/
|
|
setvbuf(stdout, NULL, _IOLBF, 512);
|
|
setvbuf(stderr, NULL, _IOLBF, 512);
|
|
|
|
bs_trace_register_cleanup_function(main_clean_up_trace_wrap);
|
|
bs_trace_register_time_function(tm_get_abs_time);
|
|
|
|
nrf_hw_pre_init();
|
|
run_native_tasks(_NATIVE_PRE_BOOT_1_LEVEL);
|
|
|
|
struct NRF_bsim_args_t *args;
|
|
|
|
args = nrfbsim_argsparse(argc, argv);
|
|
global_device_nbr = args->global_device_nbr;
|
|
|
|
bs_read_function_names_from_Tsymbols(argv[0]);
|
|
|
|
run_native_tasks(_NATIVE_PRE_BOOT_2_LEVEL);
|
|
|
|
bs_trace_raw(9, "%s: Connecting to phy...\n", __func__);
|
|
hwll_connect_to_phy(args->device_nbr, args->s_id, args->p_id);
|
|
bs_trace_raw(9, "%s: Connected\n", __func__);
|
|
|
|
bs_random_init(args->rseed);
|
|
bs_dump_files_open(args->s_id, args->global_device_nbr);
|
|
|
|
/* We pass to a possible testcase its command line arguments */
|
|
bst_pass_args(args->test_case_argc, args->test_case_argv);
|
|
|
|
nrf_hw_initialize(&args->nrf_hw);
|
|
|
|
run_native_tasks(_NATIVE_PRE_BOOT_3_LEVEL);
|
|
|
|
bst_pre_init();
|
|
|
|
posix_boot_cpu();
|
|
|
|
run_native_tasks(_NATIVE_FIRST_SLEEP_LEVEL);
|
|
|
|
bst_post_init();
|
|
|
|
tm_run_forever();
|
|
|
|
/* This code is unreachable */
|
|
bs_trace_exit_line("\n");
|
|
return 0;
|
|
}
|