[Tinyos-beta-commits] CVS: tinyos-1.x/beta/Drip DripTest.h, NONE, 1.1 DripTestC.nc, NONE, 1.1 DripTestM.nc, NONE, 1.1

Gilman Tolle gtolle at users.sourceforge.net
Wed Aug 17 22:19:05 PDT 2005


Update of /cvsroot/tinyos/tinyos-1.x/beta/Drip
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14017

Added Files:
	DripTest.h DripTestC.nc DripTestM.nc 
Log Message:
Traffic generator for testing Drip

--- NEW FILE: DripTest.h ---
enum {
  AM_DRIPTESTMSG = 254,
};

typedef struct DripTestMsg {
  uint16_t seqno;
  uint32_t time;
} DripTestMsg;

--- NEW FILE: DripTestC.nc ---
includes DripTest;

configuration DripTestC {
  provides interface StdControl;
}
implementation {
  
  components 
    Main, 
    DripTestM,
    DripC,
    DripStateC,
//    TimeSyncC,
    TimerC,
    LedsC as Leds;
  
  StdControl = DripTestM;

  DripTestM.Leds -> Leds;
  DripTestM.Timer -> TimerC.Timer[unique("Timer")];

  DripTestM.ReceiveDrip -> DripC.Receive[AM_DRIPTESTMSG];
  DripTestM.Drip -> DripC.Drip[AM_DRIPTESTMSG];
  DripC.DripState[AM_DRIPTESTMSG] -> DripStateC.DripState[unique("DripState")];

//  DripTestM.GlobalTime -> TimeSyncC.GlobalTime;
}

--- NEW FILE: DripTestM.nc ---
includes DripTest;

includes Attrs;

module DripTestM {
  provides {
    interface StdControl;
    interface Attr<uint8_t> as DripTestSender 
      @nucleusAttr("DripTestSender");
    interface AttrSet<uint8_t> as DripTestSenderSet 
      @nucleusAttr("DripTestSender");
    interface Attr<uint16_t> as DripTestSendPeriod 
      @nucleusAttr("DripTestSendPeriod");
    interface AttrSet<uint16_t> as DripTestSendPeriodSet 
      @nucleusAttr("DripTestSendPeriod");
  }

  uses {
    interface Leds;

    interface Timer;

    interface Receive as ReceiveDrip;
    interface Drip;

    interface Send;
    interface SendMsg;

//    interface GlobalTime;
  }
}

implementation {

  DripTestMsg cache;

  bool sender;
  uint16_t sendPeriod = 8000;
  
  uint16_t seqno;
  uint32_t lastSendTime;

  uint32_t lastReceiveTime;
  uint32_t lastPropagationDelay;
  uint16_t receiveSeqno;
  uint16_t receiveCount;
  uint16_t sendCount;

  uint16_t retransmitCount;
  uint16_t lastRetransmitCount;

  command result_t StdControl.init() { 
    call Leds.init();
    call Drip.init();
    return SUCCESS; 
  }
  
  command result_t StdControl.start() { return SUCCESS; }

  command result_t StdControl.stop() { return SUCCESS; }

  command result_t DripTestSender.get(uint8_t* buf) {
    memcpy(buf, &sender, 1);
    signal DripTestSender.getDone(buf);
    return SUCCESS;
  }

  command result_t DripTestSenderSet.set(uint8_t* buf) {
    memcpy(&sender, buf, 1);
    if (sender) {
      call Timer.start(TIMER_ONE_SHOT, sendPeriod);
    } else {
      call Timer.stop();
    }
    signal DripTestSenderSet.setDone(buf);
    return SUCCESS;
  }  

  event result_t Timer.fired() {
    call Timer.start(TIMER_ONE_SHOT, sendPeriod);
//    call GlobalTime.getGlobalTime(&lastSendTime);
    seqno++;
    cache.seqno = seqno;
    cache.time = lastSendTime;
    lastRetransmitCount = retransmitCount;
    retransmitCount = 0;
    call Drip.change();
    return SUCCESS;
  }

  event TOS_MsgPtr ReceiveDrip.receive(TOS_MsgPtr msg, 
				       void* payload, 
				       uint16_t payloadLen) {
    
    DripTestMsg *rtMsg = (DripTestMsg*)payload;

/*
    if (call GlobalTime.getGlobalTime(&lastReceiveTime) == FAIL) {
      lastReceiveTime = 0;
    } else {
      if (lastReceiveTime > rtMsg->time) {
	lastPropagationDelay = lastReceiveTime - rtMsg->time;
      }
    }
*/

    memcpy(&cache, rtMsg, sizeof(DripTestMsg));

    receiveCount++;
    if (rtMsg->seqno > receiveSeqno) {
      sendCount += rtMsg->seqno - receiveSeqno;
      receiveSeqno = rtMsg->seqno;
    }

    lastRetransmitCount = retransmitCount;
    retransmitCount = 0;

    call Leds.redToggle();
    return msg;
  }

  event result_t Drip.rebroadcastRequest(TOS_MsgPtr msg, 
					 void *payload) {

    DripTestMsg *rtMsg = (DripTestMsg*)payload;

    memcpy(rtMsg, &cache, sizeof(DripTestMsg));
    retransmitCount++;

    call Leds.greenToggle();
    call Drip.rebroadcast(msg, payload, sizeof(DripTestMsg));
    return SUCCESS;
  }

  event result_t SendMsg.sendDone(TOS_MsgPtr msg, result_t success) {
    return SUCCESS;
  }

  event result_t Send.sendDone(TOS_MsgPtr msg, result_t success) {
    return SUCCESS;
  }

  command result_t DripTestSendPeriod.get(uint16_t* buf) {
    memcpy(buf, &sendPeriod, 2);
    signal DripTestSendPeriod.getDone(buf);
    return SUCCESS;
  }

  command result_t DripTestSendPeriodSet.set(uint16_t* buf) {
    memcpy(&sendPeriod, buf, 2);
    signal DripTestSendPeriodSet.setDone(buf);
    return SUCCESS;
  }
}



More information about the Tinyos-beta-commits mailing list