supla-device
Loading...
Searching...
No Matches
io.h
1/*
2 Copyright (C) AC SOFTWARE SP. Z O.O.
3
4 This program is free software; you can redistribute it and/or
5 modify it under the terms of the GNU General Public License
6 as published by the Free Software Foundation; either version 2
7 of the License, or (at your option) any later version.
8 This program is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 GNU General Public License for more details.
12 You should have received a copy of the GNU General Public License
13 along with this program; if not, write to the Free Software
14 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
15*/
16
17#ifndef SRC_SUPLA_IO_H_
18#define SRC_SUPLA_IO_H_
19
20#include <stdint.h>
21
22#include "definitions.h"
23#include "io/io_pin.h"
24
25namespace Supla {
26// This class can be used to override digitalRead and digitalWrite methods.
27// If you want to add custom behavior i.e. during read/write from some
28// digital pin, you can inherit from Supla::Io::Base class, implement your
29// own customDigitalRead and customDigitalWrite methods and create instance
30// of this class. It will automatically register and SuplaDevice will use it.
31//
32// Example use: implement some additional logic, when relay state is
33// changed.
34namespace Io {
35
36class Base {
37 public:
38 Base();
39 virtual ~Base();
40 virtual bool isReady() const;
41
42 virtual void customPinMode(int channelNumber, uint8_t pin, uint8_t mode);
43 virtual int customDigitalRead(int channelNumber, uint8_t pin);
44 virtual unsigned int customPulseIn(int channelNumber,
45 uint8_t pin,
46 uint8_t value,
47 uint64_t timeoutMicro);
48 virtual void customDigitalWrite(int channelNumber, uint8_t pin, uint8_t val);
49 virtual void customAnalogWrite(int channelNumber, uint8_t pin, int val);
50 virtual void customSetPwmResolutionBits(uint8_t pin,
51 uint8_t resolutionBits);
52 virtual void customConfigureAnalogOutput(int channelNumber,
53 uint8_t pin,
54 bool outputInvert = false);
55 virtual void customSetPwmFrequency(uint16_t pwmFrequency);
56 virtual uint8_t customDefaultPwmResolutionBits(uint8_t pin) const;
57 virtual bool customCanSetPwmResolutionBits(uint8_t pin) const;
58 virtual uint8_t customPwmResolutionBits(uint8_t pin) const;
59 virtual uint32_t customPwmMaxValue(uint8_t pin) const;
60 virtual uint16_t customPwmFrequency() const;
61 virtual int customAnalogRead(int channelNumber, uint8_t pin);
62 virtual void customAttachInterrupt(uint8_t pin, void (*func)(void), int mode);
63 virtual void customDetachInterrupt(uint8_t pin);
64 virtual uint8_t customPinToInterrupt(uint8_t pin);
65
66 private:
67 mutable uint8_t pwmResolutionBitsValue;
68 mutable uint16_t pwmFrequencyHzValue;
69};
70
71void pinMode(uint8_t pin, uint8_t mode, Supla::Io::Base *io = nullptr);
72int digitalRead(uint8_t pin, Supla::Io::Base *io = nullptr);
73void digitalWrite(uint8_t pin,
74 uint8_t val,
75 Supla::Io::Base *io = nullptr);
76void analogWrite(uint8_t pin,
77 int value,
78 Supla::Io::Base *io = nullptr);
79int analogRead(uint8_t pin, Supla::Io::Base *io = nullptr);
80unsigned int pulseIn(uint8_t pin,
81 uint8_t value,
82 uint64_t timeoutMicro,
83 Supla::Io::Base *io = nullptr);
84
85void pinMode(int channelNumber,
86 uint8_t pin,
87 uint8_t mode,
88 Supla::Io::Base *io = nullptr);
89int digitalRead(int channelNumber,
90 uint8_t pin,
91 Supla::Io::Base *io = nullptr);
92void digitalWrite(int channelNumber,
93 uint8_t pin,
94 uint8_t val,
95 Supla::Io::Base *io = nullptr);
96void analogWrite(int channelNumber,
97 uint8_t pin,
98 int value,
99 Supla::Io::Base *io = nullptr);
100int analogRead(int channelNumber,
101 uint8_t pin,
102 Supla::Io::Base *io = nullptr);
103unsigned int pulseIn(int channelNumber,
104 uint8_t pin,
105 uint8_t value,
106 uint64_t timeoutMicro,
107 Supla::Io::Base *io = nullptr);
108
109void attachInterrupt(uint8_t pin,
110 void (*func)(void),
111 int mode,
112 Io::Base *io = nullptr);
113void detachInterrupt(uint8_t pin, Io::Base *io = nullptr);
114uint8_t pinToInterrupt(uint8_t pin, Io::Base *io = nullptr);
115
116void setPwmFrequency(uint8_t pin,
117 uint16_t pwmFrequency,
118 Io::Base *io = nullptr);
119void setPwmResolutionBits(uint8_t pin,
120 uint8_t resolutionBits,
121 Io::Base *io = nullptr);
122uint8_t defaultPwmResolutionBits(uint8_t pin, Io::Base *io = nullptr);
123bool canSetPwmResolutionBits(uint8_t pin, Io::Base *io = nullptr);
124uint8_t pwmResolutionBits(uint8_t pin, Io::Base *io = nullptr);
125uint32_t pwmMaxValue(uint8_t pin, Io::Base *io = nullptr);
126uint8_t pwmResolutionBits(Io::Base *io = nullptr);
127uint32_t pwmMaxValue(Io::Base *io = nullptr);
128uint16_t pwmFrequency(Io::Base *io = nullptr);
129} // namespace Io
130}; // namespace Supla
131
132#endif // SRC_SUPLA_IO_H_
Definition io.h:36