44#include "contiki-net.h"
50#include "dev/watchdog.h"
55#include "services/rpl-border-router/rpl-border-router.h"
66#define LOG_MODULE "Main"
67#define LOG_LEVEL LOG_LEVEL_MAIN
69#if PLATFORM_MAIN_ACCEPTS_ARGS
77static const char *prog;
78static const char *help_usage;
79static const char *help_suffix;
82contiki_set_usage(
const char *msg)
88contiki_set_extra_help(
const char *msg)
94contiki_add_option(
struct contiki_callback_option *option)
96 static bool initialized =
false;
107 printf(
"usage: %s [options]%s", prog, help_usage ? help_usage :
"\n");
108 printf(
"Options are:\n");
109 for(
struct contiki_callback_option *r =
list_head(contiki_options);
110 r != NULL; r = r->next) {
114 int short_len = r->opt_struct.flag == NULL && r->opt_struct.val ? 6 : 0;
116 printf(
" -%c, ", (
char)r->opt_struct.val);
118 int has_arg = r->opt_struct.has_arg;
119 const char *arg_desc = has_arg == no_argument ?
"" :
120 has_arg == optional_argument ?
" [value]" :
" value ";
121 printf(
" %c-%s%s%s\t%s", strlen(r->opt_struct.name) == 1 ?
' ' :
'-',
122 r->opt_struct.name, arg_desc,
124 short_len + 3 + strlen(r->opt_struct.name) + strlen(arg_desc) < 8
129 printf(
"%s", help_suffix);
134help_callback(
const char *optarg)
139CONTIKI_OPTION(CONTIKI_MAX_INIT_PRIO + 1, {
"help", no_argument, NULL,
'h' },
140 help_callback,
"display this help and exit\n");
143parse_argv(
int *argc,
char ***argv)
146 const int num_options =
list_length(contiki_options);
147 struct contiki_callback_option options[num_options];
148 struct option long_options[num_options + 1];
151 for(
struct contiki_callback_option *r =
list_head(contiki_options);
152 r != NULL; ++i, r = r->next) {
153 memcpy(&long_options[i], &r->opt_struct,
sizeof(
struct option));
154 memcpy(&options[i], r,
sizeof(
struct contiki_callback_option));
157 memset(&long_options[i], 0,
sizeof(
struct option));
161 int c = getopt_long_only(*argc, *argv,
"", long_options, &ix);
169 if(options[ix].callback) {
171 if((rv = options[ix].callback(optarg)) != 0) {
182main(
int argc,
char **argv)
185 if((rv = parse_argv(&argc, &argv)) != 0) {
207#if STACK_CHECK_ENABLED
222 LOG_INFO(
"Starting " CONTIKI_VERSION_STRING
"\n");
223 LOG_DBG(
"TARGET=%s", CONTIKI_TARGET_STRING);
224#ifdef CONTIKI_BOARD_STRING
225 LOG_DBG_(
", BOARD=%s", CONTIKI_BOARD_STRING);
228 LOG_INFO(
"- Routing: %s\n", NETSTACK_ROUTING.name);
229 LOG_INFO(
"- Net: %s\n", NETSTACK_NETWORK.name);
230 LOG_INFO(
"- MAC: %s\n", NETSTACK_MAC.name);
231 LOG_INFO(
"- 802.15.4 PANID: 0x%04x\n", IEEE802154_PANID);
232#if MAC_CONF_WITH_TSCH
233 LOG_INFO(
"- 802.15.4 TSCH default hopping sequence length: %u\n", (
unsigned)
sizeof(TSCH_DEFAULT_HOPPING_SEQUENCE));
238 LOG_INFO(
"Node ID: %u\n", node_id);
239 LOG_INFO(
"Link-layer address: ");
243#if NETSTACK_CONF_WITH_IPV6
249 lladdr = uip_ds6_get_link_local(-1);
250 LOG_INFO(
"Tentative link-local IPv6 address: ");
251 LOG_INFO_6ADDR(lladdr != NULL ? &lladdr->ipaddr : NULL);
258#if BUILD_WITH_RPL_BORDER_ROUTER
259 rpl_border_router_init();
260 LOG_DBG(
"With RPL Border Router\n");
263#if BUILD_WITH_ORCHESTRA
265 LOG_DBG(
"With Orchestra\n");
270 LOG_DBG(
"With Shell\n");
275 LOG_DBG(
"With CoAP\n");
280 LOG_DBG(
"With SNMP\n");
283#if BUILD_WITH_SIMPLE_ENERGEST
287#if BUILD_WITH_TSCH_CS
292 autostart_start(autostart_processes);
296#if PLATFORM_PROVIDES_MAIN_LOOP
300 process_num_events_t r;
void serial_shell_init(void)
Initializes Serial Shell module.
#define CC_NORETURN
Configure if the C compiler supports functions that are not meant to return e.g.
CoAP engine implementation.
Header file for the energy estimation mechanism.
void snmp_init()
Initializes the SNMP engine.
void clock_init(void)
Arch-specific implementation of clock_init for the cc2538.
void watchdog_start(void)
Starts the WDT in watchdog mode if enabled by user configuration, maximum interval.
void watchdog_periodic(void)
Writes the WDT clear sequence.
void watchdog_init(void)
Initialisation function for the WDT.
void platform_init_stage_three()
Final stage of platform driver initialisation.
void platform_init_stage_one(void)
Basic (Stage 1) platform driver initialisation.
void platform_idle()
The platform's idle/sleep function.
void platform_init_stage_two()
Stage 2 of platform driver initialisation.
void ctimer_init(void)
Initialize the callback timer library.
linkaddr_t linkaddr_node_addr
The link-layer address of the node.
static void list_init(list_t list)
Initialize a list.
#define LIST(name)
Declare a linked list.
int list_length(const_list_t list)
Get the length of a list.
void list_add(list_t list, void *item)
Add an item at the end of a list.
static void * list_head(const_list_t list)
Get a pointer to the first element of a list.
void platform_main_loop(void)
The platform's main loop, if provided.
#define CONTIKI_OPTION(prio,...)
Add a command line option when the compilation unit is present.
static void node_id_init(void)
Initialize the node ID.
process_num_events_t process_run(void)
Run the system once - call poll handlers and process one event.
void process_start(struct process *p, process_data_t data)
Start a process.
void process_init(void)
Initialize the process module.
#define rtimer_init()
Initialize the real-time scheduler.
void simple_energest_init(void)
Initialize the deployment module.
void stack_check_init(void)
Initialize the stack area with a known pattern.
uip_lladdr_t uip_lladdr
Host L2 address.
Linked list manipulation routines.
Header file for the logging system.
#define IEEE802154_DEFAULT_CHANNEL
The default channel for IEEE 802.15.4 networks.
Node-id (simple 16-bit identifiers) handling.
Header file for the Packet queue buffer management.
A shell back-end for the serial port.
A process that periodically prints out the time spent in radio tx, radio rx, total time and duty cycl...
SNMP Implementation of the process.
Stack checker library header file.
Unicast address structure.
void tsch_cs_adaptations_init(void)
Initializes the TSCH hopping sequence selection module.
Header file for TSCH adaptive channel selection.