46 lines
1.3 KiB
C++
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
|