From 802b282f295653b98398143e4b623373d462a02d Mon Sep 17 00:00:00 2001 From: klueska Date: Tue, 17 Jun 2008 19:19:10 +0000 Subject: [PATCH] Update to C api for CTP and MultiHopLqi --- tos/lib/tosthreads/csystem/TosThreadApiC.nc | 3 + .../lib/net/BlockingCollectionSenderP.nc | 13 ++-- tos/lib/tosthreads/lib/net/CCollectionP.nc | 45 +++++++++--- .../{ => ctp}/BlockingCollectionSenderC.nc | 12 +++- .../lib/net/{ => ctp}/CCollectionC.nc | 31 ++++++--- .../lib/net/lqi/BlockingCollectionSenderC.nc | 50 ++++++++++++++ .../tosthreads/lib/net/lqi/CCollectionC.nc | 68 +++++++++++++++++++ .../tosthreads/lib/net/tosthread_collection.h | 5 +- 8 files changed, 200 insertions(+), 27 deletions(-) rename tos/lib/tosthreads/lib/net/{ => ctp}/BlockingCollectionSenderC.nc (81%) rename tos/lib/tosthreads/lib/net/{ => ctp}/CCollectionC.nc (66%) create mode 100644 tos/lib/tosthreads/lib/net/lqi/BlockingCollectionSenderC.nc create mode 100644 tos/lib/tosthreads/lib/net/lqi/CCollectionC.nc diff --git a/tos/lib/tosthreads/csystem/TosThreadApiC.nc b/tos/lib/tosthreads/csystem/TosThreadApiC.nc index e8fb8af2..17803b99 100644 --- a/tos/lib/tosthreads/csystem/TosThreadApiC.nc +++ b/tos/lib/tosthreads/csystem/TosThreadApiC.nc @@ -67,6 +67,9 @@ implementation { #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) diff --git a/tos/lib/tosthreads/lib/net/BlockingCollectionSenderP.nc b/tos/lib/tosthreads/lib/net/BlockingCollectionSenderP.nc index 33a280f6..e2ba37e3 100644 --- a/tos/lib/tosthreads/lib/net/BlockingCollectionSenderP.nc +++ b/tos/lib/tosthreads/lib/net/BlockingCollectionSenderP.nc @@ -22,31 +22,30 @@ /* * @author Chieh-Jan Mike Liang + * @author Kevin Klues */ -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; } + diff --git a/tos/lib/tosthreads/lib/net/CCollectionP.nc b/tos/lib/tosthreads/lib/net/CCollectionP.nc index d462b35d..0ff4b8a0 100644 --- a/tos/lib/tosthreads/lib/net/CCollectionP.nc +++ b/tos/lib/tosthreads/lib/net/CCollectionP.nc @@ -35,53 +35,82 @@ 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 diff --git a/tos/lib/tosthreads/lib/net/BlockingCollectionSenderC.nc b/tos/lib/tosthreads/lib/net/ctp/BlockingCollectionSenderC.nc similarity index 81% rename from tos/lib/tosthreads/lib/net/BlockingCollectionSenderC.nc rename to tos/lib/tosthreads/lib/net/ctp/BlockingCollectionSenderC.nc index d2bea248..ce12d1cc 100644 --- a/tos/lib/tosthreads/lib/net/BlockingCollectionSenderC.nc +++ b/tos/lib/tosthreads/lib/net/ctp/BlockingCollectionSenderC.nc @@ -22,6 +22,7 @@ /* * @author Chieh-Jan Mike Liang + * @author Kevin Klues */ #include @@ -34,9 +35,16 @@ generic configuration BlockingCollectionSenderC (collection_id_t collectid) { } implementation { - components new BlockingCollectionSenderP(collectid, unique(UQ_CTP_CLIENT)), + components BlockingCollectionSenderP, + new CollectionIdP(collectid), CollectionC as Collector; + + enum { + CLIENT_ID = unique(UQ_CTP_CLIENT), + }; - BlockingSend = BlockingCollectionSenderP; + BlockingSend = BlockingCollectionSenderP.BlockingSend[CLIENT_ID]; Packet = Collector; + + Collector.CollectionId[CLIENT_ID] -> CollectionIdP; } diff --git a/tos/lib/tosthreads/lib/net/CCollectionC.nc b/tos/lib/tosthreads/lib/net/ctp/CCollectionC.nc similarity index 66% rename from tos/lib/tosthreads/lib/net/CCollectionC.nc rename to tos/lib/tosthreads/lib/net/ctp/CCollectionC.nc index 8036089a..7508b706 100644 --- a/tos/lib/tosthreads/lib/net/CCollectionC.nc +++ b/tos/lib/tosthreads/lib/net/ctp/CCollectionC.nc @@ -34,6 +34,7 @@ */ #include "tosthread_collection.h" +#include "Ctp.h" configuration CCollectionC {} @@ -42,14 +43,26 @@ implementation { components BlockingCollectionReceiverP; components BlockingCollectionSnooperP; components BlockingCollectionSenderP; + components BlockingCollectionControlC; - 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; + //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; } diff --git a/tos/lib/tosthreads/lib/net/lqi/BlockingCollectionSenderC.nc b/tos/lib/tosthreads/lib/net/lqi/BlockingCollectionSenderC.nc new file mode 100644 index 00000000..e65b6954 --- /dev/null +++ b/tos/lib/tosthreads/lib/net/lqi/BlockingCollectionSenderC.nc @@ -0,0 +1,50 @@ +/* + * 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 + * @author Kevin Klues + */ + +#include + +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; +} diff --git a/tos/lib/tosthreads/lib/net/lqi/CCollectionC.nc b/tos/lib/tosthreads/lib/net/lqi/CCollectionC.nc new file mode 100644 index 00000000..ecbb4a65 --- /dev/null +++ b/tos/lib/tosthreads/lib/net/lqi/CCollectionC.nc @@ -0,0 +1,68 @@ +/* + * 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 + */ + +#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; +} diff --git a/tos/lib/tosthreads/lib/net/tosthread_collection.h b/tos/lib/tosthreads/lib/net/tosthread_collection.h index 62daa345..4bdfb30e 100644 --- a/tos/lib/tosthreads/lib/net/tosthread_collection.h +++ b/tos/lib/tosthreads/lib/net/tosthread_collection.h @@ -37,8 +37,11 @@ #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); -- 2.39.2