[Tinyos-2-commits] CVS: tinyos-2.x/tos/lib/net/tymo ForwardingEngineM.nc, 1.1, 1.2

Romain Thouvenin strabest at users.sourceforge.net
Thu Jul 10 13:15:58 PDT 2008


Update of /cvsroot/tinyos/tinyos-2.x/tos/lib/net/tymo
In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv966

Modified Files:
	ForwardingEngineM.nc 
Log Message:
Fixed bug in sendDone signaling

Index: ForwardingEngineM.nc
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/tos/lib/net/tymo/ForwardingEngineM.nc,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** ForwardingEngineM.nc	18 Feb 2008 20:24:55 -0000	1.1
--- ForwardingEngineM.nc	10 Jul 2008 20:15:56 -0000	1.2
***************
*** 44,48 ****
    uint8_t typebuf;
    uint8_t lenWaiting;
!   uint8_t amWaiting;
    am_addr_t bufAddr;
    am_addr_t * addrWaiting;
--- 44,48 ----
    uint8_t typebuf;
    uint8_t lenWaiting;
!   uint8_t amWaiting = 0;
    am_addr_t bufAddr;
    am_addr_t * addrWaiting;
***************
*** 61,64 ****
--- 61,65 ----
        call PPacket.setPayloadLength(msg, len);
        acks = DYMO_LINK_FEEDBACK && (call Acks.requestAck(msg) == SUCCESS);
+       typebuf = am;
        return call SubSend.send(call AMPacket.destination(msg), msg, call SubPacket.payloadLength(msg));
  
***************
*** 91,99 ****
      case FW_SEND:
        atomic {
! 	if(lockAvail)
  	  return msg;
  	lockAvail = TRUE;
        }
        if ( signal Intercept.forward[typebuf](msg, call PPacket.getPayload(msg, call PPacket.payloadLength(msg)), call PPacket.payloadLength(msg)) ) {
  	  call SubSend.send(call AMPacket.destination(msg), msg, len);
        }
--- 92,103 ----
      case FW_SEND:
        atomic {
! 	if (lockAvail) {
!           dbg("fwe", "FE: Discarding a received message because no avail buffer.\n");
  	  return msg;
+         }
  	lockAvail = TRUE;
        }
        if ( signal Intercept.forward[typebuf](msg, call PPacket.getPayload(msg, call PPacket.payloadLength(msg)), call PPacket.payloadLength(msg)) ) {
+           acks = DYMO_LINK_FEEDBACK && (call Acks.requestAck(msg) == SUCCESS);
  	  call SubSend.send(call AMPacket.destination(msg), msg, len);
        }
***************
*** 101,104 ****
--- 105,109 ----
  
      case FW_RECEIVE:
+       dbg("fwe", "FE: Received a message, signaling to upper layer.\n");
        payload = call PPacket.getPayload(msg, call PPacket.payloadLength(msg));
        return signal Receive.receive[typebuf](msg, payload, call PPacket.payloadLength(msg));
***************
*** 106,111 ****
      case FW_WAIT:
        atomic {
! 	if(lockAvail || lockWaiting)
  	  return msg;
  	lockAvail = lockWaiting = TRUE;
        }
--- 111,118 ----
      case FW_WAIT:
        atomic {
! 	if(lockAvail || lockWaiting) {
!           dbg("fwe", "FE: Discarding a received message because no avail or wait buffer.\n");
  	  return msg;
+         }
  	lockAvail = lockWaiting = TRUE;
        }
***************
*** 118,121 ****
--- 125,129 ----
  
      default:
+       dbg("fwe", "FE: Discarding a received message because I don't know what to do.\n");
        return msg;
      }
***************
*** 123,128 ****
  
    event void SubSend.sendDone(message_t * msg, error_t e){
!     dbg("fwe", "FE: Sending done.\n");
!     if( (e == SUCCESS) && acks ){
        if( !(call Acks.wasAcked(msg)) ){
  	e = FAIL;
--- 131,136 ----
  
    event void SubSend.sendDone(message_t * msg, error_t e){
!     dbg("fwe", "FE: Sending done...\n");
!     if ((e == SUCCESS) && acks) {
        if( !(call Acks.wasAcked(msg)) ){
  	e = FAIL;
***************
*** 132,146 ****
        }
      } else if (e != SUCCESS) {
!       dbg("fwe", "FE: But failed!\n");
        signal MHControl.sendFailed(msg, 1);
      }
! 
!     if(lockAvail){
        avail = msg;
        atomic {
  	lockAvail = FALSE;
        }
      } else {
!       signal AMSend.sendDone[amWaiting](msg, e);
        atomic {
  	lockWaiting = FALSE;
--- 140,161 ----
        }
      } else if (e != SUCCESS) {
!       dbg("fwe", "FE: ...but failed!\n");
        signal MHControl.sendFailed(msg, 1);
      }
!     
!     if (lockAvail) {
        avail = msg;
        atomic {
  	lockAvail = FALSE;
        }
+       dbg("fwe", "FE: No need to signal sendDone.\n");
      } else {
!       dbg("fwe", "FE: Signaling sendDone.\n");
!       if (amWaiting) {
!          signal AMSend.sendDone[amWaiting](msg, e);
!          amWaiting = 0;
!       } else {
!          signal AMSend.sendDone[typebuf](msg, e);
!       }
        atomic {
  	lockWaiting = FALSE;



More information about the Tinyos-2-commits mailing list