LCOV - code coverage report
Current view: top level - src/AH/Hardware/ExtendedInputOutput - ExtendedIOElement.cpp (source / functions) Hit Total Coverage
Test: 90a1b9beff85a60dc6ebcea034a947a845e56960 Lines: 23 23 100.0 %
Date: 2019-11-30 15:53:32 Functions: 9 10 90.0 %
Legend: Lines: hit not hit

          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          26 : ExtendedIOElement::ExtendedIOElement(pin_t length)
      11          52 :     : length(length), start(offset), end(offset + length) {
      12          26 :     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          25 :     offset = end;
      18          25 :     elements.append(this);
      19          27 : }
      20             : 
      21          25 : ExtendedIOElement::~ExtendedIOElement() { elements.remove(this); }
      22             : 
      23           6 : void ExtendedIOElement::beginAll() {
      24          12 :     for (ExtendedIOElement &e : elements)
      25           6 :         e.begin();
      26           6 : }
      27             : 
      28          68 : pin_t ExtendedIOElement::pin(pin_t p) const {
      29          68 :     if (p >= length) {
      30             :         static_assert(std::is_unsigned<pin_t>::value,
      31             :                       "Error: pin_t should be an unsigned integer type");
      32           2 :         ERROR(F("Error: the pin number (")
      33             :                   << p
      34             :                   << F(") is greater than the number of pins of this "
      35             :                        "ExtendedIOElement (")
      36             :                   << length << ')',
      37             :               0x4567);
      38             :         return end - 1; // LCOV_EXCL_LINE
      39             :     }
      40          66 :     return p + start;
      41          68 : }
      42             : 
      43           1 : pin_t ExtendedIOElement::operator[](pin_t p) const { return pin(p); }
      44             : 
      45           1 : pin_t ExtendedIOElement::getLength() const { return length; }
      46             : 
      47         171 : pin_t ExtendedIOElement::getEnd() const { return end; }
      48             : 
      49         491 : pin_t ExtendedIOElement::getStart() const { return start; }
      50             : 
      51         150 : DoublyLinkedList<ExtendedIOElement> &ExtendedIOElement::getAll() {
      52         150 :     return elements;
      53             : }
      54             : 
      55             : DoublyLinkedList<ExtendedIOElement> ExtendedIOElement::elements;
      56             : 
      57             : pin_t ExtendedIOElement::offset = NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS;
      58             : 
      59             : END_AH_NAMESPACE
      60             : 
      61             : AH_DIAGNOSTIC_POP()

Generated by: LCOV version 1.14-5-g4ff2ed6