[Tinyos-help] Help wih LPL

Razvan Musaloiu-E. razvanm at cs.jhu.edu
Thu Apr 2 12:05:06 PDT 2009


Hi!

On Thu, 2 Apr 2009, João Paulo Amaro da Costa Luz Carneiro wrote:

> Hi all,
>
> Made a very simple program to test LPL but am not sending/receiving
> any messages or sometimes only 1 (depending on the LPL_INTERVAL
> value). Can someone tell me what am I doing wrong?

Sending a packet on broadcast will take LPL_INTERVAL ms. So the 
TIMER_PERIOD_MILLI should be longer than LPL_INTERVAL. :-)

--
Razvan ME

> Thanks in advance
> Here's the code:
>
> Test.h
> #ifndef TEST_H
> #define TEST_H
>
> enum {
>   AM_TEST = 6,
>   TIMER_PERIOD_MILLI = 250,
>   LPL_INTERVAL = 2000
> };
>
> typedef nx_struct TestMsg {
>   nx_uint16_t nodeid;
> } TestMsg;
>
> #endif
>
>
> TestAppC.nc
> #include <Timer.h>
> #include "Test.h"
>
> configuration TestAppC {
> }
> implementation {
>   components MainC;
>   components TestC as App;
>   components new TimerMilliC() as Timer0;
>   components ActiveMessageC;
>   components new AMSenderC(AM_TEST);
>   components new AMReceiverC(AM_TEST);
>   components CC2420ActiveMessageC as LPLProvider;
>
>   App.Boot -> MainC;
>   App.Timer0 -> Timer0;
>   App.Packet -> AMSenderC;
>   App.AMPacket -> AMSenderC;
>   App.AMControl -> ActiveMessageC;
>   App.AMSend -> AMSenderC;
>   App.Receive -> AMReceiverC;
>   App.LPL -> LPLProvider;
> }
>
>
> TestC.nc
> #include <Timer.h>
> #include "Test.h"
>
> module TestC {
>   uses interface Boot;
>   uses interface Timer<TMilli> as Timer0;
>   uses interface Packet;
>   uses interface AMPacket;
>   uses interface AMSend;
>   uses interface Receive;
>   uses interface SplitControl as AMControl;
>   uses interface LowPowerListening as LPL;
> }
> implementation {
>   void sendMessage();
>   task void sendMessageTask();
>   message_t pkt;
>   bool busy = FALSE;
>
>   event void Boot.booted() {
>     call LPL.setLocalSleepInterval(LPL_INTERVAL);
>     call AMControl.start();
>   }
>
>   event void AMControl.startDone(error_t err) {
>     if (err == SUCCESS) {
>       call Timer0.startPeriodic(TIMER_PERIOD_MILLI);
>     }
>     else {
>       call AMControl.start();
>     }
>   }
>
>   event void AMControl.stopDone(error_t err) {
>   }
>
>   event void Timer0.fired() {
>     //    if (!busy) {
>       TestMsg* tpkt =
> 	(TestMsg*)(call Packet.getPayload(&pkt, sizeof(TestMsg)));
>       if (tpkt == NULL) {
> 	return;
>       }
>       tpkt->nodeid = TOS_NODE_ID;
>
>       sendMessage();
>       //}
>   }
>
>   void sendMessage() {
>     call LPL.setRxSleepInterval(&pkt, LPL_INTERVAL);
>     if (call AMSend.send(AM_BROADCAST_ADDR,
> 			 &pkt, sizeof(TestMsg)) == SUCCESS) {
>       busy = TRUE;
>     }
>     else post sendMessageTask();
>   }
>
>   task void sendMessageTask() { sendMessage(); }
>
>   event void AMSend.sendDone(message_t* msg, error_t err) {
>     if (&pkt == msg) {
>       if (err != SUCCESS)
> 	post sendMessageTask();
>       else
> 	busy = FALSE;
>     }
>   }
>
>   event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len){
>     if (len == sizeof(TestMsg)) {
>       TestMsg* tpkt = (TestMsg*)payload;
>     }
>     return msg;
>   }
> }
>
>
> Makefile
> COMPONENT=TestAppC
>
> CFLAGS+=-DLOW_POWER_LISTENING
>
> include $(MAKERULES)
>


More information about the Tinyos-help mailing list