In your Tossiom code.
%%%%%%%%%%%%%%%
........
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):
.......
%%%%%%%%%%%%%%
the range of i should be (1, 4), then you will get three node 1, 2 and 3.
Because your topology file describes wireless link between node 1, 2 and 3.
When you create three node 0, 1 and 2, node 0 is actually out of the
network, thus its packets will not be received by any of the other nodes.
2 solutions:
1, modify the topology file to contain node 0, 1 and 2
2. modify the module, to let node 1 send packets instead of node 0.
On Thu, Sep 6, 2012 at 8:17 PM, wasif masood <[email protected]> wrote:
>
> try to debug it on lower layers, may be its the issue of AM_ID type.
>
>
> On Wed, Sep 5, 2012 at 4:04 PM, rajesh mukherjee <
> [email protected]> wrote:
>
>> 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
>>
>
>
>
> --
> Wasif Masood
>
>
> _______________________________________________
> Tinyos-help mailing list
> [email protected]
> https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help
>
_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help