Debounce InterruptIn

Dependents:   led_sigfox Allumag_lampe_sigfox Case_study_02_Turnstile B18_MP3_PLAYER ... more

Files at this revision

API Documentation at this revision

Comitter:
kandangath
Date:
Tue Feb 25 07:13:29 2014 +0000
Parent:
20:996ea2fc8d2d
Child:
22:9733f886810a
Commit message:
Added option to attach to a class member

Changed in this revision

DebouncedInterrupt.cpp Show annotated file Show diff for this revision Revisions of this file
DebouncedInterrupt.h Show annotated file Show diff for this revision Revisions of this file
--- a/DebouncedInterrupt.cpp	Fri Feb 21 16:50:56 2014 +0000
+++ b/DebouncedInterrupt.cpp	Tue Feb 25 07:13:29 2014 +0000
@@ -19,6 +19,12 @@
 
 void DebouncedInterrupt::attach(void (*fptr)(void), const gpio_irq_event trigger, const unsigned int& debounce_ms)
 {
+    attach(this, fptr, trigger, debounce_ms);
+}
+
+template<typename T>
+void DebouncedInterrupt::attach(T *cptr, void (*fptr)(void), const gpio_irq_event trigger, const unsigned int& debounce_ms)
+{
     if(fptr) {
         fCallback = fptr;
         _last_bounce_count = _bounce_count = 0;
@@ -28,10 +34,10 @@
         switch(trigger)
         {
             case IRQ_RISE:
-                _in->rise(this, &DebouncedInterrupt::_onInterrupt);
+                _in->rise(cptr, &DebouncedInterrupt::_onInterrupt);
                 break;
             case IRQ_FALL:
-                _in->fall(this, &DebouncedInterrupt::_onInterrupt);
+                _in->fall(cptr, &DebouncedInterrupt::_onInterrupt);
                 break;
             case IRQ_NONE:
                 reset(); // Unexpected. Clear callbacks.
--- a/DebouncedInterrupt.h	Fri Feb 21 16:50:56 2014 +0000
+++ b/DebouncedInterrupt.h	Tue Feb 25 07:13:29 2014 +0000
@@ -56,6 +56,9 @@
     
     // Start monitoring the interupt and attach a callback
     void attach(void (*fptr)(void), const gpio_irq_event trigger, const uint32_t& debounce_ms=10);
+    
+    template<typename T>
+    void attach(T* cptr, void (*fptr)(void), const gpio_irq_event trigger, const uint32_t& debounce_ms=10);
    
     // Stop monitoring the interrupt
     void reset();