From cd6c99ffa038524d2532860acb79e3ba52540ad7 Mon Sep 17 00:00:00 2001 From: kusy Date: Thu, 16 Jul 2009 06:41:41 +0000 Subject: [PATCH] Using AMSenderC infrastructure to fix CTP+FTSP bug --- tos/chips/cc2420/CC2420TimeSyncMessageC.nc | 7 +++++-- tos/chips/cc2420/CC2420TimeSyncMessageP.nc | 16 ++++++++++------ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/tos/chips/cc2420/CC2420TimeSyncMessageC.nc b/tos/chips/cc2420/CC2420TimeSyncMessageC.nc index 745bd08e..94ed0c9a 100644 --- a/tos/chips/cc2420/CC2420TimeSyncMessageC.nc +++ b/tos/chips/cc2420/CC2420TimeSyncMessageC.nc @@ -60,8 +60,11 @@ implementation TimeSyncPacketMilli = CC2420TimeSyncMessageP; Packet = CC2420TimeSyncMessageP; - CC2420TimeSyncMessageP.SubSend -> CC2420ActiveMessageC.AMSend; - CC2420TimeSyncMessageP.SubPacket -> CC2420ActiveMessageC.Packet; + // use the AMSenderC infrastructure to avoid concurrent send clashes + components AMQueueP, ActiveMessageC; + CC2420TimeSyncMessageP.SubSend -> AMQueueP.Send[unique(UQ_AMQUEUE_SEND)]; + CC2420TimeSyncMessageP.AMPacket -> ActiveMessageC; + CC2420TimeSyncMessageP.SubPacket -> ActiveMessageC; CC2420TimeSyncMessageP.PacketTimeStamp32khz -> CC2420PacketC; CC2420TimeSyncMessageP.PacketTimeStampMilli -> CC2420PacketC; diff --git a/tos/chips/cc2420/CC2420TimeSyncMessageP.nc b/tos/chips/cc2420/CC2420TimeSyncMessageP.nc index a4e11573..70e677ae 100644 --- a/tos/chips/cc2420/CC2420TimeSyncMessageP.nc +++ b/tos/chips/cc2420/CC2420TimeSyncMessageP.nc @@ -37,7 +37,8 @@ module CC2420TimeSyncMessageP uses { - interface AMSend as SubSend[uint8_t id]; + interface Send as SubSend; + interface AMPacket; interface Packet as SubPacket; interface PacketTimeStamp as PacketTimeStamp32khz; @@ -93,7 +94,9 @@ implementation void * timesync = msg->data + len; *(timesync_radio_t*)timesync = event_time; - err = call SubSend.send[id](addr, msg, len + sizeof(timesync_radio_t)); + call AMPacket.setDestination(msg, addr); + call AMPacket.setType(msg, id); + err = call SubSend.send(msg, len + sizeof(timesync_radio_t)); call PacketTimeSyncOffset.set(msg); return err; } @@ -101,19 +104,19 @@ implementation command error_t TimeSyncAMSend32khz.cancel[am_id_t id](message_t* msg) { call PacketTimeSyncOffset.cancel(msg); - return call SubSend.cancel[id](msg); + return call SubSend.cancel(msg); } default event void TimeSyncAMSend32khz.sendDone[am_id_t id](message_t* msg, error_t error) {} command uint8_t TimeSyncAMSend32khz.maxPayloadLength[am_id_t id]() { - return call SubSend.maxPayloadLength[id]() - sizeof(timesync_radio_t); + return call SubSend.maxPayloadLength() - sizeof(timesync_radio_t); } command void* TimeSyncAMSend32khz.getPayload[am_id_t id](message_t* msg, uint8_t len) { - return call SubSend.getPayload[id](msg, len + sizeof(timesync_radio_t)); + return call SubSend.getPayload(msg, len + sizeof(timesync_radio_t)); } /*----------------- TimeSyncAMSendMilli -----------------*/ @@ -142,8 +145,9 @@ 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 TimeSyncAMSend32khz.sendDone[id](msg, error); signal TimeSyncAMSendMilli.sendDone[id](msg, error); } -- 2.39.2