Hi all,
 I just simply written a code to send multiple msg & receive multiple ms
usin AMSender & AMReceiver,  in tossim simulation msg send successfully by
Node 0 but the event receive canot happened. plz help me.

he file FloodC.nc contain

#include<Timer.h>
#include"Flood.h"
module FloodC{
    uses interface Boot;
    uses interface Timer<TMilli> as Timer0;

    uses interface Packet as ReqPacket;
    uses interface Packet as ParPacket;
    uses interface Packet as RejPacket;
    uses interface AMSend as SendRequest;
    uses interface Receive as ReceiveRequest;
    uses interface Receive as ReceiveParent;
    uses interface AMSend as SendParent;
    uses interface Receive as ReceiveReject;
    uses interface AMSend as SendReject;
    uses interface AMPacket as ReqAMPacket;
    uses interface AMPacket as ParAMPacket;
    uses interface AMPacket as RejAMPacket;
    uses interface SplitControl as AMControl;
    }
implementation {
    uint16_t parent = 0xFFFF;
    uint16_t children[50];
    uint16_t child_count= 0;
    message_t request_pkt;
    message_t parent_pkt;
    message_t reject_pkt;
    bool busy = FALSE;

    event void Boot.booted(){
        child_count=0;
        dbg("Flood","Application Booted.\n");
        if (TOS_NODE_ID ==0){
            parent=0;
        }
        call AMControl.start();
    }


    event void AMControl.startDone(error_t err){


        if (err == SUCCESS) {
            dbg("Flood","AMControl started.\n");
            if (TOS_NODE_ID ==0){
                call Timer0.startOneShot(2000);
            }
        }
        else {
            call AMControl.start();
        }

    }


    event void AMControl.stopDone(error_t err){
        //call Timer0.stop();
    }


    event void Timer0.fired() {
        dbg("Flood","Timer is started");
        if(!busy){

            RequestMsg* rm =
             (RequestMsg*) (call ReqPacket.getPayload(&request_pkt, NULL));
             rm -> sourceaddr = TOS_NODE_ID;
                dbg("Flood","Sending..\n");
            if(call SendRequest.send(AM_BROADCAST_ADDR, &request_pkt,
sizeof(RequestMsg)) == SUCCESS){
                busy= TRUE;
            }
        }
    }


    event  void SendRequest.sendDone(message_t* msg, error_t err){
        if(&request_pkt == msg){
            busy = FALSE;
            dbg("Flood","SendRequest done successfully.\n");
            if(TOS_NODE_ID != 0){
                ParentMsg* p = (ParentMsg*) (call
ParPacket.getPayload(&parent_pkt, NULL));
                p -> sourceaddr = TOS_NODE_ID;
                if(call SendParent.send(parent, &parent_pkt,
sizeof(ParentMsg)) == SUCCESS){
                    busy=TRUE;
                }
            }
        }
    }


    event void SendParent.sendDone(message_t* msg, error_t err){
        if(&parent_pkt == msg){
            busy = FALSE;
            dbg("Flood","Parent Message successfully done");
        }

    }


    event void SendReject.sendDone(message_t* msg, error_t err){
        if(&reject_pkt == msg){
            busy = FALSE;
            dbg("Flood","Send Reject message deliver");
        }
    }


    event message_t* ReceiveRequest.receive(message_t* msg, void* payload,
uint8_t len){

        if ( len == sizeof(RequestMsg)){

            RequestMsg* a = (RequestMsg*)payload;
            dbg("Flood","Message receive");
            if(TOS_NODE_ID != 0){
                if(parent == 0xFFFF){
                    parent = a->sourceaddr;
                    dbg("Flood","Node: %d Parent: %d \n",TOS_NODE_ID,
parent);
                    if(!busy){
                        RequestMsg* b =
                         (RequestMsg*) (call
ReqPacket.getPayload(&request_pkt, NULL));
                         b->sourceaddr = TOS_NODE_ID;
                        if(call SendRequest.send(AM_BROADCAST_ADDR,
&request_pkt, sizeof(RequestMsg)) == SUCCESS){
                            busy = TRUE;
                        }
                    }
                }
                else{
                    if(!busy){
                        RejectMsg* r = (RejectMsg*) (call
RejPacket.getPayload(&reject_pkt, NULL));
                        r -> sourceaddr = TOS_NODE_ID;
                        if(call SendReject.send(AM_BROADCAST_ADDR,
&reject_pkt, sizeof(RejectMsg)) == SUCCESS){
                            busy = TRUE;
                        }
                    }
                }
            }
        }
    return msg;
    }



    event message_t* ReceiveParent.receive(message_t* msg, void* payload,
uint8_t len){
        if( len == sizeof(ParentMsg)){
            ParentMsg *p = (ParentMsg *) payload;
            int i = 0;
            children[child_count++] = p->sourceaddr;
            dbg("Flood", "Node %d's children are: \n", TOS_NODE_ID);
            for(i = 0; i < child_count; i++){
                dbg("Flood", " %d \n", children[i]);
            }
        }
    return msg;
    }


    event message_t* ReceiveReject.receive(message_t* msg, void* payload,
uint8_t len){
        if( len == sizeof(RejectMsg)){
        }
        return msg;
    }
}
   *
FloodAppC contain*

#include <Timer.h>
#include "Flood.h"

configuration FloodAppC {
}
implementation {
  components MainC;
  components FloodC;
  components new TimerMilliC() as Timer0;
  components ActiveMessageC;
  components new AMSenderC(AM_REQUEST) as RequestSender;
  components new AMReceiverC(AM_REQUEST) as RequestReceiver;

  components new AMSenderC(AM_PARENT)    as ParentSender;
  components new AMReceiverC(AM_PARENT) as ParentReceiver;

  components new AMSenderC(AM_REJECT) as RejectSender;
  components new AMReceiverC(AM_REJECT) as RejectReceiver;

  FloodC.Boot -> MainC;
  FloodC.Timer0 -> Timer0;


    FloodC.ReqPacket -> RequestSender;
     FloodC.ReqPacket -> RequestReceiver;
    FloodC.ParPacket -> ParentSender;
    FloodC.RejPacket -> RejectSender;

    FloodC.ReqAMPacket -> RequestSender;
    FloodC.ParAMPacket -> ParentSender;
    FloodC.RejAMPacket -> RejectSender;

  FloodC.AMControl -> ActiveMessageC;

  FloodC.SendRequest -> RequestSender;
  FloodC.SendParent ->  ParentSender;
  FloodC.SendReject ->  RejectSender;

  FloodC.ReceiveRequest -> RequestReceiver;
  FloodC.ReceiveParent -> ParentReceiver;
  FloodC.ReceiveReject -> RejectReceiver;
}

*Flood.h*

#ifndef BLINKTORADIO_H
#define BLINKTORADIO_H
enum {
  AM_REQUEST = 4,
  AM_PARENT = 5,
  AM_REJECT = 7,
};
typedef nx_struct RequestMsg {
  /* The 16-bit source node address. */
  nx_uint16_t sourceaddr;
} RequestMsg;
typedef nx_struct ParentMsg {
  /* The 16-bit source node address. */
  nx_uint16_t sourceaddr;
} ParentMsg;
typedef nx_struct RejectMsg{
    nx_uint16_t sourceaddr;
} RejectMsg;
#endif
*
python code*

#! /usr/bin/python
from TOSSIM import *
import sys

t = Tossim([])
r = t.radio()
f = open("topo.txt", "r")
noOfnode  =3;
startTime =1;
duration  =6000000000000;

for line in f:
  s = line.split()
  if s:
    print " ", s[0], " ", s[1], " ", s[2];
    r.add(int(s[0]), int(s[1]), float(s[2]))


t.addChannel("Flood", sys.stdout)

noise = open("meyer-heavy.txt", "r")
for line in noise:
  str1 = line.strip()
  if str1:
    val = int(str1)
    for i in range(0, 3):
      t.getNode(i).addNoiseTraceReading(val)

for i in range(0, 3):
  print "Creating noise model for ",i;
  t.getNode(i).createNoiseModel()

for i in range(0, noOfnode):
    m=t.getNode(i)
    m.bootAtTime(startTime*t.ticksPerSecond());
time=t.time()

for i in range(0, 200000):
      t.runNextEvent();

*giving output
*$ python test.py
  1   2   -100.0
  2   1   -100.0
  1   3   -100.0
  3   1   -100.0
  2   3   -100.0
  3   2   -100.0
Creating noise model for  0
Creating noise model for  1
Creating noise model for  2
DEBUG (0): Application Booted.
DEBUG (2): Application Booted.
DEBUG (1): Application Booted.
DEBUG (2): AMControl started.
DEBUG (0): AMControl started.
DEBUG (1): AMControl started.
DEBUG (0): Timer is startedDEBUG (0): Sending
DEBUG (0): SendRequest done successfully.

why?? really i dont understand why receive request not occuring.

Thanks in advance.
_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to