Control Surface  1.2.0
MIDI Control Surface library for Arduino
ExtendedIOElement.hpp
Go to the documentation of this file.
1 /* ✔ */
2 
3 #pragma once
4 
6 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
7 
8 #include "ExtendedInputOutput.hpp"
11 
13 
63 class ExtendedIOElement : public UpdatableCRTP<ExtendedIOElement> {
64  protected:
71  ExtendedIOElement(pin_t length);
72 
73  public:
90  virtual void pinMode(pin_t pin, PinMode_t mode) {
91  pinModeBuffered(pin, mode);
92  updateBufferedOutputs();
93  }
94 
101  virtual void pinModeBuffered(pin_t pin, PinMode_t mode) = 0;
102 
111  virtual void digitalWrite(pin_t pin, PinStatus_t state) {
112  digitalWriteBuffered(pin, state);
113  updateBufferedOutputs();
114  }
115 
122  virtual void digitalWriteBuffered(pin_t pin, PinStatus_t state) = 0;
123 
131  virtual int digitalRead(pin_t pin) {
132  updateBufferedInputs();
133  return digitalReadBuffered(pin);
134  }
135 
141  virtual int digitalReadBuffered(pin_t pin) = 0;
142 
151  virtual void analogWrite(pin_t pin, analog_t val) {
152  analogWriteBuffered(pin, val);
153  updateBufferedOutputs();
154  }
155 
162  virtual void analogWriteBuffered(pin_t pin, analog_t val) = 0;
163 
171  virtual analog_t analogRead(pin_t pin) {
172  updateBufferedInputs();
173  return analogReadBuffered(pin);
174  }
175 
182 
186  virtual void begin() = 0;
187 
191  static void beginAll();
192 
196  virtual void updateBufferedOutputs() = 0;
197 
202  static void updateAllBufferedOutputs();
203 
207  virtual void updateBufferedInputs() = 0;
208 
213  static void updateAllBufferedInputs();
214 
222  pin_t pin(pin_t pin) const;
223 
232  pin_t operator[](pin_t pin) const;
233 
239  pin_t getLength() const;
240 
245  pin_t getEnd() const;
246 
251  pin_t getStart() const;
252 
256  static DoublyLinkedList<ExtendedIOElement> &getAll();
257 
258  private:
259  const pin_t length;
260  const pin_t start;
261  const pin_t end;
262  static pin_t offset;
263 };
264 
266 
AH::ExtendedIOElement::end
const pin_t end
Definition: ExtendedIOElement.hpp:261
AH::ExtendedIOElement::offset
static pin_t offset
Definition: ExtendedIOElement.hpp:262
Warnings.hpp
Updatable.hpp
AH::pin_t
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
Definition: Hardware-Types.hpp:17
AH::ExtendedIOElement::digitalWrite
virtual void digitalWrite(pin_t pin, PinStatus_t state)
Set the output of the given pin to the given state.
Definition: ExtendedIOElement.hpp:111
AH::ExtendedIOElement::analogReadBuffered
virtual analog_t analogReadBuffered(pin_t pin)=0
Read the analog value of the given pin from the software buffer.
AH::ExtendedIOElement::analogWrite
virtual void analogWrite(pin_t pin, analog_t val)
Write an analog (or PWM) value to the given pin.
Definition: ExtendedIOElement.hpp:151
AH_DIAGNOSTIC_POP
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:36
AH::ExtIO::digitalReadBuffered
int digitalReadBuffered(pin_t pin)
A buffered ExtIO version of the Arduino function.
Definition: ExtendedInputOutput.cpp:130
AH::UpdatableCRTP
A super class for object that have to be updated regularly.
Definition: Updatable.hpp:33
AH::ExtendedIOElement::start
const pin_t start
Definition: ExtendedIOElement.hpp:260
AH::ExtendedIOElement::begin
virtual void begin()=0
Initialize the extended IO element.
AH::ExtendedIOElement
An abstract base class for Extended Input/Output elements.
Definition: ExtendedIOElement.hpp:63
AH::ExtIO::pinModeBuffered
void pinModeBuffered(pin_t pin, PinMode_t mode)
A buffered ExtIO version of the Arduino function.
Definition: ExtendedInputOutput.cpp:102
AH::ExtIO::analogReadBuffered
analog_t analogReadBuffered(pin_t pin)
A buffered ExtIO version of the Arduino function.
Definition: ExtendedInputOutput.cpp:143
AH::ExtendedIOElement::analogRead
virtual analog_t analogRead(pin_t pin)
Read the analog value of the given pin.
Definition: ExtendedIOElement.hpp:171
AH::ExtendedIOElement::pinModeBuffered
virtual void pinModeBuffered(pin_t pin, PinMode_t mode)=0
Set the mode of a given pin in the software buffer.
AH::ExtIO::analogWriteBuffered
void analogWriteBuffered(pin_t pin, analog_t val)
A buffered ExtIO version of the Arduino function.
Definition: ExtendedInputOutput.cpp:156
PinStatus_t
uint8_t PinStatus_t
Definition: ExtendedInputOutput.hpp:48
AH::ExtendedIOElement::pinMode
virtual void pinMode(pin_t pin, PinMode_t mode)
Set the mode of a given pin.
Definition: ExtendedIOElement.hpp:90
AH::ExtendedIOElement::length
const pin_t length
Definition: ExtendedIOElement.hpp:259
AH::analog_t
uint16_t analog_t
The type returned from analogRead and similar functions.
Definition: Hardware-Types.hpp:15
AH::ExtendedIOElement::digitalReadBuffered
virtual int digitalReadBuffered(pin_t pin)=0
Read the state of the given pin from the software buffer.
AH::ExtendedIOElement::digitalRead
virtual int digitalRead(pin_t pin)
Read the state of the given pin.
Definition: ExtendedIOElement.hpp:131
AH::ExtendedIOElement::updateBufferedOutputs
virtual void updateBufferedOutputs()=0
Write the internal state to the physical outputs.
DoublyLinkedList< ExtendedIOElement >
AH::ExtendedIOElement::digitalWriteBuffered
virtual void digitalWriteBuffered(pin_t pin, PinStatus_t state)=0
Set the output of a given pin in the software buffer.
AH_DIAGNOSTIC_WERROR
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:35
AH::ExtendedIOElement::updateBufferedInputs
virtual void updateBufferedInputs()=0
Read the physical state into the input buffers.
AH::ExtIO::digitalWriteBuffered
void digitalWriteBuffered(pin_t pin, PinStatus_t val)
A buffered ExtIO version of the Arduino function.
Definition: ExtendedInputOutput.cpp:116
BEGIN_AH_NAMESPACE
#define BEGIN_AH_NAMESPACE
Definition: AH/Settings/NamespaceSettings.hpp:9
AH::ExtendedIOElement::analogWriteBuffered
virtual void analogWriteBuffered(pin_t pin, analog_t val)=0
Write an analog (or PWM) value to the software buffer given pin.
END_AH_NAMESPACE
#define END_AH_NAMESPACE
Definition: AH/Settings/NamespaceSettings.hpp:10
PinMode_t
uint8_t PinMode_t
Definition: ExtendedInputOutput.hpp:49
Hardware-Types.hpp