A debouncing InterruptIn wrapper

Committer:
evwijk
Date:
Mon Feb 06 19:53:40 2012 +0000
Revision:
0:2e999fcd4c7b
Child:
1:e806603f0088

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
evwijk 0:2e999fcd4c7b 1 #include "ButtonIn.h"
evwijk 0:2e999fcd4c7b 2
evwijk 0:2e999fcd4c7b 3 ButtonIn::ButtonIn(PinName buttonPin) :
evwijk 0:2e999fcd4c7b 4 _button(buttonPin) {
evwijk 0:2e999fcd4c7b 5 _buttonCanPress = true;
evwijk 0:2e999fcd4c7b 6 _callback = NULL;
evwijk 0:2e999fcd4c7b 7 _callbackInstance = NULL;
evwijk 0:2e999fcd4c7b 8 _callbackMethod = NULL;
evwijk 0:2e999fcd4c7b 9 _button.rise(this, &ButtonIn::click);
evwijk 0:2e999fcd4c7b 10 }
evwijk 0:2e999fcd4c7b 11
evwijk 0:2e999fcd4c7b 12 void ButtonIn::attach(void (*method)(void)) {
evwijk 0:2e999fcd4c7b 13 _callback = method;
evwijk 0:2e999fcd4c7b 14 }
evwijk 0:2e999fcd4c7b 15
evwijk 0:2e999fcd4c7b 16 template<class T>
evwijk 0:2e999fcd4c7b 17 void attach(T* instance, void (T::*method)(void)) {
evwijk 0:2e999fcd4c7b 18 _callbackInstance = (ButtonInCallbackInstance *)instance;
evwijk 0:2e999fcd4c7b 19 _callbackMethod = (void (ButtonInCallbackInstance::*)(void))method;
evwijk 0:2e999fcd4c7b 20 }
evwijk 0:2e999fcd4c7b 21
evwijk 0:2e999fcd4c7b 22 void ButtonIn::click() {
evwijk 0:2e999fcd4c7b 23 if (_buttonCanPress) {
evwijk 0:2e999fcd4c7b 24 _buttonCanPress = false;
evwijk 0:2e999fcd4c7b 25 _buttonDownTimeout.attach(this, &ButtonIn::reset, 0.5);
evwijk 0:2e999fcd4c7b 26 }
evwijk 0:2e999fcd4c7b 27 }
evwijk 0:2e999fcd4c7b 28
evwijk 0:2e999fcd4c7b 29 void ButtonIn::call() {
evwijk 0:2e999fcd4c7b 30 if (_callback != NULL)
evwijk 0:2e999fcd4c7b 31 (*_callback)();
evwijk 0:2e999fcd4c7b 32 else
evwijk 0:2e999fcd4c7b 33 (_callbackInstance->*_callbackMethod)();
evwijk 0:2e999fcd4c7b 34 }
evwijk 0:2e999fcd4c7b 35
evwijk 0:2e999fcd4c7b 36 void ButtonIn::reset() {
evwijk 0:2e999fcd4c7b 37 _buttonCanPress = true;
evwijk 0:2e999fcd4c7b 38 }