]> oss.titaniummirror.com Git - tinyos-2.x.git/commitdiff
use the AMSenderC infrastructure for TimeSyncMessageC to avoid CTP send clashes
authormmaroti <mmaroti>
Thu, 23 Apr 2009 20:42:20 +0000 (20:42 +0000)
committermmaroti <mmaroti>
Thu, 23 Apr 2009 20:42:20 +0000 (20:42 +0000)
tos/chips/rf2xx/layers/TimeSyncMessageLayerC.nc
tos/chips/rf2xx/layers/TimeSyncMessageLayerP.nc
tos/chips/rf2xx/rf212/RF212TimeSyncMessageC.nc
tos/chips/rf2xx/rf230/RF230TimeSyncMessageC.nc

index 808e0ab94b1846b58d0c8e6a42739840e8a8efe4..cadf90a0cc22419ea63c952b65bd0219c4bf0ccc 100644 (file)
@@ -45,9 +45,6 @@ configuration TimeSyncMessageLayerC
 
                interface LocalTime<TRadio> as LocalTimeRadio;
                interface PacketField<uint8_t> 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;
index e61533191ad205532395e390ae57d22cfda051cc..011bfeeeae0e27a8992b1b4e26bd8cf96efd909a 100644 (file)
@@ -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<TRadio, uint32_t> 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);
        }
index c066441ba6ebe3525c26e6f911fc6d2a2ef21175..0047d32d0abae409582e99711125464425e9e3c3 100644 (file)
@@ -57,9 +57,6 @@ implementation
        TimeSyncAMSendMilli     = TimeSyncMessageLayerC;
        TimeSyncPacketMilli     = TimeSyncMessageLayerC;
 
-       TimeSyncMessageLayerC.SubSend -> RF212ActiveMessageC;
-       TimeSyncMessageLayerC.SubPacket -> RF212ActiveMessageC;
-
        TimeSyncMessageLayerC.PacketTimeStampRadio -> RF212ActiveMessageC;
        TimeSyncMessageLayerC.PacketTimeStampMilli -> RF212ActiveMessageC;
 
index 2d7f495c4b8a6d2fb6df99193edb8b1a7860f73b..2319aa085d17e01c2f6157ea3d0254f93439c1b9 100644 (file)
@@ -57,9 +57,6 @@ implementation
        TimeSyncAMSendMilli     = TimeSyncMessageLayerC;
        TimeSyncPacketMilli     = TimeSyncMessageLayerC;
 
-       TimeSyncMessageLayerC.SubSend -> RF230ActiveMessageC;
-       TimeSyncMessageLayerC.SubPacket -> RF230ActiveMessageC;
-
        TimeSyncMessageLayerC.PacketTimeStampRadio -> RF230ActiveMessageC;
        TimeSyncMessageLayerC.PacketTimeStampMilli -> RF230ActiveMessageC;