Hi all,
I'm using AODV implementation for TinyOS from here
(http://www2.engr.arizona.edu/~junseok/AODV.html). Problem I'm having
is that all but first messages don't get propagated to the application
layer.
Below are bits of code I'm running and some debug output to illustrate
what is going on:
>Test application code:
event void MilliTimer.fired() {
call Leds.led0Toggle();
ctr = ctr + 1;
test_pkt = (test_msg*)(call Packet.getPayload(p_pkt, sizeof
(test_msg)));
test_pkt->counter = ctr;
call AMSend.send(dest, p_pkt, sizeof(test_msg));
}
event void AMSend.sendDone(message_t * bufPtr, error_t error) {
test_pkt = (test_msg*)(call Packet.getPayload(p_pkt, sizeof
(test_msg)));
dbg("APPS", "%s\t APPS: sendDone!! (error=%d) ctr=%u\n",
sim_time_string(), error, test_pkt->counter);
}
event message_t* Receive.receive(message_t * bufPtr, void *
payload, uint8_t len) {
rcv_pkt = (test_msg * ) payload;
dbg("APPS", "%s\t APPS: receive!! %u\n", sim_time_string(),
rcv_pkt->counter);
return bufPtr;
}
------------------------------------------------------------------------------------------------------------------------------------------------
>AODV module part that handles messages coming from AMReceiverC component:
event message_t* SubReceive.receive( message_t* p_msg, void* payload,
uint8_t len ) {
uint8_t i;
aodv_msg_hdr* aodv_hdr = (aodv_msg_hdr*)(p_msg->data);
test_msg_y* tmp;
uint16_t ctr;
if( aodv_hdr->dest == call AMPacket.address() ) {
for( i=0;i<len;i++ ) {
p_app_msg_->data[i] = aodv_hdr->data[i];
}
tmp = (test_msg_y*) p_app_msg_->data;
ctr = tmp->counter;
//Send signal to application layer
p_msg = signal Receive.receive[aodv_hdr->app]( p_app_msg_,
p_app_msg_->data, len - AODV_MSG_HEADER_LEN );
dbg("AODV", "%s\t AODV: SubReceive.receive() delivered to
upper layer - %u\n", sim_time_string(), ctr);
} else {
....
}
return p_msg;
}
------------------------------------------------------------------------------------------------------------------------------------------------
>TOSSIM debug output:
DEBUG (7): 0:0:2.006653503 APPS: sendDone!! (error=0) ctr=2
DEBUG (10): 0:0:2.019577622 AODV: SubReceive.receive() delivered to
upper layer - 2
DEBUG (10): 0:0:2.019577622 APPS: receive!! 2
DEBUG (7): 0:0:3.010407143 APPS: sendDone!! (error=0) ctr=3
DEBUG (10): 0:0:3.021820651 AODV: SubReceive.receive() delivered to
upper layer - 3
DEBUG (7): 0:0:4.005264961 APPS: sendDone!! (error=0) ctr=4
DEBUG (10): 0:0:4.023239710 AODV: SubReceive.receive() delivered to
upper layer - 4
DEBUG (7): 0:0:5.010010417 APPS: sendDone!! (error=0) ctr=5
DEBUG (10): 0:0:5.024780838 AODV: SubReceive.receive() delivered to
upper layer - 5
------------------------------------------------------------------------------------------------------------------------------------------------
>From the fact that I get "...delivered to upper layer..." output for
every message sent (with correct counter values), I conclude that
every message actually arrives at the destination call and that "p_msg
= signal Receive.receive..." is executed every time.
My question is - what could be causing events that were signaled not
to execute (or stop executing since it has worked for one of the
messages)?
Thank you in advance
Ivan Ribakov
_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help