From: rincon Date: Mon, 30 Apr 2007 17:31:08 +0000 (+0000) Subject: Remove the looping timer, using a looping task instead X-Git-Tag: release_tools_1_2_4_1~197 X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=commitdiff_plain;h=b84fd50db6de29572d4e497311304aad18eeaddd;p=tinyos-2.x.git Remove the looping timer, using a looping task instead --- diff --git a/tos/platforms/micaz/chips/cc2420/HplCC2420InterruptsC.nc b/tos/platforms/micaz/chips/cc2420/HplCC2420InterruptsC.nc index 73b522f0..7440573b 100644 --- a/tos/platforms/micaz/chips/cc2420/HplCC2420InterruptsC.nc +++ b/tos/platforms/micaz/chips/cc2420/HplCC2420InterruptsC.nc @@ -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; } diff --git a/tos/platforms/micaz/chips/cc2420/HplCC2420InterruptsP.nc b/tos/platforms/micaz/chips/cc2420/HplCC2420InterruptsP.nc index b4fc3c7f..c4e667aa 100644 --- a/tos/platforms/micaz/chips/cc2420/HplCC2420InterruptsP.nc +++ b/tos/platforms/micaz/chips/cc2420/HplCC2420InterruptsP.nc @@ -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 */ /** @@ -57,43 +38,57 @@ * * @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 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 -