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?
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)
_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to