supla-device
Loading...
Searching...
No Matches
simple_button.h
1// SPDX-FileCopyrightText: AC SOFTWARE SP. Z O.O.
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#ifndef SRC_SUPLA_CONTROL_SIMPLE_BUTTON_H_
5#define SRC_SUPLA_CONTROL_SIMPLE_BUTTON_H_
6
7#include <stdint.h>
8
9#include "../io.h"
10#include "../element.h"
11#include "../events.h"
12#include "../local_action.h"
13
14namespace Supla {
15namespace Control {
16
17enum StateResults { PRESSED, RELEASED, TO_PRESSED, TO_RELEASED };
18
20 public:
21 explicit ButtonState(Supla::Io::IoPin inputPin);
22 ButtonState(Supla::Io::Base *io, int pin, bool pullUp, bool invertLogic);
23 ButtonState(int pin, bool pullUp, bool invertLogic);
24 enum StateResults update();
25 enum StateResults getLastState() const;
26 bool isPressedOrPending() const;
27 void init(int buttonNumber);
28
29 void setSwNoiseFilterDelay(unsigned int newDelayMs);
30 void setDebounceDelay(unsigned int newDelayMs);
31 int getGpio() const;
32
33 bool isReady() const;
34
35 protected:
36 int valueOnPress() const;
37
38 Supla::Io::IoPin inputPin;
39
40 uint16_t debounceDelayMs = 50;
41 uint16_t swNoiseFilterDelayMs = 20;
42 uint32_t debounceTimestampMs = 0;
43 uint32_t filterTimestampMs = 0;
44 int8_t newStatusCandidate = 0;
45 int8_t prevState = -1;
46};
47
48class SimpleButton : public Element, public LocalAction {
49 public:
50 explicit SimpleButton(Supla::Io::IoPin inputPin);
51 explicit SimpleButton(Supla::Io::Base *io,
52 int pin,
53 bool pullUp = false,
54 bool invertLogic = false);
55 explicit SimpleButton(int pin, bool pullUp = false, bool invertLogic = false);
56
57 void onTimer() override;
58 void onInit() override;
59 void setSwNoiseFilterDelay(unsigned int newDelayMs);
60 void setDebounceDelay(unsigned int newDelayMs);
61
62 enum StateResults getLastState() const;
63
64 bool isReady() const;
65
66 protected:
67 // Returns unique button number (current implementation returns configured
68 // GPIO)
69 virtual int8_t getButtonNumber() const;
70 ButtonState state;
71};
72
73}; // namespace Control
74}; // namespace Supla
75
76#endif // SRC_SUPLA_CONTROL_SIMPLE_BUTTON_H_
Definition simple_button.h:19
Definition simple_button.h:48
void onInit() override
Third method called on element in SuplaDevice.begin()
Definition simple_button.cpp:124
void onTimer() override
Method called on timer interupt.
Definition simple_button.cpp:110
Base class for all elements of SuplaDevice.
Definition element.h:30
Definition io.h:23
Definition local_action.h:87
Definition io_pin.h:14