]> oss.titaniummirror.com Git - tinyos-2.x.git/commitdiff
Remove the looping timer, using a looping task instead
authorrincon <rincon>
Mon, 30 Apr 2007 17:31:08 +0000 (17:31 +0000)
committerrincon <rincon>
Mon, 30 Apr 2007 17:31:08 +0000 (17:31 +0000)
tos/platforms/micaz/chips/cc2420/HplCC2420InterruptsC.nc
tos/platforms/micaz/chips/cc2420/HplCC2420InterruptsP.nc

index 73b522f07e559b21fc7d89db6a6cf401b7b2325b..7440573b3f1f1ee11b21722d6f05021bdd132ed5 100644 (file)
@@ -54,9 +54,9 @@ implementation {
   InterruptFIFOP = InterruptFIFOPC;
   InterruptFIFOPC.Atm128Interrupt -> Interrupts.Int6;
 
-  components HplCC2420InterruptsP, HplCC2420PinsC, new TimerMilliC();
+  components HplCC2420InterruptsP;
+  components HplCC2420PinsC;
   InterruptCCA   = HplCC2420InterruptsP.CCA;
-  HplCC2420InterruptsP.CCATimer -> TimerMilliC;
   HplCC2420InterruptsP.CC_CCA -> HplCC2420PinsC.CCA;
   
 }
index b4fc3c7ffafc9546bd3f8051dd3eee6c1a62b6d3..c4e667aa7316b238261a54616499de7d7e37b384 100644 (file)
@@ -1,51 +1,32 @@
-/*                                                                     tab:4
- * "Copyright (c) 2005 Stanford 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 following two paragraphs and the author appear in all
- * copies of this software.
- * 
- * IN NO EVENT SHALL STANFORD UNIVERSITY 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 STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- * 
- * STANFORD UNIVERSITY 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 STANFORD UNIVERSITY
- * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
- * ENHANCEMENTS, OR MODIFICATIONS."
- *
- * "Copyright (c) 2000-2003 The Regents of the University  of California.  
+/*
+ * Copyright (c) 2005-2006 Rincon Research Corporation
  * 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."
+ * 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 Rincon Research Corporation nor the names of
+ *   its contributors may be used to endorse or promote products derived
+ *   from this software without specific prior written permission.
  *
- * Copyright (c) 2002-2003 Intel Corporation
- * All rights reserved.
- *
- * This file is distributed under the terms in the attached INTEL-LICENSE     
- * file. If you do not find these files, copies can be found by writing to
- * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
- * 94704.  Attention:  Intel License Inquiry.
+ * 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
+ * ARCHED ROCK 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 Philip Levis
  * @author Matt Miller
+ * @author David Moss
  * @version @version $Revision$ $Date$
  */
 
-#include "Timer.h"
-
 module HplCC2420InterruptsP {
   provides {
     interface GpioInterrupt as CCA;
   }
+  
   uses {
     interface GeneralIO as CC_CCA;
-    interface Timer<TMilli> as CCATimer;
   }
 }
 implementation {
+
   norace uint8_t ccaWaitForState;
+  
   norace uint8_t ccaLastState;
-  bool ccaTimerDisabled = FALSE;
-  // Add stdcontrol.init/.start to setup TimerCapture timebase
+  
+  bool ccaCheckDisabled = FALSE;
 
   // ************* CCA Interrupt handlers and dispatch *************
   
   /**
    * enable an edge interrupt on the CCA pin
-   NOT an interrupt in MICAz. Implement as a timer polled pin monitor
+   * NOT an interrupt in MICAz. Implement as a task polled pin monitor
    */
 
   task void CCATask() {
+    uint8_t CCAState;
     atomic {
-      if (!ccaTimerDisabled) 
-       call CCATimer.startOneShot(1);
+      if (ccaCheckDisabled) {
+        return;
+      }
+    }
+    
+    //check CCA state
+    CCAState = call CC_CCA.get(); //get current state here if waiting for edge
+    if ((ccaLastState != ccaWaitForState) && (CCAState == ccaWaitForState)) {
+      signal CCA.fired();
     }
+    
+    //if CCA Pin is correct and edge found
+    //repost task and try again
+    ccaLastState = CCAState;
+    post CCATask();
   }
   
   async command error_t CCA.enableRisingEdge() { 
     atomic ccaWaitForState = TRUE; //save the state we are waiting for
-    atomic ccaTimerDisabled = FALSE;
+    atomic ccaCheckDisabled = FALSE;
     ccaLastState = call CC_CCA.get(); //get current state
     post CCATask();
     return SUCCESS;
@@ -101,51 +96,21 @@ implementation {
 
   async command error_t CCA.enableFallingEdge() { 
     atomic ccaWaitForState = FALSE; //save the state we are waiting for
-    atomic ccaTimerDisabled = FALSE;
+    atomic ccaCheckDisabled = FALSE;
     ccaLastState = call CC_CCA.get(); //get current state
     post CCATask();
     return SUCCESS;
   }
-
-  /**
-   * disables CCA interrupts
-   */
-  void task stopTask() {
-    atomic{
-      if (ccaTimerDisabled) {
-       call CCATimer.stop();
-      }
-    }
-  }
+  
   async command error_t CCA.disable() {
-    atomic ccaTimerDisabled = TRUE;
-    post stopTask();
+    atomic ccaCheckDisabled = TRUE;
     return SUCCESS;
   }
 
-  /**
-   * TImer Event fired so now check for CCA    level
-   */
-  event void CCATimer.fired() {
-    uint8_t CCAState;
-    atomic {
-      if (ccaTimerDisabled) {
-       return;
-      }
-    }
-    //check CCA state
-    CCAState = call CC_CCA.get(); //get current state
-    //here if waiting for an edge
-    if ((ccaLastState != ccaWaitForState) && (CCAState == ccaWaitForState)) {
-      signal CCA.fired();
-    }//if CCA Pin is correct and edge found
-    //restart timer and try again
-    ccaLastState = CCAState;
-    post CCATask();
-    return;
-  }//CCATimer.fired
 
- default async event void CCA.fired() {}
+  /***************** Defaults ****************/
+  default async event void CCA.fired() {
+  }
+
+}
 
-} //Module HPLCC2420InterruptM
-