treecollectionc.nc

来自「tinyos-2.0源代码!转载而已!要的尽管拿!」· NC 代码 · 共 177 行

NC
177
字号
/* * "Copyright (c) 2005 The Regents of the University  of California.   * All rights reserved. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose, without fee, and without written agreement is * hereby granted, provided that the above copyright notice, the following * two paragraphs and the author appear in all copies of this software. *  * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *  * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." * *//* * Copyright (c) 2006 Stanford University. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * - Redistributions of source code must retain the above copyright *   notice, this list of conditions and the following disclaimer. * - Redistributions in binary form must reproduce the above copyright *   notice, this list of conditions and the following disclaimer in the *   documentation and/or other materials provided with the *   distribution. * - Neither the name of the Stanford University nor the names of *   its contributors may be used to endorse or promote products derived *   from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL STANFORD * UNIVERSITY OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */#include "Collection.h"#include "TreeCollection.h"#include "ForwardingEngine.h"/** * A data collection service that uses a tree routing protocol * to deliver data to collection roots, following TEP 119. * * @author Rodrigo Fonseca * @author Omprakash Gnawali * @author Kyle Jamieson * @author Philip Levis */configuration TreeCollectionC {  provides {    interface StdControl;    interface Send[uint8_t client];    interface Receive[collection_id_t id];    interface Receive as Snoop[collection_id_t];    interface Intercept[collection_id_t id];    interface RootControl;    interface Packet;    interface CollectionPacket;    interface TreeRoutingInspect;  }  uses {    interface CollectionId[uint8_t client];    interface CollectionDebug;  }}implementation {  enum {    CLIENT_COUNT = uniqueCount(UQ_COLLECTION_CLIENT),    FORWARD_COUNT = 5,    TREE_ROUTING_TABLE_SIZE = 10,    QUEUE_SIZE = CLIENT_COUNT + FORWARD_COUNT,    CACHE_SIZE = 4,  };  components ActiveMessageC;  components new ForwardingEngineP() as Forwarder;  components MainC;    Send = Forwarder;  StdControl = Forwarder;  Receive = Forwarder.Receive;  Snoop = Forwarder.Snoop;  Intercept = Forwarder;  Packet = Forwarder;  CollectionId = Forwarder;  CollectionPacket = Forwarder;    components new PoolC(message_t, FORWARD_COUNT) as MessagePoolP;  components new PoolC(fe_queue_entry_t, FORWARD_COUNT) as QEntryPoolP;  Forwarder.QEntryPool -> QEntryPoolP;  Forwarder.MessagePool -> MessagePoolP;  components new QueueC(fe_queue_entry_t*, QUEUE_SIZE) as SendQueueP;  Forwarder.SendQueue -> SendQueueP;  components new LruIntCacheC(uint32_t, CACHE_SIZE) as SentCacheP;  Forwarder.SentCache -> SentCacheP;  components new TimerMilliC() as RoutingBeaconTimer;  components LinkEstimatorP as Estimator;  components new AMSenderC(AM_COLLECTION_DATA);  components new AMReceiverC(AM_COLLECTION_DATA);  components new AMSnooperC(AM_COLLECTION_DATA);    components new TreeRoutingEngineP(TREE_ROUTING_TABLE_SIZE) as Router;  StdControl = Router;  StdControl = Estimator;  RootControl = Router;  MainC.SoftwareInit -> Router;  Router.BeaconSend -> Estimator.Send;  Router.BeaconReceive -> Estimator.Receive;  Router.LinkEstimator -> Estimator.LinkEstimator;  Router.LinkSrcPacket -> Estimator.LinkSrcPacket;  Router.AMPacket -> ActiveMessageC;  Router.RadioControl -> ActiveMessageC;  Router.BeaconTimer -> RoutingBeaconTimer;  Router.CollectionDebug = CollectionDebug;  Forwarder.CollectionDebug = CollectionDebug;  Forwarder.TreeRoutingInspect -> Router;  TreeRoutingInspect = Router;   components new TimerMilliC() as RetxmitTimer;  Forwarder.RetxmitTimer -> RetxmitTimer;  components RandomC;  Router.Random -> RandomC;  Forwarder.Random -> RandomC;  MainC.SoftwareInit -> Forwarder;  Forwarder.SubSend -> AMSenderC;  Forwarder.SubReceive -> AMReceiverC;  Forwarder.SubSnoop -> AMSnooperC;  Forwarder.SubPacket -> AMSenderC;  Forwarder.RootControl -> Router;  Forwarder.UnicastNameFreeRouting -> Router.Routing;  Forwarder.RadioControl -> ActiveMessageC;  Forwarder.PacketAcknowledgements -> AMSenderC.Acks;  Forwarder.AMPacket -> AMSenderC;  components new AMSenderC(AM_COLLECTION_CONTROL) as SendControl;  components new AMReceiverC(AM_COLLECTION_CONTROL) as ReceiveControl;  components new AMSenderC(AM_LINKEST) as SendLinkEst;  components new AMReceiverC(AM_LINKEST) as ReceiveLinkEst;  components new TimerMilliC() as EstimatorTimer;    Estimator.AMSend -> SendControl;  Estimator.SubReceive -> ReceiveControl;  Estimator.AMSendLinkEst -> SendLinkEst;  Estimator.ReceiveLinkEst -> ReceiveLinkEst;  Estimator.SubPacket -> SendControl;  Estimator.SubAMPacket -> SendControl;  Estimator.Timer -> EstimatorTimer;  MainC.SoftwareInit -> Estimator;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?