Software based digital input debouncer

Files at this revision

API Documentation at this revision

Comitter:
Waldek
Date:
Wed Jun 04 10:01:37 2014 +0000
Parent:
1:b59d305c4365
Commit message:
First fully working version

Changed in this revision

DigitalInDebounced.h Show annotated file Show diff for this revision Revisions of this file
TimerSubscriber.cpp Show diff for this revision Revisions of this file
TimerSubscriber.h Show diff for this revision Revisions of this file
diff -r b59d305c4365 -r dabe90a0bdc1 DigitalInDebounced.h
--- a/DigitalInDebounced.h	Mon Jun 02 14:09:31 2014 +0000
+++ b/DigitalInDebounced.h	Wed Jun 04 10:01:37 2014 +0000
@@ -17,17 +17,16 @@
 class DigitalInDebounced : TimerDependent
 {
 public:
-    DigitalInDebounced(PinName pin, unsigned int inDebounceTime=300);
-    DigitalInDebounced(PinName pin, PinMode mode, unsigned int inDebounceTime=300);
+    DigitalInDebounced(const PinName pin, const unsigned int inDebounceTime=300);
+    DigitalInDebounced(const PinName pin, const PinMode mode, const unsigned int inDebounceTime=300);
     virtual ~DigitalInDebounced();
     bool read(void);
-    bool is_stable(void) {return stable;};
-//    bool current_state(void) {return recent;};
-    bool current_state(void) {return Switch->read();};
-    unsigned int rd_PreDivider (void) {return PreDivider;};
-    unsigned int rd_Divider (void) {return Divider;};
-    unsigned int rd_DebounceTime (void) {return DebounceTime;};
-    unsigned int rd_DebounceCounter (void) {return DebounceCounter;};
+    inline bool is_stable(void) {return stable;};
+    inline bool current_state(void) {return Switch->read();};
+    inline unsigned int rd_PreDivider (void) {return PreDivider;};
+    inline unsigned int rd_Divider (void) {return Divider;};
+    inline unsigned int rd_DebounceTime (void) {return DebounceTime;};
+    inline unsigned int rd_DebounceCounter (void) {return DebounceCounter;};
     virtual void TimerEvent(void);
 private:
     bool recent;
@@ -37,6 +36,6 @@
     unsigned int Divider;
     unsigned int DebounceTime;
     unsigned int DebounceCounter;
-    void DigitalInDebounced_common(DigitalIn *SwitchIn, unsigned int inDebounceTime);
+    void DigitalInDebounced_common(DigitalIn *SwitchIn, const unsigned int inDebounceTime);
 };
   
\ No newline at end of file
diff -r b59d305c4365 -r dabe90a0bdc1 TimerSubscriber.cpp
--- a/TimerSubscriber.cpp	Mon Jun 02 14:09:31 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-#include "TimerSubscriber.h"
-
-struct TimerSubscriber::TimerEntry *TimerSubscriber::TimerTable = NULL;
-unsigned int TimerSubscriber::TableSize = 0;
-unsigned int TimerSubscriber::TickerCounter = 1;
-
-Ticker timer;
-extern TimerSubscriber timer_user;
-
-TimerSubscriber::TimerSubscriber(const unsigned int inTableSize, const unsigned int inTickerPeriod) : 
-    TickerPeriod(inTickerPeriod)
-{
-    TableSize = inTableSize;
-    TimerTable = new TimerEntry[TableSize];
-    for (int i=0; i<TableSize; i++) 
-        TimerTable[i].CallBack = NULL;
-    TickerCounter = 0;
-    timer.attach_us(&OnTimer, TickerPeriod);  
-    
-    return;  
-}
-
-TimerSubscriber::~TimerSubscriber()
-{
-    delete[] TimerTable;
-}
-
-void TimerSubscriber::OnTimer(void)
-{
-    for (int i=0; i<TableSize; i++)
-        if (NULL != TimerTable[i].CallBack)
-            if (0 == --TimerTable[i].Counter)
-            {
-                TimerTable[i].CallBack->TimerEvent();
-                TimerTable[i].Counter = TimerTable[i].Divider;
-            };
-    TickerCounter++;
-}
-
-bool TimerSubscriber::Subscribe(class TimerDependent *adres, const unsigned int inDivider)
-{
-    for (int i=0; i<TableSize; i++)
-        if (NULL == TimerTable[i].CallBack)
-        {
-            TimerTable[i].CallBack = adres;
-            TimerTable[i].Divider = inDivider;
-            TimerTable[i].Counter = inDivider;
-            return true;
-        }
-    return false;
-}
-
-bool TimerSubscriber::UnSubscribe(const class TimerDependent *adres)
-{
-    for (int i=0; i<TableSize; i++)
-        if (adres == TimerTable[i].CallBack)
-        {
-            TimerTable[i].CallBack = NULL;
-            return true;
-        }
-    return false;
-}
-
-//---------------------------------------------------------------------------------------
-//  class TimerDependent
-//---------------------------------------------------------------------------------------
-
-TimerDependent::TimerDependent()
-{
-}
-
-TimerDependent::~TimerDependent()
-{
-}
-
diff -r b59d305c4365 -r dabe90a0bdc1 TimerSubscriber.h
--- a/TimerSubscriber.h	Mon Jun 02 14:09:31 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-#pragma once
-#include "mbed.h"
-
-/*-------------------------------------------------------------
-
-(c) W.D. 2014
-
--------------------------------------------------------------*/
-
-/*  ------ sample usage------
-*/
-class TimerDependent
-{
-public:
-    TimerDependent();
-    virtual ~TimerDependent();
-    
-    virtual void TimerEvent (void) = NULL;
-};
-
-class TimerSubscriber 
-{
-public:
-    TimerSubscriber(const unsigned int inTableSize=10, const unsigned int inTickerPeriod=10000);
-    ~TimerSubscriber();
-    unsigned int counter_rd(void) {return TickerCounter;};
-    unsigned int TickerPeriod_rd(void) {return TickerPeriod;};
-    bool Subscribe(class TimerDependent *adres, const unsigned int inDivider=1);
-    bool UnSubscribe(const class TimerDependent *adres);
-private:
-    static struct TimerEntry
-    {
-        class TimerDependent *CallBack;
-        unsigned int Divider;
-        unsigned int Counter;
-    } *TimerTable;
-    static void OnTimer(void);
-    static unsigned int TableSize;
-    unsigned int TickerPeriod;
-    static unsigned int TickerCounter;
-};