Button class with auto repeat function.
Button.cpp@3:03aea89f2a5c, 2017-05-13 (annotated)
- 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?
User | Revision | Line number | New 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 | } |