#include <Timer.h>
#include <AM.h>
#include <RadioConfig.h>
+#include <TimeSyncMessageLayer.h>
configuration TimeSyncMessageLayerC
{
provides
{
+ interface Receive[uint8_t id];
+ interface Receive as Snoop[am_id_t id];
+ interface AMPacket;
interface Packet;
interface TimeSyncAMSend<TRadio, uint32_t> as TimeSyncAMSendRadio[am_id_t id];
interface LocalTime<TRadio> as LocalTimeRadio;
interface PacketField<uint8_t> as PacketTimeSyncOffset;
-
- interface AMSend as SubSend[am_id_t id];
- interface Packet as SubPacket;
}
}
{
components TimeSyncMessageLayerP, LocalTimeMilliC;
+ AMPacket = TimeSyncMessageLayerP;
Packet = TimeSyncMessageLayerP;
+ Receive = TimeSyncMessageLayerP.Receive;
+ Snoop = TimeSyncMessageLayerP.Snoop;
+
TimeSyncAMSendRadio = TimeSyncMessageLayerP;
TimeSyncPacketRadio = TimeSyncMessageLayerP;
TimeSyncAMSendMilli = TimeSyncMessageLayerP;
TimeSyncPacketMilli = TimeSyncMessageLayerP;
- SubSend = TimeSyncMessageLayerP;
- SubPacket = TimeSyncMessageLayerP;
+ // Ok, we use the AMSenderC infrastructure to avoid concurrent send clashes
+ components new AMSenderC(AM_TIMESYNCMSG);
+ TimeSyncMessageLayerP.SubAMSend -> AMSenderC;
+ TimeSyncMessageLayerP.SubAMPacket -> AMSenderC;
+ TimeSyncMessageLayerP.SubPacket -> AMSenderC;
+
+ components ActiveMessageC;
+ TimeSyncMessageLayerP.SubReceive -> ActiveMessageC.Receive[AM_TIMESYNCMSG];
+ TimeSyncMessageLayerP.SubSnoop -> ActiveMessageC.Snoop[AM_TIMESYNCMSG];;
PacketTimeStampRadio = TimeSyncMessageLayerP;
PacketTimeStampMilli = TimeSyncMessageLayerP;