X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=apps%2Ftests%2Fcc2420%2FLplUnicastPeriodicDelivery%2FTestPeriodicC.nc;h=4ecce8365974713351894805c17d41cdaee3e90e;hb=e9bfab607e051bae6afb47b44892ce37541d1b44;hp=45808e0c43675f784e0a8001efbdf7cd674a8522;hpb=2c95e194e539a603888e691571a8fe946ea176e0;p=tinyos-2.x.git diff --git a/apps/tests/cc2420/LplUnicastPeriodicDelivery/TestPeriodicC.nc b/apps/tests/cc2420/LplUnicastPeriodicDelivery/TestPeriodicC.nc index 45808e0c..4ecce836 100644 --- a/apps/tests/cc2420/LplUnicastPeriodicDelivery/TestPeriodicC.nc +++ b/apps/tests/cc2420/LplUnicastPeriodicDelivery/TestPeriodicC.nc @@ -29,42 +29,93 @@ * OF THE POSSIBILITY OF SUCH DAMAGE */ +#include "TestPeriodic.h" + /** + * This app sends a message from Transmitter node to the recevier node + * and waits 1000 ms between each delivery so the Rx mote's radio + * shuts back off and has to redetect to receive the next message. + * Receiver: TOS_NODE_ID != 1. + * Transmitter: TOS_NODE_ID == 1. + * * @author David Moss */ - -#include "TestPeriodic.h" -configuration TestPeriodicC { +module TestPeriodicC { + uses { + interface Boot; + interface SplitControl; + interface LowPowerListening; + interface AMSend; + interface Receive; + interface AMPacket; + interface Packet; + interface Leds; + interface Timer; + } } implementation { - -#if defined(PLATFORM_MICA2) || defined(PLATFORM_MICA2DOT) - components CC1000ActiveMessageC as Lpl; -#elif defined(PLATFORM_MICAZ) || defined(PLATFORM_TELOSB) - components CC2420ActiveMessageC as Lpl; -#else -#error "LPL testing not supported on this platform" -#endif - - components TestPeriodicP, - MainC, - ActiveMessageC, - new TimerMilliC(), - new AMSenderC(AM_TESTPERIODICMSG), - new AMReceiverC(AM_TESTPERIODICMSG), - LedsC; - - TestPeriodicP.Boot -> MainC; - TestPeriodicP.SplitControl -> ActiveMessageC; - TestPeriodicP.LowPowerListening -> Lpl; - TestPeriodicP.AMPacket -> ActiveMessageC; - TestPeriodicP.AMSend -> AMSenderC; - TestPeriodicP.Receive -> AMReceiverC; - TestPeriodicP.Packet -> ActiveMessageC; - TestPeriodicP.Timer -> TimerMilliC; - TestPeriodicP.Leds -> LedsC; - + + uint8_t count; + message_t fullMsg; + bool transmitter; + + /**************** Prototypes ****************/ + task void send(); + + /**************** Boot Events ****************/ + event void Boot.booted() { + transmitter = (call AMPacket.address() != 0); + count = 0; + + call LowPowerListening.setLocalWakeupInterval(1000); + call SplitControl.start(); + } + + event void SplitControl.startDone(error_t error) { + if(transmitter) { + post send(); + } + } + + event void SplitControl.stopDone(error_t error) { + } + + + /**************** Send Receive Events *****************/ + event void AMSend.sendDone(message_t *msg, error_t error) { + if(transmitter) { + count++; + call Timer.startOneShot(1000); + call Leds.led0Off(); + } + } + + event message_t *Receive.receive(message_t *msg, void *payload, uint8_t len) { + if(!transmitter) { + call Leds.led1Toggle(); + } + return msg; + } + + /**************** Timer Events ****************/ + event void Timer.fired() { + if(transmitter) { + post send(); + } + } + + /**************** Tasks ****************/ + task void send() { + TestPeriodicMsg *periodicMsg = (TestPeriodicMsg *) call Packet.getPayload(&fullMsg, sizeof(TestPeriodicMsg)); + periodicMsg->count = count; + call LowPowerListening.setRemoteWakeupInterval(&fullMsg, 1000); + if(call AMSend.send(0, &fullMsg, sizeof(TestPeriodicMsg)) != SUCCESS) { + post send(); + } else { + call Leds.led0On(); + } + } }