async command void RadioPacket.clear(message_t* msg)
{
+ call IEEE154MessageLayer.createDataFrame(msg);
call SubPacket.clear(msg);
}
if( len > call Packet.maxPayloadLength() )
return EINVAL;
- call IEEE154MessageLayer.createDataFrame(msg);
+ // user forgot to call Packet.clear(), maybe we should return EFAIL
+ if( ! call IEEE154MessageLayer.isDataFrame(msg) )
+ call IEEE154MessageLayer.createDataFrame(msg);
+
call Packet.setPayloadLength(msg, len);
call Ieee154Packet.setSource(msg, call Ieee154Packet.address());
call Ieee154Packet.setDestination(msg, addr);
command error_t Send.send(message_t* msg)
{
- // lower leveles can send other frames
- call IEEE154MessageLayer.createDataFrame(msg);
+ // user forgot to call Packet.clear(), lower levels can send other types
+ if( ! call IEEE154MessageLayer.isDataFrame(msg) )
+ call IEEE154MessageLayer.createDataFrame(msg);
return call SubSend.send(msg);
}
event message_t* SubReceive.receive(message_t* msg)
{
- return signal Ieee154Receive.receive(msg,
- getPayload(msg), call Packet.payloadLength(msg));
+ if( call Ieee154Packet.isForMe(msg) )
+ return signal Ieee154Receive.receive(msg,
+ getPayload(msg), call Packet.payloadLength(msg));
+ else
+ return msg;
}
}