Button class with auto repeat function.

Committer:
vargham
Date:
Sat May 13 18:15:11 2017 +0000
Revision:
3:03aea89f2a5c
Parent:
1:3385a1ea4a7d
Child:
4:d54859273629
Added Callback.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vargham 3:03aea89f2a5c 1 /**
vargham 3:03aea89f2a5c 2 * @file Button.cpp
vargham 3:03aea89f2a5c 3 * @brief Button library
vargham 3:03aea89f2a5c 4 * @author Mark Peter Vargha, vmp@varghamarkpeter.hu
vargham 3:03aea89f2a5c 5 *
vargham 3:03aea89f2a5c 6 * Copyright (c) 2017
vargham 3:03aea89f2a5c 7 *
vargham 3:03aea89f2a5c 8 * Licensed under the Apache License, Version 2.0 (the "License");
vargham 3:03aea89f2a5c 9 * you may not use this file except in compliance with the License.
vargham 3:03aea89f2a5c 10 * You may obtain a copy of the License at
vargham 3:03aea89f2a5c 11 *
vargham 3:03aea89f2a5c 12 * http://www.apache.org/licenses/LICENSE-2.0
vargham 3:03aea89f2a5c 13 *
vargham 3:03aea89f2a5c 14 * Unless required by applicable law or agreed to in writing, software
vargham 3:03aea89f2a5c 15 * distributed under the License is distributed on an "AS IS" BASIS,
vargham 3:03aea89f2a5c 16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
vargham 3:03aea89f2a5c 17 * See the License for the specific language governing permissions and
vargham 3:03aea89f2a5c 18 * limitations under the License.
vargham 3:03aea89f2a5c 19 */
vargham 3:03aea89f2a5c 20
vargham 0:a39041955963 21 #include "Button.h"
vargham 0:a39041955963 22
vargham 0:a39041955963 23 void Button::isrFall(void)
vargham 0:a39041955963 24 {
vargham 0:a39041955963 25 if (_activeState == 0) onPress();
vargham 0:a39041955963 26 else onRelease();
vargham 0:a39041955963 27 }
vargham 0:a39041955963 28
vargham 0:a39041955963 29 void Button::isrRise(void)
vargham 0:a39041955963 30 {
vargham 0:a39041955963 31 if (_activeState == 0) onRelease();
vargham 0:a39041955963 32 else onPress();
vargham 0:a39041955963 33 }
vargham 0:a39041955963 34
vargham 0:a39041955963 35 void Button::onPress(void)
vargham 0:a39041955963 36 {
vargham 0:a39041955963 37 _timer.reset();
vargham 0:a39041955963 38 if (_prevState == 0) //First
vargham 0:a39041955963 39 {
vargham 0:a39041955963 40 _timer.start();
vargham 3:03aea89f2a5c 41 if (_fireUpDown && _onButtonEvent) _onButtonEvent(BUTTON_DOWN, _pinName);
vargham 0:a39041955963 42 }
vargham 0:a39041955963 43 _autoRepeatStarter.detach();
vargham 0:a39041955963 44 if (_autoRepeatTime > 0) _autoRepeatStarter.attach(Callback<void()>(this, &Button::startAutoRepeat), (_longPressTime / 1000.0f));
vargham 0:a39041955963 45 _prevState = 1;
vargham 0:a39041955963 46 }
vargham 0:a39041955963 47
vargham 0:a39041955963 48 void Button::onRelease(void)
vargham 0:a39041955963 49 {
vargham 0:a39041955963 50 _timer.stop();
vargham 0:a39041955963 51 _tickerAutoRepeat.detach();
vargham 0:a39041955963 52 _autoRepeatStarter.detach();
vargham 3:03aea89f2a5c 53 if (_fireUpDown && _onButtonEvent) _onButtonEvent(BUTTON_UP, _pinName);
vargham 3:03aea89f2a5c 54 if (_prevState == 1 && _onButtonEvent)
vargham 0:a39041955963 55 {
vargham 0:a39041955963 56 if (_timer.read_ms() >= _longPressTime) //Long press
vargham 0:a39041955963 57 {
vargham 0:a39041955963 58 _onButtonEvent(BUTTON_LONG_PRESS, _pinName);
vargham 0:a39041955963 59 }
vargham 0:a39041955963 60 else if (_timer.read_ms() >= _shortPressTime) //Short press
vargham 0:a39041955963 61 {
vargham 0:a39041955963 62 _onButtonEvent(BUTTON_PRESS, _pinName);
vargham 0:a39041955963 63 }
vargham 0:a39041955963 64 }
vargham 0:a39041955963 65 _prevState = 0;
vargham 0:a39041955963 66 _timer.reset();
vargham 0:a39041955963 67 }
vargham 0:a39041955963 68
vargham 0:a39041955963 69 void Button::startAutoRepeat(void)
vargham 0:a39041955963 70 {
vargham 0:a39041955963 71 _tickerAutoRepeat.detach();
vargham 1:3385a1ea4a7d 72 if (_autoRepeatTime > 0) _tickerAutoRepeat.attach(Callback<void()>(this, &Button::autoRepeat), (_autoRepeatTime / 1000.0f));
vargham 0:a39041955963 73 }
vargham 0:a39041955963 74
vargham 0:a39041955963 75 void Button::autoRepeat(void)
vargham 0:a39041955963 76 {
vargham 3:03aea89f2a5c 77 if (_onButtonEvent) _onButtonEvent(BUTTON_PRESS, _pinName);
vargham 0:a39041955963 78 }