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 48 : ExtendedIOElement::ExtendedIOElement(pin_t length) 11 49 : : length(length), start(offset), end(offset + length) { 12 48 : if (end > NO_PIN) 13 1 : FATAL_ERROR(F("ExtIO ran out of pin numbers. " 14 : "Dynamically creating new ExtendedIOElements is not " 15 : "recommended."), 16 : 0x00FF); 17 47 : offset = end; 18 47 : } 19 : 20 10 : void ExtendedIOElement::beginAll() { 21 10 : ExtendedIOElement::applyToAll(&ExtendedIOElement::begin); 22 10 : } 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 72 : pin_t ExtendedIOElement::pin(pin_t p) const { 33 72 : if (p >= length) { 34 : static_assert(!std::is_integral<pin_t>::value || 35 : std::is_unsigned<pin_t>::value, 36 : "Error: pin_t should be an unsigned integer type"); 37 2 : ERROR(F("Error: the pin number (") 38 : << p 39 : << F(") is greater than the number of pins of this " 40 : "ExtendedIOElement (") 41 : << length << ')', 42 : 0x4567); 43 : return end - 1; // LCOV_EXCL_LINE 44 : } 45 70 : return p + start; 46 : } 47 : 48 1 : pin_t ExtendedIOElement::operator[](pin_t p) const { return pin(p); } 49 : 50 1 : pin_t ExtendedIOElement::getLength() const { return length; } 51 : 52 90 : pin_t ExtendedIOElement::getEnd() const { return end; } 53 : 54 259 : pin_t ExtendedIOElement::getStart() const { return start; } 55 : 56 80 : DoublyLinkedList<ExtendedIOElement> &ExtendedIOElement::getAll() { 57 80 : return updatables; 58 : } 59 : 60 : pin_t ExtendedIOElement::offset = NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS; 61 : 62 : END_AH_NAMESPACE 63 : 64 : AH_DIAGNOSTIC_POP()