[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