supla-device
Loading...
Searching...
No Matches
io.h
1// SPDX-FileCopyrightText: AC SOFTWARE SP. Z O.O.
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#ifndef SRC_SUPLA_IO_H_
5#define SRC_SUPLA_IO_H_
6
7#include <stdint.h>
8
9#include "definitions.h"
10#include "io/io_pin.h"
11
12namespace Supla {
13// This class can be used to override digitalRead and digitalWrite methods.
14// If you want to add custom behavior i.e. during read/write from some
15// digital pin, you can inherit from Supla::Io::Base class, implement your
16// own customDigitalRead and customDigitalWrite methods and create instance
17// of this class. It will automatically register and SuplaDevice will use it.
18//
19// Example use: implement some additional logic, when relay state is
20// changed.
21namespace Io {
22
23class Base {
24 public:
25 Base();
26 virtual ~Base();
27 virtual bool isReady() const;
28
29 virtual void customPinMode(int channelNumber, uint8_t pin, uint8_t mode);
30 virtual int customDigitalRead(int channelNumber, uint8_t pin);
31 virtual unsigned int customPulseIn(int channelNumber,
32 uint8_t pin,
33 uint8_t value,
34 uint64_t timeoutMicro);
35 virtual void customDigitalWrite(int channelNumber, uint8_t pin, uint8_t val);
36 virtual void customAnalogWrite(int channelNumber, uint8_t pin, int val);
37 virtual void customSetPwmResolutionBits(uint8_t pin,
38 uint8_t resolutionBits);
39 virtual void customConfigureAnalogOutput(int channelNumber,
40 uint8_t pin,
41 bool outputInvert = false);
42 virtual void customSetPwmFrequency(uint16_t pwmFrequency);
43 virtual uint8_t customDefaultPwmResolutionBits(uint8_t pin) const;
44 virtual bool customCanSetPwmResolutionBits(uint8_t pin) const;
45 virtual uint8_t customPwmResolutionBits(uint8_t pin) const;
46 virtual uint32_t customPwmMaxValue(uint8_t pin) const;
47 virtual uint16_t customPwmFrequency() const;
48 virtual int customAnalogRead(int channelNumber, uint8_t pin);
49 virtual void customAttachInterrupt(uint8_t pin, void (*func)(void), int mode);
50 virtual void customDetachInterrupt(uint8_t pin);
51 virtual uint8_t customPinToInterrupt(uint8_t pin);
52
53 private:
54 mutable uint8_t pwmResolutionBitsValue;
55 mutable uint16_t pwmFrequencyHzValue;
56};
57
58void pinMode(uint8_t pin, uint8_t mode, Supla::Io::Base *io = nullptr);
59int digitalRead(uint8_t pin, Supla::Io::Base *io = nullptr);
60void digitalWrite(uint8_t pin,
61 uint8_t val,
62 Supla::Io::Base *io = nullptr);
63void analogWrite(uint8_t pin,
64 int value,
65 Supla::Io::Base *io = nullptr);
66int analogRead(uint8_t pin, Supla::Io::Base *io = nullptr);
67unsigned int pulseIn(uint8_t pin,
68 uint8_t value,
69 uint64_t timeoutMicro,
70 Supla::Io::Base *io = nullptr);
71
72void pinMode(int channelNumber,
73 uint8_t pin,
74 uint8_t mode,
75 Supla::Io::Base *io = nullptr);
76int digitalRead(int channelNumber,
77 uint8_t pin,
78 Supla::Io::Base *io = nullptr);
79void digitalWrite(int channelNumber,
80 uint8_t pin,
81 uint8_t val,
82 Supla::Io::Base *io = nullptr);
83void analogWrite(int channelNumber,
84 uint8_t pin,
85 int value,
86 Supla::Io::Base *io = nullptr);
87int analogRead(int channelNumber,
88 uint8_t pin,
89 Supla::Io::Base *io = nullptr);
90unsigned int pulseIn(int channelNumber,
91 uint8_t pin,
92 uint8_t value,
93 uint64_t timeoutMicro,
94 Supla::Io::Base *io = nullptr);
95
96void attachInterrupt(uint8_t pin,
97 void (*func)(void),
98 int mode,
99 Io::Base *io = nullptr);
100void detachInterrupt(uint8_t pin, Io::Base *io = nullptr);
101uint8_t pinToInterrupt(uint8_t pin, Io::Base *io = nullptr);
102
103void setPwmFrequency(uint8_t pin,
104 uint16_t pwmFrequency,
105 Io::Base *io = nullptr);
106void setPwmResolutionBits(uint8_t pin,
107 uint8_t resolutionBits,
108 Io::Base *io = nullptr);
109uint8_t defaultPwmResolutionBits(uint8_t pin, Io::Base *io = nullptr);
110bool canSetPwmResolutionBits(uint8_t pin, Io::Base *io = nullptr);
111uint8_t pwmResolutionBits(uint8_t pin, Io::Base *io = nullptr);
112uint32_t pwmMaxValue(uint8_t pin, Io::Base *io = nullptr);
113uint8_t pwmResolutionBits(Io::Base *io = nullptr);
114uint32_t pwmMaxValue(Io::Base *io = nullptr);
115uint16_t pwmFrequency(Io::Base *io = nullptr);
116} // namespace Io
117}; // namespace Supla
118
119#endif // SRC_SUPLA_IO_H_
Definition io.h:23