Hello,
I think I have found a bug in the cc2420 stack concerning the  
transmission power of the acknowledgements. Maybe someone can verify  
it? I don?t know who is responsible for the stack at the moment. Is it  
still David?
I am using the svn revision 5304 on the cc2420 folder.

In my setup a telosb node is continuously sending packets, requests an  
ack and prints the rssi value of the ack. Another node is receiving  
and prints out the rssi value of the received packet.

The problem occurs when I reduce the transmission power by setting  
CFLAGS += -DCC2420_DEF_RFPOWER=1. The rssi of the acknowledgement  
equals the transmission power of power level 31 and not the rssi of  
the received packet.
It seems that the initial transmission power for the receiving node  
was not set to DCC2420_DEF_RFPOWER. It looks like this should be done  
by CC2420Control.Init.
For the maximum transmission power the rssi values of the ack and  
received packet equals. The behavior occurs for SACK and HACK.

I found out, that I can fix the problem by the transmission of one  
packet on the receiving node. It seems like after the SoftwareInit the  
radio chip resets once more or the CC2420Config.sync() will never be  
called to  commit changes to TXCTRL.

Best regards,
Tobias

Some code snippets:

   event void RadioControl.startDone(error_t err){
     if (err == SUCCESS){
       call CC2420Config.setAutoAck(1,0);   //enable auto-sw-acks
       call CC2420Config.sync();
     }
     else {
       call RadioControl.start();
     }
   }

   event void CC2420Config.syncDone(error_t error){
     if (error == SUCCESS){
       call Timer1.startPeriodic(600); //after 2s
     }
     else{
       call CC2420Config.setAutoAck(1,0);   //enable auto-sw-acks
       call CC2420Config.sync();
     }
   }

   event void Timer1.fired(){
     am_addr_t dest = 1;
     test_pkt_t* pkt = call  
RadioSend.getPayload(&radio_pkt,sizeof(test_pkt_t));
     seqno++;
     pkt->seqno = seqno;
     call Acks.requestAck(&radio_pkt);
     call RadioSend.send(dest,&radio_pkt,sizeof(test_pkt_t));
   }

   event void RadioSend.sendDone(message_t* msg, error_t err){
     if (msg==&radio_pkt && err==SUCCESS){
       if (call Acks.wasAcked(msg)){
        printf("ACK received seqno:%u rssi:%02d\n \n",seqno, call  
CC2420Packet.getRssi(msg)-45);
       }
       else {
        printf("Packet LOST seqno:%u \n",seqno);
       }
     }
     printfflush();
   }

   event message_t* RadioReceive.receive(message_t* msg, void*  
payload, uint8_t len){
     test_pkt_t* pkt = payload;
     printf("RECEIVED seqno:%u rssi:%02d\n \n",pkt->seqno, call  
CC2420Packet.getRssi(msg)-45);
     printfflush();
     return msg;
   }


_______________________________________________
Tinyos-help mailing list
Tinyos-help@millennium.berkeley.edu
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to