From: mmaroti Date: Thu, 23 Apr 2009 20:42:20 +0000 (+0000) Subject: use the AMSenderC infrastructure for TimeSyncMessageC to avoid CTP send clashes X-Git-Tag: rc_6_tinyos_2_1_1~406 X-Git-Url: https://oss.titaniummirror.com/gitweb/?p=tinyos-2.x.git;a=commitdiff_plain;h=d7c99f1bb7d448180929e65784642937774e38a4 use the AMSenderC infrastructure for TimeSyncMessageC to avoid CTP send clashes --- diff --git a/tos/chips/rf2xx/layers/TimeSyncMessageLayerC.nc b/tos/chips/rf2xx/layers/TimeSyncMessageLayerC.nc index 808e0ab9..cadf90a0 100644 --- a/tos/chips/rf2xx/layers/TimeSyncMessageLayerC.nc +++ b/tos/chips/rf2xx/layers/TimeSyncMessageLayerC.nc @@ -45,9 +45,6 @@ configuration TimeSyncMessageLayerC interface LocalTime as LocalTimeRadio; interface PacketField as PacketTimeSyncOffset; - - interface AMSend as SubSend[am_id_t id]; - interface Packet as SubPacket; } } @@ -63,8 +60,11 @@ implementation TimeSyncAMSendMilli = TimeSyncMessageLayerP; TimeSyncPacketMilli = TimeSyncMessageLayerP; - SubSend = TimeSyncMessageLayerP; - SubPacket = TimeSyncMessageLayerP; + // Ok, we use the AMSenderC infrastructure to avoid concurrent send clashes + components AMQueueP, ActiveMessageC; + TimeSyncMessageLayerP.SubSend -> AMQueueP.Send[unique(UQ_AMQUEUE_SEND)]; + TimeSyncMessageLayerP.AMPacket -> ActiveMessageC; + TimeSyncMessageLayerP.SubPacket -> ActiveMessageC; PacketTimeStampRadio = TimeSyncMessageLayerP; PacketTimeStampMilli = TimeSyncMessageLayerP; diff --git a/tos/chips/rf2xx/layers/TimeSyncMessageLayerP.nc b/tos/chips/rf2xx/layers/TimeSyncMessageLayerP.nc index e6153319..011bfeee 100644 --- a/tos/chips/rf2xx/layers/TimeSyncMessageLayerP.nc +++ b/tos/chips/rf2xx/layers/TimeSyncMessageLayerP.nc @@ -37,7 +37,8 @@ module TimeSyncMessageLayerP uses { - interface AMSend as SubSend[uint8_t id]; + interface Send as SubSend; + interface AMPacket; interface Packet as SubPacket; interface PacketTimeStamp as PacketTimeStampRadio; @@ -92,13 +93,15 @@ implementation *(timesync_absolute_t*)(msg->data + len) = event_time; call PacketTimeSyncOffset.set(msg, offsetof(message_t, data) + len); + call AMPacket.setDestination(msg, addr); + call AMPacket.setType(msg, id); - return call SubSend.send[id](addr, msg, len + sizeof(timesync_relative_t)); + return call SubSend.send(msg, len + sizeof(timesync_relative_t)); } command error_t TimeSyncAMSendRadio.cancel[am_id_t id](message_t* msg) { - return call SubSend.cancel[id](msg); + return call SubSend.cancel(msg); } default event void TimeSyncAMSendRadio.sendDone[am_id_t id](message_t* msg, error_t error) @@ -107,12 +110,12 @@ implementation command uint8_t TimeSyncAMSendRadio.maxPayloadLength[am_id_t id]() { - return call SubSend.maxPayloadLength[id]() - sizeof(timesync_relative_t); + return call SubSend.maxPayloadLength() - sizeof(timesync_relative_t); } command void* TimeSyncAMSendRadio.getPayload[am_id_t id](message_t* msg, uint8_t len) { - return call SubSend.getPayload[id](msg, len + sizeof(timesync_relative_t)); + return call SubSend.getPayload(msg, len + sizeof(timesync_relative_t)); } /*----------------- TimeSyncAMSendMilli -----------------*/ @@ -146,8 +149,10 @@ implementation /*----------------- SubSend.sendDone -------------------*/ - event void SubSend.sendDone[am_id_t id](message_t* msg, error_t error) + event void SubSend.sendDone(message_t* msg, error_t error) { + am_id_t id = call AMPacket.type(msg); + signal TimeSyncAMSendRadio.sendDone[id](msg, error); signal TimeSyncAMSendMilli.sendDone[id](msg, error); } diff --git a/tos/chips/rf2xx/rf212/RF212TimeSyncMessageC.nc b/tos/chips/rf2xx/rf212/RF212TimeSyncMessageC.nc index c066441b..0047d32d 100644 --- a/tos/chips/rf2xx/rf212/RF212TimeSyncMessageC.nc +++ b/tos/chips/rf2xx/rf212/RF212TimeSyncMessageC.nc @@ -57,9 +57,6 @@ implementation TimeSyncAMSendMilli = TimeSyncMessageLayerC; TimeSyncPacketMilli = TimeSyncMessageLayerC; - TimeSyncMessageLayerC.SubSend -> RF212ActiveMessageC; - TimeSyncMessageLayerC.SubPacket -> RF212ActiveMessageC; - TimeSyncMessageLayerC.PacketTimeStampRadio -> RF212ActiveMessageC; TimeSyncMessageLayerC.PacketTimeStampMilli -> RF212ActiveMessageC; diff --git a/tos/chips/rf2xx/rf230/RF230TimeSyncMessageC.nc b/tos/chips/rf2xx/rf230/RF230TimeSyncMessageC.nc index 2d7f495c..2319aa08 100644 --- a/tos/chips/rf2xx/rf230/RF230TimeSyncMessageC.nc +++ b/tos/chips/rf2xx/rf230/RF230TimeSyncMessageC.nc @@ -57,9 +57,6 @@ implementation TimeSyncAMSendMilli = TimeSyncMessageLayerC; TimeSyncPacketMilli = TimeSyncMessageLayerC; - TimeSyncMessageLayerC.SubSend -> RF230ActiveMessageC; - TimeSyncMessageLayerC.SubPacket -> RF230ActiveMessageC; - TimeSyncMessageLayerC.PacketTimeStampRadio -> RF230ActiveMessageC; TimeSyncMessageLayerC.PacketTimeStampMilli -> RF230ActiveMessageC;