[Tinyos-contrib-commits]
CVS: tinyos-1.x/contrib/handhelds/tos/platform/msp430_crl_base
UserButtonM.nc, NONE, 1.1
steve ayer
ayer1 at users.sourceforge.net
Tue Aug 21 11:13:13 PDT 2007
Update of /cvsroot/tinyos/tinyos-1.x/contrib/handhelds/tos/platform/msp430_crl_base
In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv17444
Added Files:
UserButtonM.nc
Log Message:
implementation of UserButton with an anti-bounce mechnism.
--- NEW FILE: UserButtonM.nc ---
//$Id: UserButtonM.nc,v 1.1 2007/08/21 18:13:11 ayer1 Exp $
/* "Copyright (c) 2000-2003 The Regents of the University of California.
* 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."
*/
/**
* Andew's timer debouce logic used from the CountInput application.
*
* @author Cory Sharp <cssharp at eecs.berkeley.edu>
* @author Andrew Redfern <aredfern at kingkong.me.berkeley.edu>
*/
module UserButtonM
{
provides interface StdControl;
provides interface MSP430Event as UserButton;
uses interface MSP430Interrupt;
uses interface MSP430GeneralIO;
uses interface Timer;
}
implementation
{
command result_t StdControl.init()
{
atomic
{
call MSP430Interrupt.disable();
call MSP430GeneralIO.makeInput();
call MSP430GeneralIO.selectIOFunc();
call MSP430Interrupt.edge(TRUE);
call MSP430Interrupt.clear();
call MSP430Interrupt.enable();
}
return SUCCESS;
}
command result_t StdControl.start()
{
atomic
{
call MSP430Interrupt.clear();
call MSP430Interrupt.enable();
}
return SUCCESS;
}
command result_t StdControl.stop()
{
atomic
{
call MSP430Interrupt.disable();
}
return SUCCESS;
}
event result_t Timer.fired()
{
atomic
{
call MSP430Interrupt.clear();
call MSP430Interrupt.enable();
}
return SUCCESS;
}
task void debounce()
{
call Timer.start( TIMER_ONE_SHOT, 125 );
}
async event void MSP430Interrupt.fired()
{
atomic
{
signal UserButton.fired();
// debounce
call MSP430Interrupt.disable();
post debounce();
}
}
}
More information about the Tinyos-contrib-commits
mailing list