#if defined(TOSTHREAD_LOGSTORAGE_H) || defined(TOSTHREAD_DYNAMIC_LOADER)
components CLogStorageC;
#endif
+ #if defined(TOSTHREAD_COLLECTION_H) || defined(TOSTHREAD_DYNAMIC_LOADER)
+ components CCollectionC;
+ #endif
//Telosb sensorboard specific.
#if defined(TOSTHREAD_HAMAMATSUS1087_H) || defined(TOSTHREAD_DYNAMIC_LOADER)
+++ /dev/null
-/*
- * Copyright (c) 2008 Johns Hopkins University.
- * 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 (updated) modification history and the author appear in
- * all copies of this source code.
- *
- * 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 THE COPYRIGHT HOLDERS OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA,
- * OR PROFITS) 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.
-*/
-
-/*
- * @author Chieh-Jan Mike Liang <cliang4@cs.jhu.edu>
- */
-
-#include <Ctp.h>
-
-generic configuration BlockingCollectionSenderC (collection_id_t collectid) {
- provides {
- interface BlockingSend;
- interface Packet;
- }
-}
-
-implementation {
- components new BlockingCollectionSenderP(collectid, unique(UQ_CTP_CLIENT)),
- CollectionC as Collector;
-
- BlockingSend = BlockingCollectionSenderP;
- Packet = Collector;
-}
/*
* @author Chieh-Jan Mike Liang <cliang4@cs.jhu.edu>
+ * @author Kevin Klues <klueska@cs.stanford.edu>
*/
-generic configuration BlockingCollectionSenderP (collection_id_t collectid, uint8_t clientid) {
+configuration BlockingCollectionSenderP {
provides {
- interface BlockingSend;
+ interface BlockingSend[uint8_t id];
}
}
implementation {
components BlockingCollectionSenderImplP,
CollectionC as Collector,
- new CollectionIdP(collectid),
MutexC,
SystemCallC,
MainC,
LedsC;
MainC.SoftwareInit -> BlockingCollectionSenderImplP;
- BlockingSend = BlockingCollectionSenderImplP.BlockingSend[clientid];
+ BlockingSend = BlockingCollectionSenderImplP.BlockingSend;
BlockingCollectionSenderImplP.Mutex -> MutexC;
BlockingCollectionSenderImplP.SystemCall -> SystemCallC;
- BlockingCollectionSenderImplP.Send[clientid] -> Collector[clientid];
+ BlockingCollectionSenderImplP.Send -> Collector;
BlockingCollectionSenderImplP.Packet -> Collector;
BlockingCollectionSenderImplP.Leds -> LedsC;
-
- Collector.CollectionId[clientid] -> CollectionIdP;
}
+
+++ /dev/null
-/*
- * Copyright (c) 2008 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.
- */
-
-/**
- * @author Kevin Klues <klueska@cs.stanford.edu>
- */
-
-#include "tosthread_collection.h"
-
-configuration CCollectionC {}
-
-implementation {
- components CCollectionP as CCP;
- components BlockingCollectionReceiverP;
- components BlockingCollectionSnooperP;
- components BlockingCollectionSenderP;
-
- CAMP.BlockingStdControl -> AM;
- CAMP.BlockingReceive -> AM.BlockingReceive;
- CAMP.BlockingSnoop -> AM.BlockingSnoop;
- CAMP.BlockingReceiveAny -> AM.BlockingReceiveAny;
- CAMP.BlockingSnoopAny -> AM.BlockingSnoopAny;
- CAMP.Send -> AM;
- CAMP.Packet -> AM;
- CAMP.AMPacket -> AM;
- CAMP.PacketAcknowledgements -> AM;
-}
module CCollectionP {
uses {
- interface BlockingStdControl;
- interface BlockingReceive[am_id_t amId];
- interface BlockingReceive as BlockingReceiveAny;
- interface BlockingReceive as BlockingSnoop[am_id_t amId];
- interface BlockingReceive as BlockingSnoopAny;
- interface BlockingAMSend as Send[am_id_t id];
+ interface BlockingStdControl as RoutingControl;
+ interface BlockingReceive[collection_id_t id];
+ interface BlockingReceive as BlockingSnoop[collection_id_t id];
+ interface BlockingSend[am_id_t id];
interface Packet;
- interface AMPacket;
- interface PacketAcknowledgements;
+ interface CollectionPacket;
+ interface RootControl;
+ }
+ provides {
+ interface CollectionId[uint8_t client];
}
}
implementation {
+ command collection_id_t CollectionId.fetch[uint8_t id]() {
+ return id;
+ }
+
+ error_t collectionRoutingStart() @C() @spontaneous() {
+ return call RoutingControl.start();
+ }
+ error_t collectionRoutingStop() @C() @spontaneous() {
+ return call RoutingControl.stop();
+ }
+
error_t collectionReceive(message_t* m, uint32_t timeout, collection_id_t id) @C() @spontaneous() {
+ return call BlockingReceive.receive[id](m, timeout);
}
error_t collectionSnoop(message_t* m, uint32_t timeout, collection_id_t id) @C() @spontaneous() {
+ return call BlockingSnoop.receive[id](m, timeout);
}
error_t collectionSend(message_t* msg, uint8_t len, collection_id_t id) @C() @spontaneous() {
+ return call BlockingSend.send[id](msg, len);
}
void collectionClear(message_t* msg) @C() @spontaneous() {
+ call Packet.clear(msg);
}
uint8_t collectionGetPayloadLength(message_t* msg) @C() @spontaneous() {
+ return call Packet.payloadLength(msg);
}
void collectionSetPayloadLength(message_t* msg, uint8_t len) @C() @spontaneous() {
+ call Packet.setPayloadLength(msg, len);
}
uint8_t collectionMaxPayloadLength() @C() @spontaneous() {
+ return call Packet.maxPayloadLength();
}
void* collectionGetPayload(message_t* msg, uint8_t len) @C() @spontaneous() {
+ return call Packet.getPayload(msg, len);
}
am_addr_t collectionGetOrigin(message_t* msg) @C() @spontaneous() {
+ return call CollectionPacket.getOrigin(msg);
}
void collectionSetOrigin(message_t* msg, am_addr_t addr) @C() @spontaneous() {
+ call CollectionPacket.setOrigin(msg, addr);
}
collection_id_t collectionGetType(message_t* msg) @C() @spontaneous() {
+ return call CollectionPacket.getType(msg);
}
void collectionSetType(message_t* msg, collection_id_t id) @C() @spontaneous() {
+ call CollectionPacket.setType(msg, id);
}
uint8_t collectionGetSequenceNumber(message_t* msg) @C() @spontaneous() {
+ return call CollectionPacket.getSequenceNumber(msg);
}
void collectionSetSequenceNumber(message_t* msg, uint8_t seqno) @C() @spontaneous() {
+ call CollectionPacket.setSequenceNumber(msg, seqno);
}
error_t collectionSetRoot() @C() @spontaneous() {
+ return call RootControl.setRoot();
}
error_t collectionUnsetRoot() @C() @spontaneous() {
+ return call RootControl.unsetRoot();
}
bool collectionIsRoot() @C() @spontaneous() {
+ return call RootControl.isRoot();
}
}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 2008 Johns Hopkins University.
+ * 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 (updated) modification history and the author appear in
+ * all copies of this source code.
+ *
+ * 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 THE COPYRIGHT HOLDERS OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA,
+ * OR PROFITS) 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.
+*/
+
+/*
+ * @author Chieh-Jan Mike Liang <cliang4@cs.jhu.edu>
+ * @author Kevin Klues <klueska@cs.stanford.edu>
+ */
+
+#include <Ctp.h>
+
+generic configuration BlockingCollectionSenderC (collection_id_t collectid) {
+ provides {
+ interface BlockingSend;
+ interface Packet;
+ }
+}
+
+implementation {
+ components BlockingCollectionSenderP,
+ new CollectionIdP(collectid),
+ CollectionC as Collector;
+
+ enum {
+ CLIENT_ID = unique(UQ_CTP_CLIENT),
+ };
+
+ BlockingSend = BlockingCollectionSenderP.BlockingSend[CLIENT_ID];
+ Packet = Collector;
+
+ Collector.CollectionId[CLIENT_ID] -> CollectionIdP;
+}
--- /dev/null
+/*
+ * Copyright (c) 2008 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.
+ */
+
+/**
+ * @author Kevin Klues <klueska@cs.stanford.edu>
+ */
+
+#include "tosthread_collection.h"
+#include "Ctp.h"
+
+configuration CCollectionC {}
+
+implementation {
+ components CCollectionP as CCP;
+ components BlockingCollectionReceiverP;
+ components BlockingCollectionSnooperP;
+ components BlockingCollectionSenderP;
+ components BlockingCollectionControlC;
+
+ //Allocate enough room in the message queue for all message types.
+ //This number needs to be 255-1-12 because
+ //(1) The max number that can be provided to the Queue underneath for its size is 255
+ //(2) uniqueN() will give you values from 0..N constituting N+1 unique numbers
+ //(3) there are 12 spaces reserved in the send queue in CtpP for forwarding messages.
+ //I don't like this implementation, but it will do for now....
+ enum {
+ FIRST_CLIENT = uniqueN(UQ_CTP_CLIENT, 255-1-12),
+ };
+
+ CCP.BlockingReceive -> BlockingCollectionReceiverP;
+ CCP.BlockingSnoop -> BlockingCollectionSnooperP;
+ CCP.BlockingSend -> BlockingCollectionSenderP;
+ CCP.RoutingControl -> BlockingCollectionControlC;
+
+ components CollectionC;
+ CCP.Packet -> CollectionC;
+ CCP.CollectionPacket -> CollectionC;
+ CCP.RootControl -> CollectionC;
+ CollectionC.CollectionId -> CCP;
+}
--- /dev/null
+/*
+ * Copyright (c) 2008 Johns Hopkins University.
+ * 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 (updated) modification history and the author appear in
+ * all copies of this source code.
+ *
+ * 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 THE COPYRIGHT HOLDERS OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA,
+ * OR PROFITS) 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.
+*/
+
+/*
+ * @author Chieh-Jan Mike Liang <cliang4@cs.jhu.edu>
+ * @author Kevin Klues <klueska@cs.stanford.edu>
+ */
+
+#include <MultiHopLqi.h>
+
+generic configuration BlockingCollectionSenderC (collection_id_t collectid) {
+ provides {
+ interface BlockingSend;
+ interface Packet;
+ }
+}
+
+implementation {
+ components BlockingCollectionSenderP,
+ new CollectionIdP(collectid),
+ CollectionC as Collector;
+
+ enum {
+ CLIENT_ID = unique(UQ_LQI_CLIENT),
+ };
+
+ BlockingSend = BlockingCollectionSenderP.BlockingSend[CLIENT_ID];
+ Packet = Collector;
+
+ Collector.CollectionId[CLIENT_ID] -> CollectionIdP;
+}
--- /dev/null
+/*
+ * Copyright (c) 2008 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.
+ */
+
+/**
+ * @author Kevin Klues <klueska@cs.stanford.edu>
+ */
+
+#include "tosthread_collection.h"
+#include "MultiHopLqi.h"
+
+configuration CCollectionC {}
+
+implementation {
+ components CCollectionP as CCP;
+ components BlockingCollectionReceiverP;
+ components BlockingCollectionSnooperP;
+ components BlockingCollectionSenderP;
+ components BlockingCollectionControlC;
+
+ //Allocate enough room in the message queue for all message types.
+ //This number needs to be 255-1-12 because
+ //(1) The max number that can be provided to the Queue underneath for its size is 255
+ //(2) uniqueN() will give you values from 0..N constituting N+1 unique numbers
+ //(3) there are 12 spaces reserved in the send queue in CtpP for forwarding messages.
+ //I don't like this implementation, but it will do for now....
+ enum {
+ FIRST_CLIENT = uniqueN(UQ_LQI_CLIENT, 255-1-12),
+ };
+
+ CCP.BlockingReceive -> BlockingCollectionReceiverP;
+ CCP.BlockingSnoop -> BlockingCollectionSnooperP;
+ CCP.BlockingSend -> BlockingCollectionSenderP;
+ CCP.RoutingControl -> BlockingCollectionControlC;
+
+ components CollectionC;
+ CCP.Packet -> CollectionC;
+ CCP.CollectionPacket -> CollectionC;
+ CCP.RootControl -> CollectionC;
+ CollectionC.CollectionId -> CCP;
+}
#define TOSTHREAD_COLLECTION_H
#include "message.h"
-#include "AM.h"
#include "TinyError.h"
+#include "Collection.h"
+
+extern error_t collectionRoutingStart();
+extern error_t collectionRoutingStop();
extern error_t collectionReceive(message_t* m, uint32_t timeout, collection_id_t id);
extern error_t collectionSnoop(message_t* m, uint32_t timeout, collection_id_t id);