}
implementation
{
- components
+ components DataP,
+ PibP,
+ RadioControlP,
+ IndirectTxP,
+ PollP,
+
#ifndef IEEE154_SCAN_DISABLED
ScanP,
#else
NoScanP as ScanP,
#endif
- DataP,
+
+#ifndef IEEE154_ASSOCIATION_DISABLED
AssociateP,
- PollP,
- RxEnableP,
- IndirectTxP,
- PibP,
- RadioControlP,
+#else
+ NoAssociateP as AssociateP,
+#endif
+
+#ifndef IEEE154_DISASSOCIATION_DISABLED
+ DisassociateP,
+#else
+ NoDisassociateP as DisassociateP,
+#endif
#ifndef IEEE154_BEACON_SYNC_DISABLED
BeaconSynchronizeP,
- new CsmaQueueP() as DeviceCapQueue,
- new CsmaP(INCOMING_SUPERFRAME) as DeviceCap,
+ new FrameDispatchQueueP() as DeviceCapQueue,
+ new FrameDispatchP(INCOMING_SUPERFRAME) as DeviceCap,
#else
NoBeaconSynchronizeP as BeaconSynchronizeP,
- new NoCsmaQueueP() as DeviceCapQueue,
- new NoCsmaP() as DeviceCap,
+ new NoFrameDispatchQueueP() as DeviceCapQueue,
+ new NoFrameDispatchP(INCOMING_SUPERFRAME) as DeviceCap,
#endif
NoDeviceCfpP as DeviceCfp,
#ifndef IEEE154_BEACON_TX_DISABLED
BeaconTransmitP,
- new CsmaQueueP() as CoordCapQueue,
- new CsmaP(OUTGOING_SUPERFRAME) as CoordCap,
+ new FrameDispatchQueueP() as CoordCapQueue,
+ new FrameDispatchP(OUTGOING_SUPERFRAME) as CoordCap,
#else
NoBeaconTransmitP as BeaconTransmitP,
- new NoCsmaQueueP() as CoordCapQueue,
- new NoCsmaP() as CoordCap,
+ new NoFrameDispatchQueueP() as CoordCapQueue,
+ new NoFrameDispatchP(OUTGOING_SUPERFRAME) as CoordCap,
#endif
NoCoordCfpP as CoordCfp,
+#ifndef IEEE154_RXENABLE_DISABLED
+ RxEnableP,
+#else
+ NoRxEnableP as RxEnableP,
+#endif
+
+
+#ifndef IEEE154_PROMISCUOUS_MODE_DISABLED
+ PromiscuousModeP,
+#else
+ NoPromiscuousModeP as PromiscuousModeP,
+#endif
+
+#ifndef IEEE154_COORD_REALIGNMENT_DISABLED
CoordRealignmentP,
+#else
+ NoCoordRealignmentP as CoordRealignmentP,
+#endif
+
+#ifndef IEEE154_COORD_BROADCAST_DISABLED
CoordBroadcastP,
+#else
+ NoCoordBroadcastP as CoordBroadcastP,
+#endif
+
new PoolC(ieee154_txframe_t, TXFRAME_POOL_SIZE) as TxFramePoolP,
new PoolC(ieee154_txcontrol_t, TXCONTROL_POOL_SIZE) as TxControlPoolP,
new QueueC(ieee154_txframe_t*, CAP_TX_QUEUE_SIZE) as DeviceCapQueueC,
//MLME
MLME_START = BeaconTransmitP;
MLME_ASSOCIATE = AssociateP;
+ MLME_DISASSOCIATE = DisassociateP;
MLME_BEACON_NOTIFY = BeaconSynchronizeP;
MLME_BEACON_NOTIFY = ScanP;
MLME_COMM_STATUS = AssociateP;
MLME_COMM_STATUS = CoordRealignmentP;
- MLME_DISASSOCIATE = AssociateP;
MLME_GET = PibP;
MLME_ORPHAN = CoordRealignmentP;
/* MLME_GTS = CfpTransmitP;*/
MLME_SYNC_LOSS = BeaconSynchronizeP;
IEEE154Frame = PibP;
IEEE154BeaconFrame = PibP;
- PromiscuousMode = RxEnableP;
+ PromiscuousMode = PromiscuousModeP;
GetLocalExtendedAddress = PibP.GetLocalExtendedAddress;
IEEE154TxBeaconPayload = BeaconTransmitP;
Packet = PibP;
/* ----------------- Beacon Transmission (MLME-START) ----------------- */
- components new RadioClientC() as StartRadioClient;
+ components new RadioClientC() as BeaconTxRadioClient;
PibP.MacReset -> BeaconTransmitP;
BeaconTransmitP.PIBUpdate[IEEE154_macAssociationPermit] -> PibP.PIBUpdate[IEEE154_macAssociationPermit];
BeaconTransmitP.PIBUpdate[IEEE154_macGTSPermit] -> PibP.PIBUpdate[IEEE154_macGTSPermit];
BeaconTransmitP.BeaconTxAlarm = Alarm1;
BeaconTransmitP.BeaconPayloadUpdateTimer = Timer2;
- BeaconTransmitP.RadioOff -> StartRadioClient;
+ BeaconTransmitP.RadioOff -> BeaconTxRadioClient;
BeaconTransmitP.IsBeaconEnabledPAN -> PibP.IsBeaconEnabledPAN;
- BeaconTransmitP.BeaconTx -> StartRadioClient;
+ BeaconTransmitP.BeaconTx -> BeaconTxRadioClient;
BeaconTransmitP.MLME_SET -> PibP.MLME_SET;
BeaconTransmitP.MLME_GET -> PibP;
BeaconTransmitP.SetMacSuperframeOrder -> PibP.SetMacSuperframeOrder;
BeaconTransmitP.SetMacBeaconTxTime -> PibP.SetMacBeaconTxTime;
BeaconTransmitP.SetMacPanCoordinator -> PibP.SetMacPanCoordinator;
- BeaconTransmitP.Token -> StartRadioClient;
- BeaconTransmitP.TokenToBroadcast -> StartRadioClient;
+ BeaconTransmitP.Token -> BeaconTxRadioClient;
+ BeaconTransmitP.IsTokenRequested -> BeaconTxRadioClient;
+ BeaconTransmitP.TokenTransferred -> BeaconTxRadioClient;
+ BeaconTransmitP.TokenToBroadcast -> BeaconTxRadioClient;
BeaconTransmitP.RealignmentBeaconEnabledTx -> CoordBroadcastP.RealignmentTx;
BeaconTransmitP.RealignmentNonBeaconEnabledTx -> CoordCapQueue.FrameTx[unique(CAP_TX_CLIENT)];
BeaconTransmitP.BeaconRequestRx -> CoordCap.FrameRx[FC1_FRAMETYPE_CMD + CMD_FRAME_BEACON_REQUEST];
BeaconTransmitP.IsBroadcastReady -> CoordBroadcastP.IsBroadcastReady;
BeaconTransmitP.TimeCalc -> PibP;
BeaconTransmitP.Leds = Leds;
- BeaconTransmitP.Debug = Ieee802154Debug[START_CLIENT];
- StartRadioClient.TransferTo -> CoordBroadcastRadioClient.TransferFrom;
+ BeaconTransmitP.Debug = Ieee802154Debug[DEBUG_BEACON_TRANSMIT_ID];
+ BeaconTxRadioClient.TransferTo -> CoordBroadcastRadioClient.TransferFrom;
-/* ---------------- Beacon Synchronization (MLME-SYNC) ---------------- */
+/* ------------------ Beacon Tracking (MLME-SYNC) ------------------ */
components new RadioClientC() as SyncRadioClient;
PibP.MacReset -> BeaconSynchronizeP;
BeaconSynchronizeP.BeaconRx -> SyncRadioClient;
BeaconSynchronizeP.RadioOff -> SyncRadioClient;
BeaconSynchronizeP.IsBeaconEnabledPAN -> PibP.IsBeaconEnabledPAN;
- BeaconSynchronizeP.DataRequest -> PollP.DataRequest[SYNC_CLIENT];
+ BeaconSynchronizeP.DataRequest -> PollP.DataRequest[SYNC_POLL_CLIENT];
BeaconSynchronizeP.Token -> SyncRadioClient;
+ BeaconSynchronizeP.IsTokenRequested -> SyncRadioClient;
+ BeaconSynchronizeP.TokenTransferred -> SyncRadioClient;
BeaconSynchronizeP.TokenToCap -> SyncRadioClient;
BeaconSynchronizeP.TimeCalc -> PibP;
BeaconSynchronizeP.CoordRealignmentRx -> DeviceCap.FrameRx[FC1_FRAMETYPE_CMD + CMD_FRAME_COORDINATOR_REALIGNMENT];
BeaconSynchronizeP.Leds = Leds;
- BeaconSynchronizeP.Debug = Ieee802154Debug[SYNC_CLIENT];
+ BeaconSynchronizeP.Debug = Ieee802154Debug[DEBUG_BEACON_SYNCHRONIZE_ID];
SyncRadioClient.TransferTo -> DeviceCapRadioClient.TransferFrom;
-/* --------------- Dis/Association (MLME-DIS/ASSOCIATE) --------------- */
+/* -------------------- Association (MLME-ASSOCIATE) -------------------- */
PibP.MacReset -> AssociateP;
AssociateP.AssociationRequestRx -> CoordCap.FrameRx[FC1_FRAMETYPE_CMD + CMD_FRAME_ASSOCIATION_REQUEST];
AssociateP.AssociationRequestTx -> DeviceCapQueue.FrameTx[unique(CAP_TX_CLIENT)];
AssociateP.AssociationResponseExtracted -> DeviceCap.FrameExtracted[FC1_FRAMETYPE_CMD + CMD_FRAME_ASSOCIATION_RESPONSE];
AssociateP.AssociationResponseTx -> IndirectTxP.FrameTx[unique(INDIRECT_TX_CLIENT)];
- AssociateP.DisassociationIndirectTx -> IndirectTxP.FrameTx[unique(INDIRECT_TX_CLIENT)];
- AssociateP.DisassociationDirectTx -> CoordCapQueue.FrameTx[unique(CAP_TX_CLIENT)];
- AssociateP.DisassociationToCoord -> DeviceCapQueue.FrameTx[unique(CAP_TX_CLIENT)];
- AssociateP.DisassociationDirectRxFromCoord ->
- DeviceCap.FrameRx[FC1_FRAMETYPE_CMD + CMD_FRAME_DISASSOCIATION_NOTIFICATION];
- AssociateP.DisassociationExtractedFromCoord ->
- DeviceCap.FrameExtracted[FC1_FRAMETYPE_CMD + CMD_FRAME_DISASSOCIATION_NOTIFICATION];
- AssociateP.DisassociationRxFromDevice ->
- CoordCap.FrameRx[FC1_FRAMETYPE_CMD + CMD_FRAME_DISASSOCIATION_NOTIFICATION];
- AssociateP.DataRequest -> PollP.DataRequest[ASSOCIATE_CLIENT];
+ AssociateP.DataRequest -> PollP.DataRequest[ASSOCIATE_POLL_CLIENT];
AssociateP.ResponseTimeout = Timer3;
AssociateP.TxFramePool -> TxFramePoolP;
AssociateP.TxControlPool -> TxControlPoolP;
AssociateP.MLME_SET -> PibP.MLME_SET;
AssociateP.FrameUtility -> PibP;
AssociateP.Frame -> PibP;
- AssociateP.Leds = Leds;
AssociateP.LocalExtendedAddress -> PibP.GetLocalExtendedAddress;
- AssociateP.Debug = Ieee802154Debug[ASSOCIATE_CLIENT];
+ AssociateP.Debug = Ieee802154Debug[DEBUG_ASSOCIATE_ID];
+
+/* --------------- Disassociation (MLME-DISASSOCIATE) --------------- */
+
+ PibP.MacReset -> DisassociateP;
+ DisassociateP.DisassociationIndirectTx -> IndirectTxP.FrameTx[unique(INDIRECT_TX_CLIENT)];
+ DisassociateP.DisassociationDirectTx -> CoordCapQueue.FrameTx[unique(CAP_TX_CLIENT)];
+ DisassociateP.DisassociationToCoord -> DeviceCapQueue.FrameTx[unique(CAP_TX_CLIENT)];
+ DisassociateP.DisassociationDirectRxFromCoord ->
+ DeviceCap.FrameRx[FC1_FRAMETYPE_CMD + CMD_FRAME_DISASSOCIATION_NOTIFICATION];
+ DisassociateP.DisassociationExtractedFromCoord ->
+ DeviceCap.FrameExtracted[FC1_FRAMETYPE_CMD + CMD_FRAME_DISASSOCIATION_NOTIFICATION];
+ DisassociateP.DisassociationRxFromDevice ->
+ CoordCap.FrameRx[FC1_FRAMETYPE_CMD + CMD_FRAME_DISASSOCIATION_NOTIFICATION];
+ DisassociateP.TxFramePool -> TxFramePoolP;
+ DisassociateP.TxControlPool -> TxControlPoolP;
+ DisassociateP.MLME_GET -> PibP;
+ DisassociateP.FrameUtility -> PibP;
+ DisassociateP.Frame -> PibP;
+ DisassociateP.LocalExtendedAddress -> PibP.GetLocalExtendedAddress;
+ DisassociateP.Debug = Ieee802154Debug[DEBUG_DISASSOCIATE_ID];
/* ------------------ Data Transmission (MCPS-DATA) ------------------- */
DataP.DeviceCapTx -> DeviceCapQueue.FrameTx[unique(CAP_TX_CLIENT)];
DataP.CoordCapTx -> CoordCapQueue.FrameTx[unique(CAP_TX_CLIENT)];
DataP.DeviceCapRx -> PollP.DataRx; // indirect
- DataP.DeviceCapRx -> RxEnableP.FrameRx; // promiscuous
+ DataP.DeviceCapRx -> PromiscuousModeP.FrameRx; // promiscuous
DataP.DeviceCapRx -> DeviceCap.FrameRx[FC1_FRAMETYPE_DATA]; // broadcast
DataP.TxFramePool -> TxFramePoolP;
DataP.BroadcastTx -> CoordBroadcastP.BroadcastDataFrame;
PollP.FrameUtility -> PibP;
PollP.TxFramePool -> TxFramePoolP;
PollP.TxControlPool -> TxControlPoolP;
- PollP.Debug = Ieee802154Debug[POLL_CLIENT];
+ PollP.Debug = Ieee802154Debug[DEBUG_POLL_ID];
PollP.MLME_GET -> PibP;
PollP.LocalExtendedAddress -> PibP.GetLocalExtendedAddress;
IndirectTxP.IndirectTxTimeout = Timer4;
IndirectTxP.TimeCalc -> PibP;
IndirectTxP.Leds = Leds;
- IndirectTxP.Debug = Ieee802154Debug[INDIRECTTX_DEBUG_CLIENT];
+ IndirectTxP.Debug = Ieee802154Debug[DEBUG_INDIRECTTX_ID];
/* ---------------------------- Realignment --------------------------- */
components new RadioClientC() as DeviceCapRadioClient;
PibP.CapReset -> DeviceCap;
- DeviceCap.Random = Random;
DeviceCap.CapEndAlarm = Alarm3;
DeviceCap.BLEAlarm = Alarm4;
DeviceCap.IndirectTxWaitAlarm = Alarm5;
DeviceCap.BroadcastAlarm = Alarm6;
DeviceCap.Token -> DeviceCapRadioClient;
+ DeviceCap.IsTokenRequested -> DeviceCapRadioClient;
DeviceCap.TokenToCfp -> DeviceCapRadioClient;
DeviceCap.TokenTransferred -> DeviceCapRadioClient;
- DeviceCap.TokenRequested -> DeviceCapRadioClient;
- DeviceCap.IsTokenRequested -> DeviceCapRadioClient;
DeviceCap.CapStart -> BeaconSynchronizeP.CapStart;
DeviceCap.CapStartRefTime -> BeaconSynchronizeP.CapStartRefTime;
DeviceCap.CapLen -> BeaconSynchronizeP.CapLen;
DeviceCap.BLELen -> BeaconSynchronizeP.BLELen;
DeviceCap.IsRxBroadcastPending -> BeaconSynchronizeP.IsRxBroadcastPending;
DeviceCap.IsRxEnableActive -> RxEnableP.IsRxEnableActive;
+ DeviceCap.GetIndirectTxFrame -> IndirectTxP;
DeviceCap.RxEnableStateChange -> RxEnableP.RxEnableStateChange;
DeviceCap.IsTrackingBeacons -> BeaconSynchronizeP.IsTrackingBeacons;
DeviceCap.FrameUtility -> PibP;
DeviceCap.IsBeaconEnabledPAN -> PibP.IsBeaconEnabledPAN;
DeviceCap.MLME_GET -> PibP;
DeviceCap.MLME_SET -> PibP.MLME_SET;
- DeviceCap.Debug = Ieee802154Debug[DEVICE_CAP_CLIENT];
+ DeviceCap.Debug = Ieee802154Debug[DEBUG_FRAME_DISPATCH_DEVICE_ID];
DeviceCap.TimeCalc -> PibP;
DeviceCap.Leds = Leds;
DeviceCapRadioClient.TransferTo -> DeviceCfpRadioClient.TransferFrom;
components new RadioClientC() as CoordCapRadioClient,
new BackupP(ieee154_cap_frame_backup_t);
PibP.CapReset -> CoordCap;
- CoordCap.Random = Random;
CoordCap.CapEndAlarm = Alarm7;
CoordCap.BLEAlarm = Alarm8;
CoordCap.Token -> CoordCapRadioClient;
CoordCap.TokenToCfp -> CoordCapRadioClient;
CoordCap.TokenTransferred -> CoordCapRadioClient;
- CoordCap.TokenRequested -> CoordCapRadioClient;
CoordCap.IsTokenRequested -> CoordCapRadioClient;
CoordCap.CapStart -> BeaconTransmitP.CapStart;
CoordCap.CapStartRefTime -> BeaconTransmitP.CapStartRefTime;
CoordCap.IsBLEActive -> BeaconTransmitP.IsBLEActive;
CoordCap.BLELen -> BeaconTransmitP.BLELen;
CoordCap.IsRxEnableActive -> RxEnableP.IsRxEnableActive;
+ CoordCap.GetIndirectTxFrame -> IndirectTxP;
CoordCap.RxEnableStateChange -> RxEnableP.RxEnableStateChange;
CoordCap.IsTrackingBeacons -> BeaconSynchronizeP.IsTrackingBeacons;
CoordCap.FrameUtility -> PibP;
CoordCap.IsBeaconEnabledPAN -> PibP.IsBeaconEnabledPAN;
CoordCap.MLME_GET -> PibP;
CoordCap.MLME_SET -> PibP.MLME_SET;
- CoordCap.Debug = Ieee802154Debug[COORD_CAP_CLIENT];
+ CoordCap.Debug = Ieee802154Debug[DEBUG_FRAME_DISPATCH_COORD_ID];
CoordCap.TimeCalc -> PibP;
CoordCap.Leds = Leds;
CoordCapRadioClient.TransferTo -> CoordCfpRadioClient.TransferFrom;
components new RadioClientC() as DeviceCfpRadioClient;
PibP.MacReset -> DeviceCfp;
- DeviceCfp.Token -> DeviceCfpRadioClient;
DeviceCfp.TokenTransferred -> DeviceCfpRadioClient;
DeviceCfp.TokenRequested -> DeviceCfpRadioClient;
+ DeviceCfp.TokenToBeaconSync -> DeviceCfpRadioClient;
DeviceCfp.CapStartRefTime -> BeaconSynchronizeP.CapStartRefTime;
+ DeviceCfp.IsSendingBeacons -> BeaconTransmitP.IsSendingBeacons;
DeviceCfp.CfpEnd -> BeaconSynchronizeP.CfpEnd;
DeviceCfp.GtsField -> BeaconSynchronizeP.GtsField;
DeviceCfp.SfSlotDuration -> BeaconSynchronizeP.SfSlotDuration;
DeviceCfp.RadioOff -> DeviceCfpRadioClient;
DeviceCfp.MLME_GET -> PibP;
DeviceCfp.MLME_SET -> PibP.MLME_SET;
+ DeviceCfpRadioClient.TransferTo -> SyncRadioClient.TransferFrom;
/* -------------------- GTS (outgoing superframe) --------------------- */
components new RadioClientC() as CoordCfpRadioClient;
PibP.MacReset -> CoordCfp;
- CoordCfp.Token -> CoordCfpRadioClient;
CoordCfp.TokenTransferred -> CoordCfpRadioClient;
CoordCfp.TokenRequested -> CoordCfpRadioClient;
+ CoordCfp.IsTokenRequested -> CoordCfpRadioClient;
+ CoordCfp.TokenToBeaconTransmit -> CoordCfpRadioClient;
+ CoordCfp.IsTrackingBeacons -> BeaconSynchronizeP.IsTrackingBeacons;
CoordCfp.CfpEnd -> BeaconTransmitP.CfpEnd;
CoordCfp.GtsField -> BeaconTransmitP.GtsField;
CoordCfp.SfSlotDuration -> BeaconTransmitP.SfSlotDuration;
CoordCfp.RadioOff -> CoordCfpRadioClient;
CoordCfp.MLME_GET -> PibP;
CoordCfp.MLME_SET -> PibP.MLME_SET;
+ CoordCfpRadioClient.TransferTo -> BeaconTxRadioClient.TransferFrom;
+
+/* -------------------------- promiscuous mode ------------------------ */
+
+ components new RadioClientC() as PromiscuousModeRadioClient;
+ PibP.MacReset -> PromiscuousModeP;
+ PromiscuousModeP.Token -> PromiscuousModeRadioClient;
+ PromiscuousModeP.PromiscuousRx -> PromiscuousModeRadioClient;
+ PromiscuousModeP.RadioOff -> PromiscuousModeRadioClient;
+ PromiscuousModeP.RadioPromiscuousMode = RadioPromiscuousMode;
+ PromiscuousModeP.Debug = Ieee802154Debug[DEBUG_PROMISCUOUSMODE_ID];
-/* ------------------ MLME-RX-ENABLE / promiscuous mode --------------- */
+/* --------------------------- MLME-RX-ENABLE ------------------------ */
- components new RadioClientC() as RxEnableRadioClient;
PibP.MacReset -> RxEnableP;
- RxEnableP.Token -> RxEnableRadioClient;
- RxEnableP.PromiscuousRx -> RxEnableRadioClient;
RxEnableP.IncomingSfStart -> BeaconSynchronizeP.CapStart;
RxEnableP.OutgoingSfStart -> BeaconTransmitP.CapStart;
RxEnableP.IncomingBeaconInterval -> BeaconSynchronizeP.BeaconInterval;
RxEnableP.IsMacPanCoordinator -> PibP.IsMacPanCoordinator;
RxEnableP.IsBeaconEnabledPAN -> PibP.IsBeaconEnabledPAN;
RxEnableP.TimeCalc -> PibP.TimeCalc;
- RxEnableP.RadioOff -> RxEnableRadioClient;
- RxEnableP.RadioPromiscuousMode = RadioPromiscuousMode;
RxEnableP.WasRxEnabled -> DeviceCap.WasRxEnabled;
RxEnableP.WasRxEnabled -> CoordCap.WasRxEnabled;
RxEnableP.RxEnableTimer = Timer5;
- RxEnableP.Debug = Ieee802154Debug[RXENABLE_CLIENT];
+ RxEnableP.Debug = Ieee802154Debug[DEBUG_RXENABLE_ID];
/* ------------------------------- PIB -------------------------------- */
MainC.SoftwareInit -> PibP.LocalInit;
PibP.RadioControl = PhySplitControl;
PibP.Random = Random;
- PibP.PromiscuousModeGet -> RxEnableP;
+ PibP.PromiscuousModeGet -> PromiscuousModeP;
PibP.LocalTime = LocalTime;
PibP.Token -> PibRadioClient;
PibP.RadioOff -> PibRadioClient;
RadioControlP.PhyTx = RadioTx;
RadioControlP.PhyRx = RadioRx;
RadioControlP.PhyRadioOff = RadioOff;
- RadioControlP.RadioPromiscuousMode -> RxEnableP;
+ RadioControlP.RadioPromiscuousMode -> PromiscuousModeP;
RadioControlP.Leds = Leds;
- RadioControlP.Debug = Ieee802154Debug[RADIORXTX_CLIENT];
+ RadioControlP.Debug = Ieee802154Debug[DEBUG_RADIOCONTROL_ID];
}