cs-midi/AH/Hardware/ExtendedInputOutput/ExtendedIOElement.cpp

46 lines
1.3 KiB
C++

#include "ExtendedIOElement.hpp"
#include <AH/Error/Error.hpp>
#include <AH/STL/type_traits>
BEGIN_AH_NAMESPACE
ExtendedIOElement::ExtendedIOElement(pin_int_t length)
: length(length), start(offset), end(offset + length) {
if (end > NO_PIN)
FATAL_ERROR(F("ExtIO ran out of pin numbers."), 0x00FF);
offset = end;
}
void ExtendedIOElement::beginAll() {
ExtendedIOElement::applyToAll(&ExtendedIOElement::begin);
}
void ExtendedIOElement::updateAllBufferedOutputs() {
ExtendedIOElement::applyToAll(&ExtendedIOElement::updateBufferedOutputs);
}
void ExtendedIOElement::updateAllBufferedInputs() {
ExtendedIOElement::applyToAll(&ExtendedIOElement::updateBufferedInputs);
}
pin_t ExtendedIOElement::pin(pin_int_t p) const {
if (p >= length) {
ERROR(F("Error: pin number out of range"), 0x4567);
return end - 1;
}
return p + start;
}
pin_t ExtendedIOElement::operator[](pin_int_t p) const { return pin(p); }
pin_int_t ExtendedIOElement::getLength() const { return length; }
pin_t ExtendedIOElement::getEnd() const { return end; }
pin_t ExtendedIOElement::getStart() const { return start; }
DoublyLinkedList<ExtendedIOElement> &ExtendedIOElement::getAll() {
return updatables;
}
pin_t ExtendedIOElement::offset = NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS;
END_AH_NAMESPACE