From c436b99887f058d6df825cbbcda055174e658902 Mon Sep 17 00:00:00 2001 From: nifi Date: Tue, 7 Jul 2009 13:06:56 +0000 Subject: [PATCH] added configuration of MAC driver added missing initialization of serial-line added periodic DCO/CPU speed re-synch --- platform/esb/contiki-conf.h | 14 ++++-- platform/esb/contiki-esb-default-init-net.c | 32 ++++++++++--- platform/esb/contiki-esb-main.c | 50 +++++++++++++++++---- 3 files changed, 78 insertions(+), 18 deletions(-) diff --git a/platform/esb/contiki-conf.h b/platform/esb/contiki-conf.h index 99ab57de5..bc980b78c 100644 --- a/platform/esb/contiki-conf.h +++ b/platform/esb/contiki-conf.h @@ -1,6 +1,13 @@ #ifndef __CONTIKI_CONF_H__ #define __CONTIKI_CONF_H__ +/* DCO speed resynchronization for more robust UART, etc. */ +#define DCOSYNCH_CONF_ENABLED 1 +#define DCOSYNCH_CONF_PERIOD 30 + +/* Specifies the default MAC driver */ +#define MAC_CONF_DRIVER nullmac_driver + #define PACKETBUF_CONF_ATTRS_INLINE 1 #define QUEUEBUF_CONF_NUM 1 #define QUEUEBUF_CONF_REF_NUM 1 @@ -48,9 +55,6 @@ typedef unsigned short clock_time_t; void clock_wait(int ms10); -void clock_set_seconds(unsigned long s); -unsigned long clock_seconds(void); - #define LOG_CONF_ENABLED 0 /** @@ -93,4 +97,8 @@ typedef unsigned short uip_stats_t; #define LEDS_CONF_GREEN 0x02 #define LEDS_CONF_YELLOW 0x04 +#ifdef PROJECT_CONF_H +#include PROJECT_CONF_H +#endif /* PROJECT_CONF_H */ + #endif /* __CONTIKI_CONF_H__ */ diff --git a/platform/esb/contiki-esb-default-init-net.c b/platform/esb/contiki-esb-default-init-net.c index 1c407fe9b..cb12fb791 100644 --- a/platform/esb/contiki-esb-default-init-net.c +++ b/platform/esb/contiki-esb-default-init-net.c @@ -28,25 +28,45 @@ * * This file is part of the Contiki operating system. * - * @(#)$Id: contiki-esb-default-init-net.c,v 1.12 2009/03/17 20:19:11 adamdunkels Exp $ + * @(#)$Id: contiki-esb-default-init-net.c,v 1.13 2009/07/07 13:06:56 nifi Exp $ */ -#include "contiki-esb.h" - +#include "contiki-conf.h" +#include "dev/tr1001.h" +#include "dev/rs232.h" +#include "dev/serial-line.h" #include "net/rime.h" -#include "net/mac/nullmac.h" +#include "node-id.h" +#include + +#ifndef MAC_DRIVER +#ifdef MAC_CONF_DRIVER +#define MAC_DRIVER MAC_CONF_DRIVER +#else +#define MAC_DRIVER nullmac_driver +#endif /* MAC_CONF_DRIVER */ +#endif /* MAC_DRIVER */ + +extern const struct mac_driver MAC_DRIVER; void init_net(void) { rimeaddr_t rimeaddr; + int i; tr1001_init(); - rime_init(nullmac_init(&tr1001_driver)); + rime_init(MAC_DRIVER.init(&tr1001_driver)); rimeaddr.u8[0] = node_id & 0xff; rimeaddr.u8[1] = node_id >> 8; rimeaddr_set_node_addr(&rimeaddr); - rs232_set_input(serial_line_input_byte); + printf("Rime started with address "); + for(i = 0; i < sizeof(rimeaddr.u8) - 1; i++) { + printf("%u.", rimeaddr.u8[i]); + } + printf("%u (%s)\n", rimeaddr.u8[i], MAC_DRIVER.name); + rs232_set_input(serial_line_input_byte); + serial_line_init(); } diff --git a/platform/esb/contiki-esb-main.c b/platform/esb/contiki-esb-main.c index 34d24a276..c43db748a 100644 --- a/platform/esb/contiki-esb-main.c +++ b/platform/esb/contiki-esb-main.c @@ -28,7 +28,7 @@ * * This file is part of the Contiki operating system. * - * @(#)$Id: contiki-esb-main.c,v 1.15 2008/03/13 15:58:44 nifi Exp $ + * @(#)$Id: contiki-esb-main.c,v 1.16 2009/07/07 13:06:56 nifi Exp $ */ #include @@ -42,6 +42,23 @@ #include "sys/autostart.h" #include "contiki-esb.h" +#ifdef DCOSYNCH_CONF_PERIOD +#define DCOSYNCH_PERIOD DCOSYNCH_CONF_PERIOD +#else +#define DCOSYNCH_PERIOD 30 +#endif /* DCOSYNCH_CONF_PERIOD */ + +#ifdef DCOSYNCH_CONF_ENABLED +#define DCOSYNCH_ENABLED DCOSYNCH_CONF_ENABLED +#else +#define DCOSYNCH_ENABLED 0 +#endif /* DCOSYNCH_CONF_ENABLED */ + +#if DCOSYNCH_ENABLED +static struct timer dco_timer; +static char dco_enabled = 0; +#endif /* DCOSYNCH_ENABLED */ + SENSORS(&button_sensor, &sound_sensor, &vib_sensor, &pir_sensor, &radio_sensor, &battery_sensor, &ctsrts_sensor, &temperature_sensor); @@ -55,7 +72,8 @@ print_processes(struct process * const processes[]) printf(" '%s'", (*processes)->name); processes++; } - printf("\n"); + /* Needed to force link with putchar */ + putchar('\n'); } /*---------------------------------------------------------------------------*/ static void init_ports_toberemoved() { @@ -127,8 +145,6 @@ main(void) ENERGEST_ON(ENERGEST_TYPE_CPU); #endif /* ENERGEST_CONF_ON */ - init_net(); - printf(CONTIKI_VERSION_STRING " started. "); if(node_id > 0) { printf("Node id is set to %u.\n", node_id); @@ -136,6 +152,8 @@ main(void) printf("Node id is not set.\n"); } + init_net(); + beep_spinup(); leds_on(LEDS_RED); clock_delay(100); @@ -145,11 +163,15 @@ main(void) print_processes(autostart_processes); autostart_start(autostart_processes); +#if DCOSYNCH_ENABLED + timer_set(&dco_timer, DCOSYNCH_PERIOD * CLOCK_SECOND); +#endif /* DCOSYNCH_ENABLED */ + /* * This is the scheduler loop. */ watchdog_start(); - while (1) { + while(1) { int r; #if PROFILE_CONF_ON profile_episode_start(); @@ -172,6 +194,17 @@ main(void) } else { #if ENERGEST_CONF_ON static unsigned long irq_energest = 0; +#endif /* ENERGEST_CONF_ON */ + +#if DCOSYNCH_CONF_ENABLED + /* before going down to sleep possibly do some management */ + if(timer_expired(&dco_timer)) { + timer_reset(&dco_timer); + msp430_sync_dco(); + } +#endif /* DCOSYNCH_CONF_ENABLED */ + +#if ENERGEST_CONF_ON /* Re-enable interrupts and go to sleep atomically. */ ENERGEST_OFF(ENERGEST_TYPE_CPU); ENERGEST_ON(ENERGEST_TYPE_LPM); @@ -206,11 +239,10 @@ main(void) /* void arg_init(void) {} */ /* void arg_free(char *arg) {} */ /*---------------------------------------------------------------------------*/ - +#if UIP_LOGGING void uip_log(char *m) { - printf("uIP log: '%s'", m); - /* Needed to force link with putchar */ - putchar('\n'); + printf("uIP log: '%s'\n", m); } +#endif /* UIP_LOGGING */