Control Surface  1.2.0
MIDI Control Surface library for Arduino
ExtendedIOElement.cpp
Go to the documentation of this file.
2 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
3 
4 #include "ExtendedIOElement.hpp"
5 #include <AH/Error/Error.hpp>
6 #include <AH/STL/type_traits> // is_unsigned
7 
9 
10 ExtendedIOElement::ExtendedIOElement(pin_t length)
11  : length(length), start(offset), end(offset + length) {
12  if (end < start)
13  FATAL_ERROR(F("ExtIO ran out of pin numbers. "
14  "Dynamically creating new ExtendedIOElements is not "
15  "recommended."),
16  0x00FF);
17  offset = end;
18 }
19 
22 }
23 
26 }
27 
30 }
31 
33  if (p >= length) {
34  static_assert(std::is_unsigned<pin_t>::value,
35  "Error: pin_t should be an unsigned integer type");
36  ERROR(F("Error: the pin number (")
37  << p
38  << F(") is greater than the number of pins of this "
39  "ExtendedIOElement (")
40  << length << ')',
41  0x4567);
42  return end - 1; // LCOV_EXCL_LINE
43  }
44  return p + start;
45 }
46 
48 
50 
51 pin_t ExtendedIOElement::getEnd() const { return end; }
52 
54 
56  return updatables;
57 }
58 
59 pin_t ExtendedIOElement::offset = NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS;
60 
62 
AH::ExtendedIOElement::end
const pin_t end
Definition: ExtendedIOElement.hpp:261
AH::ExtendedIOElement::offset
static pin_t offset
Definition: ExtendedIOElement.hpp:262
Warnings.hpp
AH::ExtendedIOElement::getEnd
pin_t getEnd() const
Get the largest global extended IO pin number that belongs to this extended IO element.
Definition: ExtendedIOElement.cpp:51
Error.hpp
AH::ExtendedIOElement::getAll
static DoublyLinkedList< ExtendedIOElement > & getAll()
Get the list of all Extended IO elements.
Definition: ExtendedIOElement.cpp:55
AH::pin_t
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
Definition: Hardware-Types.hpp:17
AH::ExtendedIOElement::getLength
pin_t getLength() const
Get the number of pins this IO element has.
Definition: ExtendedIOElement.cpp:49
AH_DIAGNOSTIC_POP
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:36
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::updateAllBufferedInputs
static void updateAllBufferedInputs()
Read the physical state into the input buffers for all extended IO elements.
Definition: ExtendedIOElement.cpp:28
FATAL_ERROR
#define FATAL_ERROR(msg, errc)
Print the error message and error code, and stop the execution.
Definition: Error.hpp:60
ERROR
#define ERROR(msg, errc)
Print the error message and error code, and stop the execution if FATAL_ERRORS are enabled.
Definition: Error.hpp:42
AH::ExtendedIOElement::getStart
pin_t getStart() const
Get the smallest global extended IO pin number that belongs to this extended IO element.
Definition: ExtendedIOElement.cpp:53
AH::ExtendedIOElement::beginAll
static void beginAll()
Initialize all extended IO elements.
Definition: ExtendedIOElement.cpp:20
AH::ExtendedIOElement::length
const pin_t length
Definition: ExtendedIOElement.hpp:259
AH::ExtendedIOElement::pin
pin_t pin(pin_t pin) const
Get the extended IO pin number of a given physical pin of this extended IO element.
Definition: ExtendedIOElement.cpp:32
AH::ExtendedIOElement::updateAllBufferedOutputs
static void updateAllBufferedOutputs()
Write the internal states to the physical outputs for all extended IO elements.
Definition: ExtendedIOElement.cpp:24
AH::ExtendedIOElement::updateBufferedOutputs
virtual void updateBufferedOutputs()=0
Write the internal state to the physical outputs.
AH::ExtendedIOElement::operator[]
pin_t operator[](pin_t pin) const
Get the extended IO pin number of a given physical pin of this extended IO element.
Definition: ExtendedIOElement.cpp:47
MIDI_Notes::F
constexpr int8_t F
Definition: Notes.hpp:23
DoublyLinkedList< ExtendedIOElement >
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.
BEGIN_AH_NAMESPACE
#define BEGIN_AH_NAMESPACE
Definition: AH/Settings/NamespaceSettings.hpp:9
END_AH_NAMESPACE
#define END_AH_NAMESPACE
Definition: AH/Settings/NamespaceSettings.hpp:10
AH::UpdatableCRTP< ExtendedIOElement >::applyToAll
static void applyToAll(const LockGuard &, void(Derived::*method)(Args &&...), Args &&... args)
Definition: Updatable.hpp:85
AH::UpdatableCRTP< ExtendedIOElement >::updatables
static DoublyLinkedList< ExtendedIOElement > updatables
Definition: Updatable.hpp:173