]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - apps/tosthreads/apps/BaseStation/BaseSendReceiveP.nc
Remove TestLogStorage and add changes to BaseStation app
[tinyos-2.x.git] / apps / tosthreads / apps / BaseStation / BaseSendReceiveP.nc
index 3caa02c7dfdb5c9e797cdd5d410b8388a5e04b7e..063fa3a0ad521736d07f262fb7a75714cfbe62c5 100644 (file)
  * 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>
@@ -60,6 +38,7 @@ generic module BaseSendReceiveP() {
   uses {
     interface Boot;
     interface Thread as ReceiveThread;
+    interface Thread as SnoopThread;
     interface Thread as SendThread;
     interface ConditionVariable;
     interface Mutex;
@@ -68,6 +47,7 @@ generic module BaseSendReceiveP() {
     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;
@@ -86,6 +66,7 @@ implementation {
     call Mutex.init(&m_queue);
     call Mutex.init(&m_pool);
     call ReceiveThread.start(NULL);
+    call SnoopThread.start(NULL);
     call SendThread.start(NULL);
   }
   
@@ -116,6 +97,33 @@ implementation {
     }
   }
   
+  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;
@@ -149,4 +157,12 @@ implementation {
       }
     }
   }
+  
+  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; }   
 }