blob: cdb381c8fced80a985dda7e89a11c289e8718544 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
#include <getopt.h>
#include "os/mynewt.h"
#include "hal/hal_system.h"
#include "mcu/mcu_sim.h"
#include "hal_native_priv.h"
void
hal_system_reset(void)
{
#if MYNEWT_VAL(SELFTEST)
/* Don't hang in the middle of a unit test. */
assert(0);
#endif
while(1);
}
/*
* When running projects within simulator, it's useful to be able to
* pass operating info as parameters to simulator program.
* This routine is meant to parse those.
*/
static void
usage(char *progname, int rc)
{
const char msg1[] = "Usage: ";
const char msg2[] =
"\n [-f flash_file][-u uart_log_file][--uart0 <file>][--uart1 <file>]\n"
" -f flash_file tells where binary flash file is located. It gets\n"
" created if it doesn't already exist.\n"
" -i hw_id sets system hardware id.\n"
" -u uart_log_file puts all UART data exchanges into a logfile.\n"
" -uart0 uart0_file connects UART0 to character device uart0_file.\n"
" -uart1 uart1_file connects UART1 to character device uart1_file.\n";
write(2, msg1, strlen(msg1));
write(2, progname, strlen(progname));
write(2, msg2, strlen(msg2));
exit(rc);
}
void
mcu_sim_parse_args(int argc, char **argv)
{
int ch;
char *progname;
struct option options[] = {
{ "flash", required_argument, 0, 'f' },
{ "uart_log", required_argument, 0, 'u' },
{ "help", no_argument, 0, 'h' },
{ "uart0", required_argument, 0, 0 },
{ "uart1", required_argument, 0, 0 },
{ "hwid", required_argument, 0, 'i' },
{ NULL }
};
int opt_idx;
extern int main(int argc, char **arg);
#if MYNEWT_VAL(OS_SCHEDULING)
if (g_os_started) {
return;
}
#endif
progname = argv[0];
while ((ch = getopt_long(argc, argv, "hf:u:i:", options, &opt_idx)) !=
-1) {
switch (ch) {
case 'f':
native_flash_file = optarg;
break;
case 'u':
native_uart_log_file = optarg;
break;
case 'i':
hal_bsp_set_hw_id((uint8_t *)optarg, strlen(optarg));
break;
case 'h':
usage(progname, 0);
break;
case 0:
switch (opt_idx) {
case 0:
native_flash_file = optarg;
break;
case 1:
native_uart_log_file = optarg;
break;
case 2:
usage(progname, 0);
break;
case 3:
native_uart_dev_strs[0] = optarg;
break;
case 4:
native_uart_dev_strs[1] = optarg;
break;
case 5:
hal_bsp_set_hw_id((uint8_t *)optarg, strlen(optarg));
break;
default:
usage(progname, -1);
break;
}
break;
default:
usage(progname, -1);
break;
}
}
#if MYNEWT_VAL(OS_SCHEDULING)
os_init(main);
os_start();
#endif
}
int hal_debugger_connected(void)
{
return 0;
}