components MainC;
TestDisseminationC.Boot -> MainC;
+ components ActiveMessageC;
+ TestDisseminationC.RadioControl -> ActiveMessageC;
+
+ components DisseminationC;
+ TestDisseminationC.DisseminationControl -> DisseminationC;
+
+ components UserButtonC;
+ TestDisseminationC.Get -> UserButtonC;
+ TestDisseminationC.Notify -> UserButtonC;
+
components new DisseminatorC(uint32_t, 0x1234) as Object32C;
TestDisseminationC.Value32 -> Object32C;
TestDisseminationC.Update32 -> Object32C;
#include <Timer.h>
+#include <UserButton.h>
/*
* Copyright (c) 2006 Arched Rock Corporation
module TestDisseminationC {
uses interface Boot;
+ uses interface SplitControl as RadioControl;
+
+ uses interface StdControl as DisseminationControl;
+
+ uses interface Get<button_state_t>;
+ uses interface Notify<button_state_t>;
+
uses interface DisseminationValue<uint32_t> as Value32;
uses interface DisseminationUpdate<uint32_t> as Update32;
}
implementation {
event void Boot.booted() {
- if ( TOS_NODE_ID % 4 == 1 ) {
- call Timer.startPeriodic(20000);
+ uint32_t initialVal32 = 123456;
+ uint16_t initialVal16 = 1234;
+
+ call Value32.set( &initialVal32 );
+ call Value16.set( &initialVal16 );
+
+ call RadioControl.start();
+ }
+
+ event void RadioControl.startDone( error_t result ) {
+
+ if ( result != SUCCESS ) {
+
+ call RadioControl.start();
+
+ } else {
+
+ call DisseminationControl.start();
+
+ if ( TOS_NODE_ID % 4 == 1 ) {
+ call Timer.startPeriodic( 1024 * 20 );
+ } else {
+ call Timer.startPeriodic( 1024 );
+ }
}
}
+ event void RadioControl.stopDone( error_t result ) { }
+
event void Timer.fired() {
uint32_t newVal32 = 0xDEADBEEF;
uint16_t newVal16 = 0xABCD;
- call Leds.led0Toggle();
- call Leds.led1Toggle();
- call Update32.change( &newVal32 );
- call Update16.change( &newVal16 );
- dbg("TestDisseminationC", "TestDisseminationC: Timer fired.\n");
+
+ if ( TOS_NODE_ID % 4 == 1 ) {
+ call Leds.led0Toggle();
+ call Leds.led1Toggle();
+ call Update32.change( &newVal32 );
+ call Update16.change( &newVal16 );
+ dbg("TestDisseminationC", "TestDisseminationC: Timer fired.\n");
+ } else {
+ const uint32_t* newVal = call Value32.get();
+ if ( *newVal == 123456 ) {
+ call Leds.led2Toggle();
+ }
+ }
}
event void Value32.changed() {
configuration TestNetworkAppC {}
implementation {
components TestNetworkC, MainC, LedsC, ActiveMessageC;
+ components DisseminationC;
components new DisseminatorC(uint16_t, SAMPLE_RATE_KEY) as Object16C;
components CollectionC as Collector;
components new CollectionSenderC(CL_TEST);
TestNetworkC.RadioControl -> ActiveMessageC;
TestNetworkC.SerialControl -> SerialActiveMessageC;
TestNetworkC.RoutingControl -> Collector;
+ TestNetworkC.DisseminationControl -> DisseminationC;
TestNetworkC.Leds -> LedsC;
TestNetworkC.Timer -> TimerMilliC;
TestNetworkC.DisseminationPeriod -> Object16C;
uses interface SplitControl as RadioControl;
uses interface SplitControl as SerialControl;
uses interface StdControl as RoutingControl;
+ uses interface StdControl as DisseminationControl;
uses interface DisseminationValue<uint16_t> as DisseminationPeriod;
uses interface Send;
uses interface Leds;
call RadioControl.start();
}
else {
+ call DisseminationControl.start();
call RoutingControl.start();
if (TOS_NODE_ID % 500 == 0) {
call RootControl.setRoot();