* OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-/*
- * 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 Kevin Klues <klueska@cs.stanford.edu>
* @author Chieh-Jan Mike Liang <cliang4@cs.jhu.edu>
uses {
interface Boot;
interface Thread as ReceiveThread;
+ interface Thread as SnoopThread;
interface Thread as SendThread;
interface ConditionVariable;
interface Mutex;
interface Leds;
interface BlockingReceive as BlockingReceiveAny;
+ interface BlockingReceive as BlockingSnoopAny;
interface BlockingAMSend as BlockingAMSend[uint8_t id];
interface Packet as ReceivePacket;
interface Packet as SendPacket;
call Mutex.init(&m_queue);
call Mutex.init(&m_pool);
call ReceiveThread.start(NULL);
+ call SnoopThread.start(NULL);
call SendThread.start(NULL);
}
}
}
+ event void SnoopThread.run(void* arg) {
+ message_t* msg;
+ call Mutex.lock(&m_pool);
+ msg = call Pool.get();
+ call Mutex.unlock(&m_pool);
+ for(;;) {
+ if(call BlockingSnoopAny.receive(msg, 0) == SUCCESS) {
+ call Leds.led0Toggle();
+
+ call Mutex.lock(&m_queue);
+ call Queue.enqueue(msg);
+ call Mutex.unlock(&m_queue);
+ if( call Queue.size() == 1 ) {
+ call ConditionVariable.signalAll(&c_queue);
+ }
+
+ call Mutex.lock(&m_pool);
+ while( call Pool.empty() )
+ call ConditionVariable.wait(&c_pool, &m_pool);
+ msg = call Pool.get();
+ call Mutex.unlock(&m_pool);
+
+ }
+ else call Leds.led2Toggle();
+ }
+ }
+
event void SendThread.run(void* arg) {
message_t* msg;
am_id_t id;
}
}
}
+
+ default command error_t BlockingSnoopAny.receive(message_t* m, uint32_t timeout) { return FAIL; }
+ default command void* BlockingSnoopAny.getPayload(message_t* msg, uint8_t len) { return NULL; }
+ default command error_t SnoopThread.start(void* arg) { return FAIL; }
+ default command error_t SnoopThread.stop() { return FAIL; }
+ default command error_t SnoopThread.pause() { return FAIL; }
+ default command error_t SnoopThread.resume() { return FAIL; }
+ default command error_t SnoopThread.sleep(uint32_t milli) { return FAIL; }
}
* OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-/*
- * 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 Kevin Klues <klueska@cs.stanford.edu>
* @author Chieh-Jan Mike Liang <cliang4@cs.jhu.edu>
new ThreadC(BOOT_THREAD_STACK_SIZE) as BootThread,
new ThreadC(RADIO_RECEIVE_THREAD_STACK_SIZE) as RadioReceiveThread,
+ new ThreadC(RADIO_SNOOP_THREAD_STACK_SIZE) as RadioSnoopThread,
new ThreadC(SERIAL_SEND_THREAD_STACK_SIZE) as SerialSendThread,
new ThreadC(SERIAL_RECEIVE_THREAD_STACK_SIZE) as SerialReceiveThread,
new ThreadC(RADIO_SEND_THREAD_STACK_SIZE) as RadioSendThread,
BaseStationC.BootThread -> BootThread;
RadioReceiveSerialSendP.ReceiveThread -> RadioReceiveThread;
+ RadioReceiveSerialSendP.SnoopThread -> RadioSnoopThread;
RadioReceiveSerialSendP.SendThread -> SerialSendThread;
SerialReceiveRadioSendP.ReceiveThread -> SerialReceiveThread;
SerialReceiveRadioSendP.SendThread -> RadioSendThread;
RadioReceiveSerialSendP.ReceiveAMPacket -> BlockingRadioActiveMessageC;
RadioReceiveSerialSendP.SendAMPacket -> BlockingSerialActiveMessageC;
RadioReceiveSerialSendP.BlockingReceiveAny -> BlockingRadioActiveMessageC.BlockingReceiveAny;
+ RadioReceiveSerialSendP.BlockingSnoopAny -> BlockingRadioActiveMessageC.BlockingSnoopAny;
RadioReceiveSerialSendP.BlockingAMSend -> BlockingSerialActiveMessageC;
SerialReceiveRadioSendP.ReceivePacket -> BlockingSerialActiveMessageC;
call BlockingRadioAMControl.start();
call BlockingSerialAMControl.start();
signal BaseStationBoot.booted();
- }
+ }
}
enum {
BOOT_THREAD_STACK_SIZE = 200,
RADIO_RECEIVE_THREAD_STACK_SIZE = 600,
+ RADIO_SNOOP_THREAD_STACK_SIZE = 600,
SERIAL_SEND_THREAD_STACK_SIZE = 600,
SERIAL_RECEIVE_THREAD_STACK_SIZE = 600,
RADIO_SEND_THREAD_STACK_SIZE = 600,
-This program erases volume, then randomly write (then verified by read).
-Led0 is ON during the test, and Led1 is ON if all tests pass. If there is a problem, all three LEDs will be ON.
+README for TOSThreads TestBlockStorage
+Author/Contact: tinyos-help@millennium.berkeley.edu
+
+Description:
+
+This application is used to test the threaded version of the API for performing
+block storage.
+
+You can install TestBlockStorage on a mote via the following comand:
+ make <platform> threads install
+
+Valid platforms are currently: tmote, telosb, mica2, and micaz
+
+This application first erases a block storage volume, then randomly writes records to it,
+followed by a verification with read.
+
+Successful running of this application results in LED0 being ON throughout the duration
+of the erase, write, and read sequence, followed by LED1 turning ON if all tests pass, and
+all three LEDs turning on if there is a problem.
+
+Tools:
+ None.
+
+Known bugs/limitations:
+ None.
+
+
+++ /dev/null
-COMPONENT=TestLogStorageAppC
-
-include $(MAKERULES)
+++ /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 "StorageVolumes.h"
-
-configuration TestLogStorageAppC {}
-
-implementation
-{
- components new BlockingLogStorageC(VOLUME_TESTLOGSTORAGE, TRUE);
-}
+++ /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 "Storage.h"
-
-module TestLogStorageP
-{
- uses {
- interface Boot;
- }
-}
-
-implementation
-{
- event void Boot.booted() {
- }
-}
+++ /dev/null
-<volume_table>
- <volume name="TESTLOGSTORAGE" size="262144" type="log" />
-</volume_table>
+++ /dev/null
-<volume_table>
- <volume name="TESTLOGSTORAGE" size="1048576" type="log"/>
-</volume_table>