[Tinyos-help] RE: Questions on Ack
=?ks_c_5601-1987?B?waSw6Ljt?=
jgm2000 at ibitworld.com
Thu Jan 11 23:19:43 PST 2007
Hi all,
I added ack functions on tinyos 2.0 application BlinktoRadio and ran this
application on Micaz platform. I deleted the counter display on LEDs and
added a ack status displayed on LEDS. The modifications are listed below:
event void Timer0.fired() {
counter++;
if (!busy) {
BlinkToRadioMsg* btrpkt =
(BlinkToRadioMsg*)(call Packet.getPayload(&pkt, NULL));
btrpkt->nodeid = TOS_NODE_ID;
btrpkt->counter = counter;
if(call Acks.requestAck(&pkt) == SUCCESS)
// adding ack request
{
if (call AMSend.send(AM_BROADCAST_ADDR,
&pkt, sizeof(BlinkToRadioMsg)) == SUCCESS) {
busy = TRUE;
}
}
}
}
event void AMSend.sendDone(message_t* msg, error_t err) {
if (&pkt == msg) {
busy = FALSE;
status = call Acks.wasAcked(&pkt); // ack status
display
if (status == SUCCESS)
call Leds.led2Toggle();
else if (status == FAIL)
call Leds.led1Toggle();
}
}
I installed the revised application on two motes and used BaseStation to
receive the messages. But all the transmitted packets were not acknowledged
on two motes. And then I powered off one mote, another one's LEDs displayed
that the transmitted packets were acknowledged. I didnot quite understand
this phenomenon. Was it because of collision? Is the interface
PacketAcknowledgements used to acknowledge that the transmitted packet is
really transmitted?
Thanks a lot
You should use UNICAST Addr and not AM_BROADCAST_ADDR when you call
AMSend.send
When you send to AM_BROADCAST_ADDR, it doesn't run on Ack mode
One mote : make TARGET install.1
Other mote : make TARGET install.2
NODE ID 1 call AMSend.send(2, .......)...
More information about the Tinyos-help
mailing list