From 11a80b85eca1d7b6134fd83d789f70abd30366f8 Mon Sep 17 00:00:00 2001 From: adamdunkels Date: Thu, 25 Oct 2007 12:56:28 +0000 Subject: [PATCH] Contiki energy estimation demo for ACM SenSys 2007 --- examples/energest-demo/Makefile | 39 + examples/energest-demo/build.xml | 49 ++ examples/energest-demo/contiki-conf.h | 180 +++++ examples/energest-demo/contiki-sky-main.c | 230 ++++++ examples/energest-demo/energest-demo.c | 359 +++++++++ .../energest-demo/handouts/demo-handout.ppt | Bin 0 -> 564224 bytes .../energest-demo/handouts/dunkels07demo.pdf | Bin 0 -> 65536 bytes .../handouts/dunkels07softwarebased.pdf | Bin 0 -> 99602 bytes .../energest-demo/handouts/itea-handout.doc | Bin 0 -> 434688 bytes examples/energest-demo/src/Demo.java | 679 ++++++++++++++++++ 10 files changed, 1536 insertions(+) create mode 100644 examples/energest-demo/Makefile create mode 100644 examples/energest-demo/build.xml create mode 100644 examples/energest-demo/contiki-conf.h create mode 100644 examples/energest-demo/contiki-sky-main.c create mode 100644 examples/energest-demo/energest-demo.c create mode 100644 examples/energest-demo/handouts/demo-handout.ppt create mode 100644 examples/energest-demo/handouts/dunkels07demo.pdf create mode 100644 examples/energest-demo/handouts/dunkels07softwarebased.pdf create mode 100644 examples/energest-demo/handouts/itea-handout.doc create mode 100644 examples/energest-demo/src/Demo.java diff --git a/examples/energest-demo/Makefile b/examples/energest-demo/Makefile new file mode 100644 index 000000000..ea6206bd7 --- /dev/null +++ b/examples/energest-demo/Makefile @@ -0,0 +1,39 @@ + +all: burn-nodeids javaapp energest-demo.ihex + +burn-nodeids: + (cd nodeid; $(MAKE)) + +javaapp: + ant compile + +ifndef CONTIKI +CONTIKI = ../.. +endif + +# Ensure that ./contiki-conf.h is included +CFLAGS+=-I. + +ifndef TARGET +TARGET=sky +endif + +ifdef UPDATE +CFLAGS += -DUPDATE_TICKS=CLOCK_SECOND*$(UPDATE) +else +CFLAGS += -DUPDATE_TICKS=CLOCK_SECOND +endif + +ifdef CHANNEL +CFLAGS += -DRF_CHANNEL=$(CHANNEL) +else +CFLAGS += -DRF_CHANNEL=20 +endif + + +%.upload: %.ihex + cp $< ../testbed-server/image.ihex + (cd ../testbed-server; make upload) + + +include $(CONTIKI)/Makefile.include diff --git a/examples/energest-demo/build.xml b/examples/energest-demo/build.xml new file mode 100644 index 000000000..d67ea76e5 --- /dev/null +++ b/examples/energest-demo/build.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + +Examples: + +> ant run -Dargs="com1" +Starts demo application listening on COM1 and tracking the first node. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/energest-demo/contiki-conf.h b/examples/energest-demo/contiki-conf.h new file mode 100644 index 000000000..994e31c81 --- /dev/null +++ b/examples/energest-demo/contiki-conf.h @@ -0,0 +1,180 @@ +/* -*- C -*- */ +/* @(#)$Id: contiki-conf.h,v 1.1 2007/10/25 12:56:28 adamdunkels Exp $ */ + +#ifndef CONTIKI_CONF_H +#define CONTIKI_CONF_H + +#define HAVE_STDINT_H +#include "msp430def.h" + +#ifndef RF_CHANNEL +#define RF_CHANNEL 26 +#endif + +#define ELFLOADER_CONF_DATAMEMORY_SIZE 0x1800 +#define ELFLOADER_CONF_TEXTMEMORY_SIZE 0x1000 + +#define IRQ_PORT1 0x01 +#define IRQ_PORT2 0x02 +#define IRQ_ADC 0x03 + +#define CCIF +#define CLIF + +#define CC_CONF_INLINE inline + +#define AODV_COMPLIANCE +#define AODV_NUM_RT_ENTRIES 32 + +#define TMOTE_SKY 1 +#define WITH_ASCII 1 + +#define PROCESS_CONF_FASTPOLL 4 + +/* CPU target speed in Hz */ +#define F_CPU 2457600uL + +/* Our clock resolution, this is the same as Unix HZ. */ +#define CLOCK_CONF_SECOND 100 + +#define BAUD2UBR(baud) ((F_CPU/baud)) + +#define UIP_CONF_DHCP_LIGHT +#define UIP_CONF_LLH_LEN 0 +#define UIP_CONF_BUFFER_SIZE 116 +#define UIP_CONF_RECEIVE_WINDOW (UIP_CONF_BUFFER_SIZE - 40) +#define UIP_CONF_MAX_CONNECTIONS 4 +#define UIP_CONF_MAX_LISTENPORTS 8 +#define UIP_CONF_UDP_CONNS 12 +#define UIP_CONF_FWCACHE_SIZE 30 +#define UIP_CONF_BROADCAST 1 +#define UIP_ARCH_IPCHKSUM 1 +#define UIP_CONF_UDP_CHECKSUMS 1 +#define UIP_CONF_PINGADDRCONF 0 +#define UIP_CONF_LOGGING 0 + +/* + * Definitions below are dictated by the hardware and not really + * changeable! + */ + +/* LED ports */ +#define LEDS_PxDIR P5DIR +#define LEDS_PxOUT P5OUT +#define LEDS_CONF_RED 0x10 +#define LEDS_CONF_GREEN 0x20 +#define LEDS_CONF_YELLOW 0x40 + +/* Button sensors. */ +#define IRQ_PORT2 0x02 + +typedef unsigned short uip_stats_t; +typedef unsigned short clock_time_t; + +typedef unsigned long off_t; +#define ROM_ERASE_UNIT_SIZE 512 +#define XMEM_ERASE_UNIT_SIZE (64*1024L) + +#define XMAC_CONF_ON_TIME RTIMER_ARCH_SECOND / 100 +#define XMAC_CONF_OFF_TIME RTIMER_ARCH_SECOND / 10 + +/* Use the first 64k of external flash for node configuration */ +#define NODE_ID_XMEM_OFFSET (0 * XMEM_ERASE_UNIT_SIZE) + +/* Use the second 64k of external flash for codeprop. */ +#define EEPROMFS_ADDR_CODEPROP (1 * XMEM_ERASE_UNIT_SIZE) + +#define CFS_XMEM_CONF_OFFSET (2 * XMEM_ERASE_UNIT_SIZE) +#define CFS_XMEM_CONF_SIZE (1 * XMEM_ERASE_UNIT_SIZE) + +#define CFS_RAM_CONF_SIZE 4096 + +#define CC2420_RADIO +/* + * SPI bus configuration for the TMote Sky. + */ + +/* SPI input/output registers. */ +#define SPI_TXBUF U0TXBUF +#define SPI_RXBUF U0RXBUF + + /* USART0 Tx buffer ready? */ +#define SPI_WAITFOREOTx() while ((U0TCTL & TXEPT) == 0) + /* USART0 Rx buffer ready? */ +#define SPI_WAITFOREORx() while ((IFG1 & URXIFG0) == 0) + +#define SCK 1 /* P3.1 - Output: SPI Serial Clock (SCLK) */ +#define MOSI 2 /* P3.2 - Output: SPI Master out - slave in (MOSI) */ +#define MISO 3 /* P3.3 - Input: SPI Master in - slave out (MISO) */ + +/* + * SPI bus - M25P80 external flash configuration. + */ + +#define FLASH_PWR 3 /* P4.3 Output */ +#define FLASH_CS 4 /* P4.4 Output */ +#define FLASH_HOLD 7 /* P4.7 Output */ + +/* Enable/disable flash access to the SPI bus (active low). */ + +#define SPI_FLASH_ENABLE() ( P4OUT &= ~BV(FLASH_CS) ) +#define SPI_FLASH_DISABLE() ( P4OUT |= BV(FLASH_CS) ) + +#define SPI_FLASH_HOLD() ( P4OUT &= ~BV(FLASH_HOLD) ) +#define SPI_FLASH_UNHOLD() ( P4OUT |= BV(FLASH_HOLD) ) + +/* + * SPI bus - CC2420 pin configuration. + */ + +#define FIFO_P 0 /* P1.0 - Input: FIFOP from CC2420 */ +#define FIFO 3 /* P1.3 - Input: FIFO from CC2420 */ +#define CCA 4 /* P1.4 - Input: CCA from CC2420 */ + +#define SFD 1 /* P4.1 - Input: SFD from CC2420 */ +#define CSN 2 /* P4.2 - Output: SPI Chip Select (CS_N) */ +#define VREG_EN 5 /* P4.5 - Output: VREG_EN to CC2420 */ +#define RESET_N 6 /* P4.6 - Output: RESET_N to CC2420 */ + +/* Pin status. */ + +#define FIFO_IS_1 (!!(P1IN & BV(FIFO))) +#define CCA_IS_1 (!!(P1IN & BV(CCA) )) +#define RESET_IS_1 (!!(P4IN & BV(RESET_N))) +#define VREG_IS_1 (!!(P4IN & BV(VREG_EN))) +#define FIFOP_IS_1 (!!(P1IN & BV(FIFO_P))) +#define SFD_IS_1 (!!(P4IN & BV(SFD))) + +/* The CC2420 reset pin. */ +#define SET_RESET_INACTIVE() ( P4OUT |= BV(RESET_N) ) +#define SET_RESET_ACTIVE() ( P4OUT &= ~BV(RESET_N) ) + +/* CC2420 voltage regulator enable pin. */ +#define SET_VREG_ACTIVE() ( P4OUT |= BV(VREG_EN) ) +#define SET_VREG_INACTIVE() ( P4OUT &= ~BV(VREG_EN) ) + +/* CC2420 rising edge trigger for external interrupt 0 (FIFOP). */ +#define FIFOP_INT_INIT() do {\ + P1IES &= ~BV(FIFO_P);\ + CLEAR_FIFOP_INT();\ +} while (0) + +/* FIFOP on external interrupt 0. */ +#define ENABLE_FIFOP_INT() do { P1IE |= BV(FIFO_P); } while (0) +#define DISABLE_FIFOP_INT() do { P1IE &= ~BV(FIFO_P); } while (0) +#define CLEAR_FIFOP_INT() do { P1IFG &= ~BV(FIFO_P); } while (0) + +/* Enables/disables CC2420 access to the SPI bus (not the bus). + * + * These guys should really be renamed but are compatible with the + * original Chipcon naming. + * + * SPI_CC2420_ENABLE/SPI_CC2420_DISABLE??? + * CC2420_ENABLE_SPI/CC2420_DISABLE_SPI??? + */ + +#define SPI_ENABLE() ( P4OUT &= ~BV(CSN) ) /* ENABLE CSn (active low) */ +#define SPI_DISABLE() ( P4OUT |= BV(CSN) ) /* DISABLE CSn (active low) */ + + +#endif /* CONTIKI_CONF_H */ diff --git a/examples/energest-demo/contiki-sky-main.c b/examples/energest-demo/contiki-sky-main.c new file mode 100644 index 000000000..fd52efa45 --- /dev/null +++ b/examples/energest-demo/contiki-sky-main.c @@ -0,0 +1,230 @@ +/* + * Copyright (c) 2006, Swedish Institute of Computer Science + * 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 Institute 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 INSTITUTE 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 INSTITUTE 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. + * + * @(#)$Id: contiki-sky-main.c,v 1.1 2007/10/25 12:56:28 adamdunkels Exp $ + */ + +#include +#include +#include + +#include + +#include "contiki.h" + +#include "dev/button-sensor.h" +#include "dev/ds2411.h" +#include "dev/sht11.h" +#include "dev/leds.h" +#include "dev/light.h" +#include "dev/xmem.h" +#include "dev/simple-cc2420.h" + +#include "dev/slip.h" +#include "dev/uart1.h" + +#include "net/mac/xmac.h" +#include "net/mac/nullmac.h" + +#include "node-id.h" + +#include "net/rime.h" + +#include "sys/autostart.h" + +/*#include "codeprop/codeprop.h"*/ + +SENSORS(&button_sensor); + +extern int lpm_en; + +#define WITH_UIP 0 + +#if WITH_UIP +static struct uip_fw_netif slipif = +{UIP_FW_NETIF(192,168,1,2, 255,255,255,255, slip_send)}; +#endif /* WITH_UIP */ + +/*---------------------------------------------------------------------------*/ +#if 0 +int +force_float_inclusion() +{ + extern int __fixsfsi; + extern int __floatsisf; + extern int __mulsf3; + extern int __subsf3; + + return __fixsfsi + __floatsisf + __mulsf3 + __subsf3; +} +#endif +/*---------------------------------------------------------------------------*/ +void uip_log(char *msg) { puts(msg); } +/*---------------------------------------------------------------------------*/ +/* Radio stuff in network byte order. */ +static u16_t panId = 0x2024; + +#ifndef RF_CHANNEL +#error define RF_CHANNEL! +#endif + +/*---------------------------------------------------------------------------*/ +void +force_inclusion(int d1, int d2) +{ + snprintf(NULL, 0, "%d", d1 % d2); +} +/*---------------------------------------------------------------------------*/ +static void +set_rime_addr(void) +{ + rimeaddr_t addr; + addr.u16[0] = node_id; + rimeaddr_set_node_addr(&addr); +} +/*---------------------------------------------------------------------------*/ +int +main(int argc, char **argv) +{ + /* + * Initalize hardware. + */ + msp430_cpu_init(); + clock_init(); + leds_init(); + leds_toggle(LEDS_RED | LEDS_GREEN | LEDS_BLUE); + +#if WITH_UIP + slip_arch_init(BAUD2UBR(115200)); /* Must come before first printf */ +#else /* WITH_UIP */ + uart1_init(BAUD2UBR(115200)); /* Must come before first printf */ +#endif /* WITH_UIP */ + + printf("Starting %s " + "($Id: contiki-sky-main.c,v 1.1 2007/10/25 12:56:28 adamdunkels Exp $)\n", __FILE__); + ds2411_init(); + sensors_light_init(); + sht11_init(); + xmem_init(); + leds_toggle(LEDS_RED | LEDS_GREEN | LEDS_BLUE); + + rtimer_init(); + /* + * Hardware initialization done! + */ + + /* Restore node id if such has been stored in external mem */ +// node_id_burn(3); + node_id_restore(); + printf("node_id : %hu\n", node_id); + + printf("MAC %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", + ds2411_id[0], ds2411_id[1], ds2411_id[2], ds2411_id[3], + ds2411_id[4], ds2411_id[5], ds2411_id[6], ds2411_id[7]); + +#if WITH_UIP + uip_init(); + uip_sethostaddr(&slipif.ipaddr); + uip_setnetmask(&slipif.netmask); + uip_fw_default(&slipif); /* Point2point, no default router. */ + tcpip_set_forwarding(0); +#endif /* WITH_UIP */ + + /* + * Initialize Contiki and our processes. + */ + process_init(); + process_start(&etimer_process, NULL); + process_start(&sensors_process, NULL); + + set_rime_addr(); + + simple_cc2420_init(); + simple_cc2420_set_chan_pan_addr(RF_CHANNEL, panId, 0 /*XXX*/, ds2411_id); + simple_cc2420_set_txpower(31); + nullmac_init(&simple_cc2420_driver); + rime_init(&nullmac_driver); +// xmac_init(&simple_cc2420_driver); +// rime_init(&xmac_driver); + + /* rimeaddr_set_node_addr*/ +#if WITH_UIP + process_start(&tcpip_process, NULL); + process_start(&uip_fw_process, NULL); /* Start IP output */ + process_start(&slip_process, NULL); +#endif /* WITH_UIP */ + + button_sensor.activate(); + + printf("Autostarting processes\n"); + autostart_start((struct process **) autostart_processes); + + energest_init(); + + /* + * This is the scheduler loop. + */ + printf("process_run()...\n"); + ENERGEST_ON(ENERGEST_TYPE_CPU); + while (1) { + do { + /* Reset watchdog. */ + } while(process_run() > 0); + + /* + * Idle processing. + */ + if(lpm_en) { + int s = splhigh(); /* Disable interrupts. */ + if(process_nevents() != 0) { + splx(s); /* Re-enable interrupts. */ + } else { + + static unsigned long irq_energest = 0; + /* Re-enable interrupts and go to sleep atomically. */ + ENERGEST_OFF(ENERGEST_TYPE_CPU); + ENERGEST_ON(ENERGEST_TYPE_LPM); + /* We only want to measure the processing done in IRQs when we + are asleep, so we discard the processing time done when we + were awake. */ + energest_type_set(ENERGEST_TYPE_IRQ, irq_energest); + _BIS_SR(GIE | SCG0 | /*SCG1 |*/ CPUOFF); /* LPM3 sleep. */ + /* We get the current processing time for interrupts that was + done during the LPM and store it for next time around. */ + dint(); + irq_energest = energest_type_time(ENERGEST_TYPE_IRQ); + eint(); + ENERGEST_OFF(ENERGEST_TYPE_LPM); + ENERGEST_ON(ENERGEST_TYPE_CPU); + } + } + } + + return 0; +} +/*---------------------------------------------------------------------------*/ diff --git a/examples/energest-demo/energest-demo.c b/examples/energest-demo/energest-demo.c new file mode 100644 index 000000000..2b7c93e50 --- /dev/null +++ b/examples/energest-demo/energest-demo.c @@ -0,0 +1,359 @@ +/* + * Copyright (c) 2007, Swedish Institute of Computer Science. + * 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 Institute 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 INSTITUTE 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 INSTITUTE 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. + * + * This file is part of the Contiki operating system. + * + * $Id: energest-demo.c,v 1.1 2007/10/25 12:56:28 adamdunkels Exp $ + */ + +/** + * \file + * Contiki application sending estimated energy to a sink node + * \author + * Zhitao He + */ + +#include "contiki.h" +#include "net/rime.h" +#include "net/mac/mac.h" +#include "net/mac/nullmac.h" +#include "dev/button-sensor.h" + +#include "dev/simple-cc2420.h" + +#include "dev/leds.h" +#include "node-id.h" +#include + +#define SINK_ID 41 +/*---------------------------------------------------------------------------*/ +PROCESS(output_process, "output energest"); +PROCESS(user_process, "user input"); +AUTOSTART_PROCESSES( + &output_process, + &user_process + ); +/*---------------------------------------------------------------------------*/ +static struct abc_conn abc; +static u16_t read = 0; +static u16_t send = 0; + +int lpm_en; +static int radio_off; +static int computing; +static int sending; + +enum states{ + RADIO_OFF = 1, + RADIO_LOW, + RADIO_MID, + RADIO_FULL, + LPM_OFF, + SENDING1k, + SENDING12k, +}; + +struct energy_time { + unsigned short source; + long cpu; + long lpm; + long transmit; + long listen; +}; + +static struct energy_time last; +static struct energy_time diff; + +// FIXME: workaround to turn on/off radio. Rime should export an MAC on/off interface to avoid forcing the user to do this explicitly +static struct mac_driver *mac = &nullmac_driver; + +static clock_time_t sleep_cycles; +static const char send_string[] = "I am a sending string."; +static int send_length = 10; +static int send_amount = 10; +/*---------------------------------------------------------------------------*/ +static void +abc_recv(struct abc_conn *c) +{ + struct energy_time *incoming= (struct energy_time *)rimebuf_dataptr(); + read++; + if(node_id == SINK_ID) { + printf("%i SICS %i %u %li %li %li %li\n", node_id, read, + incoming->source, incoming->cpu, incoming->lpm, + incoming->transmit, incoming->listen); + } +} +/*---------------------------------------------------------------------------*/ +const static struct abc_callbacks abc_call = {abc_recv}; +/*---------------------------------------------------------------------------*/ +static void +do_computing(void) +{ + int i; + for(i = 0; i < 100; i++) { + clock_delay(1000); + } +} +/*---------------------------------------------------------------------------*/ +static void +do_sending(void) +{ + int i; + simple_cc2420_set_chan_pan_addr(11, 0x2024, node_id, NULL); + simple_cc2420_set_txpower(1); + + for(i = 0;i < send_amount; i++) { + rimebuf_copyfrom(send_string, send_length); + + mac->on(); + abc_send(&abc); + mac->off(); + } + simple_cc2420_set_txpower(31); + simple_cc2420_set_chan_pan_addr(RF_CHANNEL, 0x2024, node_id, NULL); +} +/*---------------------------------------------------------------------------*/ +PROCESS_THREAD(output_process, ev, data) +{ + static struct etimer et, et2; + + PROCESS_EXITHANDLER(abc_close(&abc);) + + PROCESS_BEGIN(); + + etimer_set(&et, 5*CLOCK_SECOND); + PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et)); + + /* Energy time init */ + energest_init(); + last.cpu = energest_type_time(ENERGEST_TYPE_CPU); + last.lpm = energest_type_time(ENERGEST_TYPE_LPM); + last.transmit = energest_type_time(ENERGEST_TYPE_TRANSMIT); + last.listen = energest_type_time(ENERGEST_TYPE_LISTEN); + + abc_open(&abc, 128, &abc_call); + + if (node_id == SINK_ID) { + while(1) { + PROCESS_YIELD(); + printf("I'm a sink. I'm doing nothing..."); + } + } + + etimer_set(&et, UPDATE_TICKS); + + while(1) { + PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et)); + + if(computing) { + do_computing(); + } + + /* stop-start ongoing time measurements to retrieve the diffs + during last interval */ + ENERGEST_OFF(ENERGEST_TYPE_CPU); + ENERGEST_ON(ENERGEST_TYPE_CPU); + mac->on(); + mac->off(); + + /* Energy time diff */ + diff.source = node_id; + diff.cpu = energest_type_time(ENERGEST_TYPE_CPU) - last.cpu; + diff.lpm = energest_type_time(ENERGEST_TYPE_LPM) - last.lpm; + diff.transmit = energest_type_time(ENERGEST_TYPE_TRANSMIT) - last.transmit; + diff.listen = energest_type_time(ENERGEST_TYPE_LISTEN) - last.listen; + last.cpu = energest_type_time(ENERGEST_TYPE_CPU); + last.lpm = energest_type_time(ENERGEST_TYPE_LPM); + last.transmit = energest_type_time(ENERGEST_TYPE_TRANSMIT); + last.listen = energest_type_time(ENERGEST_TYPE_LISTEN); + + send++; +/* printf("%i SICS %i %i %li %li %li %li\n", node_id, send, */ +/* diff.source, diff.cpu, diff.lpm, diff.transmit, diff.listen); */ + + rimebuf_copyfrom((char*)&diff, sizeof(diff)); + + mac->on(); + abc_send(&abc); + + if(sending) { + mac->off(); + do_sending(); + } else if(radio_off) { + mac->off(); + } else { + mac->off(); + etimer_set(&et2, sleep_cycles); + PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et2)); + mac->on(); + } + + etimer_reset(&et); + } + + PROCESS_END(); +} +/*---------------------------------------------------------------------------*/ +static enum states +next_state(enum states current_state) +{ + return current_state == 7 ? current_state = 1 : current_state + 1; +} +/*---------------------------------------------------------------------------*/ +static void +show_state(enum states current_state) +{ + printf("state = %d\n", current_state); + switch(current_state) { + case 1: + leds_off(LEDS_BLUE);leds_off(LEDS_GREEN);leds_on(LEDS_RED); + break; + + case 2: + leds_off(LEDS_BLUE);leds_on(LEDS_GREEN);leds_off(LEDS_RED); + break; + + case 3: + leds_off(LEDS_BLUE);leds_on(LEDS_GREEN);leds_on(LEDS_RED); + break; + + case 4: + leds_on(LEDS_BLUE);leds_off(LEDS_GREEN);leds_off(LEDS_RED); + break; + + case 5: + leds_on(LEDS_BLUE);leds_off(LEDS_GREEN);leds_on(LEDS_RED); + break; + + case 6: + leds_on(LEDS_BLUE);leds_on(LEDS_GREEN);leds_off(LEDS_RED); + break; + + case 7: + leds_on(LEDS_BLUE);leds_on(LEDS_GREEN);leds_on(LEDS_RED); + break; + + default: + printf("unknown state\n"); + } +} +/*---------------------------------------------------------------------------*/ +static void +run_state(enum states current_state) +{ + switch(current_state) { + case RADIO_OFF: + lpm_en = 1; + radio_off = 1; + sleep_cycles = 0; + computing = 0; + sending = 0; + break; + + case RADIO_LOW: + lpm_en = 1; + radio_off = 0; + sleep_cycles = UPDATE_TICKS * 99 / 100; + computing = 0; + sending = 0; + break; + + case RADIO_MID: + lpm_en = 1; + radio_off = 0; + sleep_cycles = UPDATE_TICKS * 90 / 100; + computing = 0; + sending = 0; + break; + + case RADIO_FULL: + lpm_en = 1; + radio_off = 0; + sleep_cycles = 0; + computing = 0; + sending = 0; + break; + + case LPM_OFF: + lpm_en = 0; + radio_off = 0; + sleep_cycles = UPDATE_TICKS * 90 / 100; + computing = 0; + sending = 0; + break; + + case SENDING1k: + lpm_en = 1; + radio_off = 0; + sleep_cycles = UPDATE_TICKS * 99 / 100; + computing = 0; + sending = 1; + send_amount = 10; + send_length = 100; + break; + + case SENDING12k: + lpm_en = 1; + radio_off = 0; + sleep_cycles = UPDATE_TICKS * 90 / 100; + computing = 0; + sending = 1; + send_amount = 100; + send_length = 100; + break; + + default: + ; + } +} +/*---------------------------------------------------------------------------*/ +PROCESS_THREAD(user_process, ev, data) +{ + static enum states state; + + PROCESS_BEGIN(); + + printf("Node id %d\n", node_id); + + button_sensor.activate(); + state = RADIO_OFF; + + while(1) { + show_state(state); + run_state(state); + + PROCESS_WAIT_EVENT(); + if(ev == sensors_event && data == &button_sensor) { + state = next_state(state); + } + + } + + PROCESS_END(); +} +/*---------------------------------------------------------------------------*/ diff --git a/examples/energest-demo/handouts/demo-handout.ppt b/examples/energest-demo/handouts/demo-handout.ppt new file mode 100644 index 0000000000000000000000000000000000000000..e8580f282567650c1405dd20e0a0a48f7dfb6b04 GIT binary patch literal 564224 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

Y|t6N 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