X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=tos%2Fchips%2Frf2xx%2Flayers%2FSoftwareAckLayerP.nc;h=643248177a33f00140660db08c98fef362aee096;hb=fb06e38f2c4372980a983a3d79f584221d475a36;hp=02ca70de1f69845a02b5ce62590184465c29a8ad;hpb=a3ebb402bf00465e45f4420fb0c472e03432cca9;p=tinyos-2.x.git diff --git a/tos/chips/rf2xx/layers/SoftwareAckLayerP.nc b/tos/chips/rf2xx/layers/SoftwareAckLayerP.nc index 02ca70de..64324817 100644 --- a/tos/chips/rf2xx/layers/SoftwareAckLayerP.nc +++ b/tos/chips/rf2xx/layers/SoftwareAckLayerP.nc @@ -30,6 +30,7 @@ module SoftwareAckLayerP { interface RadioSend; interface RadioReceive; + interface PacketAcknowledgements; } uses { @@ -38,6 +39,7 @@ module SoftwareAckLayerP interface RadioAlarm; interface SoftwareAckConfig; + interface PacketFlag as AckReceivedFlag; } } @@ -69,7 +71,7 @@ implementation { if( (error = call SubSend.send(msg)) == SUCCESS ) { - call SoftwareAckConfig.setAckReceived(msg, FALSE); + call AckReceivedFlag.clear(msg); state = STATE_DATA_SEND; txMsg = msg; } @@ -136,7 +138,7 @@ implementation ASSERT( !ack || call SoftwareAckConfig.verifyAckPacket(txMsg, msg) ); call RadioAlarm.cancel(); - call SoftwareAckConfig.setAckReceived(txMsg, ack); + call AckReceivedFlag.setValue(txMsg, ack); state = STATE_READY; signal RadioSend.sendDone(SUCCESS); @@ -158,4 +160,27 @@ implementation return signal RadioReceive.receive(msg); } + +/*----------------- PacketAcknowledgements -----------------*/ + + async command error_t PacketAcknowledgements.requestAck(message_t* msg) + { + call SoftwareAckConfig.setAckRequired(msg, TRUE); + + return SUCCESS; + } + + async command error_t PacketAcknowledgements.noAck(message_t* msg) + { + call SoftwareAckConfig.setAckRequired(msg, FALSE); + + return SUCCESS; + } + + async command bool PacketAcknowledgements.wasAcked(message_t* msg) + { + return call AckReceivedFlag.get(msg); + } + + }