A debouncing InterruptIn wrapper

Committer:
evwijk
Date:
Tue Feb 07 09:31:26 2012 +0000
Revision:
1:e806603f0088
Parent:
0:2e999fcd4c7b
Child:
2:c353357a97e4

        

Who changed what in which revision?

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