Button class with auto repeat function.
Button.h@4:d54859273629, 2017-07-14 (annotated)
- Committer:
- vargham
- Date:
- Fri Jul 14 18:22:24 2017 +0000
- Revision:
- 4:d54859273629
- Parent:
- 3:03aea89f2a5c
- Child:
- 5:faff91d60ae3
Start/stop interrupt.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
vargham | 3:03aea89f2a5c | 1 | /** |
vargham | 3:03aea89f2a5c | 2 | * @file Button.h |
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 | #ifndef BUTTON_H_INCLUDED |
vargham | 0:a39041955963 | 22 | #define BUTTON_H_INCLUDED |
vargham | 0:a39041955963 | 23 | |
vargham | 0:a39041955963 | 24 | #include "mbed.h" |
vargham | 0:a39041955963 | 25 | |
vargham | 0:a39041955963 | 26 | enum ButtonEvent |
vargham | 0:a39041955963 | 27 | { |
vargham | 2:97ef12e06605 | 28 | BUTTON_UNKNOWN = 0, BUTTON_DOWN, BUTTON_UP, BUTTON_PRESS, BUTTON_LONG_PRESS |
vargham | 0:a39041955963 | 29 | }; |
vargham | 0:a39041955963 | 30 | |
vargham | 0:a39041955963 | 31 | class Button |
vargham | 0:a39041955963 | 32 | { |
vargham | 0:a39041955963 | 33 | public: |
vargham | 3:03aea89f2a5c | 34 | Button(PinName pinName, PinMode pinMode, int activeState, Callback<void(ButtonEvent, PinName)> onButtonEvent = 0, uint16_t autoRepeatTime = 0, uint16_t longPressTime = 600, uint16_t shortPressTime = 30) |
vargham | 0:a39041955963 | 35 | : _pinName(pinName) |
vargham | 0:a39041955963 | 36 | , _in(pinName) |
vargham | 0:a39041955963 | 37 | , _shortPressTime(shortPressTime) |
vargham | 0:a39041955963 | 38 | , _longPressTime(longPressTime) |
vargham | 0:a39041955963 | 39 | , _autoRepeatTime(autoRepeatTime) |
vargham | 0:a39041955963 | 40 | , _activeState(activeState) |
vargham | 0:a39041955963 | 41 | , _prevState(0) |
vargham | 0:a39041955963 | 42 | , _fireUpDown(false) |
vargham | 0:a39041955963 | 43 | , _onButtonEvent(onButtonEvent) |
vargham | 0:a39041955963 | 44 | { |
vargham | 0:a39041955963 | 45 | _in.mode(pinMode); |
vargham | 0:a39041955963 | 46 | }; |
vargham | 4:d54859273629 | 47 | void startInterrupt(); |
vargham | 4:d54859273629 | 48 | void stopInterrupt(); |
vargham | 1:3385a1ea4a7d | 49 | inline void setAutoRepeatTime_ms(uint16_t autoRepeatTime) |
vargham | 0:a39041955963 | 50 | { |
vargham | 0:a39041955963 | 51 | _autoRepeatTime = autoRepeatTime; |
vargham | 0:a39041955963 | 52 | }; |
vargham | 1:3385a1ea4a7d | 53 | inline uint16_t getAutoRepeatTime_ms() const |
vargham | 0:a39041955963 | 54 | { |
vargham | 0:a39041955963 | 55 | return _autoRepeatTime; |
vargham | 0:a39041955963 | 56 | } |
vargham | 0:a39041955963 | 57 | inline int read() |
vargham | 0:a39041955963 | 58 | { |
vargham | 0:a39041955963 | 59 | return _in.read() == _activeState; |
vargham | 0:a39041955963 | 60 | }; |
vargham | 0:a39041955963 | 61 | operator int() |
vargham | 0:a39041955963 | 62 | { |
vargham | 0:a39041955963 | 63 | return read(); |
vargham | 0:a39041955963 | 64 | }; |
vargham | 0:a39041955963 | 65 | void setFireUpDown(bool fire) |
vargham | 0:a39041955963 | 66 | { |
vargham | 0:a39041955963 | 67 | _fireUpDown = fire; |
vargham | 0:a39041955963 | 68 | }; |
vargham | 1:3385a1ea4a7d | 69 | inline bool isFireUpDown() const |
vargham | 1:3385a1ea4a7d | 70 | { |
vargham | 1:3385a1ea4a7d | 71 | return _fireUpDown; |
vargham | 1:3385a1ea4a7d | 72 | }; |
vargham | 1:3385a1ea4a7d | 73 | void setShortPressTime_ms(uint16_t time_ms) |
vargham | 1:3385a1ea4a7d | 74 | { |
vargham | 1:3385a1ea4a7d | 75 | _shortPressTime = time_ms; |
vargham | 1:3385a1ea4a7d | 76 | }; |
vargham | 1:3385a1ea4a7d | 77 | inline uint16_t getShortPressTime_ms() const |
vargham | 1:3385a1ea4a7d | 78 | { |
vargham | 1:3385a1ea4a7d | 79 | return _shortPressTime; |
vargham | 1:3385a1ea4a7d | 80 | }; |
vargham | 1:3385a1ea4a7d | 81 | void setLongPressTime_ms(uint16_t time_ms) |
vargham | 1:3385a1ea4a7d | 82 | { |
vargham | 1:3385a1ea4a7d | 83 | _longPressTime = time_ms; |
vargham | 1:3385a1ea4a7d | 84 | }; |
vargham | 1:3385a1ea4a7d | 85 | inline uint16_t getLongPressTime_ms() const |
vargham | 1:3385a1ea4a7d | 86 | { |
vargham | 1:3385a1ea4a7d | 87 | return _longPressTime; |
vargham | 1:3385a1ea4a7d | 88 | }; |
vargham | 3:03aea89f2a5c | 89 | void attach(Callback<void(ButtonEvent, PinName)> onButtonEvent) |
vargham | 1:3385a1ea4a7d | 90 | { |
vargham | 1:3385a1ea4a7d | 91 | _onButtonEvent = onButtonEvent; |
vargham | 1:3385a1ea4a7d | 92 | }; |
vargham | 1:3385a1ea4a7d | 93 | void detach() |
vargham | 1:3385a1ea4a7d | 94 | { |
vargham | 3:03aea89f2a5c | 95 | _onButtonEvent = 0; |
vargham | 1:3385a1ea4a7d | 96 | }; |
vargham | 0:a39041955963 | 97 | private: |
vargham | 0:a39041955963 | 98 | PinName _pinName; |
vargham | 0:a39041955963 | 99 | InterruptIn _in; |
vargham | 0:a39041955963 | 100 | Timer _timer; |
vargham | 0:a39041955963 | 101 | Ticker _tickerAutoRepeat; |
vargham | 0:a39041955963 | 102 | Timeout _autoRepeatStarter; |
vargham | 0:a39041955963 | 103 | uint16_t _shortPressTime; |
vargham | 0:a39041955963 | 104 | uint16_t _longPressTime; |
vargham | 1:3385a1ea4a7d | 105 | uint16_t _autoRepeatTime; |
vargham | 0:a39041955963 | 106 | int _activeState; |
vargham | 0:a39041955963 | 107 | int _prevState; |
vargham | 0:a39041955963 | 108 | bool _fireUpDown; |
vargham | 3:03aea89f2a5c | 109 | Callback<void(ButtonEvent, PinName)> _onButtonEvent; |
vargham | 0:a39041955963 | 110 | void isrFall(void); |
vargham | 0:a39041955963 | 111 | void isrRise(void); |
vargham | 0:a39041955963 | 112 | void onPress(void); |
vargham | 0:a39041955963 | 113 | void onRelease(void); |
vargham | 0:a39041955963 | 114 | void autoRepeat(void); |
vargham | 0:a39041955963 | 115 | void startAutoRepeat(void); |
vargham | 0:a39041955963 | 116 | }; |
vargham | 0:a39041955963 | 117 | |
vargham | 0:a39041955963 | 118 | #endif /* BUTTON_H_INCLUDED */ |