/* * Copyright (c) 2017, George Oikonomou - http://www.spd.gr * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * 3. Neither the name of the copyright holder nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ /*---------------------------------------------------------------------------*/ /** * \addtogroup main * @{ */ /*---------------------------------------------------------------------------*/ /** * \file * * Implementation of \os's main routine */ /*---------------------------------------------------------------------------*/ #include "contiki.h" #include "contiki-net.h" #include "sys/platform.h" #include "sys/energest.h" #include "sys/stack-check.h" #include "dev/watchdog.h" #include "services/orchestra/orchestra.h" #include "services/shell/serial-shell.h" #include #include /*---------------------------------------------------------------------------*/ /* Log configuration */ #include "sys/log.h" #define LOG_MODULE "Main" #define LOG_LEVEL LOG_LEVEL_MAIN /*---------------------------------------------------------------------------*/ int #if PLATFORM_MAIN_ACCEPTS_ARGS main(int argc, char **argv) { platform_process_args(argc, argv); #else main(void) { #endif platform_init_stage_one(); clock_init(); rtimer_init(); process_init(); process_start(&etimer_process, NULL); ctimer_init(); watchdog_init(); energest_init(); #if STACK_CHECK_ENABLED stack_check_init(); #endif platform_init_stage_two(); LOG_INFO("Starting " CONTIKI_VERSION_STRING "\n"); LOG_INFO(" Net: %s\n", NETSTACK_NETWORK.name); LOG_INFO(" MAC: %s\n", NETSTACK_MAC.name); netstack_init(); LOG_INFO("Link-layer address "); LOG_INFO_LLADDR(&linkaddr_node_addr); LOG_INFO_("\n"); platform_init_stage_three(); #if NETSTACK_CONF_WITH_IPV6 { uip_ds6_addr_t *lladdr; memcpy(&uip_lladdr.addr, &linkaddr_node_addr, sizeof(uip_lladdr.addr)); process_start(&tcpip_process, NULL); lladdr = uip_ds6_get_link_local(-1); LOG_INFO("Tentative link-local IPv6 address "); LOG_INFO_6ADDR(lladdr != NULL ? &lladdr->ipaddr : NULL); LOG_INFO_("\n"); } #endif /* NETSTACK_CONF_WITH_IPV6 */ #if BUILD_WITH_ORCHESTRA orchestra_init(); LOG_DBG("With Orchestra\n"); #endif /* BUILD_WITH_ORCHESTRA */ #if BUILD_WITH_SHELL serial_shell_init(); LOG_DBG("With Shell\n"); #endif /* BUILD_WITH_SHELL */ autostart_start(autostart_processes); watchdog_start(); #if PLATFORM_PROVIDES_MAIN_LOOP platform_main_loop(); #else while(1) { uint8_t r; do { r = process_run(); watchdog_periodic(); } while(r > 0); platform_idle(); } #endif return 0; } /*---------------------------------------------------------------------------*/ /** * @} */