Line data Source code
1 : #include <AH/Settings/Warnings.hpp> 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 : 8 : BEGIN_AH_NAMESPACE 9 : 10 35 : ExtendedIOElement::ExtendedIOElement(pin_t length) 11 70 : : length(length), start(offset), end(offset + length) { 12 35 : if (end < start) 13 1 : FATAL_ERROR(F("ExtIO ran out of pin numbers. " 14 : "Dynamically creating new ExtendedIOElements is not " 15 : "recommended."), 16 : 0x00FF); 17 34 : offset = end; 18 36 : } 19 : 20 9 : void ExtendedIOElement::beginAll() { 21 9 : ExtendedIOElement::applyToAll(&ExtendedIOElement::begin); 22 9 : } 23 : 24 1 : void ExtendedIOElement::updateAllBufferedOutputs() { 25 1 : ExtendedIOElement::applyToAll(&ExtendedIOElement::updateBufferedOutputs); 26 1 : } 27 : 28 1 : void ExtendedIOElement::updateAllBufferedInputs() { 29 1 : ExtendedIOElement::applyToAll(&ExtendedIOElement::updateBufferedInputs); 30 1 : } 31 : 32 82 : pin_t ExtendedIOElement::pin(pin_t p) const { 33 82 : if (p >= length) { 34 : static_assert(std::is_unsigned<pin_t>::value, 35 : "Error: pin_t should be an unsigned integer type"); 36 2 : 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 80 : return p + start; 45 82 : } 46 : 47 1 : pin_t ExtendedIOElement::operator[](pin_t p) const { return pin(p); } 48 : 49 1 : pin_t ExtendedIOElement::getLength() const { return length; } 50 : 51 185 : pin_t ExtendedIOElement::getEnd() const { return end; } 52 : 53 533 : pin_t ExtendedIOElement::getStart() const { return start; } 54 : 55 164 : DoublyLinkedList<ExtendedIOElement> &ExtendedIOElement::getAll() { 56 164 : return updatables; 57 : } 58 : 59 : pin_t ExtendedIOElement::offset = NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS; 60 : 61 : END_AH_NAMESPACE 62 : 63 : AH_DIAGNOSTIC_POP()