Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of DebounceInt by
Revision 3:3b5c7faadd5c, committed 2014-02-25
- Comitter:
- nleoni
- Date:
- Tue Feb 25 07:53:23 2014 +0000
- Parent:
- 2:bd5a3171ebc4
- Commit message:
- Added class method support
Changed in this revision
| DebounceInt2.cpp | Show annotated file Show diff for this revision Revisions of this file |
| DebounceInt2.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r bd5a3171ebc4 -r 3b5c7faadd5c DebounceInt2.cpp
--- a/DebounceInt2.cpp Tue Feb 25 06:37:35 2014 +0000
+++ b/DebounceInt2.cpp Tue Feb 25 07:53:23 2014 +0000
@@ -53,15 +53,25 @@
// Inputs: *fhandler(void), pointer to handler function which must be void *fhandler(void) //
//**********************************************************************************************//
- void DebounceInt2::rise(t_fhandler fhandler){ //attach interrupt handler for interrupt on rising edge
+ void DebounceInt2::rise(FunctionPointer fhandler){ //attach interrupt handler for interrupt on rising edge
if(!(this->intRise)){//only allocate the pointer and Interrupt in once
this->intRise= new InterruptIn(this->pin);
}
- this->riseHandler=fhandler;
+ this->riseHandler = new FunctionPointer(fhandler);
this->intRise->rise(this,&DebounceInt2::debouncePinRise); //This attaches our handler which
//includes the debounce functionality
}
+
+ template<typename T>
+ void rise(T* tptr, void (T::*mptr)(void)){
+ if(!(this->intRise)){//only allocate the pointer and Interrupt in once
+ this->intRise= new InterruptIn(this->pin);
+ }
+ this->riseHandler = new FunctionPointer(tptr,mptr);
+ this->intRise->rise(this,&DebounceInt2::debouncePinRise);
+ }
+
void DebounceInt2::disableRise(void){ //rise interrupt handler for rising edge
this->pinIntMask->maskIntR();
@@ -69,16 +79,27 @@
void DebounceInt2::enableRise(void){ //unmask rise interrupt handler for rising edge
this->pinIntMask->unMaskIntR();
}
- void DebounceInt2::fall(t_fhandler fhandler){ //attach interrupt handler for interrupt on falling edge
+
+ void DebounceInt2::fall(FunctionPointer fhandler){ //attach interrupt handler for interrupt on falling edge
if(!(this->intFall)){//only allocate the pointer and Interrupt in once
this->intFall= new InterruptIn(this->pin);
}
- this->fallHandler=fhandler;
+ this->fallHandler = new FunctionPointer(fhandler);
this->intFall->fall(this,&DebounceInt2::debouncePinFall); //This attaches our handler which
//includes the debounce functionality
}
+
+ template<typename T>
+ void fall(T* tptr, void (T::*mptr)(void)){
+ if(!(this->Fall)){//only allocate the pointer and Interrupt in once
+ this->intFall= new InterruptIn(this->pin);
+ }
+ this->fallHandler = new FunctionPointer(tptr,mptr);
+ this->intFall->fall(this,&DebounceInt2::debouncePinRise);
+ }
+
void DebounceInt2::disableFall(void){ //mask fall interrupt handler for rising edge
this->pinIntMask->maskIntF();
}
@@ -91,7 +112,7 @@
void DebounceInt2::debouncePinRise(void){
this->pinIntMask->maskIntR();
this->debounceCallBack.attach_us(this,&DebounceInt2::debounceCallbackPinRise,this->delay);
- this->riseHandler();
+ this->riseHandler->call();
}
//internal callback used to re-enable (unmask) interrupts on rising edge
@@ -104,7 +125,7 @@
void DebounceInt2::debouncePinFall(void){
this->pinIntMask->maskIntF();
this->debounceCallBack.attach_us(this,&DebounceInt2::debounceCallbackPinFall,this->delay);
- this->fallHandler();
+ this->fallHandler->call();
}
//internal callback used to re-enable (unmask) interrupts on falling edge
diff -r bd5a3171ebc4 -r 3b5c7faadd5c DebounceInt2.h
--- a/DebounceInt2.h Tue Feb 25 06:37:35 2014 +0000
+++ b/DebounceInt2.h Tue Feb 25 07:53:23 2014 +0000
@@ -43,7 +43,7 @@
#define _DEBOUNCEINTDELAYDEFAULT 50000 //useconds, this number would be about 50 ms
#define _MINDBOUNCEDELAY 50
-typedef void (*t_fhandler)(void);
+//typedef void (*t_fhandler)(void);
class DebounceInt2
{
@@ -55,7 +55,7 @@
InterruptIn* intRise;
InterruptIn* intFall;
bool riseAttached,fallAttached;
- t_fhandler riseHandler,fallHandler;
+ FunctionPointer *riseHandler,*fallHandler;
PinName pin;
public://methods
@@ -63,10 +63,14 @@
DebounceInt2(PinName pin);//Constructor with PinName, delay will remain default value
DebounceInt2(PinName pin,unsigned int delay_us);//Constructor with PinName and specified delay in micro-seconds
void setDelay(unsigned int); //method to modify delay for debounce in us
- void rise(t_fhandler); //attach interrupt handler for interrupt on rising edge
+ void rise(FunctionPointer); //attach interrupt handler for interrupt on rising edge
+ template<typename T>
+ void rise(T* tptr, void (T::*mptr)(void));
void disableRise(void); //rise interrupt handler for rising edge
void enableRise(void); //unmask rise interrupt handler for rising edge
- void fall(t_fhandler); //attach interrupt handler for interrupt on falling edge
+ void fall(FunctionPointer); //attach interrupt handler for interrupt on falling edge
+ template<typename T>
+ void fall(T* tptr, void (T::*mptr)(void));
void disableFall(void); //mask fall interrupt handler for rising edge
void enableFall(void); //unmask fall interrupt handler for rising edge
