diff --git a/.clang-format b/.clang-format index 09dadbdd9..771105279 100644 --- a/.clang-format +++ b/.clang-format @@ -3,23 +3,29 @@ Language: Cpp # BasedOnStyle: LLVM AccessModifierOffset: -2 AlignAfterOpenBracket: Align +AlignConsecutiveMacros: false AlignConsecutiveAssignments: false AlignConsecutiveDeclarations: false AlignEscapedNewlines: Right AlignOperands: true AlignTrailingComments: true +AllowAllArgumentsOnNextLine: true +AllowAllConstructorInitializersOnNextLine: true AllowAllParametersOfDeclarationOnNextLine: true -AllowShortBlocksOnASingleLine: false +AllowShortBlocksOnASingleLine: Never AllowShortCaseLabelsOnASingleLine: true AllowShortFunctionsOnASingleLine: All -AllowShortIfStatementsOnASingleLine: false +AllowShortLambdasOnASingleLine: All +AllowShortIfStatementsOnASingleLine: Never AllowShortLoopsOnASingleLine: false AlwaysBreakAfterDefinitionReturnType: None AlwaysBreakAfterReturnType: None AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: true BinPackArguments: true BinPackParameters: true -BraceWrapping: +BraceWrapping: + AfterCaseLabel: false AfterClass: false AfterControlStatement: false AfterEnum: false @@ -38,6 +44,7 @@ BraceWrapping: BreakBeforeBinaryOperators: None BreakBeforeBraces: Attach BreakBeforeInheritanceComma: false +BreakInheritanceList: BeforeColon BreakBeforeTernaryOperators: true BreakConstructorInitializersBeforeComma: false BreakConstructorInitializers: BeforeColon @@ -50,24 +57,30 @@ ConstructorInitializerAllOnOneLineOrOnePerLine: false ConstructorInitializerIndentWidth: 4 ContinuationIndentWidth: 4 Cpp11BracedListStyle: true +DeriveLineEnding: true DerivePointerAlignment: false DisableFormat: false ExperimentalAutoDetectBinPacking: false FixNamespaceComments: true -ForEachMacros: +ForEachMacros: - foreach - Q_FOREACH - BOOST_FOREACH IncludeBlocks: Preserve -IncludeCategories: +IncludeCategories: - Regex: '^"(llvm|llvm-c|clang|clang-c)/' Priority: 2 + SortPriority: 0 - Regex: '^(<|"(gtest|gmock|isl|json)/)' Priority: 3 + SortPriority: 0 - Regex: '.*' Priority: 1 + SortPriority: 0 IncludeIsMainRegex: '(Test)?$' +IncludeIsMainSourceRegex: '' IndentCaseLabels: true +IndentGotoLabels: true IndentPPDirectives: None IndentWidth: 4 IndentWrappedFunctionNames: false @@ -78,6 +91,7 @@ MacroBlockBegin: '' MacroBlockEnd: '' MaxEmptyLinesToKeep: 1 NamespaceIndentation: None +ObjCBinPackProtocolList: Auto ObjCBlockIndentWidth: 2 ObjCSpaceAfterProperty: false ObjCSpaceBeforeProtocolList: true @@ -86,29 +100,37 @@ PenaltyBreakBeforeFirstCallParameter: 19 PenaltyBreakComment: 300 PenaltyBreakFirstLessLess: 120 PenaltyBreakString: 1000 +PenaltyBreakTemplateDeclaration: 10 PenaltyExcessCharacter: 1000000 -AlwaysBreakTemplateDeclarations: true PenaltyReturnTypeOnItsOwnLine: 60 PointerAlignment: Right -RawStringFormats: - - Delimiter: pb - Language: TextProto - BasedOnStyle: google ReflowComments: false SortIncludes: true SortUsingDeclarations: true SpaceAfterCStyleCast: false +SpaceAfterLogicalNot: false SpaceAfterTemplateKeyword: true SpaceBeforeAssignmentOperators: true +SpaceBeforeCpp11BracedList: false +SpaceBeforeCtorInitializerColon: true +SpaceBeforeInheritanceColon: true SpaceBeforeParens: ControlStatements +SpaceBeforeRangeBasedForLoopColon: true +SpaceInEmptyBlock: false SpaceInEmptyParentheses: false SpacesBeforeTrailingComments: 1 SpacesInAngles: false +SpacesInConditionalStatement: false SpacesInContainerLiterals: true SpacesInCStyleCastParentheses: false SpacesInParentheses: false SpacesInSquareBrackets: false -Standard: Cpp11 +SpaceBeforeSquareBrackets: false +Standard: 14 +StatementMacros: + - Q_UNUSED + - QT_REQUIRE_VERSION TabWidth: 8 +UseCRLF: false UseTab: Never ... diff --git a/.github/workflows/ccpp.yml b/.github/workflows/ccpp.yml index 13464ba90..ddac9c4bf 100644 --- a/.github/workflows/ccpp.yml +++ b/.github/workflows/ccpp.yml @@ -9,14 +9,14 @@ jobs: steps: - uses: actions/checkout@v1 - - name: Git Submodules - run: git submodule update --init --recursive --depth 50 - - name: CMake - run: cmake .. - working-directory: build + - name: Install dependencies + run: sudo ./scripts/install-gtest.sh Debug /usr/local + - name: Configure + run: cmake -S. --preset ci + env: + CC: gcc-9 + CXX: g++-9 - name: Build - run: make -j4 - working-directory: build - - name: Run tests - run: make check - working-directory: build + run: cmake --build --preset ci -j + - name: Test + run: ctest --preset ci diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml new file mode 100644 index 000000000..d6dadbb55 --- /dev/null +++ b/.github/workflows/documentation.yml @@ -0,0 +1,82 @@ +# This action generates the documentation and then deploys it to the `gh-pages` branch. + +name: Documentation & Coverage + +on: + push: + +jobs: + deploy-docs: + runs-on: ubuntu-20.04 + + steps: + - uses: actions/checkout@v2 + + # Cache the doxygen executable, lcov + - uses: actions/cache@v2 + id: cache-tools + with: + path: | + /tmp/doxygen + /tmp/lcov + /tmp/gtest + key: ${{ runner.os }}-doc-${{ hashFiles('scripts/ci/install-doxygen.sh', 'scripts/ci/install-lcov.sh', 'scripts/install-gtest.sh') }} + + - name: Install Graphviz/Dot and LCOV Perl dependencies, as well as TeX Live + run: | + sudo apt-get install \ + graphviz libjson-perl libperlio-gzip-perl perl \ + texlive-binaries + + - name: Install LCOV + run: | + ./scripts/ci/install-lcov.sh /tmp/lcov + echo "/tmp/lcov/bin" >> $GITHUB_PATH + + # Download and build doxygen (if not cached already) + - name: Install Doxygen + run: | + ./scripts/ci/install-doxygen.sh /tmp/doxygen + echo "/tmp/doxygen/bin" >> $GITHUB_PATH + + - name: Install Google Test + if: steps.cache-tools.outputs.cache-hit != 'true' + shell: bash + run: ./scripts/install-gtest.sh Debug /tmp/gtest + + # Install Python + - uses: actions/setup-python@v2 + with: + python-version: '3.9.6' + + # Create the `gh-pages` branch if it doesn't exist already, check it out, + # and copy it to /tmp/staging. + - name: Create staging area + run: | + rm -rf /tmp/staging + git fetch origin gh-pages:gh-pages ||: + git checkout gh-pages || \ + { git checkout --orphan gh-pages && git rm -rf . && git clean -fxd ; } + cp -ar $GITHUB_WORKSPACE/ /tmp/staging + git checkout ${GITHUB_REF##*/} + git submodule update --init --recursive + + # Generate the documentation and save it in /tmp/staging + - name: Generate documentation + run: ./scripts/ci/gen-docs.sh /tmp/staging + env: + CC: gcc-10 + CXX: g++-10 + CMAKE_PREFIX_PATH: /tmp/gtest + + # Commit the new documentation, squash the commits, and push it to GitHub + - name: Commit and push documention + run: | + git config --global user.name "github-actions" + git config --global user.email "actions@github.com" + commithash=$(git rev-parse HEAD) + cd /tmp/staging + git add . + git commit -m "Documentation for ${commithash}" && \ + git reset $(git commit-tree HEAD^{tree} -m "Documentation for ${commithash}") && \ + git push -f origin gh-pages ||: diff --git a/.github/workflows/examples.yaml b/.github/workflows/examples.yaml new file mode 100644 index 000000000..1c81eacc5 --- /dev/null +++ b/.github/workflows/examples.yaml @@ -0,0 +1,94 @@ +name: Examples + +on: push + +jobs: + compile-examples: + name: Examples + runs-on: ubuntu-20.04 + strategy: + matrix: + board: [AVR, Nano 33 BLE, Nano 33 IoT, ESP32, ESP8266, AVR USB, Mega, Leonardo, Due, Nano Every, Teensy 3.x, Teensy 4.1] + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - uses: actions/setup-python@v2 + with: + python-version: '3.9' + + - name: Cache Arduino CLI + uses: actions/cache@v2.1.4 + with: + path: | + ~/.local/bin + key: ${{ runner.os }}-local-bin-v2 + + - name: Cache Arduino Cores and Libraries + uses: actions/cache@v2.1.4 + with: + path: | + ~/.arduino15 + ~/Arduino/libraries + key: ${{ runner.os }}-arduino-v3-${{ github.sha }} + restore-keys: ${{ runner.os }}-arduino-v3- + + - name: Cache Compiled Arduino Cores and Sketches + uses: actions/cache@v2.1.4 + with: + path: | + /tmp/arduino-sketch-* + /tmp/core-* + key: ${{ runner.os }}-arduino-compiled-v3-${{ matrix.board }}-${{ github.sha }} + restore-keys: ${{ runner.os }}-arduino-compiled-v3-${{ matrix.board }}- + + - name: Update $PATH + run: echo "$HOME/.local/bin" >> $GITHUB_PATH + + - name: Install Arduino CLI + run: | + mkdir -p "$HOME/.local/bin" + which arduino-cli || { curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | BINDIR="$HOME/.local/bin" sh; } + mkdir -p "$HOME/.arduino15" + cp "$GITHUB_WORKSPACE/tools/arduino-cli.yaml" "$HOME/.arduino15" + arduino-cli core update-index + + - name: Install Arduino Boards + run: | + arduino-cli core install arduino:avr arduino:mbed_nano arduino:samd esp32:esp32 esp8266:esp8266 arduino:sam arduino:megaavr teensy:avr + arduino-cli core upgrade + arduino-cli cache clean + version=$(arduino-cli core list | grep 'teensy:avr' | awk '{print $2}') && { sed -i 's/^recipe.hooks.postbuild/# recipe.hooks.postbuild/g' $HOME/.arduino15/packages/teensy/hardware/avr/$version/platform.txt ||:; } + version=$(arduino-cli core list | grep 'arduino:mbed_nano' | awk '{print $2}') && { patch "$HOME/.arduino15/packages/arduino/hardware/mbed_nano/$version/cores/arduino/Arduino.h" -i "$GITHUB_WORKSPACE/scripts/patches/ARDUINO_LIB_DISCOVERY_PHASE.patch" ||:; } + + - name: Install Arduino Libraries + run: | + mkdir -p "$HOME/Arduino/libraries" && cd "$_" + [ -d Adafruit-GFX-Library ] || git clone https://github.com/adafruit/Adafruit-GFX-Library.git --depth=1 & + [ -d Adafruit_SSD1306 ] || git clone https://github.com/adafruit/Adafruit_SSD1306.git --depth=1 & + [ -d Adafruit_BusIO ] || git clone https://github.com/adafruit/Adafruit_BusIO.git --depth=1 & + [ -d FastLED ] || git clone https://github.com/FastLED/FastLED.git --depth=1 & + [ -d MIDIUSB ] || git clone https://github.com/arduino-libraries/MIDIUSB.git --depth=1 & + [ -d Arduino-AppleMIDI-Library ] || git clone https://github.com/lathoub/Arduino-AppleMIDI-Library.git --depth=1 --branch v3.1.2 & + [ -d arduino_midi_library ] || git clone https://github.com/FortySevenEffects/arduino_midi_library.git --depth=1 & + ln -snf "$GITHUB_WORKSPACE" "$HOME/Arduino/libraries/" + # cp "$GITHUB_WORKSPACE/examples/3. MIDI Interfaces/AppleMIDI/WiFi-Credentials.example.h" "$GITHUB_WORKSPACE/examples/3. MIDI Interfaces/AppleMIDI/WiFi-Credentials.h" + + - name: Cache Python Packages + uses: actions/cache@v2.1.4 + with: + path: ~/.venv + key: ${{ runner.os }}-python-venv-v2-${{ github.sha }} + restore-keys: ${{ runner.os }}-python-venv-v2- + + - name: Install Python Packages + run: | + [ -d "$HOME/.venv" ] || python3 -m venv "$HOME/.venv" + source "$HOME/.venv/bin/activate" + python3 -m pip install -U pyyaml pyserial + + - name: Compile Examples + run: | + source "$HOME/.venv/bin/activate" + python3 "$GITHUB_WORKSPACE/tools/arduino-example-builder.py" "${{ matrix.board }}" --examples_dir "$GITHUB_WORKSPACE/examples" diff --git a/.gitignore b/.gitignore index 7f57c3714..67cad3f22 100644 --- a/.gitignore +++ b/.gitignore @@ -2,9 +2,14 @@ .vscode/tags *.pc .vscode/ipch +.cache .~lock* __pycache__/ *.tmp *.hex + +build +docs/Coverage +docs/Doxygen \ No newline at end of file diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index cc3da50ee..000000000 --- a/.gitmodules +++ /dev/null @@ -1,4 +0,0 @@ -[submodule "googletest"] - path = googletest - url = https://github.com/google/googletest.git - shallow = true diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 52c510c13..000000000 --- a/.travis.yml +++ /dev/null @@ -1,30 +0,0 @@ -language: cpp -os: linux -dist: bionic -addons: - apt: - packages: - - expect - -compiler: - - gcc - - clang - -cache: - ccache: true - directories: - - $HOME/.arduino15 - - $HOME/opt - - $HOME/.local - - $HOME/Arduino - -before_install: - - sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y - - sudo apt-get update -q - - sudo apt-get install libstdc++6 -y - -install: - - bash scripts/install-ci.sh - -script: - - bash scripts/build-ci.sh diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json deleted file mode 100644 index e6b151008..000000000 --- a/.vscode/c_cpp_properties.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "configurations": [ - { - "name": "Linux", - "defines": [ - "IDE" - ], - "compilerPath": "/usr/bin/env gcc-9", - "cStandard": "c11", - "cppStandard": "c++14", - "intelliSenseMode": "gcc-x64", - "includePath": [ - "${default}", - "${workspaceFolder}/mock/**", - "${workspaceFolder}/src", - "${workspaceFolder}/test", - "${workspaceFolder}/googletest/googlemock/include", - "${workspaceFolder}/googletest/googletest/include", - "${workspaceFolder}/gtest-wrappers", - "${env:HOME}/Arduino/libraries/FastLED", - "${env:HOME}/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino5/avr/include" - ], - "configurationProvider": "vector-of-bool.cmake-tools" - } - ], - "version": 4 -} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 896629bb3..000000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "name": "(gdb) Launch", - "type": "cppdbg", - "request": "launch", - "program": "${workspaceFolder}/build/bin/tests", - "args": [], - "stopAtEntry": false, - "cwd": "${workspaceFolder}", - "environment": [], - "externalConsole": false, - "MIMode": "gdb", - "setupCommands": [ - { - "description": "Enable pretty-printing for gdb", - "text": "-enable-pretty-printing", - "ignoreFailures": true - } - ] - }, - ] -} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 14ce3fec0..afd0d698d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,101 +3,15 @@ "*.axbm": "cpp", "*.ipp": "cpp", "*.tcc": "cpp", - "array": "cpp", - "initializer_list": "cpp", - "utility": "cpp", - "deque": "cpp", - "forward_list": "cpp", - "unordered_map": "cpp", - "vector": "cpp", - "typeinfo": "cpp", - "chrono": "cpp", - "functional": "cpp", - "future": "cpp", - "istream": "cpp", - "tuple": "cpp", - "type_traits": "cpp", - "optional": "cpp", - "ratio": "cpp", - "system_error": "cpp", - "atomic": "cpp", - "exception": "cpp", - "list": "cpp", - "unordered_set": "cpp", - "cctype": "cpp", - "clocale": "cpp", - "cmath": "cpp", - "csignal": "cpp", - "cstdarg": "cpp", - "cstddef": "cpp", - "cstdio": "cpp", - "cstdlib": "cpp", - "cstring": "cpp", - "ctime": "cpp", - "cwchar": "cpp", - "cwctype": "cpp", - "strstream": "cpp", - "bitset": "cpp", - "codecvt": "cpp", - "complex": "cpp", - "condition_variable": "cpp", - "cstdint": "cpp", - "fstream": "cpp", - "iomanip": "cpp", - "iosfwd": "cpp", - "iostream": "cpp", - "limits": "cpp", - "memory": "cpp", - "mutex": "cpp", - "new": "cpp", - "ostream": "cpp", - "numeric": "cpp", - "sstream": "cpp", - "stdexcept": "cpp", - "streambuf": "cpp", - "thread": "cpp", - "cinttypes": "cpp", - "typeindex": "cpp", - "__mutex_base": "cpp", - "random": "cpp", - "algorithm": "cpp", - "string": "cpp", - "string_view": "cpp", - "__bit_reference": "cpp", - "__hash_table": "cpp", - "__split_buffer": "cpp", - "__tree": "cpp", - "iterator": "cpp", - "map": "cpp", - "set": "cpp", - "__functional_base": "cpp", - "__functional_base_03": "cpp", - "locale": "cpp", - "memory_resource": "cpp", - "bit": "cpp", "*.dox": "cpp" }, - "files.exclude": { - "**/.git": true, - "**/.svn": true, - "**/.hg": true, - "**/CVS": true, - "**/.DS_Store": true, - }, - "editor.dragAndDrop": false, - "editor.formatOnSave": false, "editor.minimap.maxColumn": 80, "editor.minimap.renderCharacters": false, - "editor.quickSuggestions": { - "other": true, - "comments": true, - "strings": true - }, - "editor.renderControlCharacters": true, - "editor.renderWhitespace": "boundary", "editor.rulers": [ 80 ], + "editor.renderControlCharacters": true, + "editor.renderWhitespace": "boundary", "files.defaultLanguage": "cpp", "files.trimFinalNewlines": true, "files.trimTrailingWhitespace": false, @@ -108,8 +22,6 @@ "**/docs/Doxygen": true, "**/docs/Coverage": true }, - "search.smartCase": true, - "C_Cpp.default.cppStandard": "c++14", - "editor.scrollBeyondLastColumn": 0, - "terminal.integrated.cwd": "build", + "cmake.useCMakePresets": "always", + "cmake.copyCompileCommands": "${workspaceFolder}/build/compile_commands.json", } \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json index b1f43bcb3..b64178c57 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -3,81 +3,15 @@ // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ - // Build tasks ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: { "type": "shell", - "label": "Make All", - "command": "make -j$[$(nproc) * 2]", - "options": { - "cwd": "${workspaceFolder}/build", - }, - "problemMatcher": "$gcc", - "group": { - "kind": "build", - "isDefault": true, - }, - }, - { - "type": "shell", - "label": "Clear Build Directory and Run CMake", - "command": "./setup-build.sh \"${workspaceFolder}\"", - "options": { - "cwd": "${workspaceFolder}/scripts", - }, - "problemMatcher": [], - }, - // Tests ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - { - "type": "shell", - "label": "Make Test", - "command": "make test", - "options": { - "cwd": "${workspaceFolder}/build", - }, - "dependsOn": "Make All", - "problemMatcher": "$gcc", - "group": "test", - }, - { - "type": "shell", - "label": "Make Check", - "command": "make check", - "options": { - "cwd": "${workspaceFolder}/build", - }, - "dependsOn": "Make All", + "label": "Build examples", + "command": "python3 arduino-example-builder.py 'AVR'", "problemMatcher": "$gcc", - "group": "test", - }, - { - "type": "shell", - "label": "Make & Test & Build examples", - "command": "./build-arduino-examples.sh $[$(nproc) * 2]", - "problemMatcher": "$gcc", - "options": { - "cwd": "${workspaceFolder}/scripts", - }, - "dependsOn": "Make Test", - "group": "test", - }, - // Documentation & Coverage :::::::::::::::::::::::::::::::::::::::::::: - { - "type": "shell", - "label": "Generate Documentation", - "command": "make documentation", - "options": { - "cwd": "${workspaceFolder}/build", - }, - "problemMatcher": [], - }, - { - "type": "shell", - "label": "Generate Coverage Information", - "command": "make coverage", "options": { - "cwd": "${workspaceFolder}/build/coverage", + "cwd": "${workspaceFolder}/tools", }, - "problemMatcher": [], + "group": "build", }, ] } \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 5bfdfd143..f2530c5ae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,130 +1,36 @@ -cmake_minimum_required(VERSION 3.10) - -################################################################################ -# Enable ccache if available -################################################################################ - -find_program(CCACHE_PROGRAM ccache) -if(CCACHE_PROGRAM) - set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}") -endif() - -################################################################################ -# Set the C++ standard to C++14 -################################################################################ - +cmake_minimum_required(VERSION 3.18) +project(Arduino-Filters CXX) set(CMAKE_CXX_STANDARD 14) -project(Arduino-Helpers) - -################################################################################ -# Add Google Test -################################################################################ - -add_subdirectory(googletest) -include_directories(${gmock_SOURCE_DIR}/include) -include_directories(${gtest_SOURCE_DIR}/include) - -include(GoogleTest) enable_testing() -################################################################################ -# Change the default output directories -################################################################################ - -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) - -################################################################################ -# Set the compiler options -################################################################################ - -set(CMAKE_CPP_FLAGS "${CMAKE_CPP_FLAGS} \ - -Wmissing-include-dirs") - -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \ - -Wall -Wextra -Werror \ - -fdiagnostics-show-option \ - -Wdouble-promotion \ - -Wswitch-default -Wswitch-enum -Wimplicit-fallthrough \ - -Wuninitialized \ - -Wno-double-promotion \ - -Wno-missing-braces \ - -pedantic -pedantic-errors") - -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \ - -Wall -Wextra -Werror") - -set(CMAKE_CXX_FLAGS_DEBUG - "-ggdb3 -O0 -fno-inline-functions -fsanitize=address") -set(CMAKE_C_FLAGS_DEBUG - "-ggdb3 -O0 -fno-inline-functions -fsanitize=address") - -set(CMAKE_CXX_FLAGS_RELEASE "-Os") -set(CMAKE_C_FLAGS_RELEASE "-Os") - -set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-Os -g3 -ggdb") -set(CMAKE_C_FLAGS_RELWITHDEBINFO "-Os -g3 -ggdb") - -if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") - - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \ - -Winconsistent-missing-override") - -else() - - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \ - -Wsuggest-override") - +# Add coverage target +option(AH_WITH_COVERAGE + "Generate coverage information." Off) +if (AH_WITH_COVERAGE) + add_custom_target(coverage + ${CMAKE_CURRENT_LIST_DIR}/scripts/coverage.sh + ${CMAKE_CXX_COMPILER_ID} + ${CMAKE_CXX_COMPILER_VERSION} + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --coverage -fno-inline") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage -fno-inline") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") + add_dependencies(coverage Arduino-Helpers::tests) endif() -# set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) # LTO - -################################################################################ -# Enable coverage information -################################################################################ +# Add documentation target +find_program(AH_DOXYGEN doxygen) +if (AH_DOXYGEN) + add_custom_target(documentation + doxygen + WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/doxygen) +endif() -set(CMAKE_C_FLAGS_COVERAGE "${CMAKE_C_FLAGS_DEBUG} \ - -fprofile-arcs -ftest-coverage \ - -fsanitize=address") -set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_DEBUG} \ - -fprofile-arcs -ftest-coverage \ - -fsanitize=address") -set(CMAKE_EXE_LINKER_FLAGS_COVERAGE "-fprofile-arcs -ftest-coverage") -set(CMAKE_CXX_OUTPUT_EXTENSION_REPLACE 1) +# Compiler warnings +option(AH_WARNINGS_AS_ERRORS "Enable -Werror" On) +include(cmake/Warnings.cmake) -################################################################################ # Build the source files and tests -################################################################################ - -add_subdirectory(gtest-wrappers) add_subdirectory(mock) add_subdirectory(src) add_subdirectory(test) - -################################################################################ -# Custom targets for documentation -################################################################################ - -# Add documentation target -add_custom_target(documentation - rm -rf html && ./scripts/examples.py && doxygen - WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/doxygen) - -# Add coverage target -if (CMAKE_BUILD_TYPE STREQUAL "Coverage") -add_custom_target(coverage - ${CMAKE_CURRENT_LIST_DIR}/scripts/coverage.sh ${CMAKE_CXX_COMPILER_ID} - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) -endif() - -# Custom test targets -add_custom_target(check tests - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin/ - DEPENDS tests) - -add_custom_target(arduino ./build-arduino-examples.sh - WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/scripts) - -add_custom_target(arduino_ci ./build-arduino-examples-ci.sh - WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/scripts) \ No newline at end of file diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 000000000..903544241 --- /dev/null +++ b/CMakePresets.json @@ -0,0 +1,89 @@ +{ + "version": 4, + "cmakeMinimumRequired": { + "major": 3, + "minor": 18, + "patch": 0 + }, + "configurePresets": [ + { + "name": "dev", + "displayName": "Development", + "description": "", + "generator": "Ninja Multi-Config", + "binaryDir": "${sourceDir}/build/${presetName}", + "cacheVariables": { + "AH_WARNINGS_AS_ERRORS": true, + "AH_WITH_COVERAGE": true, + "CMAKE_CXX_COMPILER_LAUNCHER": "ccache", + "CMAKE_CXX_FLAGS": "-fsanitize=address,leak,undefined,pointer-compare,pointer-subtract", + "CMAKE_EXPORT_COMPILE_COMMANDS": true + } + }, + { + "name": "ci", + "displayName": "CI", + "description": "", + "binaryDir": "${sourceDir}/build/${presetName}", + "cacheVariables": { + "AH_WARNINGS_AS_ERRORS": true, + "AH_WITH_COVERAGE": false, + "CMAKE_CXX_FLAGS": "-fsanitize=address,leak,undefined,pointer-compare,pointer-subtract" + } + }, + { + "name": "ci-cov", + "displayName": "CI + Coverage", + "description": "", + "binaryDir": "${sourceDir}/build/${presetName}", + "cacheVariables": { + "AH_WARNINGS_AS_ERRORS": false, + "AH_WITH_COVERAGE": true, + "CMAKE_CXX_FLAGS": "-fsanitize=address,leak,undefined,pointer-compare,pointer-subtract" + } + } + ], + "buildPresets": [ + { + "name": "dev", + "displayName": "Development", + "configurePreset": "dev" + }, + { + "name": "ci", + "displayName": "CI", + "configurePreset": "ci" + }, + { + "name": "ci-cov", + "displayName": "CI + Coverage", + "configurePreset": "ci-cov" + } + ], + "testPresets": [ + { + "name": "dev", + "displayName": "Development", + "configurePreset": "dev", + "output": { + "outputOnFailure": true + } + }, + { + "name": "ci", + "displayName": "CI", + "configurePreset": "ci", + "output": { + "outputOnFailure": true + } + }, + { + "name": "ci-cov", + "displayName": "CI + Coverage", + "configurePreset": "ci-cov", + "output": { + "outputOnFailure": true + } + } + ] +} \ No newline at end of file diff --git a/README.md b/README.md index fb79cd5ec..193c91b83 100644 --- a/README.md +++ b/README.md @@ -1,51 +1,83 @@ -[![Build Status](https://github.com/tttapa/Arduino-Helpers/workflows/CI%20Tests/badge.svg)](https://github.com/tttapa/Arduino-Helpers/actions) -[![Test Coverage](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/tttapa/Arduino-Helpers/master/docs/Coverage/shield.io.coverage.json)](https://tttapa.github.io/Arduino-Helpers/Coverage/index.html) -[![Build Status](https://travis-ci.org/tttapa/Arduino-Helpers.svg?branch=master)](https://travis-ci.org/tttapa/Arduino-Helpers) -[![GitHub](https://img.shields.io/github/stars/tttapa/Arduino-Helpers?label=GitHub&logo=github)](https://github.com/tttapa/Arduino-Helpers) +[![Build Status](https://github.com/tttapa/Arduino-Filters/workflows/CI%20Tests/badge.svg#)](https://github.com/tttapa/Arduino-Filters/actions) +[![Test Coverage](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/tttapa/Arduino-Filters/gh-pages/Coverage/shield.io.coverage.json)](https://tttapa.github.io/Arduino-Filters/Coverage/index.html) +[![GitHub](https://img.shields.io/github/stars/tttapa/Arduino-Filters?label=GitHub&logo=github)](https://github.com/tttapa/Arduino-Filters) -# Arduino Helpers +# Arduino Filters ## Features -- **Containers**: Arrays, Bit Arrays, Linked Lists, Smart Pointers. -- **Extended Input/Output**: Use shift registers (e.g. 74HC595) and multiplexers - (e.g. 74HC4051, 74HC4067) as if they were normal Arduino IO pins. -- **Hardware Utilities**: Debounced buttons, long press buttons, button - matrices, filtered analog inputs, LED ranges, MAX7219 displays and LED - matrices. -- **Filters**: Exponential Moving Average filters, Hysteresis. -- **Math functions**: `min` and `max` functions instead of macros, functions - for uniformly increasing the bit depth of signals, all C++ standard library - functions. -- **Timing Utilities**: Blink Without Delay-style timers. -- **C++ STL Implementation** (partial): Some useful parts of the C++ Standard - Template Library, adapted to work on AVR Arduinos. Includes the - ``, ``, ``, ``, ``, ``, - ``, ``, ``, ``, ``, ``, - `` (`std::unique_ptr`), ``, `` and - `` headers, among others. - -These utilities were originally part of the -[Control Surface library](https://github.com/tttapa/Control-Surface), -and were split off to be used as a stand-alone library, or as a template for -other libraries. - -Libraries that use the Arduino Helpers library include: -- [**Arduino Filters**](https://github.com/tttapa/Arduino-Filters): - FIR, IIR filtering library -- [**Control Surface**](https://github.com/tttapa/Control-Surface): - library for creating MIDI Control Surfaces, with knobs and push buttons, - LEDs, displays, etc. +- **Infinite Impulse Response Filters** +- **Finite Impulse Response Filters** +- **BiQuad Filters** +- **Butterworth Filters** +- **Notch Filters** +- **Median Filters** +- **Simple and Exponential Moving Average Filters** +- **Hysteresis** + +These filters were originally part of the +[old Filters library](https://github.com/tttapa/Filters). +It has been updated completely, with continuous integration, unit tests, etc. ## Documentation The automatically generated Doxygen documentation for this library can be found here: -[**Documentation**](https://tttapa.github.io/Arduino-Helpers/Doxygen/index.html) +[**Documentation**](https://tttapa.github.io/Arduino-Filters/Doxygen/index.html) Test coverage information can be found here: -[**Code Coverage**](https://tttapa.github.io/Arduino-Helpers/Coverage/index.html) +[**Code Coverage**](https://tttapa.github.io/Arduino-Filters/Coverage/index.html) Arduino examples can be found here: -[**Examples**](https://tttapa.github.io/Arduino-Helpers/Doxygen/examples.html) +[**Examples**](https://tttapa.github.io/Arduino-Filters/Doxygen/examples.html) + +You might want to start with the +[**Filters Module**](https://tttapa.github.io/Arduino-Filters/Doxygen/d2/d5a/group__Filters.html). + +## Example: Butterworth filter + +```cpp +#include + +#include +#include + +void setup() { + Serial.begin(115200); +} + +// Sampling frequency +const double f_s = 100; // Hz +// Cut-off frequency (-3 dB) +const double f_c = 40; // Hz +// Normalized cut-off frequency +const double f_n = 2 * f_c / f_s; + +// Sample timer +Timer timer = std::round(1e6 / f_s); + +// Sixth-order Butterworth filter +auto filter = butter<6>(f_n); + +void loop() { + if (timer) + Serial.println(filter(analogRead(A0))); +} +``` + +## Tools + +The [`python`](python) folder contains some Python scripts to visualize the +frequency response of the filters used in the examples. + +### Butterworth Filter +![Butterworth.ino](python/butterworth.svg) + +### FIR Notch Filter +![FIRNotch.ino](python/firnotch.svg) + +## Related Projects + +This library uses the +[**Arduino Helpers utility library**](https://github.com/tttapa/Arduino-Helpers) ## Supported boards @@ -53,10 +85,14 @@ For each commit, the continuous integration tests compile the examples for the following boards: - Arduino UNO +- Arduino Mega - Arduino Leonardo - Teensy 3.2 +- Teensy 4.1 - Arduino Due - Arduino Nano 33 IoT +- Arduino Nano 33 BLE +- Arduino Nano Every - ESP8266 - ESP32 @@ -72,4 +108,4 @@ and let me know! The Arduino Due toolchain provided by Arduino is very old, and has some configuration problems. As a result, some math functions are not available. There is nothing I can do about it in this library, it's a bug in the Arduino -Due Core. \ No newline at end of file +Due Core. diff --git a/build/.gitignore b/build/.gitignore deleted file mode 100644 index c96a04f00..000000000 --- a/build/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore \ No newline at end of file diff --git a/cmake/Warnings.cmake b/cmake/Warnings.cmake new file mode 100644 index 000000000..92269fbba --- /dev/null +++ b/cmake/Warnings.cmake @@ -0,0 +1,64 @@ +set(COMMON_WARNINGS + -fdiagnostics-show-option + -Wall + -Wextra + -pedantic + -Wpedantic + -pedantic-errors + -Wdouble-promotion + -Wswitch-default + -Wswitch-enum + -Wimplicit-fallthrough + -Wuninitialized + -Wno-missing-braces +) +set(GCC_WARNINGS + -Wno-error=unused-but-set-variable + -Wsuggest-override + -Wno-error=attributes +) +set(CLANG_WARNINGS + -Wno-error=unknown-warning-option + -Wno-newline-eof + -Wno-error=unused-but-set-variable + -Winconsistent-missing-override + -Wno-gnu-zero-variadic-macro-arguments +) +set(MSVC_WARNINGS + /W4 + /wd4127 # conditional expression is constant + /wd4458 # declaration of 'x' hides class member + /permissive- +) +set(INTEL_WARNINGS + -Wall + -Wextra +) +if (AH_WARNINGS_AS_ERRORS) + if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") + list(APPEND MSVC_WARNINGS /WX) + else() + list(APPEND COMMON_WARNINGS -Werror) + endif() +endif() + +add_library(warnings INTERFACE) + +if (CMAKE_CXX_COMPILER_ID MATCHES "GNU") + target_compile_options(warnings INTERFACE + ${COMMON_WARNINGS} ${GCC_WARNINGS}) +elseif (CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") + target_compile_options(warnings INTERFACE + ${COMMON_WARNINGS} ${CLANG_WARNINGS}) +elseif (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") + target_compile_options(warnings INTERFACE + ${MSVC_WARNINGS}) +elseif (CMAKE_CXX_COMPILER_ID MATCHES "Intel") + target_compile_options(warnings INTERFACE + ${INTEL_WARNINGS}) +else() + message(WARNING "No known warnings for this compiler") +endif() +add_library(Arduino-Helpers::warnings ALIAS warnings) + +set(CMAKE_DEBUG_POSTFIX "d") diff --git a/docs/Coverage/amber.png b/docs/Coverage/amber.png deleted file mode 100644 index 2cab170d8..000000000 Binary files a/docs/Coverage/amber.png and /dev/null differ diff --git a/docs/Coverage/emerald.png b/docs/Coverage/emerald.png deleted file mode 100644 index 38ad4f406..000000000 Binary files a/docs/Coverage/emerald.png and /dev/null differ diff --git a/docs/Coverage/gcov.css b/docs/Coverage/gcov.css deleted file mode 100644 index bfd0a83e1..000000000 --- a/docs/Coverage/gcov.css +++ /dev/null @@ -1,519 +0,0 @@ -/* All views: initial background and text color */ -body -{ - color: #000000; - background-color: #FFFFFF; -} - -/* All views: standard link format*/ -a:link -{ - color: #284FA8; - text-decoration: underline; -} - -/* All views: standard link - visited format */ -a:visited -{ - color: #00CB40; - text-decoration: underline; -} - -/* All views: standard link - activated format */ -a:active -{ - color: #FF0040; - text-decoration: underline; -} - -/* All views: main title format */ -td.title -{ - text-align: center; - padding-bottom: 10px; - font-family: sans-serif; - font-size: 20pt; - font-style: italic; - font-weight: bold; -} - -/* All views: header item format */ -td.headerItem -{ - text-align: right; - padding-right: 6px; - font-family: sans-serif; - font-weight: bold; - vertical-align: top; - white-space: nowrap; -} - -/* All views: header item value format */ -td.headerValue -{ - text-align: left; - color: #284FA8; - font-family: sans-serif; - font-weight: bold; - white-space: nowrap; -} - -/* All views: header item coverage table heading */ -td.headerCovTableHead -{ - text-align: center; - padding-right: 6px; - padding-left: 6px; - padding-bottom: 0px; - font-family: sans-serif; - font-size: 80%; - white-space: nowrap; -} - -/* All views: header item coverage table entry */ -td.headerCovTableEntry -{ - text-align: right; - color: #284FA8; - font-family: sans-serif; - font-weight: bold; - white-space: nowrap; - padding-left: 12px; - padding-right: 4px; - background-color: #DAE7FE; -} - -/* All views: header item coverage table entry for high coverage rate */ -td.headerCovTableEntryHi -{ - text-align: right; - color: #000000; - font-family: sans-serif; - font-weight: bold; - white-space: nowrap; - padding-left: 12px; - padding-right: 4px; - background-color: #A7FC9D; -} - -/* All views: header item coverage table entry for medium coverage rate */ -td.headerCovTableEntryMed -{ - text-align: right; - color: #000000; - font-family: sans-serif; - font-weight: bold; - white-space: nowrap; - padding-left: 12px; - padding-right: 4px; - background-color: #FFEA20; -} - -/* All views: header item coverage table entry for ow coverage rate */ -td.headerCovTableEntryLo -{ - text-align: right; - color: #000000; - font-family: sans-serif; - font-weight: bold; - white-space: nowrap; - padding-left: 12px; - padding-right: 4px; - background-color: #FF0000; -} - -/* All views: header legend value for legend entry */ -td.headerValueLeg -{ - text-align: left; - color: #000000; - font-family: sans-serif; - font-size: 80%; - white-space: nowrap; - padding-top: 4px; -} - -/* All views: color of horizontal ruler */ -td.ruler -{ - background-color: #6688D4; -} - -/* All views: version string format */ -td.versionInfo -{ - text-align: center; - padding-top: 2px; - font-family: sans-serif; - font-style: italic; -} - -/* Directory view/File view (all)/Test case descriptions: - table headline format */ -td.tableHead -{ - text-align: center; - color: #FFFFFF; - background-color: #6688D4; - font-family: sans-serif; - font-size: 120%; - font-weight: bold; - white-space: nowrap; - padding-left: 4px; - padding-right: 4px; -} - -span.tableHeadSort -{ - padding-right: 4px; -} - -/* Directory view/File view (all): filename entry format */ -td.coverFile -{ - text-align: left; - padding-left: 10px; - padding-right: 20px; - color: #284FA8; - background-color: #DAE7FE; - font-family: monospace; -} - -/* Directory view/File view (all): bar-graph entry format*/ -td.coverBar -{ - padding-left: 10px; - padding-right: 10px; - background-color: #DAE7FE; -} - -/* Directory view/File view (all): bar-graph outline color */ -td.coverBarOutline -{ - background-color: #000000; -} - -/* Directory view/File view (all): percentage entry for files with - high coverage rate */ -td.coverPerHi -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #A7FC9D; - font-weight: bold; - font-family: sans-serif; -} - -/* Directory view/File view (all): line count entry for files with - high coverage rate */ -td.coverNumHi -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #A7FC9D; - white-space: nowrap; - font-family: sans-serif; -} - -/* Directory view/File view (all): percentage entry for files with - medium coverage rate */ -td.coverPerMed -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #FFEA20; - font-weight: bold; - font-family: sans-serif; -} - -/* Directory view/File view (all): line count entry for files with - medium coverage rate */ -td.coverNumMed -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #FFEA20; - white-space: nowrap; - font-family: sans-serif; -} - -/* Directory view/File view (all): percentage entry for files with - low coverage rate */ -td.coverPerLo -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #FF0000; - font-weight: bold; - font-family: sans-serif; -} - -/* Directory view/File view (all): line count entry for files with - low coverage rate */ -td.coverNumLo -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #FF0000; - white-space: nowrap; - font-family: sans-serif; -} - -/* File view (all): "show/hide details" link format */ -a.detail:link -{ - color: #B8D0FF; - font-size:80%; -} - -/* File view (all): "show/hide details" link - visited format */ -a.detail:visited -{ - color: #B8D0FF; - font-size:80%; -} - -/* File view (all): "show/hide details" link - activated format */ -a.detail:active -{ - color: #FFFFFF; - font-size:80%; -} - -/* File view (detail): test name entry */ -td.testName -{ - text-align: right; - padding-right: 10px; - background-color: #DAE7FE; - font-family: sans-serif; -} - -/* File view (detail): test percentage entry */ -td.testPer -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #DAE7FE; - font-family: sans-serif; -} - -/* File view (detail): test lines count entry */ -td.testNum -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #DAE7FE; - font-family: sans-serif; -} - -/* Test case descriptions: test name format*/ -dt -{ - font-family: sans-serif; - font-weight: bold; -} - -/* Test case descriptions: description table body */ -td.testDescription -{ - padding-top: 10px; - padding-left: 30px; - padding-bottom: 10px; - padding-right: 30px; - background-color: #DAE7FE; -} - -/* Source code view: function entry */ -td.coverFn -{ - text-align: left; - padding-left: 10px; - padding-right: 20px; - color: #284FA8; - background-color: #DAE7FE; - font-family: monospace; -} - -/* Source code view: function entry zero count*/ -td.coverFnLo -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #FF0000; - font-weight: bold; - font-family: sans-serif; -} - -/* Source code view: function entry nonzero count*/ -td.coverFnHi -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #DAE7FE; - font-weight: bold; - font-family: sans-serif; -} - -/* Source code view: source code format */ -pre.source -{ - font-family: monospace; - white-space: pre; - margin-top: 2px; -} - -/* Source code view: line number format */ -span.lineNum -{ - background-color: #EFE383; -} - -/* Source code view: format for lines which were executed */ -td.lineCov, -span.lineCov -{ - background-color: #CAD7FE; -} - -/* Source code view: format for Cov legend */ -span.coverLegendCov -{ - padding-left: 10px; - padding-right: 10px; - padding-bottom: 2px; - background-color: #CAD7FE; -} - -/* Source code view: format for lines which were not executed */ -td.lineNoCov, -span.lineNoCov -{ - background-color: #FF6230; -} - -/* Source code view: format for NoCov legend */ -span.coverLegendNoCov -{ - padding-left: 10px; - padding-right: 10px; - padding-bottom: 2px; - background-color: #FF6230; -} - -/* Source code view (function table): standard link - visited format */ -td.lineNoCov > a:visited, -td.lineCov > a:visited -{ - color: black; - text-decoration: underline; -} - -/* Source code view: format for lines which were executed only in a - previous version */ -span.lineDiffCov -{ - background-color: #B5F7AF; -} - -/* Source code view: format for branches which were executed - * and taken */ -span.branchCov -{ - background-color: #CAD7FE; -} - -/* Source code view: format for branches which were executed - * but not taken */ -span.branchNoCov -{ - background-color: #FF6230; -} - -/* Source code view: format for branches which were not executed */ -span.branchNoExec -{ - background-color: #FF6230; -} - -/* Source code view: format for the source code heading line */ -pre.sourceHeading -{ - white-space: pre; - font-family: monospace; - font-weight: bold; - margin: 0px; -} - -/* All views: header legend value for low rate */ -td.headerValueLegL -{ - font-family: sans-serif; - text-align: center; - white-space: nowrap; - padding-left: 4px; - padding-right: 2px; - background-color: #FF0000; - font-size: 80%; -} - -/* All views: header legend value for med rate */ -td.headerValueLegM -{ - font-family: sans-serif; - text-align: center; - white-space: nowrap; - padding-left: 2px; - padding-right: 2px; - background-color: #FFEA20; - font-size: 80%; -} - -/* All views: header legend value for hi rate */ -td.headerValueLegH -{ - font-family: sans-serif; - text-align: center; - white-space: nowrap; - padding-left: 2px; - padding-right: 4px; - background-color: #A7FC9D; - font-size: 80%; -} - -/* All views except source code view: legend format for low coverage */ -span.coverLegendCovLo -{ - padding-left: 10px; - padding-right: 10px; - padding-top: 2px; - background-color: #FF0000; -} - -/* All views except source code view: legend format for med coverage */ -span.coverLegendCovMed -{ - padding-left: 10px; - padding-right: 10px; - padding-top: 2px; - background-color: #FFEA20; -} - -/* All views except source code view: legend format for hi coverage */ -span.coverLegendCovHi -{ - padding-left: 10px; - padding-right: 10px; - padding-top: 2px; - background-color: #A7FC9D; -} diff --git a/docs/Coverage/glass.png b/docs/Coverage/glass.png deleted file mode 100644 index e1abc0068..000000000 Binary files a/docs/Coverage/glass.png and /dev/null differ diff --git a/docs/Coverage/index-sort-f.html b/docs/Coverage/index-sort-f.html deleted file mode 100644 index 90f4aee2e..000000000 --- a/docs/Coverage/index-sort-f.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top levelHitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:62963199.7 %
Date:2019-12-23 15:42:58Functions:30632195.3 %
Legend: Rating: - low: < 75 % - medium: >= 75 % - high: >= 90 % -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Directory Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
src/AH/Hardware/ExtendedInputOutput -
100.0%
-
100.0 %135 / 13578.8 %41 / 52
src/AH/Error -
100.0%
-
100.0 %5 / 580.0 %4 / 5
src/AH/Containers -
99.4%99.4%
-
99.4 %319 / 32198.6 %216 / 219
src/AH/PrintStream -
100.0%
-
100.0 %4 / 4100.0 %2 / 2
src/AH/Math -
100.0%
-
100.0 %12 / 12100.0 %3 / 3
src/AH/Timing -
100.0%
-
100.0 %11 / 11100.0 %6 / 6
src/AH/Filters -
100.0%
-
100.0 %27 / 27100.0 %15 / 15
src/AH/Hardware -
100.0%
-
100.0 %116 / 116100.0 %19 / 19
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/index-sort-l.html b/docs/Coverage/index-sort-l.html deleted file mode 100644 index 4bb9df13e..000000000 --- a/docs/Coverage/index-sort-l.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top levelHitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:62963199.7 %
Date:2019-12-23 15:42:58Functions:30632195.3 %
Legend: Rating: - low: < 75 % - medium: >= 75 % - high: >= 90 % -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Directory Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
src/AH/Containers -
99.4%99.4%
-
99.4 %319 / 32198.6 %216 / 219
src/AH/PrintStream -
100.0%
-
100.0 %4 / 4100.0 %2 / 2
src/AH/Error -
100.0%
-
100.0 %5 / 580.0 %4 / 5
src/AH/Timing -
100.0%
-
100.0 %11 / 11100.0 %6 / 6
src/AH/Math -
100.0%
-
100.0 %12 / 12100.0 %3 / 3
src/AH/Filters -
100.0%
-
100.0 %27 / 27100.0 %15 / 15
src/AH/Hardware -
100.0%
-
100.0 %116 / 116100.0 %19 / 19
src/AH/Hardware/ExtendedInputOutput -
100.0%
-
100.0 %135 / 13578.8 %41 / 52
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/index.html b/docs/Coverage/index.html deleted file mode 100644 index 5d535043d..000000000 --- a/docs/Coverage/index.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top levelHitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:62963199.7 %
Date:2019-12-23 15:42:58Functions:30632195.3 %
Legend: Rating: - low: < 75 % - medium: >= 75 % - high: >= 90 % -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Directory Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
src/AH/Containers -
99.4%99.4%
-
99.4 %319 / 32198.6 %216 / 219
src/AH/Error -
100.0%
-
100.0 %5 / 580.0 %4 / 5
src/AH/Filters -
100.0%
-
100.0 %27 / 27100.0 %15 / 15
src/AH/Hardware -
100.0%
-
100.0 %116 / 116100.0 %19 / 19
src/AH/Hardware/ExtendedInputOutput -
100.0%
-
100.0 %135 / 13578.8 %41 / 52
src/AH/Math -
100.0%
-
100.0 %12 / 12100.0 %3 / 3
src/AH/PrintStream -
100.0%
-
100.0 %4 / 4100.0 %2 / 2
src/AH/Timing -
100.0%
-
100.0 %11 / 11100.0 %6 / 6
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/ruby.png b/docs/Coverage/ruby.png deleted file mode 100644 index 991b6d4ec..000000000 Binary files a/docs/Coverage/ruby.png and /dev/null differ diff --git a/docs/Coverage/shield.io.coverage.json b/docs/Coverage/shield.io.coverage.json deleted file mode 100644 index 76ddd0909..000000000 --- a/docs/Coverage/shield.io.coverage.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "schemaVersion": 1, - "label": "Test Coverage", - "message": "99.7%", - "color": "green" -} diff --git a/docs/Coverage/snow.png b/docs/Coverage/snow.png deleted file mode 100644 index 2cdae107f..000000000 Binary files a/docs/Coverage/snow.png and /dev/null differ diff --git a/docs/Coverage/src/AH/Containers/Array.hpp.func-sort-c.html b/docs/Coverage/src/AH/Containers/Array.hpp.func-sort-c.html deleted file mode 100644 index b658ff4b2..000000000 --- a/docs/Coverage/src/AH/Containers/Array.hpp.func-sort-c.html +++ /dev/null @@ -1,612 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Containers/Array.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Containers - Array.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:139139100.0 %
Date:2019-12-23 15:42:58Functions:13213399.2 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EE8IteratorltES2_0
_ZN2AH10ArraySliceIiLm2ELb0ELb0EEC2EPi1
_ZN2AH10ArraySliceIiLm2ELb0ELb1EEC2EPKi1
_ZN2AH5ArrayIZN21fillArray_simple_Test8TestBodyEvE1SLm4EE3endEv1
_ZN2AH5ArrayIZN21fillArray_simple_Test8TestBodyEvE1SLm4EE5beginEv1
_ZN2AH5ArrayIiLm20EE5sliceILm1ELm4EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb0EEEv1
_ZN2AH5ArrayIiLm20EEixEm1
_ZN2AH5ArrayIiLm3EE5sliceILm0ELm2EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb0EEEv1
_ZN2AH5ArrayIiLm5EE5beginEv1
_ZN2AH5ArrayIiLm5EE5sliceILm0ELm1EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb0EEEv1
_ZN2AH5ArrayIiLm5EE5sliceILm1ELm4EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb0EEEv1
_ZN2AH5ArrayIiLm6EE3endEv1
_ZN2AH5ArrayIiLm6EE5beginEv1
_ZN2AH5ArrayIiLm7EE5sliceILm5ELm1EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb0EEEv1
_ZN2AH5ArrayIiLm7EEixEm1
_ZN2AH5ArrayIiLm9EE5sliceILm2ELm5EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb0EEEv1
_ZN2AHdVIiiLm3ELb0ELb0EEERKNS_10ArraySliceIT_XT1_EXT2_EXT3_EEES5_T0_1
_ZN2AHdVIiiLm5EEERNS_5ArrayIT_XT1_EEES4_T0_1
_ZN2AHdVIiiLm5ELb0ELb0EEERKNS_10ArraySliceIT_XT1_EXT2_EXT3_EEES5_T0_1
_ZN2AHdvIiiLm3ELb0ELb0EEENS_5ArrayIDTdvtlT_EtlT0_EEXT1_EEENS_10ArraySliceIS2_XT1_EXT2_EXT3_EEES3_1
_ZN2AHdvIiiLm5EEENS_5ArrayIDTdvtlT_EtlT0_EEXT1_EEERKNS1_IS2_XT1_EEES3_1
_ZN2AHdvIiiLm5ELb0ELb1EEENS_5ArrayIDTdvtlT_EtlT0_EEXT1_EEENS_10ArraySliceIS2_XT1_EXT2_EXT3_EEES3_1
_ZN2AHeqIiiLm5ELm5ELb1ELb0EEEbNS_10ArraySliceIT_XT1_EXT3_EXT4_EEERKNS_5ArrayIT0_XT2_EEE1
_ZN2AHeqIiiLm5ELm5ELb1ELb0ELb0ELb1EEEbNS_10ArraySliceIT_XT1_EXT3_EXT5_EEENS1_IT0_XT2_EXT4_EXT6_EEE1
_ZN2AHmLIiiLm3ELb0ELb0EEERKNS_10ArraySliceIT_XT1_EXT2_EXT3_EEES5_T0_1
_ZN2AHmLIiiLm5EEERNS_5ArrayIT_XT1_EEES4_T0_1
_ZN2AHmLIiiLm5ELb0ELb0EEERKNS_10ArraySliceIT_XT1_EXT2_EXT3_EEES5_T0_1
_ZN2AHmiIiiLm3ELm3EEENS_5ArrayIDTmitlT_EtlT0_EEXT1_EEERKNS1_IS2_XT1_EEERKNS1_IS3_XT2_EEE1
_ZN2AHmiIiiLm3ELm3ELb0ELb0ELb0ELb0EEENS_5ArrayIDTmitlT_EtlT0_EEXT1_EEENS_10ArraySliceIS2_XT1_EXT3_EXT5_EEENS6_IS3_XT2_EXT4_EXT6_EEE1
_ZN2AHmiIiiLm3ELm3ELb0ELb0ELb1ELb1EEENS_5ArrayIDTmitlT_EtlT0_EEXT1_EEENS_10ArraySliceIS2_XT1_EXT3_EXT5_EEENS6_IS3_XT2_EXT4_EXT6_EEE1
_ZN2AHmlIiiLm3ELb0ELb0EEENS_5ArrayIDTmltlT_EtlT0_EEXT1_EEENS_10ArraySliceIS2_XT1_EXT2_EXT3_EEES3_1
_ZN2AHmlIiiLm3ELb0ELb0EEENS_5ArrayIDTmltlT_EtlT0_EEXT1_EEES2_NS_10ArraySliceIS3_XT1_EXT2_EXT3_EEE1
_ZN2AHmlIiiLm5EEENS_5ArrayIDTmltlT_EtlT0_EEXT1_EEERKNS1_IS2_XT1_EEES3_1
_ZN2AHmlIiiLm5EEENS_5ArrayIDTmltlT_EtlT0_EEXT1_EEES2_RKNS1_IS3_XT1_EEE1
_ZN2AHmlIiiLm5ELb0ELb1EEENS_5ArrayIDTmltlT_EtlT0_EEXT1_EEENS_10ArraySliceIS2_XT1_EXT2_EXT3_EEES3_1
_ZN2AHmlIiiLm5ELb0ELb1EEENS_5ArrayIDTmltlT_EtlT0_EEXT1_EEES2_NS_10ArraySliceIS3_XT1_EXT2_EXT3_EEE1
_ZN2AHngIiLm4ELb0ELb0EEENS_5ArrayIDTngtlT_EEXT0_EEENS_10ArraySliceIS2_XT0_EXT1_EXT2_EEE1
_ZN2AHngIiLm5EEENS_5ArrayIDTngtlT_EEXT0_EEERKNS1_IS2_XT0_EEE1
_ZN2AHngIiLm5ELb0ELb1EEENS_5ArrayIDTngtlT_EEXT0_EEENS_10ArraySliceIS2_XT0_EXT1_EXT2_EEE1
_ZN2AHpLIiiLm3ELm3EEERNS_5ArrayIT_XT1_EEES4_RKNS1_IT0_XT2_EEE1
_ZN2AHpLIiiLm3ELm3ELb0ELb0ELb0ELb0EEERKNS_10ArraySliceIT_XT1_EXT3_EXT5_EEES5_RKNS1_IT0_XT2_EXT4_EXT6_EEE1
_ZN2AHpLIiiLm3ELm3ELb0ELb0ELb0ELb1EEERKNS_10ArraySliceIT_XT1_EXT3_EXT5_EEES5_RKNS1_IT0_XT2_EXT4_EXT6_EEE1
_ZN2AHplIiiLm3ELm3EEENS_5ArrayIDTpltlT_EtlT0_EEXT1_EEERKNS1_IS2_XT1_EEERKNS1_IS3_XT2_EEE1
_ZN2AHplIiiLm3ELm3ELb0ELb0ELb0ELb0EEENS_5ArrayIDTpltlT_EtlT0_EEXT1_EEENS_10ArraySliceIS2_XT1_EXT3_EXT5_EEENS6_IS3_XT2_EXT4_EXT6_EEE1
_ZN2AHplIiiLm3ELm3ELb0ELb0ELb1ELb1EEENS_5ArrayIDTpltlT_EtlT0_EEXT1_EEENS_10ArraySliceIS2_XT1_EXT3_EXT5_EEENS6_IS3_XT2_EXT4_EXT6_EEE1
_ZNK2AH10ArraySliceIiLm2ELb0ELb0EEixEm1
_ZNK2AH10ArraySliceIiLm2ELb0ELb1EEixEm1
_ZNK2AH10ArraySliceIiLm3ELb0ELb0EE7asArrayEv1
_ZNK2AH10ArraySliceIiLm5ELb0ELb0EE5beginEv1
_ZNK2AH10ArraySliceIiLm5ELb0ELb0EE8IteratoreqES2_1
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EE5sliceILm3ELm1EEENS0_IiXplclL_ZNS_8abs_diffImEET_RKS4_S6_ET0_T_ELi1EEXeoLb1EltT0_T_ELb0EEEv1
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EE5sliceILm4ELm0EEENS0_IiXplclL_ZNS_8abs_diffImEET_RKS4_S6_ET0_T_ELi1EEXeoLb1EltT0_T_ELb0EEEv1
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EE7asArrayEv1
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EEcvNS_5ArrayIiLm5EEEEv1
_ZNK2AH5ArrayIZN21fillArray_simple_Test8TestBodyEvE1SLm4EEeqERKS3_1
_ZNK2AH5ArrayIiLm4EEeqERKS1_1
_ZNK2AH5ArrayIiLm5EE3endEv1
_ZNK2AH5ArrayIiLm5EE5beginEv1
_ZNK2AH5ArrayIiLm5EE5sliceILm3ELm4EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb1EEEv1
_ZNK2AH5ArrayIiLm6EE3endEv1
_ZNK2AH5ArrayIiLm6EE5beginEv1
_ZNK2AH5ArrayIiLm7EEeqERKS1_1
_ZN2AH10ArraySliceIiLm5ELb0ELb0EE8IteratorppEv2
_ZN2AH5ArrayIiLm9EE5sliceILm2ELm4EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb0EEEv2
_ZN2AHeqIiiLm5ELm5ELb0ELb0EEEbNS_10ArraySliceIT_XT1_EXT3_EXT4_EEERKNS_5ArrayIT0_XT2_EEE2
_ZN2AHeqIiiLm5ELm5ELb0ELb0ELb0ELb1EEEbNS_10ArraySliceIT_XT1_EXT3_EXT5_EEENS1_IT0_XT2_EXT4_EXT6_EEE2
_ZNK2AH10ArraySliceIiLm5ELb0ELb0EE8IteratormiEl2
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EE5beginEv2
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EE8IteratoreqES2_2
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EE8IteratormiEl2
_ZN2AH10ArraySliceIiLm4ELb0ELb0EEC2EPi3
_ZN2AH10ArraySliceIiLm4ELb0ELb1EEC2EPKi3
_ZN2AH10ArraySliceIiLm5ELb0ELb0EE8IteratormmEv3
_ZN2AH5ArrayIiLm5EE5sliceILm2ELm4EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb0EEEv3
_ZN2AH5ArrayIiLm9EEixEm3
_ZN2AH5ArrayIjLm4EE3endEv3
_ZN2AH5ArrayIjLm4EE5beginEv3
_ZNK2AH10ArraySliceIiLm5ELb0ELb0EE3endEv3
_ZNK2AH10ArraySliceIiLm5ELb0ELb0EE8IteratorltES2_3
_ZNK2AH5ArrayIiLm4EE5sliceILm0ELm3EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb1EEEv3
_ZNK2AH5ArrayIjLm4EEeqERKS1_3
_ZN2AH5ArrayIiLm4EEixEm4
_ZN2AH5ArrayIiLm5EE5sliceILm0ELm2EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb0EEEv4
_ZN2AHeqIiiLm3ELm3ELb0ELb0ELb0ELb0EEEbNS_10ArraySliceIT_XT1_EXT3_EXT5_EEENS1_IT0_XT2_EXT4_EXT6_EEE4
_ZN2AHneIiiLm5ELm5ELb0ELb0ELb0ELb0EEEbNS_10ArraySliceIT_XT1_EXT3_EXT5_EEENS1_IT0_XT2_EXT4_EXT6_EEE4
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EE3endEv4
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EE8IteratorplEl4
_ZNK2AH5ArrayIiLm5EEneERKS1_4
_ZNK2AH5ArrayItLm3EE3endEv4
_ZNK2AH5ArrayItLm3EE5beginEv4
_ZN2AH5ArrayIiLm5EE5sliceILm4ELm0EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb0EEEv5
_ZNK2AH5ArrayIiLm6EEeqERKS1_5
_ZN2AH10ArraySliceIiLm5ELb0ELb0EE8IteratorC2EPi6
_ZN2AH10ArraySliceIiLm5ELb1ELb0EEC2EPi6
_ZN2AH5ArrayINS0_IiLm2EEELm3EEixEm6
_ZN2AH5ArrayIiLm2EEixEm6
_ZNK2AH10ArraySliceIiLm5ELb0ELb0EE8IteratordeEv6
_ZN2AH10ArraySliceIiLm5ELb0ELb1EEC2EPKi7
_ZN2AH5ArrayIiLm5EE5sliceILm0ELm4EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb0EEEv7
_ZNK2AH5ArrayIiLm5EE5sliceILm0ELm4EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb1EEEv7
_ZN2AH10ArraySliceIiLm3ELb0ELb1EEC2EPKi8
_ZN2AH10ArraySliceIiLm5ELb0ELb0EEC2EPi8
_ZN2AH10ArraySliceIiLm5ELb1ELb0EE8IteratorppEv8
_ZN2AH5ArrayIiLm5EE5sliceILm1ELm3EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb0EEEv8
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EE8IteratormiES2_8
_ZNK2AH5ArrayIZN21fillArray_simple_Test8TestBodyEvE1SLm4EEixEm8
_ZNK2AH5ArrayIiLm3EE5sliceILm0ELm2EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb1EEEv8
_ZN2AHeqIiiLm5ELm5ELb0ELb0ELb0ELb0EEEbNS_10ArraySliceIT_XT1_EXT3_EXT5_EEENS1_IT0_XT2_EXT4_EXT6_EEE9
_ZNK2AH5ArrayIiLm3EEeqERKS1_10
_ZNK2AH5ArrayIiLm4EEixEm11
_ZNK2AH5ArrayItLm4EE3endEv11
_ZNK2AH5ArrayItLm4EE5beginEv11
_ZN2AH10ArraySliceIiLm5ELb1ELb0EE8IteratorC2EPi12
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EE8IteratorneES2_12
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EEixEm12
_ZNK2AH5ArrayIiLm7EEixEm14
_ZN2AH10ArraySliceIiLm3ELb0ELb0EEC2EPi19
_ZN2AH10ArraySliceIiLm5ELb1ELb0EE8IteratormmEv22
_ZNK2AH5ArrayIiLm5EEeqERKS1_22
_ZNK2AH5ArrayIjLm4EEixEm24
_ZN2AH5ArrayIiLm3EEixEm25
_ZNK2AH10ArraySliceIiLm4ELb0ELb0EEixEm28
_ZNK2AH10ArraySliceIiLm5ELb0ELb1EEixEm35
_ZNK2AH10ArraySliceIiLm4ELb0ELb1EEixEm36
_ZNK2AH10ArraySliceIiLm3ELb0ELb1EEixEm51
_ZN2AH5ArrayIiLm5EEixEm55
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EE8IteratordeEv56
_ZNK2AH5ArrayIiLm6EEixEm66
_ZNK2AH5ArrayIiLm3EEixEm68
_ZN2AH5ArrayIiLm6EEixEm73
_ZNK2AH10ArraySliceIiLm3ELb0ELb0EEixEm87
_ZNK2AH10ArraySliceIiLm5ELb0ELb0EEixEm110
_ZNK2AH5ArrayIiLm5EEixEm199
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Containers/Array.hpp.func.html b/docs/Coverage/src/AH/Containers/Array.hpp.func.html deleted file mode 100644 index b6ec66f39..000000000 --- a/docs/Coverage/src/AH/Containers/Array.hpp.func.html +++ /dev/null @@ -1,612 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Containers/Array.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Containers - Array.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:139139100.0 %
Date:2019-12-23 15:42:58Functions:13213399.2 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH10ArraySliceIiLm2ELb0ELb0EEC2EPi1
_ZN2AH10ArraySliceIiLm2ELb0ELb1EEC2EPKi1
_ZN2AH10ArraySliceIiLm3ELb0ELb0EEC2EPi19
_ZN2AH10ArraySliceIiLm3ELb0ELb1EEC2EPKi8
_ZN2AH10ArraySliceIiLm4ELb0ELb0EEC2EPi3
_ZN2AH10ArraySliceIiLm4ELb0ELb1EEC2EPKi3
_ZN2AH10ArraySliceIiLm5ELb0ELb0EE8IteratorC2EPi6
_ZN2AH10ArraySliceIiLm5ELb0ELb0EE8IteratormmEv3
_ZN2AH10ArraySliceIiLm5ELb0ELb0EE8IteratorppEv2
_ZN2AH10ArraySliceIiLm5ELb0ELb0EEC2EPi8
_ZN2AH10ArraySliceIiLm5ELb0ELb1EEC2EPKi7
_ZN2AH10ArraySliceIiLm5ELb1ELb0EE8IteratorC2EPi12
_ZN2AH10ArraySliceIiLm5ELb1ELb0EE8IteratormmEv22
_ZN2AH10ArraySliceIiLm5ELb1ELb0EE8IteratorppEv8
_ZN2AH10ArraySliceIiLm5ELb1ELb0EEC2EPi6
_ZN2AH5ArrayINS0_IiLm2EEELm3EEixEm6
_ZN2AH5ArrayIZN21fillArray_simple_Test8TestBodyEvE1SLm4EE3endEv1
_ZN2AH5ArrayIZN21fillArray_simple_Test8TestBodyEvE1SLm4EE5beginEv1
_ZN2AH5ArrayIiLm20EE5sliceILm1ELm4EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb0EEEv1
_ZN2AH5ArrayIiLm20EEixEm1
_ZN2AH5ArrayIiLm2EEixEm6
_ZN2AH5ArrayIiLm3EE5sliceILm0ELm2EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb0EEEv1
_ZN2AH5ArrayIiLm3EEixEm25
_ZN2AH5ArrayIiLm4EEixEm4
_ZN2AH5ArrayIiLm5EE5beginEv1
_ZN2AH5ArrayIiLm5EE5sliceILm0ELm1EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb0EEEv1
_ZN2AH5ArrayIiLm5EE5sliceILm0ELm2EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb0EEEv4
_ZN2AH5ArrayIiLm5EE5sliceILm0ELm4EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb0EEEv7
_ZN2AH5ArrayIiLm5EE5sliceILm1ELm3EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb0EEEv8
_ZN2AH5ArrayIiLm5EE5sliceILm1ELm4EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb0EEEv1
_ZN2AH5ArrayIiLm5EE5sliceILm2ELm4EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb0EEEv3
_ZN2AH5ArrayIiLm5EE5sliceILm4ELm0EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb0EEEv5
_ZN2AH5ArrayIiLm5EEixEm55
_ZN2AH5ArrayIiLm6EE3endEv1
_ZN2AH5ArrayIiLm6EE5beginEv1
_ZN2AH5ArrayIiLm6EEixEm73
_ZN2AH5ArrayIiLm7EE5sliceILm5ELm1EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb0EEEv1
_ZN2AH5ArrayIiLm7EEixEm1
_ZN2AH5ArrayIiLm9EE5sliceILm2ELm4EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb0EEEv2
_ZN2AH5ArrayIiLm9EE5sliceILm2ELm5EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb0EEEv1
_ZN2AH5ArrayIiLm9EEixEm3
_ZN2AH5ArrayIjLm4EE3endEv3
_ZN2AH5ArrayIjLm4EE5beginEv3
_ZN2AHdVIiiLm3ELb0ELb0EEERKNS_10ArraySliceIT_XT1_EXT2_EXT3_EEES5_T0_1
_ZN2AHdVIiiLm5EEERNS_5ArrayIT_XT1_EEES4_T0_1
_ZN2AHdVIiiLm5ELb0ELb0EEERKNS_10ArraySliceIT_XT1_EXT2_EXT3_EEES5_T0_1
_ZN2AHdvIiiLm3ELb0ELb0EEENS_5ArrayIDTdvtlT_EtlT0_EEXT1_EEENS_10ArraySliceIS2_XT1_EXT2_EXT3_EEES3_1
_ZN2AHdvIiiLm5EEENS_5ArrayIDTdvtlT_EtlT0_EEXT1_EEERKNS1_IS2_XT1_EEES3_1
_ZN2AHdvIiiLm5ELb0ELb1EEENS_5ArrayIDTdvtlT_EtlT0_EEXT1_EEENS_10ArraySliceIS2_XT1_EXT2_EXT3_EEES3_1
_ZN2AHeqIiiLm3ELm3ELb0ELb0ELb0ELb0EEEbNS_10ArraySliceIT_XT1_EXT3_EXT5_EEENS1_IT0_XT2_EXT4_EXT6_EEE4
_ZN2AHeqIiiLm5ELm5ELb0ELb0EEEbNS_10ArraySliceIT_XT1_EXT3_EXT4_EEERKNS_5ArrayIT0_XT2_EEE2
_ZN2AHeqIiiLm5ELm5ELb0ELb0ELb0ELb0EEEbNS_10ArraySliceIT_XT1_EXT3_EXT5_EEENS1_IT0_XT2_EXT4_EXT6_EEE9
_ZN2AHeqIiiLm5ELm5ELb0ELb0ELb0ELb1EEEbNS_10ArraySliceIT_XT1_EXT3_EXT5_EEENS1_IT0_XT2_EXT4_EXT6_EEE2
_ZN2AHeqIiiLm5ELm5ELb1ELb0EEEbNS_10ArraySliceIT_XT1_EXT3_EXT4_EEERKNS_5ArrayIT0_XT2_EEE1
_ZN2AHeqIiiLm5ELm5ELb1ELb0ELb0ELb1EEEbNS_10ArraySliceIT_XT1_EXT3_EXT5_EEENS1_IT0_XT2_EXT4_EXT6_EEE1
_ZN2AHmLIiiLm3ELb0ELb0EEERKNS_10ArraySliceIT_XT1_EXT2_EXT3_EEES5_T0_1
_ZN2AHmLIiiLm5EEERNS_5ArrayIT_XT1_EEES4_T0_1
_ZN2AHmLIiiLm5ELb0ELb0EEERKNS_10ArraySliceIT_XT1_EXT2_EXT3_EEES5_T0_1
_ZN2AHmiIiiLm3ELm3EEENS_5ArrayIDTmitlT_EtlT0_EEXT1_EEERKNS1_IS2_XT1_EEERKNS1_IS3_XT2_EEE1
_ZN2AHmiIiiLm3ELm3ELb0ELb0ELb0ELb0EEENS_5ArrayIDTmitlT_EtlT0_EEXT1_EEENS_10ArraySliceIS2_XT1_EXT3_EXT5_EEENS6_IS3_XT2_EXT4_EXT6_EEE1
_ZN2AHmiIiiLm3ELm3ELb0ELb0ELb1ELb1EEENS_5ArrayIDTmitlT_EtlT0_EEXT1_EEENS_10ArraySliceIS2_XT1_EXT3_EXT5_EEENS6_IS3_XT2_EXT4_EXT6_EEE1
_ZN2AHmlIiiLm3ELb0ELb0EEENS_5ArrayIDTmltlT_EtlT0_EEXT1_EEENS_10ArraySliceIS2_XT1_EXT2_EXT3_EEES3_1
_ZN2AHmlIiiLm3ELb0ELb0EEENS_5ArrayIDTmltlT_EtlT0_EEXT1_EEES2_NS_10ArraySliceIS3_XT1_EXT2_EXT3_EEE1
_ZN2AHmlIiiLm5EEENS_5ArrayIDTmltlT_EtlT0_EEXT1_EEERKNS1_IS2_XT1_EEES3_1
_ZN2AHmlIiiLm5EEENS_5ArrayIDTmltlT_EtlT0_EEXT1_EEES2_RKNS1_IS3_XT1_EEE1
_ZN2AHmlIiiLm5ELb0ELb1EEENS_5ArrayIDTmltlT_EtlT0_EEXT1_EEENS_10ArraySliceIS2_XT1_EXT2_EXT3_EEES3_1
_ZN2AHmlIiiLm5ELb0ELb1EEENS_5ArrayIDTmltlT_EtlT0_EEXT1_EEES2_NS_10ArraySliceIS3_XT1_EXT2_EXT3_EEE1
_ZN2AHneIiiLm5ELm5ELb0ELb0ELb0ELb0EEEbNS_10ArraySliceIT_XT1_EXT3_EXT5_EEENS1_IT0_XT2_EXT4_EXT6_EEE4
_ZN2AHngIiLm4ELb0ELb0EEENS_5ArrayIDTngtlT_EEXT0_EEENS_10ArraySliceIS2_XT0_EXT1_EXT2_EEE1
_ZN2AHngIiLm5EEENS_5ArrayIDTngtlT_EEXT0_EEERKNS1_IS2_XT0_EEE1
_ZN2AHngIiLm5ELb0ELb1EEENS_5ArrayIDTngtlT_EEXT0_EEENS_10ArraySliceIS2_XT0_EXT1_EXT2_EEE1
_ZN2AHpLIiiLm3ELm3EEERNS_5ArrayIT_XT1_EEES4_RKNS1_IT0_XT2_EEE1
_ZN2AHpLIiiLm3ELm3ELb0ELb0ELb0ELb0EEERKNS_10ArraySliceIT_XT1_EXT3_EXT5_EEES5_RKNS1_IT0_XT2_EXT4_EXT6_EEE1
_ZN2AHpLIiiLm3ELm3ELb0ELb0ELb0ELb1EEERKNS_10ArraySliceIT_XT1_EXT3_EXT5_EEES5_RKNS1_IT0_XT2_EXT4_EXT6_EEE1
_ZN2AHplIiiLm3ELm3EEENS_5ArrayIDTpltlT_EtlT0_EEXT1_EEERKNS1_IS2_XT1_EEERKNS1_IS3_XT2_EEE1
_ZN2AHplIiiLm3ELm3ELb0ELb0ELb0ELb0EEENS_5ArrayIDTpltlT_EtlT0_EEXT1_EEENS_10ArraySliceIS2_XT1_EXT3_EXT5_EEENS6_IS3_XT2_EXT4_EXT6_EEE1
_ZN2AHplIiiLm3ELm3ELb0ELb0ELb1ELb1EEENS_5ArrayIDTpltlT_EtlT0_EEXT1_EEENS_10ArraySliceIS2_XT1_EXT3_EXT5_EEENS6_IS3_XT2_EXT4_EXT6_EEE1
_ZNK2AH10ArraySliceIiLm2ELb0ELb0EEixEm1
_ZNK2AH10ArraySliceIiLm2ELb0ELb1EEixEm1
_ZNK2AH10ArraySliceIiLm3ELb0ELb0EE7asArrayEv1
_ZNK2AH10ArraySliceIiLm3ELb0ELb0EEixEm87
_ZNK2AH10ArraySliceIiLm3ELb0ELb1EEixEm51
_ZNK2AH10ArraySliceIiLm4ELb0ELb0EEixEm28
_ZNK2AH10ArraySliceIiLm4ELb0ELb1EEixEm36
_ZNK2AH10ArraySliceIiLm5ELb0ELb0EE3endEv3
_ZNK2AH10ArraySliceIiLm5ELb0ELb0EE5beginEv1
_ZNK2AH10ArraySliceIiLm5ELb0ELb0EE8IteratordeEv6
_ZNK2AH10ArraySliceIiLm5ELb0ELb0EE8IteratoreqES2_1
_ZNK2AH10ArraySliceIiLm5ELb0ELb0EE8IteratorltES2_3
_ZNK2AH10ArraySliceIiLm5ELb0ELb0EE8IteratormiEl2
_ZNK2AH10ArraySliceIiLm5ELb0ELb0EEixEm110
_ZNK2AH10ArraySliceIiLm5ELb0ELb1EEixEm35
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EE3endEv4
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EE5beginEv2
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EE5sliceILm3ELm1EEENS0_IiXplclL_ZNS_8abs_diffImEET_RKS4_S6_ET0_T_ELi1EEXeoLb1EltT0_T_ELb0EEEv1
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EE5sliceILm4ELm0EEENS0_IiXplclL_ZNS_8abs_diffImEET_RKS4_S6_ET0_T_ELi1EEXeoLb1EltT0_T_ELb0EEEv1
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EE7asArrayEv1
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EE8IteratordeEv56
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EE8IteratoreqES2_2
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EE8IteratorltES2_0
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EE8IteratormiES2_8
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EE8IteratormiEl2
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EE8IteratorneES2_12
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EE8IteratorplEl4
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EEcvNS_5ArrayIiLm5EEEEv1
_ZNK2AH10ArraySliceIiLm5ELb1ELb0EEixEm12
_ZNK2AH5ArrayIZN21fillArray_simple_Test8TestBodyEvE1SLm4EEeqERKS3_1
_ZNK2AH5ArrayIZN21fillArray_simple_Test8TestBodyEvE1SLm4EEixEm8
_ZNK2AH5ArrayIiLm3EE5sliceILm0ELm2EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb1EEEv8
_ZNK2AH5ArrayIiLm3EEeqERKS1_10
_ZNK2AH5ArrayIiLm3EEixEm68
_ZNK2AH5ArrayIiLm4EE5sliceILm0ELm3EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb1EEEv3
_ZNK2AH5ArrayIiLm4EEeqERKS1_1
_ZNK2AH5ArrayIiLm4EEixEm11
_ZNK2AH5ArrayIiLm5EE3endEv1
_ZNK2AH5ArrayIiLm5EE5beginEv1
_ZNK2AH5ArrayIiLm5EE5sliceILm0ELm4EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb1EEEv7
_ZNK2AH5ArrayIiLm5EE5sliceILm3ELm4EEENS_10ArraySliceIiXplclL_ZNS_8abs_diffImEET_RKS5_S7_ET_T0_ELi1EEXltT0_T_ELb1EEEv1
_ZNK2AH5ArrayIiLm5EEeqERKS1_22
_ZNK2AH5ArrayIiLm5EEixEm199
_ZNK2AH5ArrayIiLm5EEneERKS1_4
_ZNK2AH5ArrayIiLm6EE3endEv1
_ZNK2AH5ArrayIiLm6EE5beginEv1
_ZNK2AH5ArrayIiLm6EEeqERKS1_5
_ZNK2AH5ArrayIiLm6EEixEm66
_ZNK2AH5ArrayIiLm7EEeqERKS1_1
_ZNK2AH5ArrayIiLm7EEixEm14
_ZNK2AH5ArrayIjLm4EEeqERKS1_3
_ZNK2AH5ArrayIjLm4EEixEm24
_ZNK2AH5ArrayItLm3EE3endEv4
_ZNK2AH5ArrayItLm3EE5beginEv4
_ZNK2AH5ArrayItLm4EE3endEv11
_ZNK2AH5ArrayItLm4EE5beginEv11
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Containers/Array.hpp.gcov.html b/docs/Coverage/src/AH/Containers/Array.hpp.gcov.html deleted file mode 100644 index 9e4176a46..000000000 --- a/docs/Coverage/src/AH/Containers/Array.hpp.gcov.html +++ /dev/null @@ -1,631 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Containers/Array.hpp - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Containers - Array.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:139139100.0 %
Date:2019-12-23 15:42:58Functions:13213399.2 %
Legend: Lines: - hit - not hit -
-
- - - - - - - - -

-
          Line data    Source code
-
-       1             : /* ✔ */
-       2             : 
-       3             : #pragma once
-       4             : 
-       5             : #include <AH/Settings/Warnings.hpp>
-       6             : 
-       7             : AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-       8             : 
-       9             : #include <AH/Error/Error.hpp>
-      10             : #include <AH/STL/iterator>
-      11             : #include <AH/STL/type_traits> // conditional
-      12             : #include <stddef.h>           // size_t
-      13             : 
-      14             : BEGIN_AH_NAMESPACE
-      15             : 
-      16             : template <class T>
-      17             : constexpr T abs_diff(const T &a, const T &b) {
-      18             :     return a < b ? b - a : a - b;
-      19             : }
-      20             : 
-      21             : /// @addtogroup AH_Containers
-      22             : /// @{
-      23             : 
-      24             : template <class T, size_t N, bool Reverse, bool Const>
-      25             : class ArraySlice;
-      26             : 
-      27             : /**
-      28             :  * @brief   An array wrapper for easy copying, comparing, and iterating.
-      29             :  * 
-      30             :  * @tparam  T
-      31             :  *          The type of the elements in the array.
-      32             :  * @tparam  N 
-      33             :  *          The number of elements in the array.
-      34             :  */
-      35             : template <class T, size_t N>
-      36             : struct Array {
-      37             :     T data[N];
-      38             :     using type = T;
-      39             :     constexpr static size_t length = N;
-      40             : 
-      41             :     /**
-      42             :      * @brief   Get the element at the given index.
-      43             :      * 
-      44             :      * @note    Bounds checking is performed. If fatal errors are disabled, the
-      45             :      *          last element is returned if the index is out of bounds. 
-      46             :      * 
-      47             :      * @param   index
-      48             :      *          The (zero-based) index of the element to return.
-      49             :      */
-      50         174 :     T &operator[](size_t index) {
-      51         174 :         if (index >= N) { // TODO
-      52           1 :             ERROR(F("Index out of bounds: ") << index << F(" ≥ ") << N, 0xEDED);
-      53             :             index = N - 1; // LCOV_EXCL_LINE
-      54             :         }                  // LCOV_EXCL_LINE
-      55         173 :         return data[index];
-      56           1 :     }
-      57             : 
-      58             :     /**
-      59             :      * @brief   Get the element at the given index.
-      60             :      * 
-      61             :      * @note    Bounds checking is performed. If fatal errors are disabled, the
-      62             :      *          last element is returned if the index is out of bounds. 
-      63             :      * 
-      64             :      * @param   index
-      65             :      *          The (zero-based) index of the element to return.
-      66             :      */
-      67         390 :     const T &operator[](size_t index) const {
-      68         390 :         if (index >= N) { // TODO
-      69           1 :             ERROR(F("Index out of bounds: ") << index << F(" ≥ ") << N, 0xEDED);
-      70             :             index = N - 1; // LCOV_EXCL_LINE
-      71             :         }                  // LCOV_EXCL_LINE
-      72         389 :         return data[index];
-      73           1 :     }
-      74             : 
-      75             :     /**
-      76             :      * @brief   Get a pointer to the first element.
-      77             :      */
-      78           6 :     T *begin() { return &data[0]; }
-      79             : 
-      80             :     /**
-      81             :      * @brief   Get a pointer to the first element.
-      82             :      */
-      83          17 :     const T *begin() const { return &data[0]; }
-      84             : 
-      85             :     /**
-      86             :      * @brief   Get a pointer to the memory beyond the array.
-      87             :      */
-      88           5 :     T *end() { return &data[N]; }
-      89             : 
-      90             :     /**
-      91             :      * @brief   Get a pointer to the memory beyond the array.
-      92             :      */
-      93          17 :     const T *end() const { return &data[N]; }
-      94             : 
-      95             :     /**
-      96             :      * @brief   Check the equality of all elements in two arrays.
-      97             :      * 
-      98             :      * @param   rhs 
-      99             :      *          The array to compare this array to.
-     100             :      */
-     101          43 :     bool operator==(const Array<T, N> &rhs) const {
-     102          43 :         if (this == &rhs)
-     103           3 :             return true;
-     104         222 :         for (size_t i = 0; i < N; i++)
-     105         182 :             if ((*this)[i] != rhs[i])
-     106           3 :                 return false;
-     107          37 :         return true;
-     108          43 :     }
-     109             : 
-     110             :     /**
-     111             :      * @brief   Check the inequality of all elements in two arrays.
-     112             :      * 
-     113             :      * @param   rhs 
-     114             :      *          The array to compare this array to.
-     115             :      */
-     116           4 :     bool operator!=(const Array<T, N> &rhs) const { return !(*this == rhs); }
-     117             : 
-     118             :   public:
-     119             :     /**
-     120             :      * @brief   Get a view on a slice of the Array.
-     121             :      * 
-     122             :      * Doesn't copy the contents of the array, it's just a reference to the 
-     123             :      * original array.
-     124             :      * 
-     125             :      * @tparam  Start
-     126             :      *          The start index of the slice.
-     127             :      * @tparam  End
-     128             :      *          The end index of the slice.
-     129             :      */
-     130             :     template <size_t Start = 0, size_t End = N - 1>
-     131             :     ArraySlice<T, abs_diff(Start, End) + 1, (End < Start), false> slice();
-     132             : 
-     133             :     /**
-     134             :      * @brief   Get a read-only view on a slice of the Array.
-     135             :      * @copydetails     slice()
-     136             :      */
-     137             :     template <size_t Start = 0, size_t End = N - 1>
-     138             :     ArraySlice<T, abs_diff(Start, End) + 1, (End < Start), true> slice() const;
-     139             : 
-     140             :     /**
-     141             :      * @brief   Get a read-only view on a slice of the Array.
-     142             :      * @copydetails     slice()
-     143             :      */
-     144             :     template <size_t Start = 0, size_t End = N - 1>
-     145             :     ArraySlice<T, abs_diff(Start, End) + 1, (End < Start), true>
-     146             :     cslice() const {
-     147             :         const Array<T, N> *This = this;
-     148             :         return This->slice();
-     149             :     }
-     150             : };
-     151             : 
-     152             : /**
-     153             :  * @brief   Class for a view on a slice of an array.
-     154             :  * 
-     155             :  * Doesn't copy the contents of the array, it's just a reference to the original
-     156             :  * array.
-     157             :  * 
-     158             :  * @tparam  T
-     159             :  *          The type of elements of the Array.
-     160             :  * @tparam  N 
-     161             :  *          The size of the slice.
-     162             :  * @tparam  Reverse
-     163             :  *          Whether the slice is reversed or not.
-     164             :  * @tparam  Const
-     165             :  *          Whether to save a read-only or mutable reference to the Array.
-     166             :  */
-     167             : template <class T, size_t N, bool Reverse = false, bool Const = true>
-     168             : class ArraySlice {
-     169             :     using ElementRefType =
-     170             :         typename std::conditional<Const, const T &, T &>::type;
-     171             :     using ElementPtrType =
-     172             :         typename std::conditional<Const, const T *, T *>::type;
-     173             : 
-     174             :   public:
-     175             :     /// Constructor
-     176          56 :     ArraySlice(ElementPtrType array) : array{array} {}
-     177             : 
-     178             :     /// Implicit conversion from slice to new array (creates a copy).
-     179           1 :     operator Array<T, N>() const { return asArray(); }
-     180             : 
-     181           2 :     Array<T, N> asArray() const {
-     182           2 :         Array<T, N> slice = {{}};
-     183          10 :         for (size_t i = 0; i < N; ++i)
-     184           8 :             slice[i] = (*this)[i];
-     185           2 :         return slice;
-     186             :     }
-     187             : 
-     188             :     class Iterator {
-     189             :       public:
-     190          18 :         Iterator(ElementPtrType ptr) : ptr(ptr) {}
-     191             : 
-     192             :         using difference_type = std::ptrdiff_t;
-     193             :         using value_type = T;
-     194             :         using pointer = ElementPtrType;
-     195             :         using reference = ElementRefType;
-     196             :         using iterator_category = std::random_access_iterator_tag;
-     197             : 
-     198          12 :         bool operator!=(Iterator rhs) const { return ptr != rhs.ptr; }
-     199           3 :         bool operator==(Iterator rhs) const { return ptr == rhs.ptr; }
-     200             : 
-     201          62 :         reference operator*() const { return *ptr; }
-     202             : 
-     203          10 :         Iterator &operator++() {
-     204          10 :             Reverse ? --ptr : ++ptr;
-     205          10 :             return *this;
-     206             :         }
-     207             : 
-     208          25 :         Iterator &operator--() {
-     209          25 :             Reverse ? ++ptr : --ptr;
-     210          25 :             return *this;
-     211             :         }
-     212             : 
-     213           8 :         difference_type operator-(Iterator rhs) const {
-     214           8 :             return Reverse ? rhs.ptr - ptr : ptr - rhs.ptr;
-     215             :         }
-     216             : 
-     217           4 :         Iterator operator+(difference_type rhs) const {
-     218           4 :             return Reverse ? ptr - rhs : ptr + rhs;
-     219             :         }
-     220             : 
-     221           4 :         Iterator operator-(difference_type rhs) const {
-     222           4 :             return Reverse ? ptr + rhs : ptr - rhs;
-     223             :         }
-     224             : 
-     225           3 :         bool operator<(Iterator rhs) const {
-     226           3 :             return Reverse ? rhs.ptr < ptr : ptr < rhs.ptr;
-     227             :         }
-     228             : 
-     229             :       private:
-     230             :         ElementPtrType ptr;
-     231             :     };
-     232             : 
-     233             :     /**
-     234             :      * @brief   Get the element at the given index.
-     235             :      * 
-     236             :      * @note    Bounds checking is performed. If fatal errors are disabled, the
-     237             :      *          last element is returned if the index is out of bounds. 
-     238             :      * 
-     239             :      * @param   index
-     240             :      *          The (zero-based) index of the element to return.
-     241             :      */
-     242         361 :     ElementRefType operator[](size_t index) const {
-     243         361 :         if (index >= N) { // TODO
-     244           2 :             ERROR(F("Index out of bounds: ") << index << F(" ≥ ") << N, 0xEDEF);
-     245             :             index = N - 1; // LCOV_EXCL_LINE
-     246             :         }                  // LCOV_EXCL_LINE
-     247             :         if (Reverse)
-     248          12 :             return array[-index];
-     249             :         else
-     250         347 :             return array[index];
-     251           2 :     }
-     252             : 
-     253           3 :     Iterator begin() const {
-     254             :         if (Reverse)
-     255           2 :             return array;
-     256             :         else
-     257           1 :             return array;
-     258             :     }
-     259             : 
-     260           7 :     Iterator end() const {
-     261             :         if (Reverse)
-     262           4 :             return array - N;
-     263             :         else
-     264           3 :             return array + N;
-     265             :     }
-     266             : 
-     267             :     template <size_t Start, size_t End>
-     268             :     ArraySlice<T, abs_diff(End, Start) + 1, Reverse ^ (End < Start), Const>
-     269             :     slice() const;
-     270             : 
-     271             :   private:
-     272             :     ElementPtrType array;
-     273             : };
-     274             : 
-     275             : template <class T, size_t N>
-     276             : template <size_t Start, size_t End>
-     277             : inline ArraySlice<T, abs_diff(Start, End) + 1, (End < Start), false>
-     278          35 : Array<T, N>::slice() {
-     279             :     static_assert(Start < N, "");
-     280             :     static_assert(End < N, "");
-     281          35 :     return &(*this)[Start];
-     282             : }
-     283             : 
-     284             : template <class T, size_t N>
-     285             : template <size_t Start, size_t End>
-     286             : inline ArraySlice<T, abs_diff(Start, End) + 1, (End < Start), true>
-     287          19 : Array<T, N>::slice() const {
-     288             :     static_assert(Start < N, "");
-     289             :     static_assert(End < N, "");
-     290          19 :     return &(*this)[Start];
-     291             : }
-     292             : 
-     293             : template <class T, size_t N, bool Reverse, bool Const>
-     294             : template <size_t Start, size_t End>
-     295             : ArraySlice<T, abs_diff(End, Start) + 1, Reverse ^ (End < Start), Const>
-     296           2 : ArraySlice<T, N, Reverse, Const>::slice() const {
-     297             :     static_assert(Start < N, "");
-     298             :     static_assert(End < N, "");
-     299           2 :     return &(*this)[Start];
-     300             : }
-     301             : 
-     302             : // Equality ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-     303             : 
-     304             : /// Slice == Slice
-     305             : template <class T1, class T2, size_t N1, size_t N2, bool Reverse1,
-     306             :           bool Reverse2, bool Const1, bool Const2>
-     307          16 : bool operator==(ArraySlice<T1, N1, Reverse1, Const1> a,
-     308             :                 ArraySlice<T2, N2, Reverse2, Const2> b) {
-     309             :     static_assert(N1 == N2, "Error: sizes do not match");
-     310          88 :     for (size_t i = 0; i < N1; ++i)
-     311          72 :         if (a[i] != b[i])
-     312           3 :             return false;
-     313          13 :     return true;
-     314          16 : }
-     315             : 
-     316             : /// Array == Slice
-     317             : template <class T1, class T2, size_t N1, size_t N2, bool Reverse2, bool Const2>
-     318             : bool operator==(const Array<T1, N1> &a,
-     319             :                 ArraySlice<T2, N2, Reverse2, Const2> b) {
-     320             :     return a.slice() == b;
-     321             : }
-     322             : 
-     323             : /// Slice == Array
-     324             : template <class T1, class T2, size_t N1, size_t N2, bool Reverse1, bool Const1>
-     325           3 : bool operator==(ArraySlice<T1, N1, Reverse1, Const1> a,
-     326             :                 const Array<T2, N2> &b) {
-     327           3 :     return a == b.slice();
-     328             : }
-     329             : 
-     330             : // Inequality ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-     331             : 
-     332             : /// Slice != Slice
-     333             : template <class T1, class T2, size_t N1, size_t N2, bool Reverse1,
-     334             :           bool Reverse2, bool Const1, bool Const2>
-     335           4 : bool operator!=(ArraySlice<T1, N1, Reverse1, Const1> a,
-     336             :                 ArraySlice<T2, N2, Reverse2, Const2> b) {
-     337           4 :     return !(a == b);
-     338             : }
-     339             : 
-     340             : /// Array != Slice
-     341             : template <class T1, class T2, size_t N1, size_t N2, bool Reverse2, bool Const2>
-     342             : bool operator!=(const Array<T1, N1> &a,
-     343             :                 ArraySlice<T2, N2, Reverse2, Const2> b) {
-     344             :     return a.slice() != b;
-     345             : }
-     346             : 
-     347             : /// Slice != Array
-     348             : template <class T1, class T2, size_t N1, size_t N2, bool Reverse1, bool Const1>
-     349             : bool operator!=(ArraySlice<T1, N1, Reverse1, Const1> a,
-     350             :                 const Array<T2, N2> &b) {
-     351             :     return a != b.slice();
-     352             : }
-     353             : 
-     354             : // Addition ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-     355             : 
-     356             : /// Slice + Slice
-     357             : template <class T1, class T2, size_t N1, size_t N2, bool Reverse1,
-     358             :           bool Reverse2, bool Const1, bool Const2>
-     359             : Array<decltype(T1{} + T2{}), N1>
-     360           2 : operator+(ArraySlice<T1, N1, Reverse1, Const1> a,
-     361             :           ArraySlice<T2, N2, Reverse2, Const2> b) {
-     362             :     static_assert(N1 == N2, "Error: sizes do not match");
-     363           2 :     Array<decltype(T1{} + T2{}), N1> result = {{}};
-     364           8 :     for (size_t i = 0; i < N1; ++i)
-     365           6 :         result[i] = a[i] + b[i];
-     366           2 :     return result;
-     367             : }
-     368             : 
-     369             : /// Array + Array
-     370             : template <class T1, class T2, size_t N1, size_t N2>
-     371           1 : Array<decltype(T1{} + T2{}), N1> operator+(const Array<T1, N1> &a,
-     372             :                                            const Array<T2, N2> &b) {
-     373           1 :     return a.slice() + b.slice();
-     374             : }
-     375             : 
-     376             : /// Slice += Slice
-     377             : template <class T1, class T2, size_t N1, size_t N2, bool Reverse1,
-     378             :           bool Reverse2, bool Const1, bool Const2>
-     379             : const ArraySlice<T1, N1, Reverse1, Const1> &
-     380           2 : operator+=(const ArraySlice<T1, N1, Reverse1, Const1> &a,
-     381             :            const ArraySlice<T2, N2, Reverse2, Const2> &b) {
-     382             :     static_assert(N1 == N2, "Error: sizes do not match");
-     383           8 :     for (size_t i = 0; i < N1; ++i)
-     384           6 :         a[i] += b[i];
-     385           2 :     return a;
-     386             : }
-     387             : 
-     388             : /// Array += Array
-     389             : template <class T1, class T2, size_t N1, size_t N2>
-     390           1 : Array<T1, N1> &operator+=(Array<T1, N1> &a, const Array<T2, N2> &b) {
-     391           1 :     a.slice() += b.slice();
-     392           1 :     return a;
-     393             : }
-     394             : 
-     395             : // Subtraction :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-     396             : 
-     397             : /// Slice - Slice
-     398             : template <class T1, class T2, size_t N1, size_t N2, bool Reverse1,
-     399             :           bool Reverse2, bool Const1, bool Const2>
-     400             : Array<decltype(T1{} - T2{}), N1>
-     401           2 : operator-(ArraySlice<T1, N1, Reverse1, Const1> a,
-     402             :           ArraySlice<T2, N2, Reverse2, Const2> b) {
-     403             :     static_assert(N1 == N2, "Error: sizes do not match");
-     404           2 :     Array<decltype(T1{} - T2{}), N1> result = {{}};
-     405           8 :     for (size_t i = 0; i < N1; ++i)
-     406           6 :         result[i] = a[i] - b[i];
-     407           2 :     return result;
-     408             : }
-     409             : 
-     410             : /// Array - Array
-     411             : template <class T1, class T2, size_t N1, size_t N2>
-     412           1 : Array<decltype(T1{} - T2{}), N1> operator-(const Array<T1, N1> &a,
-     413             :                                            const Array<T2, N2> &b) {
-     414           1 :     return a.slice() - b.slice();
-     415             : }
-     416             : 
-     417             : /// Slice -= Slice
-     418             : template <class T1, class T2, size_t N1, size_t N2, bool Reverse1,
-     419             :           bool Reverse2, bool Const1, bool Const2>
-     420             : const ArraySlice<T1, N1, Reverse1, Const1> &
-     421             : operator-=(const ArraySlice<T1, N1, Reverse1, Const1> &a,
-     422             :            const ArraySlice<T2, N2, Reverse2, Const2> &b) {
-     423             :     static_assert(N1 == N2, "Error: sizes do not match");
-     424             :     for (size_t i = 0; i < N1; ++i)
-     425             :         a[i] -= b[i];
-     426             :     return a;
-     427             : }
-     428             : 
-     429             : /// Array -= Array
-     430             : template <class T1, class T2, size_t N1, size_t N2>
-     431             : Array<T1, N1> &operator-=(Array<T1, N1> &a, const Array<T2, N2> &b) {
-     432             :     a.slice() -= b.slice();
-     433             :     return a;
-     434             : }
-     435             : 
-     436             : // Scalar Multiplication :::::::::::::::::::::::::::::::::::::::::::::::::::::::
-     437             : 
-     438             : /// Slice * Scalar
-     439             : template <class T1, class T2, size_t N1, bool Reverse1, bool Const1>
-     440             : Array<decltype(T1{} * T2{}), N1>
-     441           2 : operator*(ArraySlice<T1, N1, Reverse1, Const1> a, T2 b) {
-     442           2 :     Array<decltype(T1{} * T2{}), N1> result = {{}};
-     443          10 :     for (size_t i = 0; i < N1; ++i)
-     444           8 :         result[i] = a[i] * b;
-     445           2 :     return result;
-     446             : }
-     447             : 
-     448             : /// Array * Scalar
-     449             : template <class T1, class T2, size_t N1>
-     450           1 : Array<decltype(T1{} * T2{}), N1> operator*(const Array<T1, N1> &a, T2 b) {
-     451           1 :     return a.slice() * b;
-     452             : }
-     453             : 
-     454             : /// Scalar * Slice
-     455             : template <class T1, class T2, size_t N2, bool Reverse2, bool Const2>
-     456             : Array<decltype(T1{} * T2{}), N2>
-     457           2 : operator*(T1 a, ArraySlice<T2, N2, Reverse2, Const2> b) {
-     458           2 :     Array<decltype(T1{} * T2{}), N2> result = {{}};
-     459          10 :     for (size_t i = 0; i < N2; ++i)
-     460           8 :         result[i] = a * b[i];
-     461           2 :     return result;
-     462             : }
-     463             : 
-     464             : /// Scalar * Array
-     465             : template <class T1, class T2, size_t N2>
-     466           1 : Array<decltype(T1{} * T2{}), N2> operator*(T1 a, const Array<T2, N2> &b) {
-     467           1 :     return a * b.slice();
-     468             : }
-     469             : 
-     470             : /// Slice *= Scalar
-     471             : template <class T1, class T2, size_t N1, bool Reverse1, bool Const1>
-     472             : const ArraySlice<T1, N1, Reverse1, Const1> &
-     473           2 : operator*=(const ArraySlice<T1, N1, Reverse1, Const1> &a, T2 b) {
-     474          10 :     for (size_t i = 0; i < N1; ++i)
-     475           8 :         a[i] *= b;
-     476           2 :     return a;
-     477             : }
-     478             : 
-     479             : /// Array *= Scalar
-     480             : template <class T1, class T2, size_t N1>
-     481           1 : Array<T1, N1> &operator*=(Array<T1, N1> &a, T2 b) {
-     482           1 :     a.slice() *= b;
-     483           1 :     return a;
-     484             : }
-     485             : 
-     486             : // Scalar Division :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-     487             : 
-     488             : /// Slice / Scalar
-     489             : template <class T1, class T2, size_t N1, bool Reverse1, bool Const1>
-     490             : Array<decltype(T1{} / T2{}), N1>
-     491           2 : operator/(ArraySlice<T1, N1, Reverse1, Const1> a, T2 b) {
-     492           2 :     Array<decltype(T1{} / T2{}), N1> result = {{}};
-     493          10 :     for (size_t i = 0; i < N1; ++i)
-     494           8 :         result[i] = a[i] / b;
-     495           2 :     return result;
-     496             : }
-     497             : 
-     498             : /// Array / Scalar
-     499             : template <class T1, class T2, size_t N1>
-     500           1 : Array<decltype(T1{} / T2{}), N1> operator/(const Array<T1, N1> &a, T2 b) {
-     501           1 :     return a.slice() / b;
-     502             : }
-     503             : 
-     504             : /// Slice /= Scalar
-     505             : template <class T1, class T2, size_t N1, bool Reverse1, bool Const1>
-     506             : const ArraySlice<T1, N1, Reverse1, Const1> &
-     507           2 : operator/=(const ArraySlice<T1, N1, Reverse1, Const1> &a, T2 b) {
-     508          10 :     for (size_t i = 0; i < N1; ++i)
-     509           8 :         a[i] /= b;
-     510           2 :     return a;
-     511             : }
-     512             : 
-     513             : /// Array /= Scalar
-     514             : template <class T1, class T2, size_t N1>
-     515           1 : Array<T1, N1> &operator/=(Array<T1, N1> &a, T2 b) {
-     516           1 :     a.slice() /= b;
-     517           1 :     return a;
-     518             : }
-     519             : 
-     520             : // Negation ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-     521             : 
-     522             : /// -Slice
-     523             : template <class T, size_t N, bool Reverse, bool Const>
-     524           2 : Array<decltype(-T{}), N> operator-(ArraySlice<T, N, Reverse, Const> a) {
-     525           2 :     Array<decltype(-T{}), N> result = {{}};
-     526          11 :     for (size_t i = 0; i < N; ++i)
-     527           9 :         result[i] = -a[i];
-     528           2 :     return result;
-     529             : }
-     530             : 
-     531             : /// -Array
-     532             : template <class T, size_t N>
-     533           1 : Array<decltype(-T{}), N> operator-(const Array<T, N> &a) {
-     534           1 :     return -a.slice();
-     535             : }
-     536             : 
-     537             : // Type aliases ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-     538             : 
-     539             : /// An easy alias for two-dimensional Arrays.
-     540             : template <class T, size_t nb_rows, size_t nb_cols>
-     541             : using Array2D = Array<Array<T, nb_cols>, nb_rows>;
-     542             : 
-     543             : /// @}
-     544             : 
-     545             : END_AH_NAMESPACE
-     546             : 
-     547             : AH_DIAGNOSTIC_POP()
-
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Containers/ArrayHelpers.hpp.func-sort-c.html b/docs/Coverage/src/AH/Containers/ArrayHelpers.hpp.func-sort-c.html deleted file mode 100644 index a635129c0..000000000 --- a/docs/Coverage/src/AH/Containers/ArrayHelpers.hpp.func-sort-c.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Containers/ArrayHelpers.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Containers - ArrayHelpers.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:3838100.0 %
Date:2019-12-23 15:42:58Functions:1717100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH10distributeIiiLm3ELm4EEENS_5ArrayIDTmlcvT__EcvT0__EEXmiplT1_T2_Li1EEEERKNS1_IS2_XT1_EEERKNS1_IS3_XT2_EEE1
_ZN2AH10distributeIiiLm3ELm4ELb0ELb0EEENS_5ArrayIDTmlcvT__EcvT0__EEXmiplT1_T2_Li1EEEERKNS_10ArraySliceIS2_XT1_EXT3_EXT4_EEERKNS1_IS3_XT2_EEE1
_ZN2AH10distributeIiiLm3ELm4ELb0ELb0ELb0ELb0EEENS_5ArrayIDTmlcvT__EcvT0__EEXmiplT1_T2_Li1EEEERKNS_10ArraySliceIS2_XT1_EXT3_EXT5_EEERKNS6_IS3_XT2_EXT4_EXT6_EEE1
_ZN2AH10distributeIiiLm3ELm4ELb0ELb0ELb0ELb1EEENS_5ArrayIDTmlcvT__EcvT0__EEXmiplT1_T2_Li1EEEERKNS_10ArraySliceIS2_XT1_EXT3_EXT5_EEERKNS6_IS3_XT2_EXT4_EXT6_EEE1
_ZN2AH10distributeIiiLm3ELm4ELb0ELb0ELb1ELb1EEENS_5ArrayIDTmlcvT__EcvT0__EEXmiplT1_T2_Li1EEEERKNS_10ArraySliceIS2_XT1_EXT3_EXT5_EEERKNS6_IS3_XT2_EXT4_EXT6_EEE1
_ZN2AH10distributeIiiLm4ELm3EEENS_5ArrayIDTmlcvT__EcvT0__EEXmiplT1_T2_Li1EEEERKNS1_IS2_XT1_EEERKNS1_IS3_XT2_EEE1
_ZN2AH10distributeIiiLm4ELm3ELb0ELb0EEENS_5ArrayIDTmlcvT__EcvT0__EEXmiplT1_T2_Li1EEEERKNS_10ArraySliceIS2_XT1_EXT3_EXT4_EEERKNS1_IS3_XT2_EEE1
_ZN2AH10distributeIiiLm4ELm3ELb0ELb0ELb0ELb1EEENS_5ArrayIDTmlcvT__EcvT0__EEXmiplT1_T2_Li1EEEERKNS_10ArraySliceIS2_XT1_EXT3_EXT5_EEERKNS6_IS3_XT2_EXT4_EXT6_EEE1
_ZN2AH10distributeIiiLm4ELm3ELb0ELb0ELb1ELb1EEENS_5ArrayIDTmlcvT__EcvT0__EEXmiplT1_T2_Li1EEEERKNS_10ArraySliceIS2_XT1_EXT3_EXT5_EEERKNS6_IS3_XT2_EXT4_EXT6_EEE1
_ZN2AH13generateArrayILm4EZN31generateArray_simpleNoType_Test8TestBodyEvE3$_1EENS_5ArrayIDTclfp_EEXT_EEET0_1
_ZN2AH13generateArrayIjLm4ENS_6detail11IncrementorIiiEEEENS_5ArrayIT_XT0_EEET1_1
_ZN2AH13generateArrayIjLm4EZN25generateArray_simple_Test8TestBodyEvE3$_0EENS_5ArrayIT_XT0_EEET1_1
_ZN2AH24generateIncrementalArrayIjLm4EiiEENS_5ArrayIT_XT0_EEET1_T2_1
_ZN2AH5applyISt6negateIvEiLm5EEENS_5ArrayIDTcltlT_EtlT0_EEEXT1_EEERKNS3_IS5_XT1_EEES4_1
_ZN2AH6detail11IncrementorIiiEC2Eii1
_ZN2AH9fillArrayIZN21fillArray_simple_Test8TestBodyEvE1SLm4EJifEEENS_5ArrayIT_XT0_EEEDpT1_1
_ZN2AH6detail11IncrementorIiiEclEv4
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Containers/ArrayHelpers.hpp.func.html b/docs/Coverage/src/AH/Containers/ArrayHelpers.hpp.func.html deleted file mode 100644 index bae8ca4f0..000000000 --- a/docs/Coverage/src/AH/Containers/ArrayHelpers.hpp.func.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Containers/ArrayHelpers.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Containers - ArrayHelpers.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:3838100.0 %
Date:2019-12-23 15:42:58Functions:1717100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH10distributeIiiLm3ELm4EEENS_5ArrayIDTmlcvT__EcvT0__EEXmiplT1_T2_Li1EEEERKNS1_IS2_XT1_EEERKNS1_IS3_XT2_EEE1
_ZN2AH10distributeIiiLm3ELm4ELb0ELb0EEENS_5ArrayIDTmlcvT__EcvT0__EEXmiplT1_T2_Li1EEEERKNS_10ArraySliceIS2_XT1_EXT3_EXT4_EEERKNS1_IS3_XT2_EEE1
_ZN2AH10distributeIiiLm3ELm4ELb0ELb0ELb0ELb0EEENS_5ArrayIDTmlcvT__EcvT0__EEXmiplT1_T2_Li1EEEERKNS_10ArraySliceIS2_XT1_EXT3_EXT5_EEERKNS6_IS3_XT2_EXT4_EXT6_EEE1
_ZN2AH10distributeIiiLm3ELm4ELb0ELb0ELb0ELb1EEENS_5ArrayIDTmlcvT__EcvT0__EEXmiplT1_T2_Li1EEEERKNS_10ArraySliceIS2_XT1_EXT3_EXT5_EEERKNS6_IS3_XT2_EXT4_EXT6_EEE1
_ZN2AH10distributeIiiLm3ELm4ELb0ELb0ELb1ELb1EEENS_5ArrayIDTmlcvT__EcvT0__EEXmiplT1_T2_Li1EEEERKNS_10ArraySliceIS2_XT1_EXT3_EXT5_EEERKNS6_IS3_XT2_EXT4_EXT6_EEE1
_ZN2AH10distributeIiiLm4ELm3EEENS_5ArrayIDTmlcvT__EcvT0__EEXmiplT1_T2_Li1EEEERKNS1_IS2_XT1_EEERKNS1_IS3_XT2_EEE1
_ZN2AH10distributeIiiLm4ELm3ELb0ELb0EEENS_5ArrayIDTmlcvT__EcvT0__EEXmiplT1_T2_Li1EEEERKNS_10ArraySliceIS2_XT1_EXT3_EXT4_EEERKNS1_IS3_XT2_EEE1
_ZN2AH10distributeIiiLm4ELm3ELb0ELb0ELb0ELb1EEENS_5ArrayIDTmlcvT__EcvT0__EEXmiplT1_T2_Li1EEEERKNS_10ArraySliceIS2_XT1_EXT3_EXT5_EEERKNS6_IS3_XT2_EXT4_EXT6_EEE1
_ZN2AH10distributeIiiLm4ELm3ELb0ELb0ELb1ELb1EEENS_5ArrayIDTmlcvT__EcvT0__EEXmiplT1_T2_Li1EEEERKNS_10ArraySliceIS2_XT1_EXT3_EXT5_EEERKNS6_IS3_XT2_EXT4_EXT6_EEE1
_ZN2AH13generateArrayILm4EZN31generateArray_simpleNoType_Test8TestBodyEvE3$_1EENS_5ArrayIDTclfp_EEXT_EEET0_1
_ZN2AH13generateArrayIjLm4ENS_6detail11IncrementorIiiEEEENS_5ArrayIT_XT0_EEET1_1
_ZN2AH13generateArrayIjLm4EZN25generateArray_simple_Test8TestBodyEvE3$_0EENS_5ArrayIT_XT0_EEET1_1
_ZN2AH24generateIncrementalArrayIjLm4EiiEENS_5ArrayIT_XT0_EEET1_T2_1
_ZN2AH5applyISt6negateIvEiLm5EEENS_5ArrayIDTcltlT_EtlT0_EEEXT1_EEERKNS3_IS5_XT1_EEES4_1
_ZN2AH6detail11IncrementorIiiEC2Eii1
_ZN2AH6detail11IncrementorIiiEclEv4
_ZN2AH9fillArrayIZN21fillArray_simple_Test8TestBodyEvE1SLm4EJifEEENS_5ArrayIT_XT0_EEEDpT1_1
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Containers/ArrayHelpers.hpp.gcov.html b/docs/Coverage/src/AH/Containers/ArrayHelpers.hpp.gcov.html deleted file mode 100644 index cf09957b9..000000000 --- a/docs/Coverage/src/AH/Containers/ArrayHelpers.hpp.gcov.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Containers/ArrayHelpers.hpp - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Containers - ArrayHelpers.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:3838100.0 %
Date:2019-12-23 15:42:58Functions:1717100.0 %
Legend: Lines: - hit - not hit -
-
- - - - - - - - -

-
          Line data    Source code
-
-       1             : /* ✔ */
-       2             : 
-       3             : #pragma once
-       4             : 
-       5             : #include <AH/Settings/Warnings.hpp>
-       6             : 
-       7             : AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-       8             : 
-       9             : #include "Array.hpp"
-      10             : #include <AH/STL/algorithm>
-      11             : 
-      12             : #if __cplusplus >= 201400L
-      13             : #define USE_CONSTEXPR_ARRAY_HELPERS constexpr
-      14             : #else
-      15             : #define USE_CONSTEXPR_ARRAY_HELPERS
-      16             : #endif
-      17             : 
-      18             : BEGIN_AH_NAMESPACE
-      19             : 
-      20             : namespace detail {
-      21             : 
-      22             : /** 
-      23             :  * @brief   Utility class that acts as a functor to return incremental values.
-      24             :  * 
-      25             :  * @tparam  T
-      26             :  *          The type that will be returned by the functor, as well as the type
-      27             :  *          of the initial value.
-      28             :  * @tparam  V
-      29             :  *          The type of the object that is added to the value on each call.
-      30             :  */
-      31             : template <class T, class V>
-      32             : class Incrementor {
-      33             :   public:
-      34           1 :     USE_CONSTEXPR_ARRAY_HELPERS Incrementor(T start = 0, V increment = 1)
-      35           1 :         : value(start), increment(increment) {}
-      36           4 :     USE_CONSTEXPR_ARRAY_HELPERS T operator()() {
-      37           4 :         T temp = value;
-      38           4 :         value += increment;
-      39           8 :         return temp;
-      40           4 :     }
-      41             : 
-      42             :   private:
-      43             :     T value;
-      44             :     const V increment;
-      45             : };
-      46             : 
-      47             : } // namespace detail
-      48             : 
-      49             : END_AH_NAMESPACE
-      50             : /// @addtogroup AH_Containers
-      51             : /// @{
-      52             : 
-      53             : BEGIN_AH_NAMESPACE
-      54             : 
-      55             : /**
-      56             :  * @brief   Generate an array using the given generator.
-      57             :  * 
-      58             :  * @tparam  T 
-      59             :  *          The type of the elements in the array.
-      60             :  * @tparam  N 
-      61             :  *          The number of elements in the array.
-      62             :  * @tparam  G
-      63             :  *          The generator functor type.
-      64             :  * 
-      65             :  * @param   generator
-      66             :  *          A functor that will be called to create each element.
-      67             :  * 
-      68             :  * @return  The generated array.
-      69             :  */
-      70             : template <class T, size_t N, class G>
-      71           2 : USE_CONSTEXPR_ARRAY_HELPERS Array<T, N> generateArray(G generator) {
-      72           2 :     Array<T, N> array{{}};
-      73           2 :     std::generate(array.begin(), array.end(), generator);
-      74           2 :     return array;
-      75             : }
-      76             : 
-      77             : /**
-      78             :  * @brief   Generate an array using the given generator.
-      79             :  * 
-      80             :  * @tparam  N 
-      81             :  *          The number of elements in the array.
-      82             :  * @tparam  G
-      83             :  *          The generator functor type.
-      84             :  * 
-      85             :  * @param   generator
-      86             :  *          A functor that will be called to create each element.
-      87             :  * 
-      88             :  * @return  The generated array.
-      89             :  */
-      90             : template <size_t N, class G>
-      91           1 : USE_CONSTEXPR_ARRAY_HELPERS auto generateArray(G generator)
-      92             :     -> Array<decltype(generator()), N> {
-      93           1 :     Array<decltype(generator()), N> array{{}};
-      94           1 :     std::generate(array.begin(), array.end(), generator);
-      95           1 :     return array;
-      96             : }
-      97             : 
-      98             : /**
-      99             :  * @brief   Copy an Array to an Array of a different type.
-     100             :  * 
-     101             :  * @tparam  T 
-     102             :  *          The type of the new array.
-     103             :  * @tparam  N 
-     104             :  *          The number of elements in the arrays.
-     105             :  * @tparam  U 
-     106             :  *          The type of the source array.
-     107             :  * 
-     108             :  * @param   src 
-     109             :  *          The source array to be copied.
-     110             :  */
-     111             : template <class T, size_t N, class U>
-     112             : USE_CONSTEXPR_ARRAY_HELPERS Array<T, N> copyAs(const Array<U, N> &src) {
-     113             :     Array<T, N> dest{{}};
-     114             :     std::transform(std::begin(src), std::end(src), std::begin(dest),
-     115             :                    [](const U &src) { return T(src); });
-     116             :     return dest;
-     117             : }
-     118             : 
-     119             : /**
-     120             :  * @brief   Apply a function to all elements of the array and return a copy.
-     121             :  */
-     122             : template <class F, class U, size_t N>
-     123             : USE_CONSTEXPR_ARRAY_HELPERS Array<decltype(F{}(U{})), N>
-     124           1 : apply(const Array<U, N> &src, F f) {
-     125           1 :     Array<decltype(F{}(U{})), N> dest{{}};
-     126           1 :     std::transform(std::begin(src), std::end(src), std::begin(dest), f);
-     127           1 :     return dest;
-     128             : }
-     129             : 
-     130             : #if !defined(__GNUC__) || (__GNUC__ > 7) ||                                    \
-     131             :     (__GNUC__ == 7 && __GNUC_MINOR__ >= 3) || defined(DOXYGEN)
-     132             : /** 
-     133             :  * @brief   Fill the array with the same value for each element.
-     134             :  */
-     135             : template <class T, size_t N, class... Args>
-     136             : USE_CONSTEXPR_ARRAY_HELPERS Array<T, N> fillArray(Args... args) {
-     137             :     return generateArray<N>([&]() { return T{args...}; });
-     138             : }
-     139             : #else
-     140             : template <class T, size_t N, class... Args>
-     141           1 : USE_CONSTEXPR_ARRAY_HELPERS Array<T, N> fillArray(Args... args) {
-     142           1 :     Array<T, N> array{{}};
-     143           5 :     for (auto &el : array)
-     144           4 :         el = T{args...};
-     145           1 :     return array;
-     146             : }
-     147             : #endif
-     148             : 
-     149             : /**
-     150             :  * @brief   Generate an array where the first value is given, and the subsequent
-     151             :  *          values are calculated as the previous value incremented with a given
-     152             :  *          value:  
-     153             :  *          @f$ x[0] = \mathrm{start} @f$  
-     154             :  *          @f$ x[k+1] = x[k] + \mathrm{increment} @f$ .
-     155             :  * 
-     156             :  * For example:  
-     157             :  * ```
-     158             :  * auto x = generateIncrementalArray<unsigned int, 4>(2, 3);
-     159             :  * ```
-     160             :  * is equivalent to  
-     161             :  * ```
-     162             :  * Array<unsigned int, 4> x = {2, 5, 8, 11};
-     163             :  * ```
-     164             :  * 
-     165             :  * @tparam  T 
-     166             :  *          The type of the elements in the array.
-     167             :  * @tparam  N 
-     168             :  *          The number of elements in the array.
-     169             :  * @tparam  U 
-     170             :  *          The type of the initial value.
-     171             :  * @tparam  V
-     172             :  *          The type of the value that will be added to each subsequent element.
-     173             :  * 
-     174             :  * @param   start
-     175             :  *          The first value in the array.
-     176             :  * @param   increment
-     177             :  *          The value to add to each subsequent element of the array.
-     178             :  * 
-     179             :  * @return  The generated array.
-     180             :  */
-     181             : template <class T, size_t N, class U, class V = U>
-     182             : USE_CONSTEXPR_ARRAY_HELPERS Array<T, N>
-     183           1 : generateIncrementalArray(U start = 0, V increment = V(1)) {
-     184           1 :     detail::Incrementor<U, V> g(start, increment);
-     185           1 :     return generateArray<T, N>(g);
-     186           1 : }
-     187             : 
-     188             : /**
-     189             :  * @brief   Concatenate two arrays.
-     190             :  * 
-     191             :  * @tparam  T
-     192             :  *          The type of the elements in the array. 
-     193             :  * @tparam  M
-     194             :  *          The number of elements in the first array.
-     195             :  * @tparam  N 
-     196             :  *          The number of elements in the second array.
-     197             :  * @param   a 
-     198             :  *          The first array.
-     199             :  * @param   b 
-     200             :  *          The second array.
-     201             :  * @return  A new array containing the elements of both input arrays (in order). 
-     202             :  */
-     203             : template <class T, size_t M, size_t N>
-     204             : USE_CONSTEXPR_ARRAY_HELPERS Array<T, M + N> cat(const Array<T, M> &a,
-     205             :                                                 const Array<T, N> &b) {
-     206             :     Array<T, M + N> result{{}};
-     207             :     size_t r = 0;
-     208             :     for (size_t i = 0; i < M; ++i, ++r)
-     209             :         result[r] = a[i];
-     210             :     for (size_t i = 0; i < N; ++i, ++r)
-     211             :         result[r] = b[i];
-     212             :     return result;
-     213             : }
-     214             : 
-     215             : template <class T1, class T2, size_t N1, size_t N2, bool Reverse1,
-     216             :           bool Reverse2, bool Const1, bool Const2>
-     217             : USE_CONSTEXPR_ARRAY_HELPERS Array<decltype(T1() * T2()), N1 + N2 - 1>
-     218           5 : distribute(const ArraySlice<T1, N1, Reverse1, Const1> &a,
-     219             :            const ArraySlice<T2, N2, Reverse2, Const2> &b) {
-     220           5 :     Array<decltype(T1() * T2()), N1 + N2 - 1> result = {{}};
-     221          22 :     for (size_t i = 0; i < N1; ++i)
-     222          77 :         for (size_t j = 0; j < N2; ++j)
-     223          77 :             result[i + j] += a[i] * b[j];
-     224           5 :     return result;
-     225             : }
-     226             : 
-     227             : template <class T1, class T2, size_t N1, size_t N2, bool Reverse1, bool Const1>
-     228             : USE_CONSTEXPR_ARRAY_HELPERS Array<decltype(T1() * T2()), N1 + N2 - 1>
-     229           2 : distribute(const ArraySlice<T1, N1, Reverse1, Const1> &a,
-     230             :            const Array<T2, N2> &b) {
-     231           2 :     return distribute(a, b.slice());
-     232             : }
-     233             : 
-     234             : template <class T1, class T2, size_t N1, size_t N2, bool Reverse2, bool Const2>
-     235             : USE_CONSTEXPR_ARRAY_HELPERS Array<decltype(T1() * T2()), N1 + N2 - 1>
-     236             : distribute(const Array<T1, N1> &a,
-     237             :            const ArraySlice<T2, N2, Reverse2, Const2> &b) {
-     238             :     return distribute(a.slice(), b);
-     239             : }
-     240             : 
-     241             : template <class T1, class T2, size_t N1, size_t N2>
-     242             : USE_CONSTEXPR_ARRAY_HELPERS Array<decltype(T1() * T2()), N1 + N2 - 1>
-     243           2 : distribute(const Array<T1, N1> &a, const Array<T2, N2> &b) {
-     244           2 :     return distribute(a.slice(), b.slice());
-     245             : }
-     246             : 
-     247             : END_AH_NAMESPACE
-     248             : 
-     249             : /// @}
-     250             : 
-     251             : #ifndef ARDUINO
-     252             : 
-     253             : #include <ostream>
-     254             : 
-     255             : template <class T, size_t N, bool Reverse, bool Const>
-     256             : std::enable_if_t<std::is_arithmetic<T>::value, std::ostream &>
-     257             : operator<<(std::ostream &os, const AH::ArraySlice<T, N, Reverse, Const> &a) {
-     258             :     for (const T &el : a.template slice<0, N - 2>())
-     259             :         os << el << ", ";
-     260             :     os << a[N - 1];
-     261             :     return os;
-     262             : }
-     263             : 
-     264             : template <class T, size_t N>
-     265             : std::enable_if_t<std::is_arithmetic<T>::value, std::ostream &>
-     266             : operator<<(std::ostream &os, const AH::Array<T, N> &a) {
-     267             :     return os << a.slice();
-     268             : }
-     269             : 
-     270             : #endif
-     271             : 
-     272             : #include <AH/PrintStream/PrintStream.hpp>
-     273             : 
-     274             : template <class T, size_t N, bool Reverse, bool Const>
-     275             : std::enable_if_t<std::is_arithmetic<T>::value, Print &>
-     276             : operator<<(Print &os, const AH::ArraySlice<T, N, Reverse, Const> &a) {
-     277             :     for (const T &el : a.template slice<0, N - 2>())
-     278             :         os << el << ", ";
-     279             :     os << a[N - 1];
-     280             :     return os;
-     281             : }
-     282             : 
-     283             : template <class T, size_t N>
-     284             : std::enable_if_t<std::is_arithmetic<T>::value, Print &>
-     285             : operator<<(Print &os, const AH::Array<T, N> &a) {
-     286             :     return os << a.slice();
-     287             : }
-     288             : 
-     289             : AH_DIAGNOSTIC_POP()
-
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Containers/BitArray.hpp.func-sort-c.html b/docs/Coverage/src/AH/Containers/BitArray.hpp.func-sort-c.html deleted file mode 100644 index 3921e1bd1..000000000 --- a/docs/Coverage/src/AH/Containers/BitArray.hpp.func-sort-c.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Containers/BitArray.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Containers - BitArray.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:242596.0 %
Date:2019-12-23 15:42:58Functions:1010100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH8BitArrayILh16EE3setEhb2
_ZN2AH8BitArrayILh16EE5clearEh2
_ZN2AH8BitArrayILh16EE3setEh3
_ZN2AH8BitArrayILh16EEC2Ev3
_ZN2AH8BitArrayILh16EE3getEh65
_ZNK2AH8BitArrayILh16EE12getBufferBitEh69
_ZNK2AH8BitArrayILh16EE13getBufferMaskEh69
_ZNK2AH8BitArrayILh16EE14getBufferIndexEh70
_ZNK2AH8BitArrayILh16EE9safeIndexEh70
_ZNK2AH8BitArrayILh16EE15getBufferLengthEv71
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Containers/BitArray.hpp.func.html b/docs/Coverage/src/AH/Containers/BitArray.hpp.func.html deleted file mode 100644 index 211f39eff..000000000 --- a/docs/Coverage/src/AH/Containers/BitArray.hpp.func.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Containers/BitArray.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Containers - BitArray.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:242596.0 %
Date:2019-12-23 15:42:58Functions:1010100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH8BitArrayILh16EE3getEh65
_ZN2AH8BitArrayILh16EE3setEh3
_ZN2AH8BitArrayILh16EE3setEhb2
_ZN2AH8BitArrayILh16EE5clearEh2
_ZN2AH8BitArrayILh16EEC2Ev3
_ZNK2AH8BitArrayILh16EE12getBufferBitEh69
_ZNK2AH8BitArrayILh16EE13getBufferMaskEh69
_ZNK2AH8BitArrayILh16EE14getBufferIndexEh70
_ZNK2AH8BitArrayILh16EE15getBufferLengthEv71
_ZNK2AH8BitArrayILh16EE9safeIndexEh70
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Containers/BitArray.hpp.gcov.html b/docs/Coverage/src/AH/Containers/BitArray.hpp.gcov.html deleted file mode 100644 index fe207120a..000000000 --- a/docs/Coverage/src/AH/Containers/BitArray.hpp.gcov.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Containers/BitArray.hpp - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Containers - BitArray.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:242596.0 %
Date:2019-12-23 15:42:58Functions:1010100.0 %
Legend: Lines: - hit - not hit -
-
- - - - - - - - -

-
          Line data    Source code
-
-       1             : /* ✔ */
-       2             : 
-       3             : #pragma once
-       4             : 
-       5             : #include <AH/Settings/Warnings.hpp>
-       6             : 
-       7             : AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-       8             : 
-       9             : #include <AH/Error/Error.hpp>
-      10             : #include <AH/Settings/NamespaceSettings.hpp>
-      11             : #include <stdint.h>
-      12             : 
-      13             : /// @addtogroup AH_Containers
-      14             : /// @{
-      15             : 
-      16             : BEGIN_AH_NAMESPACE
-      17             : 
-      18             : /**
-      19             :  * @brief   A class for arrays of bits.
-      20             :  * 
-      21             :  * @tparam  N
-      22             :  *          The number of bits.
-      23             :  */
-      24             : template <uint8_t N>
-      25           6 : class BitArray {
-      26             :   public:
-      27             :     /**
-      28             :      * @brief   Get the value of the given bit.
-      29             :      * 
-      30             :      * @param   bitIndex
-      31             :      *          The (zero-based) index of the bit to read.
-      32             :      */
-      33          65 :     bool get(uint8_t bitIndex) {
-      34          65 :         return buffer[getBufferIndex(bitIndex)] & getBufferMask(bitIndex);
-      35             :     }
-      36             : 
-      37             :     /**
-      38             :      * @brief   Set the value of the given bit to 1.
-      39             :      * 
-      40             :      * @param   bitIndex
-      41             :      *          The (zero-based) index of the bit to set.
-      42             :      */
-      43           3 :     void set(uint8_t bitIndex) {
-      44           3 :         buffer[getBufferIndex(bitIndex)] |= getBufferMask(bitIndex);
-      45           3 :     }
-      46             : 
-      47             :     /**
-      48             :      * @brief   Clear the value of the given bit to 0.
-      49             :      * 
-      50             :      * @param   bitIndex
-      51             :      *          The (zero-based) index of the bit to clear.
-      52             :      */
-      53           2 :     void clear(uint8_t bitIndex) {
-      54           2 :         buffer[getBufferIndex(bitIndex)] &= ~getBufferMask(bitIndex);
-      55           2 :     }
-      56             : 
-      57             :     /**
-      58             :      * @brief   Set the value of the given bit to the given state.
-      59             :      * 
-      60             :      * @param   bitIndex
-      61             :      *          The (zero-based) index of the bit to set.
-      62             :      * @param   state
-      63             :      *          The value to set the bit to.
-      64             :      */
-      65           2 :     void set(uint8_t bitIndex, bool state) {
-      66           2 :         state ? set(bitIndex) : clear(bitIndex);
-      67           2 :     }
-      68             : 
-      69             :     /**
-      70             :      * @brief   Check the given byte index, and return it if it is within the
-      71             :      *          bounds of the array, otherwise, throw an error, and return
-      72             :      *          the last valid index.
-      73             :      * 
-      74             :      * @param   byteIndex 
-      75             :      *          The index to check.
-      76             :      */
-      77          70 :     uint8_t safeIndex(uint8_t byteIndex) const {
-      78          70 :         if (byteIndex >= getBufferLength()) {
-      79           1 :             ERROR(F("Error: index out of bounds (")
-      80             :                       << byteIndex << F(", length is ") << getBufferLength()
-      81             :                       << ')',
-      82             :                   0xFFFF);
-      83           0 :             return getBufferLength() - 1;
-      84             :         }
-      85          69 :         return byteIndex;
-      86          70 :     }
-      87             : 
-      88             :     /**
-      89             :      * @brief   Get the byte at the given index.
-      90             :      * 
-      91             :      * This function can be used to quickly access all of the bits, to send 
-      92             :      * them out to a shift register, for example.
-      93             :      * 
-      94             :      * @note    No bounds checking is performed.
-      95             :      * 
-      96             :      * @param   byteIndex
-      97             :      *          The index of the byte within the array. 
-      98             :      */
-      99             :     uint8_t getByte(uint8_t byteIndex) const {
-     100             :         return buffer[byteIndex];
-     101             :         // return buffer[safeIndex(byteIndex)];
-     102             :     }
-     103             : 
-     104             :     /**
-     105             :      * @brief   Get the buffer length in bytes.
-     106             :      */
-     107          71 :     uint8_t getBufferLength() const { return bufferLength; }
-     108             : 
-     109             :   private:
-     110          70 :     uint8_t getBufferIndex(uint8_t bitIndex) const {
-     111          70 :         return safeIndex(bitIndex / 8);
-     112             :     }
-     113          69 :     uint8_t getBufferBit(uint8_t bitIndex) const { return bitIndex % 8; }
-     114          69 :     uint8_t getBufferMask(uint8_t bitIndex) const {
-     115          69 :         return 1 << getBufferBit(bitIndex);
-     116             :     }
-     117             : 
-     118             :     constexpr static uint8_t bufferLength = (uint8_t)((N + 7) / 8);
-     119           6 :     uint8_t buffer[bufferLength] = {};
-     120             : };
-     121             : 
-     122             : END_AH_NAMESPACE
-     123             : 
-     124             : /// @}
-     125             : 
-     126             : AH_DIAGNOSTIC_POP()
-
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Containers/LinkedList.hpp.func-sort-c.html b/docs/Coverage/src/AH/Containers/LinkedList.hpp.func-sort-c.html deleted file mode 100644 index e08a1221e..000000000 --- a/docs/Coverage/src/AH/Containers/LinkedList.hpp.func-sort-c.html +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Containers/LinkedList.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Containers - LinkedList.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:9696100.0 %
Date:2019-12-23 15:42:58Functions:495196.1 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN14DoublyLinkableI8TestNodeED0Ev0
_ZN14DoublyLinkableIN2AH17ExtendedIOElementEED0Ev0
_ZN16DoublyLinkedListI8TestNodeE4rendEv1
_ZN16DoublyLinkedListI8TestNodeE6rbeginEv1
_ZNK16DoublyLinkedListI8TestNodeE3endEv1
_ZNK16DoublyLinkedListI8TestNodeE4rendEv1
_ZNK16DoublyLinkedListI8TestNodeE5beginEv1
_ZNK16DoublyLinkedListI8TestNodeE6rbeginEv1
_ZN16DoublyLinkedListI8TestNodeE13node_iteratorIKS0_EC2EPS3_2
_ZN16DoublyLinkedListI8TestNodeE21reverse_node_iteratorIKS0_EC2EPS3_2
_ZN16DoublyLinkedListI8TestNodeE21reverse_node_iteratorIS0_EC2EPS0_2
_ZN16DoublyLinkedListI8TestNodeE18node_iterator_baseIKS0_EC2EPS3_4
_ZN16DoublyLinkedListI8TestNodeE13node_iteratorIKS0_EppEv5
_ZN16DoublyLinkedListI8TestNodeE21reverse_node_iteratorIKS0_EppEv5
_ZN16DoublyLinkedListI8TestNodeE21reverse_node_iteratorIS0_EppEv5
_ZN16DoublyLinkedListI8TestNodeE8moveDownEPS0_5
_ZN16DoublyLinkedListI8TestNodeE6removeEPS0_6
_ZNK16DoublyLinkedListI8TestNodeE18node_iterator_baseIKS0_EdeEv10
_ZNK16DoublyLinkedListI8TestNodeE18node_iterator_baseIKS0_EneERKS4_12
_ZNK16DoublyLinkedListI8TestNodeE7getLastEv12
_ZN16DoublyLinkedListI8TestNodeE12insertSortedIZN45DoublyLinkedList_insertSortedGreaterThan_Test8TestBodyEvE3$_0EEvPS0_T_13
_ZNK16DoublyLinkedListI8TestNodeE8getFirstEv13
_ZN16DoublyLinkedListI8TestNodeE12couldContainEPS0_15
_ZN16DoublyLinkedListI8TestNodeE12insertSortedEPS0_22
_ZN16DoublyLinkedListI8TestNodeE12insertSortedIZNS1_12insertSortedEPS0_EUlRS0_S4_E_EEvS3_T_22
_ZN16DoublyLinkedListI8TestNodeEC2Ev22
_ZN16DoublyLinkedListIN2AH17ExtendedIOElementEE6appendEPS1_25
_ZN16DoublyLinkedListIN2AH17ExtendedIOElementEE6removeEPS1_25
_ZN14DoublyLinkableIN2AH17ExtendedIOElementEEC2Ev26
_ZN14DoublyLinkableIN2AH17ExtendedIOElementEED2Ev26
_ZN16DoublyLinkedListI8TestNodeE12insertBeforeEPS0_S2_27
_ZN16DoublyLinkedListI8TestNodeE12insertBeforeERS0_S2_27
_ZN16DoublyLinkedListI8TestNodeE6appendERS0_28
_ZN16DoublyLinkedListIN2AH17ExtendedIOElementEE13node_iteratorIS1_EppEv29
_ZN16DoublyLinkedListI8TestNodeE3endEv39
_ZN16DoublyLinkedListI8TestNodeE5beginEv39
_ZZN16DoublyLinkedListI8TestNodeE12insertSortedEPS0_ENKUlRS0_S3_E_clES3_S3_74
_ZN16DoublyLinkedListI8TestNodeE13node_iteratorIS0_EC2EPS0_78
_ZN16DoublyLinkedListI8TestNodeE18node_iterator_baseIS0_EC2EPS0_80
_ZN16DoublyLinkedListI8TestNodeE6appendEPS0_88
_ZN14DoublyLinkableI8TestNodeEC2Ev112
_ZN14DoublyLinkableI8TestNodeED2Ev112
_ZN16DoublyLinkedListI8TestNodeE13node_iteratorIS0_EppEv144
_ZN16DoublyLinkedListIN2AH17ExtendedIOElementEE3endEv156
_ZN16DoublyLinkedListIN2AH17ExtendedIOElementEE5beginEv156
_ZNK16DoublyLinkedListIN2AH17ExtendedIOElementEE18node_iterator_baseIS1_EdeEv178
_ZNK16DoublyLinkedListIN2AH17ExtendedIOElementEE18node_iterator_baseIS1_EneERKS4_185
_ZNK16DoublyLinkedListI8TestNodeE18node_iterator_baseIS0_EneERKS3_189
_ZNK16DoublyLinkedListI8TestNodeE18node_iterator_baseIS0_EdeEv199
_ZN16DoublyLinkedListIN2AH17ExtendedIOElementEE13node_iteratorIS1_EC2EPS1_312
_ZN16DoublyLinkedListIN2AH17ExtendedIOElementEE18node_iterator_baseIS1_EC2EPS1_312
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Containers/LinkedList.hpp.func.html b/docs/Coverage/src/AH/Containers/LinkedList.hpp.func.html deleted file mode 100644 index 3822d5b4c..000000000 --- a/docs/Coverage/src/AH/Containers/LinkedList.hpp.func.html +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Containers/LinkedList.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Containers - LinkedList.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:9696100.0 %
Date:2019-12-23 15:42:58Functions:495196.1 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN14DoublyLinkableI8TestNodeEC2Ev112
_ZN14DoublyLinkableI8TestNodeED0Ev0
_ZN14DoublyLinkableI8TestNodeED2Ev112
_ZN14DoublyLinkableIN2AH17ExtendedIOElementEEC2Ev26
_ZN14DoublyLinkableIN2AH17ExtendedIOElementEED0Ev0
_ZN14DoublyLinkableIN2AH17ExtendedIOElementEED2Ev26
_ZN16DoublyLinkedListI8TestNodeE12couldContainEPS0_15
_ZN16DoublyLinkedListI8TestNodeE12insertBeforeEPS0_S2_27
_ZN16DoublyLinkedListI8TestNodeE12insertBeforeERS0_S2_27
_ZN16DoublyLinkedListI8TestNodeE12insertSortedEPS0_22
_ZN16DoublyLinkedListI8TestNodeE12insertSortedIZN45DoublyLinkedList_insertSortedGreaterThan_Test8TestBodyEvE3$_0EEvPS0_T_13
_ZN16DoublyLinkedListI8TestNodeE12insertSortedIZNS1_12insertSortedEPS0_EUlRS0_S4_E_EEvS3_T_22
_ZN16DoublyLinkedListI8TestNodeE13node_iteratorIKS0_EC2EPS3_2
_ZN16DoublyLinkedListI8TestNodeE13node_iteratorIKS0_EppEv5
_ZN16DoublyLinkedListI8TestNodeE13node_iteratorIS0_EC2EPS0_78
_ZN16DoublyLinkedListI8TestNodeE13node_iteratorIS0_EppEv144
_ZN16DoublyLinkedListI8TestNodeE18node_iterator_baseIKS0_EC2EPS3_4
_ZN16DoublyLinkedListI8TestNodeE18node_iterator_baseIS0_EC2EPS0_80
_ZN16DoublyLinkedListI8TestNodeE21reverse_node_iteratorIKS0_EC2EPS3_2
_ZN16DoublyLinkedListI8TestNodeE21reverse_node_iteratorIKS0_EppEv5
_ZN16DoublyLinkedListI8TestNodeE21reverse_node_iteratorIS0_EC2EPS0_2
_ZN16DoublyLinkedListI8TestNodeE21reverse_node_iteratorIS0_EppEv5
_ZN16DoublyLinkedListI8TestNodeE3endEv39
_ZN16DoublyLinkedListI8TestNodeE4rendEv1
_ZN16DoublyLinkedListI8TestNodeE5beginEv39
_ZN16DoublyLinkedListI8TestNodeE6appendEPS0_88
_ZN16DoublyLinkedListI8TestNodeE6appendERS0_28
_ZN16DoublyLinkedListI8TestNodeE6rbeginEv1
_ZN16DoublyLinkedListI8TestNodeE6removeEPS0_6
_ZN16DoublyLinkedListI8TestNodeE8moveDownEPS0_5
_ZN16DoublyLinkedListI8TestNodeEC2Ev22
_ZN16DoublyLinkedListIN2AH17ExtendedIOElementEE13node_iteratorIS1_EC2EPS1_312
_ZN16DoublyLinkedListIN2AH17ExtendedIOElementEE13node_iteratorIS1_EppEv29
_ZN16DoublyLinkedListIN2AH17ExtendedIOElementEE18node_iterator_baseIS1_EC2EPS1_312
_ZN16DoublyLinkedListIN2AH17ExtendedIOElementEE3endEv156
_ZN16DoublyLinkedListIN2AH17ExtendedIOElementEE5beginEv156
_ZN16DoublyLinkedListIN2AH17ExtendedIOElementEE6appendEPS1_25
_ZN16DoublyLinkedListIN2AH17ExtendedIOElementEE6removeEPS1_25
_ZNK16DoublyLinkedListI8TestNodeE18node_iterator_baseIKS0_EdeEv10
_ZNK16DoublyLinkedListI8TestNodeE18node_iterator_baseIKS0_EneERKS4_12
_ZNK16DoublyLinkedListI8TestNodeE18node_iterator_baseIS0_EdeEv199
_ZNK16DoublyLinkedListI8TestNodeE18node_iterator_baseIS0_EneERKS3_189
_ZNK16DoublyLinkedListI8TestNodeE3endEv1
_ZNK16DoublyLinkedListI8TestNodeE4rendEv1
_ZNK16DoublyLinkedListI8TestNodeE5beginEv1
_ZNK16DoublyLinkedListI8TestNodeE6rbeginEv1
_ZNK16DoublyLinkedListI8TestNodeE7getLastEv12
_ZNK16DoublyLinkedListI8TestNodeE8getFirstEv13
_ZNK16DoublyLinkedListIN2AH17ExtendedIOElementEE18node_iterator_baseIS1_EdeEv178
_ZNK16DoublyLinkedListIN2AH17ExtendedIOElementEE18node_iterator_baseIS1_EneERKS4_185
_ZZN16DoublyLinkedListI8TestNodeE12insertSortedEPS0_ENKUlRS0_S3_E_clES3_S3_74
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Containers/LinkedList.hpp.gcov.html b/docs/Coverage/src/AH/Containers/LinkedList.hpp.gcov.html deleted file mode 100644 index 0d0d36e70..000000000 --- a/docs/Coverage/src/AH/Containers/LinkedList.hpp.gcov.html +++ /dev/null @@ -1,396 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Containers/LinkedList.hpp - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Containers - LinkedList.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:9696100.0 %
Date:2019-12-23 15:42:58Functions:495196.1 %
Legend: Lines: - hit - not hit -
-
- - - - - - - - -

-
          Line data    Source code
-
-       1             : /* ✔ */
-       2             : 
-       3             : #pragma once
-       4             : 
-       5             : #include <AH/Settings/Warnings.hpp>
-       6             : 
-       7             : AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-       8             : 
-       9             : #include <AH/Debug/Debug.hpp>
-      10             : #include <AH/Math/MinMaxFix.hpp>
-      11             : #include <stdlib.h>
-      12             : 
-      13             : #ifndef __AVR__
-      14             : #include <iterator>
-      15             : #endif
-      16             : 
-      17             : /// @addtogroup AH_Containers
-      18             : /// @{
-      19             : 
-      20             : /**
-      21             :  * @brief   A class for doubly linked lists.
-      22             :  * 
-      23             :  * @tparam  Node
-      24             :  *          The type of the nodes of the list.
-      25             :  */
-      26             : template <class Node>
-      27          22 : class DoublyLinkedList {
-      28             :   public:
-      29             :     /// Base class for doubly linked list iterators
-      30             :     template <class INode>
-      31             :     class node_iterator_base {
-      32             :       public:
-      33         396 :         node_iterator_base(INode *node) : node(node) {}
-      34             : 
-      35         386 :         bool operator!=(const node_iterator_base &rhs) const {
-      36         386 :             return node != rhs.node;
-      37             :         }
-      38             : 
-      39         387 :         INode &operator*() const {
-      40             :             // TODO: check node != nullptr
-      41         387 :             return *node;
-      42             :         }
-      43             : 
-      44             :       protected:
-      45             :         INode *node;
-      46             :     };
-      47             : 
-      48             :     /// Forward bidirectional doubly linked list iterator
-      49             :     template <class INode>
-      50             :     class node_iterator : public node_iterator_base<INode> {
-      51             :       public:
-      52         392 :         node_iterator(INode *node) : node_iterator_base<INode>(node) {}
-      53             : 
-      54             : #ifndef __AVR__
-      55             :         using difference_type = void;
-      56             :         using value_type = INode;
-      57             :         using pointer = INode *;
-      58             :         using reference = INode &;
-      59             :         using iterator_category = std::bidirectional_iterator_tag;
-      60             : #endif
-      61             : 
-      62             :         /// Prefix increment operator
-      63         178 :         node_iterator &operator++() {
-      64             :             // TODO: check node != nullptr
-      65         178 :             this->node = this->node->next;
-      66         178 :             return *this;
-      67             :         }
-      68             : 
-      69             :         /// Prefix decrement operator
-      70             :         node_iterator &operator--() {
-      71             :             // TODO: check node != nullptr
-      72             :             this->node = this->node->previous;
-      73             :             return *this;
-      74             :         }
-      75             :     };
-      76             : 
-      77             :     /// Reverse bidirectional doubly linked list iterator
-      78             :     template <class INode>
-      79             :     class reverse_node_iterator : public node_iterator_base<INode> {
-      80             :       public:
-      81           4 :         reverse_node_iterator(INode *node) : node_iterator_base<INode>(node) {}
-      82             : 
-      83             : #ifndef __AVR__
-      84             :         using difference_type = void;
-      85             :         using value_type = INode;
-      86             :         using pointer = INode *;
-      87             :         using reference = INode &;
-      88             :         using iterator_category = std::bidirectional_iterator_tag;
-      89             : #endif
-      90             : 
-      91             :         /// Prefix increment operator
-      92          10 :         reverse_node_iterator &operator++() {
-      93             :             // TODO: check node != nullptr
-      94          10 :             this->node = this->node->previous;
-      95          10 :             return *this;
-      96             :         }
-      97             : 
-      98             :         /// Prefix decrement operator
-      99             :         reverse_node_iterator &operator--() {
-     100             :             // TODO: check node != nullptr
-     101             :             this->node = this->node->next;
-     102             :             return *this;
-     103             :         }
-     104             :     };
-     105             : 
-     106             :     using iterator = node_iterator<Node>;
-     107             :     using const_iterator = node_iterator<const Node>;
-     108             :     using reverse_iterator = reverse_node_iterator<Node>;
-     109             :     using const_reverse_iterator = reverse_node_iterator<const Node>;
-     110             : 
-     111             :     /**
-     112             :      * @brief   Append a node to a linked list.
-     113             :      * 
-     114             :      * @param   node
-     115             :      *          A pointer to the node to be appended.
-     116             :      */
-     117         113 :     void append(Node *node) {
-     118         113 :         if (first == nullptr)
-     119          40 :             first = node;
-     120         113 :         node->previous = last;
-     121         113 :         if (node->previous != nullptr)
-     122          73 :             node->previous->next = node;
-     123         113 :         last = node;
-     124         113 :         node->next = nullptr;
-     125         113 :     }
-     126             : 
-     127             :     /**
-     128             :      * @brief   Append a node to a linked list.
-     129             :      * 
-     130             :      * @param   node
-     131             :      *          A reference to the node to be appended.
-     132             :      */
-     133          28 :     void append(Node &node) { append(&node); }
-     134             : 
-     135             :     /**
-     136             :      * @brief   Insert a node before another node.
-     137             :      * 
-     138             :      * @param   toBeInserted
-     139             :      *          The new node to be inserted.
-     140             :      * @param   before
-     141             :      *          The node to insert the new node before. It must be in the list
-     142             :      *          already.
-     143             :      */
-     144          27 :     void insertBefore(Node *toBeInserted, Node *before) {
-     145          27 :         if (before == first)
-     146           7 :             first = toBeInserted;
-     147             :         else
-     148          20 :             before->previous->next = toBeInserted;
-     149          27 :         toBeInserted->previous = before->previous;
-     150          27 :         toBeInserted->next = before;
-     151          27 :         before->previous = toBeInserted;
-     152          27 :     }
-     153             : 
-     154             :     /// @see    insertBefore(Node *, Node *)
-     155          27 :     void insertBefore(Node &toBeInserted, Node &before) {
-     156          27 :         insertBefore(&toBeInserted, &before);
-     157          27 :     }
-     158             : 
-     159             :     /**
-     160             :      * @brief   Insert a new node at the correct location into a sorted list.
-     161             :      * 
-     162             :      * @param   node 
-     163             :      *          The new node to be inserted.
-     164             :      * @param   cmp
-     165             :      *          The function to order the nodes.
-     166             :      * @tparam  Compare
-     167             :      *          A functor that compares two Nodes and returns a boolean.
-     168             :      */
-     169             :     template <class Compare>
-     170          35 :     void insertSorted(Node *node, Compare cmp) {
-     171          35 :         iterator it = this->begin();
-     172          35 :         iterator end = this->end();
-     173         139 :         while (it != end) {
-     174         129 :             if (cmp(*node, *it)) {
-     175          25 :                 insertBefore(*node, *it);
-     176          25 :                 return;
-     177             :             }
-     178         104 :             ++it;
-     179             :         }
-     180          10 :         append(node);
-     181          35 :     }
-     182             : 
-     183             :     /**
-     184             :      * @brief   Insert a new node at the correct location into a sorted list, 
-     185             :      *          using `operator<`.
-     186             :      * 
-     187             :      * @param   node 
-     188             :      *          The new node to be inserted.
-     189             :      */
-     190          22 :     void insertSorted(Node *node) {
-     191          96 :         insertSorted(node, [](Node &lhs, Node &rhs) { return lhs < rhs; });
-     192          22 :     }
-     193             : 
-     194             :     /**
-     195             :      * @brief   Remove a node from the linked list.
-     196             :      * 
-     197             :      * @param   node
-     198             :      *          A pointer to the node to be removed.
-     199             :      */
-     200          31 :     void remove(Node *node) {
-     201          31 :         if (node->previous != nullptr)
-     202          11 :             node->previous->next = node->next;
-     203          31 :         if (node == last)
-     204          27 :             last = node->previous;
-     205          31 :         if (node->next != nullptr)
-     206           4 :             node->next->previous = node->previous;
-     207          31 :         if (node == first)
-     208          20 :             first = node->next;
-     209          31 :         node->previous = nullptr;
-     210          31 :         node->next = nullptr;
-     211          31 :     }
-     212             : 
-     213             :     /**
-     214             :      * @brief   Remove a node from the linked list.
-     215             :      * 
-     216             :      * @param   node
-     217             :      *          A reference to the node to be removed.
-     218             :      */
-     219             :     void remove(Node &node) { remove(&node); }
-     220             : 
-     221             :     /**
-     222             :      * @brief   Move down the given node in the linked list.
-     223             :      * 
-     224             :      * For example: moving down node `C`:
-     225             :      * ```
-     226             :      * Before:  ... → A → B → C → D → ...
-     227             :      * After:   ... → A → C → B → D → ...
-     228             :      * ```
-     229             :      * @param   node
-     230             :      *          A pointer to the node to be moved down.
-     231             :      */
-     232           5 :     void moveDown(Node *node) {
-     233           5 :         Node *nodeB = node->previous;
-     234           5 :         if (nodeB == nullptr) // Can't move first node further down
-     235           2 :             return;
-     236           3 :         Node *nodeA = nodeB->previous;
-     237           3 :         Node *nodeD = node->next;
-     238             : 
-     239           3 :         if (nodeA != nullptr)
-     240           2 :             nodeA->next = node;
-     241             :         else
-     242           1 :             first = node;
-     243           3 :         nodeB->next = nodeD;
-     244           3 :         nodeB->previous = node;
-     245           3 :         node->next = nodeB;
-     246           3 :         node->previous = nodeA;
-     247           3 :         if (nodeD != nullptr)
-     248           2 :             nodeD->previous = nodeB;
-     249             :         else
-     250           1 :             last = nodeB;
-     251           5 :     }
-     252             : 
-     253             :     /** 
-     254             :      * @brief   Check if the linked list could contain the given node.
-     255             :      * 
-     256             :      * @retval  true
-     257             :      *          The given node is part of some linked list or it is the first
-     258             :      *          node of the given linked list.  
-     259             :      *          It could be that the node is part of a different linked list
-     260             :      *          if it was ever added to a different list.
-     261             :      *          However, **if this function returns true and the node was never
-     262             :      *          added to another linked list, it means that this linked list 
-     263             :      *          contains the given node**.
-     264             :      * @retval  false
-     265             :      *          The given node is not part of any linked list, or it is the 
-     266             :      *          only element of a different linked list.
-     267             :      */
-     268          15 :     bool couldContain(Node *node) {
-     269          30 :         return node && (node == first || node->next != nullptr ||
-     270          11 :                         node->previous != nullptr);
-     271             :     }
-     272             : 
-     273         195 :     iterator begin() { return {first}; }
-     274         195 :     iterator end() { return {nullptr}; }
-     275             : 
-     276           1 :     const_iterator begin() const { return {first}; }
-     277           1 :     const_iterator end() const { return {nullptr}; }
-     278             : 
-     279           1 :     reverse_iterator rbegin() { return {last}; }
-     280           1 :     reverse_iterator rend() { return {nullptr}; }
-     281             : 
-     282           1 :     const_reverse_iterator rbegin() const { return {last}; }
-     283           1 :     const_reverse_iterator rend() const { return {nullptr}; }
-     284             : 
-     285             :     /// Get a pointer to the first node.
-     286          13 :     Node *getFirst() const { return first; }
-     287             :     /// Get a pointer to the last node.
-     288          12 :     Node *getLast() const { return last; }
-     289             : 
-     290             :   private:
-     291          22 :     Node *first = nullptr;
-     292          22 :     Node *last = nullptr;
-     293             : };
-     294             : 
-     295             : /**
-     296             :  * @brief   A class that can be inherited from to allow inserting into a 
-     297             :  *          DoublyLinkedList.
-     298             :  * @tparam  Node
-     299             :  *          The type of the nodes of the list.
-     300             :  */
-     301             : template <class Node>
-     302         138 : class DoublyLinkable {
-     303             :   protected:
-     304             :     friend class DoublyLinkedList<Node>;
-     305         138 :     Node *next = nullptr;
-     306         138 :     Node *previous = nullptr;
-     307         138 :     virtual ~DoublyLinkable() = default;
-     308             : };
-     309             : 
-     310             : /// @}
-     311             : 
-     312             : AH_DIAGNOSTIC_POP()
-
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Containers/UniquePtr.hpp.func-sort-c.html b/docs/Coverage/src/AH/Containers/UniquePtr.hpp.func-sort-c.html deleted file mode 100644 index ff0f0c197..000000000 --- a/docs/Coverage/src/AH/Containers/UniquePtr.hpp.func-sort-c.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Containers/UniquePtr.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Containers - UniquePtr.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:222395.7 %
Date:2019-12-23 15:42:58Functions:88100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH10MakeUniqueI9TestClassJiEEENS_9UniquePtrIT_EEDpOT0_1
_ZN2AH9UniquePtrI9TestClassEC2IS1_EEONS0_IT_EE1
_ZN2AH9UniquePtrI9TestClassEaSEOS2_2
_ZN2AH9UniquePtrI9TestClassEptEv2
_ZN2AH9UniquePtrI9TestClassE7releaseEv4
_ZN2AH9UniquePtrI9TestClassE5resetEPS1_6
_ZN2AH9UniquePtrI9TestClassEC2EPS1_7
_ZN2AH9UniquePtrI9TestClassED2Ev8
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Containers/UniquePtr.hpp.func.html b/docs/Coverage/src/AH/Containers/UniquePtr.hpp.func.html deleted file mode 100644 index 5cddfcbaa..000000000 --- a/docs/Coverage/src/AH/Containers/UniquePtr.hpp.func.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Containers/UniquePtr.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Containers - UniquePtr.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:222395.7 %
Date:2019-12-23 15:42:58Functions:88100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH10MakeUniqueI9TestClassJiEEENS_9UniquePtrIT_EEDpOT0_1
_ZN2AH9UniquePtrI9TestClassE5resetEPS1_6
_ZN2AH9UniquePtrI9TestClassE7releaseEv4
_ZN2AH9UniquePtrI9TestClassEC2EPS1_7
_ZN2AH9UniquePtrI9TestClassEC2IS1_EEONS0_IT_EE1
_ZN2AH9UniquePtrI9TestClassED2Ev8
_ZN2AH9UniquePtrI9TestClassEaSEOS2_2
_ZN2AH9UniquePtrI9TestClassEptEv2
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Containers/UniquePtr.hpp.gcov.html b/docs/Coverage/src/AH/Containers/UniquePtr.hpp.gcov.html deleted file mode 100644 index 8f42a1521..000000000 --- a/docs/Coverage/src/AH/Containers/UniquePtr.hpp.gcov.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Containers/UniquePtr.hpp - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Containers - UniquePtr.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:222395.7 %
Date:2019-12-23 15:42:58Functions:88100.0 %
Legend: Lines: - hit - not hit -
-
- - - - - - - - -

-
          Line data    Source code
-
-       1             : #pragma once
-       2             : 
-       3             : #include <AH/Settings/Warnings.hpp>
-       4             : AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-       5             : 
-       6             : #include <AH/STL/type_traits>
-       7             : #include <AH/STL/utility> // std::forward
-       8             : 
-       9             : BEGIN_AH_NAMESPACE
-      10             : 
-      11             : /// @addtogroup    AH_Containers
-      12             : /// @{
-      13             : 
-      14             : /**
-      15             :  * @brief   Very basic smart pointer. Doesn't support array types.
-      16             :  * 
-      17             :  * @tparam  T
-      18             :  *          The type of the pointee.
-      19             :  */
-      20             : template <class T>
-      21             : class UniquePtr {
-      22             :   public:
-      23             :     UniquePtr() = default;
-      24           7 :     explicit UniquePtr(T *p) : p(p) {}
-      25             :     UniquePtr(const UniquePtr &) = delete;
-      26             :     template <class U>
-      27           1 :     UniquePtr(UniquePtr<U> &&r) {
-      28           1 :         reset(r.release());
-      29           1 :     }
-      30             : 
-      31           8 :     ~UniquePtr() { delete p; }
-      32             : 
-      33             :     UniquePtr &operator=(const UniquePtr &) = delete;
-      34           2 :     UniquePtr<T> &operator=(UniquePtr<T> &&r) {
-      35           2 :         reset(r.release());
-      36           2 :         return *this;
-      37             :     }
-      38             : 
-      39           6 :     void reset(T *newP = nullptr) {
-      40           6 :         T *old_ptr = p;
-      41           6 :         p = newP;
-      42           6 :         delete old_ptr;
-      43           6 :     }
-      44             : 
-      45           4 :     T *release() {
-      46           4 :         T *old_ptr = p;
-      47           4 :         p = nullptr;
-      48           8 :         return old_ptr;
-      49           4 :     }
-      50             : 
-      51             :     explicit operator bool() const { return p != nullptr; }
-      52             : 
-      53             :     T *get() { return p; }
-      54             :     const T *get() const { return p; }
-      55             : 
-      56           2 :     T *operator->() { return p; }
-      57             :     const T *operator->() const { return p; }
-      58             :     T &operator*() { return *p; }
-      59             :     const T &operator*() const { return *p; }
-      60             : 
-      61             :   private:
-      62           1 :     T *p = nullptr;
-      63             : };
-      64             : 
-      65             : template <typename T, typename... Args>
-      66           1 : UniquePtr<T> MakeUnique(Args &&... args) {
-      67           1 :     return UniquePtr<T>(new T(std::forward<Args>(args)...));
-      68           0 : }
-      69             : 
-      70             : /// @}
-      71             : 
-      72             : END_AH_NAMESPACE
-      73             : 
-      74             : AH_DIAGNOSTIC_POP()
-
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Containers/index-sort-f.html b/docs/Coverage/src/AH/Containers/index-sort-f.html deleted file mode 100644 index 01dd63368..000000000 --- a/docs/Coverage/src/AH/Containers/index-sort-f.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Containers - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/ContainersHitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:31932199.4 %
Date:2019-12-23 15:42:58Functions:21621998.6 %
Legend: Rating: - low: < 75 % - medium: >= 75 % - high: >= 90 % -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
LinkedList.hpp -
100.0%
-
100.0 %96 / 9696.1 %49 / 51
Array.hpp -
100.0%
-
100.0 %139 / 13999.2 %132 / 133
UniquePtr.hpp -
95.7%95.7%
-
95.7 %22 / 23100.0 %8 / 8
BitArray.hpp -
96.0%96.0%
-
96.0 %24 / 25100.0 %10 / 10
ArrayHelpers.hpp -
100.0%
-
100.0 %38 / 38100.0 %17 / 17
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Containers/index-sort-l.html b/docs/Coverage/src/AH/Containers/index-sort-l.html deleted file mode 100644 index 0cccf5831..000000000 --- a/docs/Coverage/src/AH/Containers/index-sort-l.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Containers - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/ContainersHitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:31932199.4 %
Date:2019-12-23 15:42:58Functions:21621998.6 %
Legend: Rating: - low: < 75 % - medium: >= 75 % - high: >= 90 % -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
UniquePtr.hpp -
95.7%95.7%
-
95.7 %22 / 23100.0 %8 / 8
BitArray.hpp -
96.0%96.0%
-
96.0 %24 / 25100.0 %10 / 10
ArrayHelpers.hpp -
100.0%
-
100.0 %38 / 38100.0 %17 / 17
LinkedList.hpp -
100.0%
-
100.0 %96 / 9696.1 %49 / 51
Array.hpp -
100.0%
-
100.0 %139 / 13999.2 %132 / 133
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Containers/index.html b/docs/Coverage/src/AH/Containers/index.html deleted file mode 100644 index 954808876..000000000 --- a/docs/Coverage/src/AH/Containers/index.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Containers - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/ContainersHitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:31932199.4 %
Date:2019-12-23 15:42:58Functions:21621998.6 %
Legend: Rating: - low: < 75 % - medium: >= 75 % - high: >= 90 % -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
Array.hpp -
100.0%
-
100.0 %139 / 13999.2 %132 / 133
ArrayHelpers.hpp -
100.0%
-
100.0 %38 / 38100.0 %17 / 17
BitArray.hpp -
96.0%96.0%
-
96.0 %24 / 25100.0 %10 / 10
LinkedList.hpp -
100.0%
-
100.0 %96 / 9696.1 %49 / 51
UniquePtr.hpp -
95.7%95.7%
-
95.7 %22 / 23100.0 %8 / 8
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Error/Error.hpp.func-sort-c.html b/docs/Coverage/src/AH/Error/Error.hpp.func-sort-c.html deleted file mode 100644 index ab6c2d87e..000000000 --- a/docs/Coverage/src/AH/Error/Error.hpp.func-sort-c.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Error/Error.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Error - Error.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:55100.0 %
Date:2019-12-23 15:42:58Functions:4580.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH14ErrorExceptionD0Ev0
_ZNK2AH14ErrorException4whatEv1
_ZNK2AH14ErrorException12getErrorCodeEv6
_ZN2AH14ErrorExceptionC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi12
_ZN2AH14ErrorExceptionD2Ev12
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Error/Error.hpp.func.html b/docs/Coverage/src/AH/Error/Error.hpp.func.html deleted file mode 100644 index d9ebb676d..000000000 --- a/docs/Coverage/src/AH/Error/Error.hpp.func.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Error/Error.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Error - Error.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:55100.0 %
Date:2019-12-23 15:42:58Functions:4580.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH14ErrorExceptionC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi12
_ZN2AH14ErrorExceptionD0Ev0
_ZN2AH14ErrorExceptionD2Ev12
_ZNK2AH14ErrorException12getErrorCodeEv6
_ZNK2AH14ErrorException4whatEv1
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Error/Error.hpp.gcov.html b/docs/Coverage/src/AH/Error/Error.hpp.gcov.html deleted file mode 100644 index 2aa735a4b..000000000 --- a/docs/Coverage/src/AH/Error/Error.hpp.gcov.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Error/Error.hpp - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Error - Error.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:55100.0 %
Date:2019-12-23 15:42:58Functions:4580.0 %
Legend: Lines: - hit - not hit -
-
- - - - - - - - -

-
          Line data    Source code
-
-       1             : #pragma once
-       2             : 
-       3             : /// @file
-       4             : 
-       5             : #include <AH/Settings/Warnings.hpp>
-       6             : AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-       7             : 
-       8             : #include <AH/Debug/Debug.hpp>
-       9             : 
-      10             : #ifdef ARDUINO // ------------------------------------------------------ ARDUINO
-      11             : 
-      12             : BEGIN_AH_NAMESPACE
-      13             : 
-      14             : /// Function that executes and loops forever, blinking the built-in LED when a
-      15             : /// fatal error is encountered.
-      16             : extern void fatalErrorExit() __attribute__((noreturn));
-      17             : 
-      18             : END_AH_NAMESPACE
-      19             : 
-      20             : #ifdef FATAL_ERRORS
-      21             : 
-      22             : #define ERROR(msg, errc)                                                       \
-      23             :     do {                                                                       \
-      24             :         USING_AH_NAMESPACE;                                                    \
-      25             :         DEBUGFN(msg << " (0x" << hex << uppercase << errc << dec               \
-      26             :                     << nouppercase << ')');                                    \
-      27             :         fatalErrorExit();                                                      \
-      28             :     } while (0)
-      29             : 
-      30             : #else
-      31             : 
-      32             : /// Print the error message and error code, and stop the execution if
-      33             : /// `FATAL_ERRORS` are enabled. Otherwise just prints the error.
-      34             : ///
-      35             : /// @param  msg
-      36             : ///         The information to print, can contain streaming operators (`<<`) to
-      37             : ///         print multiple things.
-      38             : /// @param  errc
-      39             : ///         A unique error code.
-      40             : ///
-      41             : /// @ingroup    AH_Error
-      42             : #define ERROR(msg, errc)                                                       \
-      43             :     do {                                                                       \
-      44             :         DEBUGFN(msg << " (0x" << hex << uppercase << errc << dec               \
-      45             :                     << nouppercase << ')');                                    \
-      46             :     } while (0)
-      47             : 
-      48             : #endif
-      49             : 
-      50             : /// Print the error message and error code, and stop the execution.
-      51             : /// Doesn't depend on `FATAL_ERRORS`, it always stops the execution.
-      52             : ///
-      53             : /// @param  msg
-      54             : ///         The information to print, can contain streaming operators (`<<`) to
-      55             : ///         print multiple things.
-      56             : /// @param  errc
-      57             : ///         A unique error code.
-      58             : ///
-      59             : /// @ingroup    AH_Error
-      60             : #define FATAL_ERROR(msg, errc)                                                 \
-      61             :     do {                                                                       \
-      62             :         USING_AH_NAMESPACE;                                                    \
-      63             :         DEBUGFN(F("Fatal Error: ") << msg << " (0x" << hex << uppercase        \
-      64             :                                    << errc << dec << nouppercase << ')');      \
-      65             :         fatalErrorExit();                                                      \
-      66             :     } while (0)
-      67             : 
-      68             : #else // ----------------------------------------------------------------- TESTS
-      69             : 
-      70             : #include <exception>
-      71             : #include <sstream>
-      72             : 
-      73             : BEGIN_AH_NAMESPACE
-      74             : 
-      75          12 : class ErrorException : public std::exception {
-      76             :   public:
-      77          12 :     ErrorException(const std::string message, int errorCode)
-      78          24 :         : message(std::move(message)), errorCode(errorCode) {}
-      79           1 :     const char *what() const throw() override { return message.c_str(); }
-      80           6 :     int getErrorCode() const { return errorCode; }
-      81             : 
-      82             :   private:
-      83             :     const std::string message;
-      84             :     const int errorCode;
-      85             : };
-      86             : 
-      87             : END_AH_NAMESPACE
-      88             : 
-      89             : #define ERROR(msg, errc)                                                       \
-      90             :     do {                                                                       \
-      91             :         USING_AH_NAMESPACE;                                                    \
-      92             :         std::ostringstream s;                                                  \
-      93             :         s << DEBUG_FUNC_LOCATION << msg;                                       \
-      94             :         throw ErrorException(s.str(), errc);                                   \
-      95             :     } while (0)
-      96             : 
-      97             : #define FATAL_ERROR(msg, errc)                                                 \
-      98             :     do {                                                                       \
-      99             :         USING_AH_NAMESPACE;                                                    \
-     100             :         std::ostringstream s;                                                  \
-     101             :         s << DEBUG_FUNC_LOCATION << msg;                                       \
-     102             :         throw ErrorException(s.str(), errc);                                   \
-     103             :     } while (0)
-     104             : 
-     105             : #endif
-     106             : 
-     107             : AH_DIAGNOSTIC_POP()
-
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Error/index-sort-f.html b/docs/Coverage/src/AH/Error/index-sort-f.html deleted file mode 100644 index 3ae7d1d3b..000000000 --- a/docs/Coverage/src/AH/Error/index-sort-f.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Error - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/ErrorHitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:55100.0 %
Date:2019-12-23 15:42:58Functions:4580.0 %
Legend: Rating: - low: < 75 % - medium: >= 75 % - high: >= 90 % -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
Error.hpp -
100.0%
-
100.0 %5 / 580.0 %4 / 5
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Error/index-sort-l.html b/docs/Coverage/src/AH/Error/index-sort-l.html deleted file mode 100644 index fbc05e40b..000000000 --- a/docs/Coverage/src/AH/Error/index-sort-l.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Error - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/ErrorHitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:55100.0 %
Date:2019-12-23 15:42:58Functions:4580.0 %
Legend: Rating: - low: < 75 % - medium: >= 75 % - high: >= 90 % -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
Error.hpp -
100.0%
-
100.0 %5 / 580.0 %4 / 5
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Error/index.html b/docs/Coverage/src/AH/Error/index.html deleted file mode 100644 index 044b9be42..000000000 --- a/docs/Coverage/src/AH/Error/index.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Error - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/ErrorHitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:55100.0 %
Date:2019-12-23 15:42:58Functions:4580.0 %
Legend: Rating: - low: < 75 % - medium: >= 75 % - high: >= 90 % -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
Error.hpp -
100.0%
-
100.0 %5 / 580.0 %4 / 5
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Filters/EMA.hpp.func-sort-c.html b/docs/Coverage/src/AH/Filters/EMA.hpp.func-sort-c.html deleted file mode 100644 index f78ba88b6..000000000 --- a/docs/Coverage/src/AH/Filters/EMA.hpp.func-sort-c.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Filters/EMA.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Filters - EMA.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:1515100.0 %
Date:2019-12-23 15:42:58Functions:99100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN3EMAILh2EtEC2Ev1
_ZN3EMAILh6EtEC2Ev1
_ZN5EMA_fC2Ef1
_ZN3EMAILh2EtE6filterEt12
_ZN3EMAILh2EtEclEt12
_ZN5EMA_f6filterEf12
_ZN5EMA_fclEf12
_ZN3EMAILh6EtE6filterEt2000
_ZN3EMAILh6EtEclEt2000
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Filters/EMA.hpp.func.html b/docs/Coverage/src/AH/Filters/EMA.hpp.func.html deleted file mode 100644 index d35e1e132..000000000 --- a/docs/Coverage/src/AH/Filters/EMA.hpp.func.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Filters/EMA.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Filters - EMA.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:1515100.0 %
Date:2019-12-23 15:42:58Functions:99100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN3EMAILh2EtE6filterEt12
_ZN3EMAILh2EtEC2Ev1
_ZN3EMAILh2EtEclEt12
_ZN3EMAILh6EtE6filterEt2000
_ZN3EMAILh6EtEC2Ev1
_ZN3EMAILh6EtEclEt2000
_ZN5EMA_f6filterEf12
_ZN5EMA_fC2Ef1
_ZN5EMA_fclEf12
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Filters/EMA.hpp.gcov.html b/docs/Coverage/src/AH/Filters/EMA.hpp.gcov.html deleted file mode 100644 index 3e5d5ceaf..000000000 --- a/docs/Coverage/src/AH/Filters/EMA.hpp.gcov.html +++ /dev/null @@ -1,217 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Filters/EMA.hpp - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Filters - EMA.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:1515100.0 %
Date:2019-12-23 15:42:58Functions:99100.0 %
Legend: Lines: - hit - not hit -
-
- - - - - - - - -

-
          Line data    Source code
-
-       1             : /* ✔ */
-       2             : 
-       3             : #pragma once
-       4             : 
-       5             : #include <AH/Settings/Warnings.hpp>
-       6             : AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-       7             : 
-       8             : #include <stdint.h>
-       9             : 
-      10             : /**
-      11             :  * @brief   A class for single-pole infinite impulse response filters
-      12             :  *          or exponential moving average filters.
-      13             :  *
-      14             :  * Optimized implementation of the difference equation with a slight
-      15             :  * optimization by using a factor of two as the pole location (this means
-      16             :  * that no division or floating point operations are required).
-      17             :  *
-      18             :  * Difference equation: @f$ y[n] = \alpha·x[n]+(1-\alpha)·y[n-1] @f$
-      19             :  * where @f$ \alpha = \left(\frac{1}{2}\right)^{K} @f$, @f$ x @f$ is the
-      20             :  * input sequence, and @f$ y @f$ is the output sequence.
-      21             :  *
-      22             :  * [An in-depth explanation of the EMA filter]
-      23             :  * (https://tttapa.github.io/Pages/Mathematics/Systems-and-Control-Theory/Digital-filters/Exponential%20Moving%20Average/)
-      24             :  *
-      25             :  * @tparam  K
-      26             :  *          The amount of bits to shift by. This determines the location
-      27             :  *          of the pole in the EMA transfer function, and therefore the
-      28             :  *          cut-off frequency.  
-      29             :  *          The higher this number, the more filtering takes place.  
-      30             :  *          The pole location is @f$ 1 - 2^{-K} @f$.
-      31             :  * @tparam  uint_t
-      32             :  *          The (signed) integer type to use for the input, intermediate values
-      33             :  *          and the output.
-      34             :  *          Should be at least @f$ M+K @f$ bits wide, where @f$ M @f$
-      35             :  *          is the maximum number of bits of the input.
-      36             :  *          In case of the Arduino's built-in ADC,
-      37             :  *          @f$ M = 10 = \log_2(1024) @f$.
-      38             :  * 
-      39             :  * @ingroup    AH_Filters
-      40             :  */
-      41             : template <uint8_t K, class uint_t>
-      42           2 : class EMA {
-      43             :   public:
-      44             :     /**
-      45             :      * @brief   Filter the input: Given @f$ x[n] @f$, calculate @f$ y[n] @f$.
-      46             :      *
-      47             :      * @param   input
-      48             :      *          The new raw input value.
-      49             :      * @return  The new filtered output value.
-      50             :      */
-      51        2012 :     uint_t filter(uint_t input) {
-      52        2012 :         filtered += input;
-      53        2012 :         uint_t output = (filtered + fixedPointAHalf) >> K;
-      54        2012 :         filtered -= output;
-      55        4024 :         return output;
-      56        2012 :     }
-      57             : 
-      58             :     /**
-      59             :      * @brief   Filter the input: Given @f$ x[n] @f$, calculate @f$ y[n] @f$.
-      60             :      *
-      61             :      * @param   value
-      62             :      *          The new raw input value.
-      63             :      * @return  The new filtered output value.
-      64             :      */
-      65        2012 :     uint_t operator()(uint_t value) { return filter(value); }
-      66             : 
-      67             :     static_assert(
-      68             :         uint_t(0) < uint_t(-1), // Check that `uint_t` is an unsigned type
-      69             :         "Error: the uint_t type should be an unsigned integer, otherwise, "
-      70             :         "the division using bit shifts is invalid.");
-      71             : 
-      72             :   private:
-      73           2 :     uint_t filtered = 0;
-      74             :     constexpr static uint_t fixedPointAHalf = 1 << (K - 1);
-      75             : };
-      76             : 
-      77             : // -------------------------------------------------------------------------- //
-      78             : 
-      79             : /**
-      80             :  * @brief   A class for single-pole infinite impulse response filters
-      81             :  *          or exponential moving average filters.
-      82             :  * 
-      83             :  * This version uses floating point maths.
-      84             :  * 
-      85             :  * Difference equation: @f$ y[n] = \alpha·x[n]+(1-\alpha)·y[n-1] @f$
-      86             :  * @f$ x @f$ is the input sequence, and @f$ y @f$ is the output sequence.
-      87             :  *
-      88             :  * [An in-depth explanation of the EMA filter]
-      89             :  * (https://tttapa.github.io/Pages/Mathematics/Systems-and-Control-Theory/Digital-filters/Exponential%20Moving%20Average/)
-      90             :  * 
-      91             :  * @ingroup    AH_Filters
-      92             :  */
-      93             : class EMA_f {
-      94             :   public:
-      95             :     /**
-      96             :      * @brief   Create an exponential moving average filter with a pole at the
-      97             :      *          given location.
-      98             :      * 
-      99             :      * @param   pole
-     100             :      *          The pole of the filter (@f$1-\alpha@f$).  
-     101             :      *          Should be a value in the range 
-     102             :      *          @f$ \left[0,1\right) @f$.  
-     103             :      *          Zero means no filtering, and closer to one means more filtering.
-     104             :      */
-     105           1 :     EMA_f(float pole) : alpha(1 - pole) {}
-     106             : 
-     107             :     /**
-     108             :      * @brief   Filter the input: Given @f$ x[n] @f$, calculate @f$ y[n] @f$.
-     109             :      *
-     110             :      * @param   value
-     111             :      *          The new raw input value.
-     112             :      * @return  The new filtered output value.
-     113             :      */
-     114          12 :     float filter(float value) {
-     115          12 :         filtered += (value - filtered) * alpha;
-     116          12 :         return filtered;
-     117             :     }
-     118             : 
-     119             :     /**
-     120             :      * @brief   Filter the input: Given @f$ x[n] @f$, calculate @f$ y[n] @f$.
-     121             :      *
-     122             :      * @param   value
-     123             :      *          The new raw input value.
-     124             :      * @return  The new filtered output value.
-     125             :      */
-     126          12 :     float operator()(float value) { return filter(value); }
-     127             : 
-     128             :   private:
-     129             :     float alpha;
-     130           1 :     float filtered = 0;
-     131             : };
-     132             : 
-     133             : AH_DIAGNOSTIC_POP()
-
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Filters/Hysteresis.hpp.func-sort-c.html b/docs/Coverage/src/AH/Filters/Hysteresis.hpp.func-sort-c.html deleted file mode 100644 index 0bcc8e278..000000000 --- a/docs/Coverage/src/AH/Filters/Hysteresis.hpp.func-sort-c.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Filters/Hysteresis.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Filters - Hysteresis.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:1212100.0 %
Date:2019-12-23 15:42:58Functions:66100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN10HysteresisILh2EttEC2Ev1
_ZN10HysteresisILh2EthEC2Ev4
_ZN10HysteresisILh2EttE6updateEt10
_ZNK10HysteresisILh2EttE8getValueEv10
_ZN10HysteresisILh2EthE6updateEt66
_ZNK10HysteresisILh2EthE8getValueEv66
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Filters/Hysteresis.hpp.func.html b/docs/Coverage/src/AH/Filters/Hysteresis.hpp.func.html deleted file mode 100644 index 9a4cf0eb4..000000000 --- a/docs/Coverage/src/AH/Filters/Hysteresis.hpp.func.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Filters/Hysteresis.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Filters - Hysteresis.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:1212100.0 %
Date:2019-12-23 15:42:58Functions:66100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN10HysteresisILh2EthE6updateEt66
_ZN10HysteresisILh2EthEC2Ev4
_ZN10HysteresisILh2EttE6updateEt10
_ZN10HysteresisILh2EttEC2Ev1
_ZNK10HysteresisILh2EthE8getValueEv66
_ZNK10HysteresisILh2EttE8getValueEv10
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Filters/Hysteresis.hpp.gcov.html b/docs/Coverage/src/AH/Filters/Hysteresis.hpp.gcov.html deleted file mode 100644 index f3c5b7910..000000000 --- a/docs/Coverage/src/AH/Filters/Hysteresis.hpp.gcov.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Filters/Hysteresis.hpp - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Filters - Hysteresis.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:1212100.0 %
Date:2019-12-23 15:42:58Functions:66100.0 %
Legend: Lines: - hit - not hit -
-
- - - - - - - - -

-
          Line data    Source code
-
-       1             : #pragma once
-       2             : 
-       3             : #include <AH/Settings/Warnings.hpp>
-       4             : AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-       5             : 
-       6             : #include <stdint.h>
-       7             : 
-       8             : /// @addtogroup    AH_Filters
-       9             : /// @{
-      10             : 
-      11             : /**
-      12             :  * @brief   A class for applying hysteresis to a given input.
-      13             :  *
-      14             :  * This reduces the noise by decreasing the resolution, and it prevents flipping
-      15             :  * back and forth between two values.
-      16             :  *
-      17             :  * <b>An example for `BITS` = 7 and an input from 0 to 1023</b>
-      18             :  * ```
-      19             :  *    7                                                     ┌───◄───┬───
-      20             :  * o  6                                             ┌───◄───┼───►───┘
-      21             :  * u  5                                     ┌───◄───┼───►───┘
-      22             :  * t  4                             ┌───◄───┼───►───┘
-      23             :  * p  3                     ┌───◄───┼───►───┘
-      24             :  * u  2             ┌───◄───┼───►───┘
-      25             :  * t  1     ┌───◄───┼───►───┘
-      26             :  *    0 ────┴───►───┘
-      27             :  *      0      128     256     384     512     640     768     896    1023
-      28             :  *                                  i n p u t
-      29             :  * ```
-      30             :  *
-      31             :  * @tparam  BITS
-      32             :  *          The number of bits to decrease in resolution.
-      33             :  *          Increasing this number will result in a decrease in fluctuations.
-      34             :  */
-      35             : template <uint8_t BITS, class T_in = uint16_t, class T_out = uint8_t>
-      36           5 : class Hysteresis {
-      37             :   public:
-      38             :     /**
-      39             :      * @brief   Update the hysteresis output with a new input value.
-      40             :      *
-      41             :      * @param   inputLevel
-      42             :      *          The input to calculate the output level from.
-      43             :      * @retval  true
-      44             :      *          The output level has changed.
-      45             :      * @retval  false
-      46             :      *          The output level is still the same.
-      47             :      */
-      48          76 :     bool update(T_in inputLevel) {
-      49          76 :         T_in prevLevelFull = (T_in(prevLevel) << BITS) | offset;
-      50          76 :         T_in lowerbound = prevLevel > 0 ? prevLevelFull - margin : 0;
-      51          76 :         T_in upperbound = prevLevel < max_out ? prevLevelFull + margin : max_in;
-      52          76 :         if (inputLevel < lowerbound || inputLevel > upperbound) {
-      53          22 :             prevLevel = inputLevel >> BITS;
-      54          22 :             return true;
-      55             :         }
-      56          54 :         return false;
-      57          76 :     }
-      58             : 
-      59             :     /**
-      60             :      * @brief   Get the current output level.
-      61             :      *
-      62             :      * @return  The output level.
-      63             :      */
-      64          76 :     T_out getValue() const { return prevLevel; }
-      65             : 
-      66             :   private:
-      67           5 :     T_out prevLevel = 0;
-      68             :     constexpr static T_in margin = (1UL << BITS) - 1;
-      69             :     constexpr static T_in offset = 1UL << (BITS - 1);
-      70             :     constexpr static T_in max_in = -1;
-      71             :     constexpr static T_out max_out = static_cast<T_out>(max_in >> BITS);
-      72             :     static_assert(max_in > 0, "Error: only unsigned types are supported");
-      73             : };
-      74             : 
-      75             : /// @}
-      76             : 
-      77             : AH_DIAGNOSTIC_POP()
-
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Filters/index-sort-f.html b/docs/Coverage/src/AH/Filters/index-sort-f.html deleted file mode 100644 index e8d4ef806..000000000 --- a/docs/Coverage/src/AH/Filters/index-sort-f.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Filters - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/FiltersHitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:2727100.0 %
Date:2019-12-23 15:42:58Functions:1515100.0 %
Legend: Rating: - low: < 75 % - medium: >= 75 % - high: >= 90 % -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
Hysteresis.hpp -
100.0%
-
100.0 %12 / 12100.0 %6 / 6
EMA.hpp -
100.0%
-
100.0 %15 / 15100.0 %9 / 9
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Filters/index-sort-l.html b/docs/Coverage/src/AH/Filters/index-sort-l.html deleted file mode 100644 index 161ab9c80..000000000 --- a/docs/Coverage/src/AH/Filters/index-sort-l.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Filters - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/FiltersHitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:2727100.0 %
Date:2019-12-23 15:42:58Functions:1515100.0 %
Legend: Rating: - low: < 75 % - medium: >= 75 % - high: >= 90 % -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
Hysteresis.hpp -
100.0%
-
100.0 %12 / 12100.0 %6 / 6
EMA.hpp -
100.0%
-
100.0 %15 / 15100.0 %9 / 9
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Filters/index.html b/docs/Coverage/src/AH/Filters/index.html deleted file mode 100644 index 1ebd797bf..000000000 --- a/docs/Coverage/src/AH/Filters/index.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Filters - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/FiltersHitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:2727100.0 %
Date:2019-12-23 15:42:58Functions:1515100.0 %
Legend: Rating: - low: < 75 % - medium: >= 75 % - high: >= 90 % -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
EMA.hpp -
100.0%
-
100.0 %15 / 15100.0 %9 / 9
Hysteresis.hpp -
100.0%
-
100.0 %12 / 12100.0 %6 / 6
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/Button.cpp.func-sort-c.html b/docs/Coverage/src/AH/Hardware/Button.cpp.func-sort-c.html deleted file mode 100644 index bbb47ab34..000000000 --- a/docs/Coverage/src/AH/Hardware/Button.cpp.func-sort-c.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware/Button.cpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware - Button.cpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:3838100.0 %
Date:2019-12-23 15:42:58Functions:1111100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH6Button15getDebounceTimeEv1
_ZN2AH6Button15setDebounceTimeEm1
_ZN2AH6Button6invertEv1
_ZN2AH6Button7getNameENS0_5StateE5
_ZNK2AH6Button10stableTimeEv5
_ZNK2AH6Button10stableTimeEm7
_ZNK2AH6Button18previousBounceTimeEv7
_ZNK2AH6Button8getStateEv8
_ZN2AH6Button5beginEv15
_ZN2AH6ButtonC2Et15
_ZN2AH6Button6updateEv82
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/Button.cpp.func.html b/docs/Coverage/src/AH/Hardware/Button.cpp.func.html deleted file mode 100644 index 2b185251e..000000000 --- a/docs/Coverage/src/AH/Hardware/Button.cpp.func.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware/Button.cpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware - Button.cpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:3838100.0 %
Date:2019-12-23 15:42:58Functions:1111100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH6Button15getDebounceTimeEv1
_ZN2AH6Button15setDebounceTimeEm1
_ZN2AH6Button5beginEv15
_ZN2AH6Button6invertEv1
_ZN2AH6Button6updateEv82
_ZN2AH6Button7getNameENS0_5StateE5
_ZN2AH6ButtonC2Et15
_ZNK2AH6Button10stableTimeEm7
_ZNK2AH6Button10stableTimeEv5
_ZNK2AH6Button18previousBounceTimeEv7
_ZNK2AH6Button8getStateEv8
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/Button.cpp.gcov.html b/docs/Coverage/src/AH/Hardware/Button.cpp.gcov.html deleted file mode 100644 index 62927a7ab..000000000 --- a/docs/Coverage/src/AH/Hardware/Button.cpp.gcov.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware/Button.cpp - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware - Button.cpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:3838100.0 %
Date:2019-12-23 15:42:58Functions:1111100.0 %
Legend: Lines: - hit - not hit -
-
- - - - - - - - -

-
          Line data    Source code
-
-       1             : #include "Button.hpp"
-       2             : 
-       3             : AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-       4             : 
-       5             : BEGIN_AH_NAMESPACE
-       6             : 
-       7             : using namespace ExtIO;
-       8             : 
-       9          15 : Button::Button(pin_t pin) : pin(pin) {}
-      10             : 
-      11          15 : void Button::begin() { ExtIO::pinMode(pin, INPUT_PULLUP); }
-      12             : 
-      13           1 : void Button::invert() { invertState = true; }
-      14             : 
-      15             : #ifndef AH_INDIVIDUAL_BUTTON_INVERT
-      16             : bool Button::invertState = false;
-      17             : #endif
-      18             : 
-      19          82 : Button::State Button::update() {
-      20             :     // read the button state and invert it if "invertState" is true
-      21          82 :     bool input = ExtIO::digitalRead(pin) ^ invertState;
-      22          82 :     bool prevState = debouncedState & 0b01;
-      23          82 :     unsigned long now = millis();
-      24          82 :     if (now - prevBounceTime > debounceTime) { // wait for state to stabilize
-      25          61 :         debouncedState = static_cast<State>((prevState << 1) | input);
-      26          61 :     } else {
-      27          21 :         debouncedState = static_cast<State>((prevState << 1) | prevState);
-      28             :     }
-      29          82 :     if (input != prevInput) { // Button is pressed, released or bounces
-      30          31 :         prevBounceTime = now;
-      31          31 :         prevInput = input;
-      32          31 :     }
-      33         164 :     return debouncedState;
-      34          82 : }
-      35             : 
-      36           8 : Button::State Button::getState() const { return debouncedState; }
-      37             : 
-      38           5 : const __FlashStringHelper *Button::getName(Button::State state) {
-      39           5 :     switch (state) {
-      40           1 :         case Button::Pressed: return F("Pressed");
-      41           1 :         case Button::Released: return F("Released");
-      42           1 :         case Button::Falling: return F("Falling");
-      43           1 :         case Button::Rising: return F("Rising");
-      44           1 :         default: return F("<invalid>"); // Keeps the compiler happy
-      45             :     }
-      46           5 : }
-      47             : 
-      48           7 : unsigned long Button::previousBounceTime() const { return prevBounceTime; }
-      49             : 
-      50           7 : unsigned long Button::stableTime(unsigned long now) const {
-      51           7 :     return now - previousBounceTime();
-      52             : }
-      53             : 
-      54           5 : unsigned long Button::stableTime() const { return stableTime(millis()); }
-      55             : 
-      56           1 : void Button::setDebounceTime(unsigned long debounceTime) {
-      57           1 :     Button::debounceTime = debounceTime;
-      58           1 : }
-      59             : 
-      60           1 : unsigned long Button::getDebounceTime() { return Button::debounceTime; }
-      61             : 
-      62             : unsigned long Button::debounceTime = BUTTON_DEBOUNCE_TIME;
-      63             : 
-      64             : END_AH_NAMESPACE
-      65             : 
-      66             : AH_DIAGNOSTIC_POP()
-
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/AnalogMultiplex.hpp.func-sort-c.html b/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/AnalogMultiplex.hpp.func-sort-c.html deleted file mode 100644 index 305c40d52..000000000 --- a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/AnalogMultiplex.hpp.func-sort-c.html +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware/ExtendedInputOutput/AnalogMultiplex.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware/ExtendedInputOutput - AnalogMultiplex.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:4444100.0 %
Date:2019-12-23 15:42:58Functions:162661.5 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH15AnalogMultiplexILh3EE11analogWriteEtt0
_ZN2AH15AnalogMultiplexILh3EE11digitalReadEt0
_ZN2AH15AnalogMultiplexILh3EE12digitalWriteEth0
_ZN2AH15AnalogMultiplexILh3EE6updateEv0
_ZN2AH15AnalogMultiplexILh3EE7pinModeEth0
_ZN2AH15AnalogMultiplexILh3EED0Ev0
_ZN2AH15AnalogMultiplexILh4EE11analogWriteEtt0
_ZN2AH15AnalogMultiplexILh4EE12digitalWriteEth0
_ZN2AH15AnalogMultiplexILh4EE6updateEv0
_ZN2AH15AnalogMultiplexILh4EED0Ev0
_ZN2AH15AnalogMultiplexILh3EE5beginEv1
_ZN2AH15AnalogMultiplexILh3EEC2EtRKNS_5ArrayItLm3EEEt1
_ZN2AH15AnalogMultiplexILh3EED2Ev1
_ZN2AH15AnalogMultiplexILh4EE7pinModeEth1
_ZN2AH15AnalogMultiplexILh4EE11digitalReadEt2
_ZN2AH15AnalogMultiplexILh3EE10analogReadEt3
_ZN2AH15AnalogMultiplexILh3EE12afterReadingEv3
_ZN2AH15AnalogMultiplexILh3EE13setMuxAddressEh3
_ZN2AH15AnalogMultiplexILh3EE14prepareReadingEh3
_ZN2AH15AnalogMultiplexILh4EE10analogReadEt4
_ZN2AH15AnalogMultiplexILh4EE5beginEv5
_ZN2AH15AnalogMultiplexILh4EEC2EtRKNS_5ArrayItLm4EEEt5
_ZN2AH15AnalogMultiplexILh4EED2Ev5
_ZN2AH15AnalogMultiplexILh4EE12afterReadingEv6
_ZN2AH15AnalogMultiplexILh4EE13setMuxAddressEh6
_ZN2AH15AnalogMultiplexILh4EE14prepareReadingEh6
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/AnalogMultiplex.hpp.func.html b/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/AnalogMultiplex.hpp.func.html deleted file mode 100644 index 90a7b4c34..000000000 --- a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/AnalogMultiplex.hpp.func.html +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware/ExtendedInputOutput/AnalogMultiplex.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware/ExtendedInputOutput - AnalogMultiplex.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:4444100.0 %
Date:2019-12-23 15:42:58Functions:162661.5 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH15AnalogMultiplexILh3EE10analogReadEt3
_ZN2AH15AnalogMultiplexILh3EE11analogWriteEtt0
_ZN2AH15AnalogMultiplexILh3EE11digitalReadEt0
_ZN2AH15AnalogMultiplexILh3EE12afterReadingEv3
_ZN2AH15AnalogMultiplexILh3EE12digitalWriteEth0
_ZN2AH15AnalogMultiplexILh3EE13setMuxAddressEh3
_ZN2AH15AnalogMultiplexILh3EE14prepareReadingEh3
_ZN2AH15AnalogMultiplexILh3EE5beginEv1
_ZN2AH15AnalogMultiplexILh3EE6updateEv0
_ZN2AH15AnalogMultiplexILh3EE7pinModeEth0
_ZN2AH15AnalogMultiplexILh3EEC2EtRKNS_5ArrayItLm3EEEt1
_ZN2AH15AnalogMultiplexILh3EED0Ev0
_ZN2AH15AnalogMultiplexILh3EED2Ev1
_ZN2AH15AnalogMultiplexILh4EE10analogReadEt4
_ZN2AH15AnalogMultiplexILh4EE11analogWriteEtt0
_ZN2AH15AnalogMultiplexILh4EE11digitalReadEt2
_ZN2AH15AnalogMultiplexILh4EE12afterReadingEv6
_ZN2AH15AnalogMultiplexILh4EE12digitalWriteEth0
_ZN2AH15AnalogMultiplexILh4EE13setMuxAddressEh6
_ZN2AH15AnalogMultiplexILh4EE14prepareReadingEh6
_ZN2AH15AnalogMultiplexILh4EE5beginEv5
_ZN2AH15AnalogMultiplexILh4EE6updateEv0
_ZN2AH15AnalogMultiplexILh4EE7pinModeEth1
_ZN2AH15AnalogMultiplexILh4EEC2EtRKNS_5ArrayItLm4EEEt5
_ZN2AH15AnalogMultiplexILh4EED0Ev0
_ZN2AH15AnalogMultiplexILh4EED2Ev5
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/AnalogMultiplex.hpp.gcov.html b/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/AnalogMultiplex.hpp.gcov.html deleted file mode 100644 index 70861e488..000000000 --- a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/AnalogMultiplex.hpp.gcov.html +++ /dev/null @@ -1,301 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware/ExtendedInputOutput/AnalogMultiplex.hpp - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware/ExtendedInputOutput - AnalogMultiplex.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:4444100.0 %
Date:2019-12-23 15:42:58Functions:162661.5 %
Legend: Lines: - hit - not hit -
-
- - - - - - - - -

-
          Line data    Source code
-
-       1             : /* ✔ */
-       2             : 
-       3             : #pragma once
-       4             : 
-       5             : #include <AH/Settings/Warnings.hpp>
-       6             : AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-       7             : 
-       8             : #include "ExtendedInputOutput.hpp"
-       9             : #include "StaticSizeExtendedIOElement.hpp"
-      10             : #include <AH/Containers/Array.hpp>
-      11             : #include <stdlib.h>
-      12             : 
-      13             : BEGIN_AH_NAMESPACE
-      14             : 
-      15             : /**
-      16             :  * @brief   A class for reading multiplexed analog inputs.
-      17             :  *          Supports 74HC4067, 74HC4051, etc.
-      18             :  * 
-      19             :  * You can use many multiplexers on the same address lines if each of the 
-      20             :  * multiplexers has a different enable line.
-      21             :  * 
-      22             :  * @tparam  N 
-      23             :  *          The number of address lines.
-      24             :  * 
-      25             :  * @ingroup AH_ExtIO
-      26             :  */
-      27             : template <uint8_t N>
-      28           6 : class AnalogMultiplex : public StaticSizeExtendedIOElement<1 << N> {
-      29             :   public:
-      30             :     /**
-      31             :      * @brief   Create a new AnalogMultiplex object on the given pins.
-      32             :      * 
-      33             :      * @param   analogPin
-      34             :      *          The analog input pin connected to the output of the multiplexer.
-      35             :      * @param   addressPins
-      36             :      *          An array of the pins connected to the address lines of the
-      37             :      *          multiplexer. (Labeled S0, S1, S2 ... in the datasheet.)
-      38             :      * @param   enablePin
-      39             :      *          The digital output pin connected to the enable pin of the
-      40             :      *          multiplexer. (Labeled Ē in the datasheet.)  
-      41             :      *          If you don't need the enable pin, you can use NO_PIN, which is 
-      42             :      *          the default.
-      43             :      */
-      44           6 :     AnalogMultiplex(pin_t analogPin, const Array<pin_t, N> &addressPins,
-      45             :                     pin_t enablePin = NO_PIN)
-      46          12 :         : analogPin(analogPin), addressPins(addressPins), enablePin(enablePin) {
-      47           6 :     }
-      48             : 
-      49             :     /**
-      50             :      * @brief   Set the pin mode of the analog input pin.  
-      51             :      *          This allows you to enable the internal pull-up resistor, for
-      52             :      *          use with buttons or open-collector outputs.
-      53             :      * 
-      54             :      * @note    This applies to all pins of this multiplexer.  
-      55             :      *          This affects all pins of the multiplexer, because it has only
-      56             :      *          a single common pin.  
-      57             :      * 
-      58             :      * @param   pin
-      59             :      *          (Unused)
-      60             :      * @param   mode
-      61             :      *          The new mode of the input pin: 
-      62             :      *          either INPUT or INPUT_PULLUP.
-      63             :      */
-      64             :     void pinMode(pin_t pin, uint8_t mode) override;
-      65             : 
-      66             :     /**
-      67             :      * @brief   The digitalWrite function is not implemented because writing an
-      68             :      *          output to a multiplexer is not useful.
-      69             :      */
-      70             :     void digitalWrite(pin_t, uint8_t) override // LCOV_EXCL_LINE
-      71             :         __attribute__((deprecated)) {}         // LCOV_EXCL_LINE
-      72             : 
-      73             :     /**
-      74             :      * @brief   Read the digital state of the given input.
-      75             :      * 
-      76             :      * @param   pin
-      77             :      *          The multiplexer's pin number to read from.
-      78             :      */
-      79             :     int digitalRead(pin_t pin) override;
-      80             : 
-      81             :     /**
-      82             :      * @brief   Read the analog value of the given input.
-      83             :      * 
-      84             :      * @param   pin
-      85             :      *          The multiplexer's pin number to read from.
-      86             :      */
-      87             :     analog_t analogRead(pin_t pin) override;
-      88             : 
-      89             :     /**
-      90             :      * @brief   The analogWrite function is not implemented because writing an
-      91             :      *          output to a multiplexer is not useful.
-      92             :      */
-      93             :     void analogWrite(pin_t, analog_t) override // LCOV_EXCL_LINE
-      94             :         __attribute__((deprecated)) {}         // LCOV_EXCL_LINE
-      95             : 
-      96             :     /**
-      97             :      * @brief   Initialize the multiplexer: set the pin mode of the address pins
-      98             :      *          and the enable pin to output mode.
-      99             :      */
-     100             :     void begin() override;
-     101             : 
-     102             :     /**
-     103             :      * @brief   No periodic updating of the state is necessary, all actions are 
-     104             :      *          carried out when the user calls analogRead or digitalRead.
-     105             :      */
-     106             :     void update() override {} // LCOV_EXCL_LINE
-     107             : 
-     108             :   private:
-     109             :     const pin_t analogPin;
-     110             :     const Array<pin_t, N> addressPins;
-     111             :     const pin_t enablePin;
-     112             : 
-     113             :     /**
-     114             :      * @brief   Write the pin number/address to the address pins of the 
-     115             :      *          multiplexer.
-     116             :      * 
-     117             :      * @param   address
-     118             :      *          The address to select.
-     119             :      */
-     120             :     void setMuxAddress(uint8_t address);
-     121             : 
-     122             :     /**
-     123             :      * @brief   Select the correct address and enable the multiplexer.
-     124             :      * 
-     125             :      * @param   address
-     126             :      *          The address to select.
-     127             :      */
-     128             :     void prepareReading(uint8_t address);
-     129             : 
-     130             :     /**
-     131             :      * @brief   Disable the multiplexer.
-     132             :      */
-     133             :     void afterReading();
-     134             : 
-     135             :     // The enable pin is active low.
-     136             :     constexpr static uint8_t MUX_ENABLED = LOW;
-     137             :     constexpr static uint8_t MUX_DISABLED = HIGH;
-     138             : };
-     139             : 
-     140             : /**
-     141             :  * @brief   An alias for AnalogMultiplex<4> to use with CD74HC4067 analog 
-     142             :  *          multiplexers.
-     143             :  * 
-     144             :  * @ingroup AH_ExtIO
-     145             :  */
-     146             : using CD74HC4067 = AnalogMultiplex<4>;
-     147             : 
-     148             : /**
-     149             :  * @brief   An alias for AnalogMultiplex<3> to use with CD74HC4051 analog 
-     150             :  *          multiplexers.
-     151             :  * 
-     152             :  * @ingroup AH_ExtIO
-     153             :  */
-     154             : using CD74HC4051 = AnalogMultiplex<3>;
-     155             : 
-     156             : // -------------------------------------------------------------------------- //
-     157             : 
-     158             : template <uint8_t N>
-     159           1 : void AnalogMultiplex<N>::pinMode(pin_t, uint8_t mode) {
-     160           1 :     ExtIO::pinMode(analogPin, mode);
-     161           1 : }
-     162             : 
-     163             : template <uint8_t N>
-     164           2 : int AnalogMultiplex<N>::digitalRead(pin_t pin) {
-     165           2 :     prepareReading(pin);
-     166           2 :     int result = ExtIO::digitalRead(analogPin);
-     167           2 :     afterReading();
-     168           4 :     return result;
-     169           2 : }
-     170             : 
-     171             : template <uint8_t N>
-     172           7 : analog_t AnalogMultiplex<N>::analogRead(pin_t pin) {
-     173           7 :     prepareReading(pin);
-     174           7 :     ExtIO::analogRead(analogPin); // Discard first reading
-     175           7 :     analog_t result = ExtIO::analogRead(analogPin);
-     176           7 :     afterReading();
-     177          14 :     return result;
-     178           7 : }
-     179             : 
-     180             : template <uint8_t N>
-     181           6 : void AnalogMultiplex<N>::begin() {
-     182          29 :     for (const pin_t &addressPin : addressPins)
-     183          23 :         ExtIO::pinMode(addressPin, OUTPUT);
-     184           6 :     if (enablePin != NO_PIN) {
-     185           4 :         ExtIO::pinMode(enablePin, OUTPUT);
-     186           4 :         ExtIO::digitalWrite(enablePin, MUX_DISABLED);
-     187           4 :     }
-     188           6 : }
-     189             : 
-     190             : template <uint8_t N>
-     191           9 : void AnalogMultiplex<N>::setMuxAddress(uint8_t address) {
-     192           9 :     uint8_t mask = 1;
-     193          42 :     for (const pin_t &addressPin : addressPins) {
-     194          33 :         ExtIO::digitalWrite(addressPin, (address & mask) != 0);
-     195          33 :         mask <<= 1;
-     196          33 :     }
-     197             : #if !defined(__AVR__) && !defined(__x86_64__)
-     198             :     delayMicroseconds(5);
-     199             : #endif
-     200           9 : }
-     201             : 
-     202             : template <uint8_t N>
-     203           9 : void AnalogMultiplex<N>::prepareReading(uint8_t address) {
-     204           9 :     setMuxAddress(address);
-     205           9 :     if (enablePin != NO_PIN)
-     206           5 :         ExtIO::digitalWrite(enablePin, MUX_ENABLED);
-     207           9 : }
-     208             : 
-     209             : template <uint8_t N>
-     210           9 : void AnalogMultiplex<N>::afterReading() {
-     211           9 :     if (enablePin != NO_PIN)
-     212           5 :         ExtIO::digitalWrite(enablePin, MUX_DISABLED);
-     213           9 : }
-     214             : 
-     215             : END_AH_NAMESPACE
-     216             : 
-     217             : AH_DIAGNOSTIC_POP()
-
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/ExtendedIOElement.cpp.func-sort-c.html b/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/ExtendedIOElement.cpp.func-sort-c.html deleted file mode 100644 index b1aaedb79..000000000 --- a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/ExtendedIOElement.cpp.func-sort-c.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware/ExtendedInputOutput/ExtendedIOElement.cpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware/ExtendedInputOutput - ExtendedIOElement.cpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:2323100.0 %
Date:2019-12-23 15:42:58Functions:91090.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH17ExtendedIOElementD0Ev0
_ZNK2AH17ExtendedIOElement9getLengthEv1
_ZNK2AH17ExtendedIOElementixEt1
_ZN2AH17ExtendedIOElement8beginAllEv6
_ZN2AH17ExtendedIOElementD2Ev25
_ZN2AH17ExtendedIOElementC2Et26
_ZNK2AH17ExtendedIOElement3pinEt68
_ZN2AH17ExtendedIOElement6getAllEv150
_ZNK2AH17ExtendedIOElement6getEndEv171
_ZNK2AH17ExtendedIOElement8getStartEv491
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/ExtendedIOElement.cpp.func.html b/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/ExtendedIOElement.cpp.func.html deleted file mode 100644 index f74f82fbc..000000000 --- a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/ExtendedIOElement.cpp.func.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware/ExtendedInputOutput/ExtendedIOElement.cpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware/ExtendedInputOutput - ExtendedIOElement.cpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:2323100.0 %
Date:2019-12-23 15:42:58Functions:91090.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH17ExtendedIOElement6getAllEv150
_ZN2AH17ExtendedIOElement8beginAllEv6
_ZN2AH17ExtendedIOElementC2Et26
_ZN2AH17ExtendedIOElementD0Ev0
_ZN2AH17ExtendedIOElementD2Ev25
_ZNK2AH17ExtendedIOElement3pinEt68
_ZNK2AH17ExtendedIOElement6getEndEv171
_ZNK2AH17ExtendedIOElement8getStartEv491
_ZNK2AH17ExtendedIOElement9getLengthEv1
_ZNK2AH17ExtendedIOElementixEt1
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/ExtendedIOElement.cpp.gcov.html b/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/ExtendedIOElement.cpp.gcov.html deleted file mode 100644 index a14d93d62..000000000 --- a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/ExtendedIOElement.cpp.gcov.html +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware/ExtendedInputOutput/ExtendedIOElement.cpp - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware/ExtendedInputOutput - ExtendedIOElement.cpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:2323100.0 %
Date:2019-12-23 15:42:58Functions:91090.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
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.cpp.func-sort-c.html b/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.cpp.func-sort-c.html deleted file mode 100644 index 46307c968..000000000 --- a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.cpp.func-sort-c.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.cpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware/ExtendedInputOutput - ExtendedInputOutput.cpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:6868100.0 %
Date:2019-12-23 15:42:58Functions:1616100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH5ExtIO11analogWriteEit2
_ZN2AH5ExtIO8shiftOutEiihh2
_ZN2AH5ExtIO11analogWriteEti4
_ZN2AH5ExtIO8shiftOutEtthh4
_ZN2AH5ExtIO10analogReadEi5
_ZN2AH5ExtIO11analogWriteEii5
_ZN2AH5ExtIO11digitalReadEi5
_ZN2AH5ExtIO12digitalWriteEih5
_ZN2AH5ExtIO7pinModeEih5
_ZN2AH5ExtIO11analogWriteEtt11
_ZN2AH5ExtIO10analogReadEt30
_ZN2AH5ExtIO7pinModeEth53
_ZN2AH5ExtIO11digitalReadEt97
_ZN2AH5ExtIO17getIOElementOfPinEt150
_ZN2AH5ExtIO12digitalWriteEth152
_ZN2AH5ExtIO7inRangeItEEbT_S2_S2_171
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.cpp.func.html b/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.cpp.func.html deleted file mode 100644 index f168cece1..000000000 --- a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.cpp.func.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.cpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware/ExtendedInputOutput - ExtendedInputOutput.cpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:6868100.0 %
Date:2019-12-23 15:42:58Functions:1616100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH5ExtIO10analogReadEi5
_ZN2AH5ExtIO10analogReadEt30
_ZN2AH5ExtIO11analogWriteEii5
_ZN2AH5ExtIO11analogWriteEit2
_ZN2AH5ExtIO11analogWriteEti4
_ZN2AH5ExtIO11analogWriteEtt11
_ZN2AH5ExtIO11digitalReadEi5
_ZN2AH5ExtIO11digitalReadEt97
_ZN2AH5ExtIO12digitalWriteEih5
_ZN2AH5ExtIO12digitalWriteEth152
_ZN2AH5ExtIO17getIOElementOfPinEt150
_ZN2AH5ExtIO7inRangeItEEbT_S2_S2_171
_ZN2AH5ExtIO7pinModeEih5
_ZN2AH5ExtIO7pinModeEth53
_ZN2AH5ExtIO8shiftOutEiihh2
_ZN2AH5ExtIO8shiftOutEtthh4
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.cpp.gcov.html b/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.cpp.gcov.html deleted file mode 100644 index 71707163e..000000000 --- a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.cpp.gcov.html +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.cpp - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware/ExtendedInputOutput - ExtendedInputOutput.cpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:6868100.0 %
Date:2019-12-23 15:42:58Functions:1616100.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 "ExtendedInputOutput.hpp"
-       6             : #include <AH/Error/Error.hpp>
-       7             : 
-       8             : BEGIN_AH_NAMESPACE
-       9             : 
-      10             : namespace ExtIO {
-      11             : 
-      12             : template <class T>
-      13         171 : bool inRange(T target, T start, T end) {
-      14         171 :     return target >= start && target < end;
-      15             : }
-      16             : 
-      17         150 : ExtendedIOElement &getIOElementOfPin(pin_t pin) {
-      18         322 :     for (ExtendedIOElement &el : ExtendedIOElement::getAll())
-      19         172 :         if (pin < el.getStart())
-      20           1 :             break;
-      21         171 :         else if (inRange(pin, el.getStart(), el.getEnd()))
-      22         172 :             return el;
-      23             : 
-      24           2 :     FATAL_ERROR(
-      25             :         F("The given pin does not correspond to an Extended IO element."),
-      26             :         0x8888);
-      27             : 
-      28             :     // TODO: why doesn't this give a compilation error?
-      29             :     // No return statement. On desktop, FATAL_ERROR throws an exception, so
-      30             :     // I get why that works, but on Arduino, it just calls fatalErrorExit, which
-      31             :     // is marked 'noreturn'. However, if I remove the 'noreturn' attribute, and
-      32             :     // have it return immediately, it still compiles, without returning a valid
-      33             :     // reference.
-      34         150 : }
-      35             : 
-      36          53 : void pinMode(pin_t pin, uint8_t mode) {
-      37             :     // DEBUGFN(DEBUGVAR(pin) << '\t' << DEBUGVAR(mode));
-      38          53 :     if (pin < NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS) {
-      39          44 :         ::pinMode(pin, mode);
-      40          44 :     } else {
-      41           9 :         ExtendedIOElement &el = getIOElementOfPin(pin);
-      42           9 :         el.pinMode(pin - el.getStart(), mode);
-      43           9 :     }
-      44          53 : }
-      45           5 : void pinMode(int pin, uint8_t mode) { pinMode((pin_t)pin, mode); }
-      46             : 
-      47         152 : void digitalWrite(pin_t pin, uint8_t val) {
-      48             :     // DEBUGFN(DEBUGVAR(pin) << '\t' << DEBUGVAR(val));
-      49         152 :     if (pin < NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS) {
-      50          48 :         ::digitalWrite(pin, val);
-      51          48 :     } else {
-      52         104 :         ExtendedIOElement &el = getIOElementOfPin(pin);
-      53         104 :         el.digitalWrite(pin - el.getStart(), val);
-      54         104 :     }
-      55         152 : }
-      56           5 : void digitalWrite(int pin, uint8_t val) { digitalWrite((pin_t)pin, val); }
-      57             : 
-      58          97 : int digitalRead(pin_t pin) {
-      59          97 :     if (pin < NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS) {
-      60          85 :         return ::digitalRead(pin);
-      61             :     } else {
-      62          12 :         ExtendedIOElement &el = getIOElementOfPin(pin);
-      63          12 :         return el.digitalRead(pin - el.getStart());
-      64          12 :     }
-      65             :     return 0;
-      66          95 : }
-      67           5 : int digitalRead(int pin) { return digitalRead((pin_t)pin); }
-      68             : 
-      69           4 : void shiftOut(pin_t dataPin, pin_t clockPin, uint8_t bitOrder, uint8_t val) {
-      70           4 :     uint8_t i;
-      71             : 
-      72          36 :     for (i = 0; i < 8; i++) {
-      73          32 :         if (bitOrder == LSBFIRST)
-      74          16 :             digitalWrite(dataPin, !!(val & (1 << i)));
-      75             :         else
-      76          16 :             digitalWrite(dataPin, !!(val & (1 << (7 - i))));
-      77             : 
-      78          32 :         digitalWrite(clockPin, HIGH);
-      79          32 :         digitalWrite(clockPin, LOW);
-      80          32 :     }
-      81           4 : }
-      82           2 : void shiftOut(int dataPin, int clockPin, uint8_t bitOrder, uint8_t val) {
-      83           2 :     shiftOut((pin_t)dataPin, (pin_t)clockPin, bitOrder, val);
-      84           2 : }
-      85             : 
-      86          30 : analog_t analogRead(pin_t pin) {
-      87          30 :     if (pin < NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS) {
-      88          15 :         return ::analogRead(pin);
-      89             :     } else {
-      90          15 :         ExtendedIOElement &el = getIOElementOfPin(pin);
-      91          15 :         return el.analogRead(pin - el.getStart());
-      92          15 :     }
-      93             :     return 0;
-      94          30 : }
-      95           5 : analog_t analogRead(int pin) { return analogRead((pin_t)pin); }
-      96             : 
-      97          11 : void analogWrite(pin_t pin, analog_t val) {
-      98             :     // DEBUGFN(DEBUGVAR(pin) << '\t' << DEBUGVAR(val));
-      99          11 :     if (pin < NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS) {
-     100             : #ifndef ESP32
-     101           1 :         ::analogWrite(pin, val);
-     102             : #endif
-     103           1 :     } else {
-     104          10 :         ExtendedIOElement &el = getIOElementOfPin(pin);
-     105          10 :         el.analogWrite(pin - el.getStart(), val);
-     106          10 :     }
-     107          11 : }
-     108           2 : void analogWrite(int pin, analog_t val) { analogWrite((pin_t)pin, val); }
-     109           5 : void analogWrite(int pin, int val) { analogWrite((pin_t)pin, (analog_t)val); }
-     110           4 : void analogWrite(pin_t pin, int val) { analogWrite(pin, (analog_t)val); }
-     111             : 
-     112             : } // namespace ExtIO
-     113             : 
-     114             : END_AH_NAMESPACE
-     115             : 
-     116             : AH_DIAGNOSTIC_POP()
-
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/StaticSizeExtendedIOElement.hpp.func-sort-c.html b/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/StaticSizeExtendedIOElement.hpp.func-sort-c.html deleted file mode 100644 index c5187cc29..000000000 --- a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/StaticSizeExtendedIOElement.hpp.func-sort-c.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - LCOV - 3099ed165116e6d76ea29503530d28f462004753 - src/AH/Hardware/ExtendedInputOutput/StaticSizeExtendedIOElement.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware/ExtendedInputOutput - StaticSizeExtendedIOElement.hpp (source / functions)HitTotalCoverage
Test:3099ed165116e6d76ea29503530d28f462004753Lines:11100.0 %
Date:2019-11-27 21:57:59Functions:4666.7 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH27StaticSizeExtendedIOElementILt16EED0Ev0
_ZN2AH27StaticSizeExtendedIOElementILt8EED0Ev0
_ZN2AH27StaticSizeExtendedIOElementILt8EEC2Ev1
_ZN2AH27StaticSizeExtendedIOElementILt8EED2Ev1
_ZN2AH27StaticSizeExtendedIOElementILt16EEC2Ev5
_ZN2AH27StaticSizeExtendedIOElementILt16EED2Ev5
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/StaticSizeExtendedIOElement.hpp.func.html b/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/StaticSizeExtendedIOElement.hpp.func.html deleted file mode 100644 index fa9e52ee9..000000000 --- a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/StaticSizeExtendedIOElement.hpp.func.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - LCOV - 3099ed165116e6d76ea29503530d28f462004753 - src/AH/Hardware/ExtendedInputOutput/StaticSizeExtendedIOElement.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware/ExtendedInputOutput - StaticSizeExtendedIOElement.hpp (source / functions)HitTotalCoverage
Test:3099ed165116e6d76ea29503530d28f462004753Lines:11100.0 %
Date:2019-11-27 21:57:59Functions:4666.7 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH27StaticSizeExtendedIOElementILt16EEC2Ev5
_ZN2AH27StaticSizeExtendedIOElementILt16EED0Ev0
_ZN2AH27StaticSizeExtendedIOElementILt16EED2Ev5
_ZN2AH27StaticSizeExtendedIOElementILt8EEC2Ev1
_ZN2AH27StaticSizeExtendedIOElementILt8EED0Ev0
_ZN2AH27StaticSizeExtendedIOElementILt8EED2Ev1
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/StaticSizeExtendedIOElement.hpp.gcov.html b/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/StaticSizeExtendedIOElement.hpp.gcov.html deleted file mode 100644 index a8f98d32f..000000000 --- a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/StaticSizeExtendedIOElement.hpp.gcov.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - LCOV - 3099ed165116e6d76ea29503530d28f462004753 - src/AH/Hardware/ExtendedInputOutput/StaticSizeExtendedIOElement.hpp - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware/ExtendedInputOutput - StaticSizeExtendedIOElement.hpp (source / functions)HitTotalCoverage
Test:3099ed165116e6d76ea29503530d28f462004753Lines:11100.0 %
Date:2019-11-27 21:57:59Functions:4666.7 %
Legend: Lines: - hit - not hit -
-
- - - - - - - - -

-
          Line data    Source code
-
-       1             : /* ✔ */
-       2             : 
-       3             : #pragma once
-       4             : 
-       5             : #include <AH/Settings/Warnings.hpp>
-       6             : AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-       7             : 
-       8             : #include "ExtendedIOElement.hpp"
-       9             : #include <AH/Containers/ArrayHelpers.hpp>
-      10             : 
-      11             : BEGIN_AH_NAMESPACE
-      12             : 
-      13             : /** 
-      14             :  * @brief   A class for ExtendedIOElement%s with a fixed size.
-      15             :  * 
-      16             :  * This class is to make it easier to get an array of all pins of the element.
-      17             :  */
-      18             : template <uint16_t N>
-      19           6 : class StaticSizeExtendedIOElement : public ExtendedIOElement {
-      20             :   protected:
-      21             :     StaticSizeExtendedIOElement() : ExtendedIOElement{N} {} // LCOV_EXCL_LINE
-      22             : 
-      23             :   public:
-      24             :     /**
-      25             :      * @brief   Get an array containing all pins of the element.
-      26             :      */
-      27             :     Array<pin_t, N> pins() const {
-      28             :         return generateIncrementalArray<pin_t, N>(getStart());
-      29             :     }
-      30             : 
-      31             :     static constexpr uint16_t length() { return N; }
-      32             : };
-      33             : 
-      34             : END_AH_NAMESPACE
-      35             : 
-      36             : AH_DIAGNOSTIC_POP()
-
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/index-sort-f.html b/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/index-sort-f.html deleted file mode 100644 index 8b7a96d6f..000000000 --- a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/index-sort-f.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware/ExtendedInputOutput - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware/ExtendedInputOutputHitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:135135100.0 %
Date:2019-12-23 15:42:58Functions:415278.8 %
Legend: Rating: - low: < 75 % - medium: >= 75 % - high: >= 90 % -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
AnalogMultiplex.hpp -
100.0%
-
100.0 %44 / 4461.5 %16 / 26
ExtendedIOElement.cpp -
100.0%
-
100.0 %23 / 2390.0 %9 / 10
ExtendedInputOutput.cpp -
100.0%
-
100.0 %68 / 68100.0 %16 / 16
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/index-sort-l.html b/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/index-sort-l.html deleted file mode 100644 index 6a087c5a8..000000000 --- a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/index-sort-l.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware/ExtendedInputOutput - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware/ExtendedInputOutputHitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:135135100.0 %
Date:2019-12-23 15:42:58Functions:415278.8 %
Legend: Rating: - low: < 75 % - medium: >= 75 % - high: >= 90 % -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
ExtendedIOElement.cpp -
100.0%
-
100.0 %23 / 2390.0 %9 / 10
AnalogMultiplex.hpp -
100.0%
-
100.0 %44 / 4461.5 %16 / 26
ExtendedInputOutput.cpp -
100.0%
-
100.0 %68 / 68100.0 %16 / 16
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/index.html b/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/index.html deleted file mode 100644 index b805301d2..000000000 --- a/docs/Coverage/src/AH/Hardware/ExtendedInputOutput/index.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware/ExtendedInputOutput - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware/ExtendedInputOutputHitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:135135100.0 %
Date:2019-12-23 15:42:58Functions:415278.8 %
Legend: Rating: - low: < 75 % - medium: >= 75 % - high: >= 90 % -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
AnalogMultiplex.hpp -
100.0%
-
100.0 %44 / 4461.5 %16 / 26
ExtendedIOElement.cpp -
100.0%
-
100.0 %23 / 2390.0 %9 / 10
ExtendedInputOutput.cpp -
100.0%
-
100.0 %68 / 68100.0 %16 / 16
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/IncrementButton.cpp.func-sort-c.html b/docs/Coverage/src/AH/Hardware/IncrementButton.cpp.func-sort-c.html deleted file mode 100644 index 411c49b29..000000000 --- a/docs/Coverage/src/AH/Hardware/IncrementButton.cpp.func-sort-c.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware/IncrementButton.cpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware - IncrementButton.cpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:1919100.0 %
Date:2019-12-23 15:42:58Functions:11100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH15IncrementButton20updateImplementationEv7
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/IncrementButton.cpp.func.html b/docs/Coverage/src/AH/Hardware/IncrementButton.cpp.func.html deleted file mode 100644 index 342cbf5d7..000000000 --- a/docs/Coverage/src/AH/Hardware/IncrementButton.cpp.func.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware/IncrementButton.cpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware - IncrementButton.cpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:1919100.0 %
Date:2019-12-23 15:42:58Functions:11100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH15IncrementButton20updateImplementationEv7
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/IncrementButton.cpp.gcov.html b/docs/Coverage/src/AH/Hardware/IncrementButton.cpp.gcov.html deleted file mode 100644 index 250cb416c..000000000 --- a/docs/Coverage/src/AH/Hardware/IncrementButton.cpp.gcov.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware/IncrementButton.cpp - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware - IncrementButton.cpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:1919100.0 %
Date:2019-12-23 15:42:58Functions:11100.0 %
Legend: Lines: - hit - not hit -
-
- - - - - - - - -

-
          Line data    Source code
-
-       1             : #include "IncrementButton.hpp"
-       2             : 
-       3             : AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-       4             : 
-       5             : BEGIN_AH_NAMESPACE
-       6             : 
-       7           7 : IncrementButton::State IncrementButton::updateImplementation() {
-       8           7 :     Button::State incrState = button.update();
-       9             : 
-      10           7 :     if (incrState == Button::Released) {
-      11             :         // Button released, don't do anything
-      12             :         // This one is first to minimize overhead
-      13             :         // because most of the time, the button will
-      14             :         // be released
-      15           7 :     } else if (incrState == Button::Rising) {
-      16           1 :         longPressState = Initial;
-      17           6 :     } else if (incrState == Button::Falling) {
-      18           1 :         return Increment;
-      19             :     } else { // if (incrState == Button::Pressed)
-      20           4 :         auto now = millis();
-      21           4 :         if (longPressState == LongPress) {
-      22             :             // still long pressed
-      23           2 :             if (now - longPressRepeat >= LONG_PRESS_REPEAT_DELAY) {
-      24           1 :                 longPressRepeat += LONG_PRESS_REPEAT_DELAY;
-      25           1 :                 return Increment;
-      26             :             }
-      27           3 :         } else if (button.stableTime(now) >= LONG_PRESS_DELAY) {
-      28             :             // long press starts
-      29           1 :             longPressState = LongPress;
-      30           1 :             longPressRepeat = now;
-      31           1 :             return Increment;
-      32             :         }
-      33           4 :     }
-      34           4 :     return Nothing;
-      35           7 : }
-      36             : 
-      37             : END_AH_NAMESPACE
-      38             : 
-      39             : AH_DIAGNOSTIC_POP()
-
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/IncrementButton.hpp.func-sort-c.html b/docs/Coverage/src/AH/Hardware/IncrementButton.hpp.func-sort-c.html deleted file mode 100644 index ec3b54b9e..000000000 --- a/docs/Coverage/src/AH/Hardware/IncrementButton.hpp.func-sort-c.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware/IncrementButton.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware - IncrementButton.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:55100.0 %
Date:2019-12-23 15:42:58Functions:33100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH15IncrementButton5beginEv2
_ZN2AH15IncrementButtonC2ERKNS_6ButtonE2
_ZN2AH15IncrementButton6updateEv7
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/IncrementButton.hpp.func.html b/docs/Coverage/src/AH/Hardware/IncrementButton.hpp.func.html deleted file mode 100644 index f08baf091..000000000 --- a/docs/Coverage/src/AH/Hardware/IncrementButton.hpp.func.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware/IncrementButton.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware - IncrementButton.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:55100.0 %
Date:2019-12-23 15:42:58Functions:33100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH15IncrementButton5beginEv2
_ZN2AH15IncrementButton6updateEv7
_ZN2AH15IncrementButtonC2ERKNS_6ButtonE2
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/IncrementButton.hpp.gcov.html b/docs/Coverage/src/AH/Hardware/IncrementButton.hpp.gcov.html deleted file mode 100644 index 789484742..000000000 --- a/docs/Coverage/src/AH/Hardware/IncrementButton.hpp.gcov.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware/IncrementButton.hpp - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware - IncrementButton.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:55100.0 %
Date:2019-12-23 15:42:58Functions:33100.0 %
Legend: Lines: - hit - not hit -
-
- - - - - - - - -

-
          Line data    Source code
-
-       1             : /* ✔ */
-       2             : 
-       3             : #pragma once
-       4             : 
-       5             : #include <AH/Settings/Warnings.hpp>
-       6             : AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-       7             : 
-       8             : #include "Button.hpp"
-       9             : 
-      10             : BEGIN_AH_NAMESPACE
-      11             : 
-      12             : /**
-      13             :  * @brief   A class for buttons that increment some counter or setting.
-      14             :  * 
-      15             :  * It behaves the same way as a computer keyboard: when you press the button, 
-      16             :  * it increments the counter once. If you keep on pressing it for longer than
-      17             :  * a certain threshold, it keeps on incrementing at a faster rate, until you
-      18             :  * release it.
-      19             :  * 
-      20             :  * @ingroup AH_HardwareUtils
-      21             :  */
-      22             : class IncrementButton {
-      23             :   public:
-      24             :     /** 
-      25             :      * @brief   Create a IncrementButton.
-      26             :      * 
-      27             :      * @param   button
-      28             :      *          The button to read from.  
-      29             :      *          The button is copied.
-      30             :      */
-      31           2 :     IncrementButton(const Button &button) : button(button) {}
-      32             : 
-      33             :     /// @see     Button::begin
-      34           2 :     void begin() { button.begin(); }
-      35             : 
-      36             :     /**
-      37             :      * @brief   An enumeration of the different actions to be performed by the
-      38             :      *          counter.
-      39             :      * @todo    Add states for initial press.
-      40             :      */
-      41             :     enum State {
-      42             :         Nothing = 0, ///< The counter must not be incremented.
-      43             :         Increment,   ///< The counter must be incremented.
-      44             :     };
-      45             : 
-      46             :     /**
-      47             :      * @brief   Update and return the state of the increment button.
-      48             :      */
-      49           7 :     State update() { return state = updateImplementation(); }
-      50             : 
-      51             :     /**
-      52             :      * @brief   Return the state of the increment button without updating it.
-      53             :      * 
-      54             :      * Returns the same value as the last @ref update call.
-      55             :      */
-      56             :     State getState() const { return state; }
-      57             : 
-      58             : #ifdef AH_INDIVIDUAL_BUTTON_INVERT
-      59             :     /// @see    Button::invert
-      60             :     void invert() { button.invert(); }
-      61             : #endif
-      62             : 
-      63             :   protected:
-      64             :     State updateImplementation();
-      65             : 
-      66             :   private:
-      67             :     Button button;
-      68             : 
-      69             :     enum {
-      70             :         Initial,
-      71             :         LongPress,
-      72           2 :     } longPressState = Initial;
-      73             :     unsigned long longPressRepeat;
-      74             : 
-      75           2 :     State state = Nothing;
-      76             : };
-      77             : 
-      78             : END_AH_NAMESPACE
-      79             : 
-      80             : AH_DIAGNOSTIC_POP()
-
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/IncrementDecrementButtons.cpp.func-sort-c.html b/docs/Coverage/src/AH/Hardware/IncrementDecrementButtons.cpp.func-sort-c.html deleted file mode 100644 index bb61c2638..000000000 --- a/docs/Coverage/src/AH/Hardware/IncrementDecrementButtons.cpp.func-sort-c.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware/IncrementDecrementButtons.cpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware - IncrementDecrementButtons.cpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:4545100.0 %
Date:2019-12-23 15:42:58Functions:11100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH25IncrementDecrementButtons20updateImplementationEv19
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/IncrementDecrementButtons.cpp.func.html b/docs/Coverage/src/AH/Hardware/IncrementDecrementButtons.cpp.func.html deleted file mode 100644 index bf5a6d1c0..000000000 --- a/docs/Coverage/src/AH/Hardware/IncrementDecrementButtons.cpp.func.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware/IncrementDecrementButtons.cpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware - IncrementDecrementButtons.cpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:4545100.0 %
Date:2019-12-23 15:42:58Functions:11100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH25IncrementDecrementButtons20updateImplementationEv19
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/IncrementDecrementButtons.cpp.gcov.html b/docs/Coverage/src/AH/Hardware/IncrementDecrementButtons.cpp.gcov.html deleted file mode 100644 index c6c6efc17..000000000 --- a/docs/Coverage/src/AH/Hardware/IncrementDecrementButtons.cpp.gcov.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware/IncrementDecrementButtons.cpp - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware - IncrementDecrementButtons.cpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:4545100.0 %
Date:2019-12-23 15:42:58Functions:11100.0 %
Legend: Lines: - hit - not hit -
-
- - - - - - - - -

-
          Line data    Source code
-
-       1             : #include "IncrementDecrementButtons.hpp"
-       2             : 
-       3             : AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-       4             : 
-       5             : BEGIN_AH_NAMESPACE
-       6             : 
-       7             : IncrementDecrementButtons::State
-       8          19 : IncrementDecrementButtons::updateImplementation() {
-       9          19 :     Button::State incrState = incrementButton.update();
-      10          19 :     Button::State decrState = decrementButton.update();
-      11             : 
-      12          19 :     if (decrState == Button::Released && incrState == Button::Released) {
-      13             :         // Both released
-      14          21 :     } else if ((decrState == Button::Rising && incrState == Button::Released) ||
-      15          15 :                (incrState == Button::Rising && decrState == Button::Released) ||
-      16          15 :                (incrState == Button::Rising && decrState == Button::Rising)) {
-      17             :         // One released, the other rising → nothing
-      18             :         // now both released, so go to initial state
-      19           2 :         longPressState = Initial;
-      20          16 :     } else if (incrState == Button::Falling && decrState == Button::Falling) {
-      21             :         // Both falling → reset
-      22             :         // (rather unlikely, but just in case)
-      23           1 :         longPressState = AfterReset;
-      24           1 :         return Reset;
-      25          13 :     } else if (incrState == Button::Falling) {
-      26           2 :         if (decrState == Button::Pressed) {
-      27             :             // One pressed, the other falling → reset
-      28           1 :             longPressState = AfterReset;
-      29           1 :             return Reset;
-      30             :         } else {
-      31             :             // Increment falling, the other released → increment
-      32           1 :             return Increment;
-      33             :         }
-      34          11 :     } else if (decrState == Button::Falling) {
-      35           2 :         if (incrState == Button::Pressed) {
-      36             :             // One pressed, the other falling → reset
-      37           1 :             longPressState = AfterReset;
-      38           1 :             return Reset;
-      39             :         } else {
-      40             :             // Decrement falling, the other released → decrement
-      41           1 :             return Decrement;
-      42             :         }
-      43           9 :     } else if (incrState == Button::Pressed && decrState == Button::Pressed) {
-      44             :         // Both pressed → nothing
-      45           9 :     } else if (longPressState != AfterReset && incrState == Button::Pressed) {
-      46             :         // Not reset and increment pressed → long press?
-      47           4 :         auto now = millis();
-      48           4 :         if (longPressState == LongPress) {
-      49           2 :             if (now - longPressRepeat >= LONG_PRESS_REPEAT_DELAY) {
-      50           1 :                 longPressRepeat += LONG_PRESS_REPEAT_DELAY;
-      51           1 :                 return Increment;
-      52             :             }
-      53           3 :         } else if (incrementButton.stableTime() >= LONG_PRESS_DELAY) {
-      54           1 :             longPressState = LongPress;
-      55           1 :             longPressRepeat = now;
-      56           1 :             return Increment;
-      57             :         }
-      58           9 :     } else if (longPressState != AfterReset && decrState == Button::Pressed) {
-      59             :         // Not reset and decrement pressed → long press?
-      60           4 :         auto now = millis();
-      61           4 :         if (longPressState == LongPress) {
-      62           2 :             if (now - longPressRepeat >= LONG_PRESS_REPEAT_DELAY) {
-      63           1 :                 longPressRepeat += LONG_PRESS_REPEAT_DELAY;
-      64           1 :                 return Decrement;
-      65             :             }
-      66           3 :         } else if (decrementButton.stableTime() >= LONG_PRESS_DELAY) {
-      67           1 :             longPressState = LongPress;
-      68           1 :             longPressRepeat = now;
-      69           1 :             return Decrement;
-      70             :         }
-      71           4 :     }
-      72          10 :     return Nothing;
-      73          19 : }
-      74             : 
-      75             : END_AH_NAMESPACE
-      76             : 
-      77             : AH_DIAGNOSTIC_POP()
-
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/IncrementDecrementButtons.hpp.func-sort-c.html b/docs/Coverage/src/AH/Hardware/IncrementDecrementButtons.hpp.func-sort-c.html deleted file mode 100644 index 6ab119836..000000000 --- a/docs/Coverage/src/AH/Hardware/IncrementDecrementButtons.hpp.func-sort-c.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware/IncrementDecrementButtons.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware - IncrementDecrementButtons.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:99100.0 %
Date:2019-12-23 15:42:58Functions:33100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH25IncrementDecrementButtons5beginEv2
_ZN2AH25IncrementDecrementButtonsC2ERKNS_6ButtonES3_2
_ZN2AH25IncrementDecrementButtons6updateEv19
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/IncrementDecrementButtons.hpp.func.html b/docs/Coverage/src/AH/Hardware/IncrementDecrementButtons.hpp.func.html deleted file mode 100644 index a791e893c..000000000 --- a/docs/Coverage/src/AH/Hardware/IncrementDecrementButtons.hpp.func.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware/IncrementDecrementButtons.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware - IncrementDecrementButtons.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:99100.0 %
Date:2019-12-23 15:42:58Functions:33100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH25IncrementDecrementButtons5beginEv2
_ZN2AH25IncrementDecrementButtons6updateEv19
_ZN2AH25IncrementDecrementButtonsC2ERKNS_6ButtonES3_2
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/IncrementDecrementButtons.hpp.gcov.html b/docs/Coverage/src/AH/Hardware/IncrementDecrementButtons.hpp.gcov.html deleted file mode 100644 index fa9b2eacc..000000000 --- a/docs/Coverage/src/AH/Hardware/IncrementDecrementButtons.hpp.gcov.html +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware/IncrementDecrementButtons.hpp - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Hardware - IncrementDecrementButtons.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:99100.0 %
Date:2019-12-23 15:42:58Functions:33100.0 %
Legend: Lines: - hit - not hit -
-
- - - - - - - - -

-
          Line data    Source code
-
-       1             : /* ✔ */
-       2             : 
-       3             : #pragma once
-       4             : 
-       5             : #include <AH/Settings/Warnings.hpp>
-       6             : AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-       7             : 
-       8             : #include "Button.hpp"
-       9             : 
-      10             : BEGIN_AH_NAMESPACE
-      11             : 
-      12             : /**
-      13             :  * @brief   A class for buttons that increment and decrement some counter or 
-      14             :  *          setting.
-      15             :  * 
-      16             :  * It behaves the same way as a computer keyboard: when you press the increment
-      17             :  * (decrement) button, it increments (decrements) the counter once. 
-      18             :  * If you keep on pressing it for longer than a certain threshold, it keeps on 
-      19             :  * incrementing (decrementing) at a faster rate, until you release it.  
-      20             :  * If both the increment and the decrement button are pressed at once, it resets
-      21             :  * the counter.
-      22             :  * 
-      23             :  * @ingroup AH_HardwareUtils
-      24             :  */
-      25             : class IncrementDecrementButtons {
-      26             :   public:
-      27             :     /** 
-      28             :      * @brief   Create a IncrementDecrementButtons object.
-      29             :      * 
-      30             :      * @param   incrementButton
-      31             :      *          The button to increment the counter.  
-      32             :      *          The button is copied.
-      33             :      * @param   decrementButton
-      34             :      *          The button to decrement the counter.  
-      35             :      *          The button is copied.
-      36             :      */
-      37           2 :     IncrementDecrementButtons(const Button &incrementButton,
-      38             :                               const Button &decrementButton)
-      39           4 :         : incrementButton(incrementButton), decrementButton(decrementButton) {}
-      40             : 
-      41             :     /// @see     Button::begin
-      42           2 :     void begin() {
-      43           2 :         incrementButton.begin();
-      44           2 :         decrementButton.begin();
-      45           2 :     }
-      46             : 
-      47             :     /**
-      48             :      * @brief   An enumeration of the different actions to be performed by the
-      49             :      *          counter.
-      50             :      * @todo    Add states for initial press.
-      51             :      */
-      52             :     enum State {
-      53             :         Nothing = 0, ///< The counter should not be incremented.
-      54             :         Increment,   ///< The counter should be incremented.
-      55             :         Decrement,   ///< The counter should be decremented.
-      56             :         Reset,       ///< The counter should be reset to the initial value.
-      57             :     };
-      58             : 
-      59             :     /**
-      60             :      * @brief   Update and return the state of the increment/decrement button.
-      61             :      */
-      62          19 :     State update() { return state = updateImplementation(); }
-      63             : 
-      64             :     /**
-      65             :      * @brief   Return the state of the increment/decrement button without 
-      66             :      *          updating it.
-      67             :      * 
-      68             :      * Returns the same value as the last @ref update call.
-      69             :      */
-      70             :     State getState() const { return state; }
-      71             : 
-      72             : #ifdef AH_INDIVIDUAL_BUTTON_INVERT
-      73             :     /// @see    Button::invert
-      74             :     void invert() {
-      75             :         incrementButton.invert();
-      76             :         decrementButton.invert();
-      77             :     }
-      78             : #endif
-      79             : 
-      80             :   protected:
-      81             :     State updateImplementation();
-      82             : 
-      83             :   private:
-      84             :     Button incrementButton;
-      85             :     Button decrementButton;
-      86             : 
-      87             :     enum {
-      88             :         Initial,
-      89             :         LongPress,
-      90             :         AfterReset,
-      91           2 :     } longPressState = Initial;
-      92             :     unsigned long longPressRepeat;
-      93           2 :     State state = Nothing;
-      94             : };
-      95             : 
-      96             : END_AH_NAMESPACE
-      97             : 
-      98             : AH_DIAGNOSTIC_POP()
-
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/index-sort-f.html b/docs/Coverage/src/AH/Hardware/index-sort-f.html deleted file mode 100644 index 2da6cb70d..000000000 --- a/docs/Coverage/src/AH/Hardware/index-sort-f.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/HardwareHitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:116116100.0 %
Date:2019-12-23 15:42:58Functions:1919100.0 %
Legend: Rating: - low: < 75 % - medium: >= 75 % - high: >= 90 % -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
IncrementButton.cpp -
100.0%
-
100.0 %19 / 19100.0 %1 / 1
IncrementDecrementButtons.cpp -
100.0%
-
100.0 %45 / 45100.0 %1 / 1
IncrementButton.hpp -
100.0%
-
100.0 %5 / 5100.0 %3 / 3
IncrementDecrementButtons.hpp -
100.0%
-
100.0 %9 / 9100.0 %3 / 3
Button.cpp -
100.0%
-
100.0 %38 / 38100.0 %11 / 11
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/index-sort-l.html b/docs/Coverage/src/AH/Hardware/index-sort-l.html deleted file mode 100644 index 145dd7ed2..000000000 --- a/docs/Coverage/src/AH/Hardware/index-sort-l.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/HardwareHitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:116116100.0 %
Date:2019-12-23 15:42:58Functions:1919100.0 %
Legend: Rating: - low: < 75 % - medium: >= 75 % - high: >= 90 % -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
IncrementButton.hpp -
100.0%
-
100.0 %5 / 5100.0 %3 / 3
IncrementDecrementButtons.hpp -
100.0%
-
100.0 %9 / 9100.0 %3 / 3
IncrementButton.cpp -
100.0%
-
100.0 %19 / 19100.0 %1 / 1
Button.cpp -
100.0%
-
100.0 %38 / 38100.0 %11 / 11
IncrementDecrementButtons.cpp -
100.0%
-
100.0 %45 / 45100.0 %1 / 1
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Hardware/index.html b/docs/Coverage/src/AH/Hardware/index.html deleted file mode 100644 index 1cdca4fb3..000000000 --- a/docs/Coverage/src/AH/Hardware/index.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Hardware - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/HardwareHitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:116116100.0 %
Date:2019-12-23 15:42:58Functions:1919100.0 %
Legend: Rating: - low: < 75 % - medium: >= 75 % - high: >= 90 % -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
Button.cpp -
100.0%
-
100.0 %38 / 38100.0 %11 / 11
IncrementButton.cpp -
100.0%
-
100.0 %19 / 19100.0 %1 / 1
IncrementButton.hpp -
100.0%
-
100.0 %5 / 5100.0 %3 / 3
IncrementDecrementButtons.cpp -
100.0%
-
100.0 %45 / 45100.0 %1 / 1
IncrementDecrementButtons.hpp -
100.0%
-
100.0 %9 / 9100.0 %3 / 3
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Math/IncreaseBitDepth.hpp.func-sort-c.html b/docs/Coverage/src/AH/Math/IncreaseBitDepth.hpp.func-sort-c.html deleted file mode 100644 index ac198d939..000000000 --- a/docs/Coverage/src/AH/Math/IncreaseBitDepth.hpp.func-sort-c.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Math/IncreaseBitDepth.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Math - IncreaseBitDepth.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:1212100.0 %
Date:2019-12-23 15:42:58Functions:33100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH16increaseBitDepthILm7ELm3EhhEET1_T2_8
_ZN2AH20increaseBitDepthImplILm4ELm3EhhEENSt9enable_ifIXleT_mlLi2ET0_ET1_E4typeET2_8
_ZN2AH20increaseBitDepthImplILm7ELm3EhhEENSt9enable_ifIXgtT_mlLi2ET0_ET1_E4typeET2_8
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Math/IncreaseBitDepth.hpp.func.html b/docs/Coverage/src/AH/Math/IncreaseBitDepth.hpp.func.html deleted file mode 100644 index 603840f76..000000000 --- a/docs/Coverage/src/AH/Math/IncreaseBitDepth.hpp.func.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Math/IncreaseBitDepth.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Math - IncreaseBitDepth.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:1212100.0 %
Date:2019-12-23 15:42:58Functions:33100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH16increaseBitDepthILm7ELm3EhhEET1_T2_8
_ZN2AH20increaseBitDepthImplILm4ELm3EhhEENSt9enable_ifIXleT_mlLi2ET0_ET1_E4typeET2_8
_ZN2AH20increaseBitDepthImplILm7ELm3EhhEENSt9enable_ifIXgtT_mlLi2ET0_ET1_E4typeET2_8
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Math/IncreaseBitDepth.hpp.gcov.html b/docs/Coverage/src/AH/Math/IncreaseBitDepth.hpp.gcov.html deleted file mode 100644 index 92f519091..000000000 --- a/docs/Coverage/src/AH/Math/IncreaseBitDepth.hpp.gcov.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Math/IncreaseBitDepth.hpp - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Math - IncreaseBitDepth.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:1212100.0 %
Date:2019-12-23 15:42:58Functions:33100.0 %
Legend: Lines: - hit - not hit -
-
- - - - - - - - -

-
          Line data    Source code
-
-       1             : #pragma once
-       2             : 
-       3             : #include <AH/Settings/Warnings.hpp>
-       4             : AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-       5             : 
-       6             : #include <AH/STL/type_traits> // enable_if
-       7             : #include <limits.h>           // CHAR_BIT
-       8             : #include <stddef.h>           // size_t
-       9             : 
-      10             : BEGIN_AH_NAMESPACE
-      11             : 
-      12             : template <size_t Bits_out, size_t Bits_in, class T_out, class T_in>
-      13             : std::enable_if_t<(Bits_out <= 2 * Bits_in), T_out>
-      14             : increaseBitDepthImpl(T_in in);
-      15             : 
-      16             : template <size_t Bits_out, size_t Bits_in, class T_out, class T_in>
-      17             : std::enable_if_t<(Bits_out > 2 * Bits_in), T_out>
-      18           8 : increaseBitDepthImpl(T_in in) {
-      19           8 :     constexpr size_t leftShift = Bits_out - Bits_in;
-      20          24 :     return (T_out(in) << leftShift) |
-      21           8 :            increaseBitDepthImpl<leftShift, Bits_in, T_out>(in);
-      22           8 : }
-      23             : 
-      24             : template <size_t Bits_out, size_t Bits_in, class T_out, class T_in>
-      25             : std::enable_if_t<(Bits_out <= 2 * Bits_in), T_out>
-      26           8 : increaseBitDepthImpl(T_in in) {
-      27           8 :     constexpr size_t leftShift = Bits_out - Bits_in;
-      28           8 :     constexpr size_t rightShift = Bits_in - leftShift;
-      29          16 :     return (T_out(in) << leftShift) | (in >> rightShift);
-      30           8 : }
-      31             : 
-      32             : /// @addtogroup    AH_Math
-      33             : /// @{
-      34             : 
-      35             : /**
-      36             :  * @brief   Increase the bit depth of the given value from `Bits_in` bits wide
-      37             :  *          to `Bits_out` bits wide, evenly distributing the error across the 
-      38             :  *          entire range, such that the error for each element is between -0.5
-      39             :  *          and +0.5.
-      40             :  * 
-      41             :  * For example, converting 3-bit numbers to 7-bit numbers would result in the
-      42             :  * following:
-      43             :  * 
-      44             :  * | in (dec) | in (bin) | out (bin) | out (dec) | exact  | error |
-      45             :  * |:--------:|:--------:|:---------:|:---------:|:------:|:-----:|
-      46             :  * | 0        | 000      | 000'0000  | 0         | 0.00   | +0.00 |
-      47             :  * | 1        | 001      | 001'0010  | 18        | 18.14  | +0.14 |
-      48             :  * | 2        | 010      | 010'0100  | 36        | 36.29  | +0.29 |
-      49             :  * | 3        | 011      | 011'0110  | 54        | 54.43  | +0.43 |
-      50             :  * | 4        | 100      | 100'1001  | 73        | 72.57  | -0.43 |
-      51             :  * | 5        | 101      | 101'1011  | 91        | 90.71  | -0.29 |
-      52             :  * | 6        | 110      | 110'1101  | 109       | 108.86 | -0.14 |
-      53             :  * | 7        | 111      | 111'1111  | 127       | 127.00 | +0.00 |
-      54             :  * 
-      55             :  * @tparam  Bits_out 
-      56             :  *          The number of bits of the output range.
-      57             :  * @tparam  Bits_in 
-      58             :  *          The number of bits of the input range.
-      59             :  * @tparam  T_out 
-      60             :  *          The type of the output (return type).
-      61             :  * @tparam  T_in 
-      62             :  *          The type of the input.
-      63             :  * @param   in 
-      64             :  *          The value to scale up.
-      65             :  * @return  The scaled up value.
-      66             :  */
-      67             : template <size_t Bits_out, size_t Bits_in, class T_out, class T_in>
-      68           8 : T_out increaseBitDepth(T_in in) {
-      69             :     static_assert(Bits_in <= sizeof(T_in) * CHAR_BIT,
-      70             :                   "Error: Bits_in > bits(T_in)");
-      71             :     static_assert(Bits_out <= sizeof(T_out) * CHAR_BIT,
-      72             :                   "Error: Bits_out > bits(T_out)");
-      73           8 :     return increaseBitDepthImpl<Bits_out, Bits_in, T_out>(in);
-      74             : }
-      75             : 
-      76             : /// @}
-      77             : 
-      78             : END_AH_NAMESPACE
-      79             : 
-      80             : AH_DIAGNOSTIC_POP()
-
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Math/index-sort-f.html b/docs/Coverage/src/AH/Math/index-sort-f.html deleted file mode 100644 index 6ade1a3c6..000000000 --- a/docs/Coverage/src/AH/Math/index-sort-f.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Math - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/MathHitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:1212100.0 %
Date:2019-12-23 15:42:58Functions:33100.0 %
Legend: Rating: - low: < 75 % - medium: >= 75 % - high: >= 90 % -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
IncreaseBitDepth.hpp -
100.0%
-
100.0 %12 / 12100.0 %3 / 3
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Math/index-sort-l.html b/docs/Coverage/src/AH/Math/index-sort-l.html deleted file mode 100644 index 7b3633c28..000000000 --- a/docs/Coverage/src/AH/Math/index-sort-l.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Math - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/MathHitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:1212100.0 %
Date:2019-12-23 15:42:58Functions:33100.0 %
Legend: Rating: - low: < 75 % - medium: >= 75 % - high: >= 90 % -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
IncreaseBitDepth.hpp -
100.0%
-
100.0 %12 / 12100.0 %3 / 3
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Math/index.html b/docs/Coverage/src/AH/Math/index.html deleted file mode 100644 index 9e414dce1..000000000 --- a/docs/Coverage/src/AH/Math/index.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Math - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/MathHitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:1212100.0 %
Date:2019-12-23 15:42:58Functions:33100.0 %
Legend: Rating: - low: < 75 % - medium: >= 75 % - high: >= 90 % -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
IncreaseBitDepth.hpp -
100.0%
-
100.0 %12 / 12100.0 %3 / 3
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/PrintStream/PrintStream.hpp.func-sort-c.html b/docs/Coverage/src/AH/PrintStream/PrintStream.hpp.func-sort-c.html deleted file mode 100644 index 11bae1e78..000000000 --- a/docs/Coverage/src/AH/PrintStream/PrintStream.hpp.func-sort-c.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/PrintStream/PrintStream.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/PrintStream - PrintStream.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:44100.0 %
Date:2019-12-23 15:42:58Functions:22100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZlsRSoh2
_ZlsRSoPK19__FlashStringHelper29
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/PrintStream/PrintStream.hpp.func.html b/docs/Coverage/src/AH/PrintStream/PrintStream.hpp.func.html deleted file mode 100644 index 23c7942f6..000000000 --- a/docs/Coverage/src/AH/PrintStream/PrintStream.hpp.func.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/PrintStream/PrintStream.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/PrintStream - PrintStream.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:44100.0 %
Date:2019-12-23 15:42:58Functions:22100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZlsRSoPK19__FlashStringHelper29
_ZlsRSoh2
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/PrintStream/PrintStream.hpp.gcov.html b/docs/Coverage/src/AH/PrintStream/PrintStream.hpp.gcov.html deleted file mode 100644 index 9e1516fcc..000000000 --- a/docs/Coverage/src/AH/PrintStream/PrintStream.hpp.gcov.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/PrintStream/PrintStream.hpp - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/PrintStream - PrintStream.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:44100.0 %
Date:2019-12-23 15:42:58Functions:22100.0 %
Legend: Lines: - hit - not hit -
-
- - - - - - - - -

-
          Line data    Source code
-
-       1             : /**
-       2             :  * @brief   [PrintStream library](https://github.com/tttapa/Arduino-PrintStream/blob/6a9e0d365be0b3d84187daa2a8a7bda8d541472e/src/PrintStream.h)
-       3             :  */
-       4             : 
-       5             : #ifndef PrintStream_h
-       6             : #define PrintStream_h
-       7             : 
-       8             : #include <AH/Settings/Warnings.hpp>
-       9             : AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-      10             : 
-      11             : AH_DIAGNOSTIC_EXTERNAL_HEADER()
-      12             : #include <Arduino.h> // Print
-      13             : AH_DIAGNOSTIC_POP()
-      14             : 
-      15             : /// @addtogroup  AH_PrintStream
-      16             : /// @{
-      17             : 
-      18             : typedef Print &manipulator(Print &);
-      19             : 
-      20             : Print &endl(Print &printer);
-      21             : Print &flush(Print &printer);
-      22             : Print &hex(Print &printer);
-      23             : Print &bin(Print &printer);
-      24             : Print &dec(Print &printer);
-      25             : /* Print &oct(Print &printer); */
-      26             : Print &boolalpha(Print &printer);
-      27             : Print &noboolalpha(Print &printer);
-      28             : Print &leadingzeros(Print &printer);
-      29             : Print &noleadingzeros(Print &printer);
-      30             : Print &uppercase(Print &printer);
-      31             : Print &nouppercase(Print &printer);
-      32             : Print &showbase(Print &printer);
-      33             : Print &noshowbase(Print &printer);
-      34             : 
-      35             : Print &operator<<(Print &printer, const __FlashStringHelper *s);
-      36             : #ifdef ARDUINO
-      37             : Print &operator<<(Print &printer, const String &s);
-      38             : #endif
-      39             : Print &operator<<(Print &printer, const char s[]);
-      40             : Print &operator<<(Print &printer, char c);
-      41             : Print &operator<<(Print &printer, unsigned char c);
-      42             : Print &operator<<(Print &printer, int i);
-      43             : Print &operator<<(Print &printer, unsigned int i);
-      44             : Print &operator<<(Print &printer, int8_t i);
-      45             : Print &operator<<(Print &printer, long i);
-      46             : Print &operator<<(Print &printer, unsigned long i);
-      47             : Print &operator<<(Print &printer, double d);
-      48             : Print &operator<<(Print &printer, const Printable &p);
-      49             : Print &operator<<(Print &printer, bool b);
-      50             : 
-      51             : Print &operator<<(Print &printer, manipulator pf);
-      52             : 
-      53             : struct Setbase {
-      54             :     uint8_t M_base;
-      55             : };
-      56             : Setbase setbase(uint8_t base);
-      57             : Print &operator<<(Print &printer, Setbase f);
-      58             : 
-      59             : struct Setprecision {
-      60             :     int M_n;
-      61             : };
-      62             : Setprecision setprecision(int n);
-      63             : Print &operator<<(Print &printer, Setprecision f);
-      64             : 
-      65             : struct Setbytesep {
-      66             :     char M_bytesep;
-      67             : };
-      68             : Setbytesep setbytesep(char bytesep);
-      69             : Print &operator<<(Print &printer, Setbytesep f);
-      70             : 
-      71             : /// @}
-      72             : 
-      73             : #ifndef ARDUINO
-      74             : 
-      75             : #include <iomanip>
-      76             : #include <iostream>
-      77             : 
-      78             : // TODO: check conflicts between Arduino version and C++ STL version
-      79             : using std::endl;
-      80             : // using std::setbase;
-      81             : // using std::setprecision;
-      82             : using std::boolalpha;
-      83             : using std::dec;
-      84             : using std::flush;
-      85             : using std::hex;
-      86             : using std::noboolalpha;
-      87             : using std::noshowbase;
-      88             : using std::nouppercase;
-      89             : using std::showbase;
-      90             : using std::uppercase;
-      91             : 
-      92           2 : inline std::ostream &operator<<(std::ostream &os, uint8_t u) {
-      93             :     // I'm lazy, I should probably implement one for uint8_t to get the leading
-      94             :     // zeros right
-      95           2 :     return os << static_cast<unsigned short>(u);
-      96             : }
-      97             : 
-      98          29 : inline std::ostream &operator<<(std::ostream &os,
-      99             :                                 const __FlashStringHelper *s) {
-     100          29 :     return os << reinterpret_cast<const char *>(s);
-     101             : }
-     102             : 
-     103             : #endif
-     104             : 
-     105             : AH_DIAGNOSTIC_POP()
-     106             : 
-     107             : #endif // PrintStream_h
-
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/PrintStream/index-sort-f.html b/docs/Coverage/src/AH/PrintStream/index-sort-f.html deleted file mode 100644 index 7b6635a63..000000000 --- a/docs/Coverage/src/AH/PrintStream/index-sort-f.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/PrintStream - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/PrintStreamHitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:44100.0 %
Date:2019-12-23 15:42:58Functions:22100.0 %
Legend: Rating: - low: < 75 % - medium: >= 75 % - high: >= 90 % -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
PrintStream.hpp -
100.0%
-
100.0 %4 / 4100.0 %2 / 2
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/PrintStream/index-sort-l.html b/docs/Coverage/src/AH/PrintStream/index-sort-l.html deleted file mode 100644 index b0b5a2b75..000000000 --- a/docs/Coverage/src/AH/PrintStream/index-sort-l.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/PrintStream - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/PrintStreamHitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:44100.0 %
Date:2019-12-23 15:42:58Functions:22100.0 %
Legend: Rating: - low: < 75 % - medium: >= 75 % - high: >= 90 % -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
PrintStream.hpp -
100.0%
-
100.0 %4 / 4100.0 %2 / 2
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/PrintStream/index.html b/docs/Coverage/src/AH/PrintStream/index.html deleted file mode 100644 index d357d9003..000000000 --- a/docs/Coverage/src/AH/PrintStream/index.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/PrintStream - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/PrintStreamHitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:44100.0 %
Date:2019-12-23 15:42:58Functions:22100.0 %
Legend: Rating: - low: < 75 % - medium: >= 75 % - high: >= 90 % -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
PrintStream.hpp -
100.0%
-
100.0 %4 / 4100.0 %2 / 2
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Timing/MillisMicrosTimer.hpp.func-sort-c.html b/docs/Coverage/src/AH/Timing/MillisMicrosTimer.hpp.func-sort-c.html deleted file mode 100644 index 0dcee4256..000000000 --- a/docs/Coverage/src/AH/Timing/MillisMicrosTimer.hpp.func-sort-c.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Timing/MillisMicrosTimer.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Timing - MillisMicrosTimer.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:1111100.0 %
Date:2019-12-23 15:42:58Functions:66100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH5TimerIXadL_Z6microsvEEE5beginEv1
_ZN2AH5TimerIXadL_Z6microsvEEEC2Em1
_ZN2AH5TimerIXadL_Z6millisvEEE5beginEv1
_ZN2AH5TimerIXadL_Z6millisvEEEC2Em1
_ZN2AH5TimerIXadL_Z6microsvEEEcvbEv10
_ZN2AH5TimerIXadL_Z6millisvEEEcvbEv10
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Timing/MillisMicrosTimer.hpp.func.html b/docs/Coverage/src/AH/Timing/MillisMicrosTimer.hpp.func.html deleted file mode 100644 index 04441fcc0..000000000 --- a/docs/Coverage/src/AH/Timing/MillisMicrosTimer.hpp.func.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Timing/MillisMicrosTimer.hpp - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Timing - MillisMicrosTimer.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:1111100.0 %
Date:2019-12-23 15:42:58Functions:66100.0 %
Legend: Lines: - hit - not hit -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
_ZN2AH5TimerIXadL_Z6microsvEEE5beginEv1
_ZN2AH5TimerIXadL_Z6microsvEEEC2Em1
_ZN2AH5TimerIXadL_Z6microsvEEEcvbEv10
_ZN2AH5TimerIXadL_Z6millisvEEE5beginEv1
_ZN2AH5TimerIXadL_Z6millisvEEEC2Em1
_ZN2AH5TimerIXadL_Z6millisvEEEcvbEv10
-
-
- - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Timing/MillisMicrosTimer.hpp.gcov.html b/docs/Coverage/src/AH/Timing/MillisMicrosTimer.hpp.gcov.html deleted file mode 100644 index f9fb07606..000000000 --- a/docs/Coverage/src/AH/Timing/MillisMicrosTimer.hpp.gcov.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Timing/MillisMicrosTimer.hpp - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/Timing - MillisMicrosTimer.hpp (source / functions)HitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:1111100.0 %
Date:2019-12-23 15:42:58Functions:66100.0 %
Legend: Lines: - hit - not hit -
-
- - - - - - - - -

-
          Line data    Source code
-
-       1             : #pragma once
-       2             : 
-       3             : #include <AH/Settings/Warnings.hpp>
-       4             : AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-       5             : 
-       6             : AH_DIAGNOSTIC_EXTERNAL_HEADER()
-       7             : #include <Arduino.h> // millis, micros
-       8             : AH_DIAGNOSTIC_POP()
-       9             : 
-      10             : #include <AH/Settings/NamespaceSettings.hpp>
-      11             : 
-      12             : BEGIN_AH_NAMESPACE
-      13             : 
-      14             : /// A function type that returns a time value.
-      15             : using timefunction = unsigned long (*)();
-      16             : 
-      17             : /// @addtogroup    AH_Timing
-      18             : /// @{
-      19             : 
-      20             : /**
-      21             :  * @brief   A class for easily managing timed events. A wrapper for "Blink 
-      22             :  *          Without Delay".
-      23             :  * 
-      24             :  * @tparam time
-      25             :  *         The time function to use.
-      26             :  */
-      27             : template <timefunction time = micros>
-      28             : class Timer {
-      29             :   public:
-      30             :     /**
-      31             :      * @brief   Constructor.
-      32             :      * @param   interval
-      33             :      *          The interval between two events.
-      34             :      */
-      35           2 :     Timer(unsigned long interval) : interval(interval) {
-      36             : #ifdef ARDUINO
-      37             :         begin();
-      38             : #endif
-      39           2 :     }
-      40             :     /// Initialize the timer.
-      41           2 :     void begin() { previous = time() - interval; }
-      42             :     /// Update the timer and return true if the event should fire.
-      43          20 :     explicit operator bool() {
-      44          20 :         auto now = time();
-      45          20 :         if (now - previous >= interval) {
-      46           8 :             previous += interval;
-      47           8 :             return true;
-      48             :         }
-      49          12 :         return false;
-      50          20 :     }
-      51             : 
-      52             :     /// Get the interval of the timer.
-      53             :     unsigned long getInterval() const { return interval; }
-      54             :     /// Set the interval of the timer.
-      55             :     void setInterval(unsigned long interval) { this->interval = interval; }
-      56             : 
-      57             :   private:
-      58             :     unsigned long interval;
-      59           2 :     unsigned long previous = 0;
-      60             : };
-      61             : 
-      62             : /// @}
-      63             : 
-      64             : END_AH_NAMESPACE
-      65             : 
-      66             : AH_DIAGNOSTIC_POP()
-
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Timing/index-sort-f.html b/docs/Coverage/src/AH/Timing/index-sort-f.html deleted file mode 100644 index a3749fa62..000000000 --- a/docs/Coverage/src/AH/Timing/index-sort-f.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Timing - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/TimingHitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:1111100.0 %
Date:2019-12-23 15:42:58Functions:66100.0 %
Legend: Rating: - low: < 75 % - medium: >= 75 % - high: >= 90 % -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
MillisMicrosTimer.hpp -
100.0%
-
100.0 %11 / 11100.0 %6 / 6
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Timing/index-sort-l.html b/docs/Coverage/src/AH/Timing/index-sort-l.html deleted file mode 100644 index 2ab2ff0e4..000000000 --- a/docs/Coverage/src/AH/Timing/index-sort-l.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Timing - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/TimingHitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:1111100.0 %
Date:2019-12-23 15:42:58Functions:66100.0 %
Legend: Rating: - low: < 75 % - medium: >= 75 % - high: >= 90 % -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
MillisMicrosTimer.hpp -
100.0%
-
100.0 %11 / 11100.0 %6 / 6
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/src/AH/Timing/index.html b/docs/Coverage/src/AH/Timing/index.html deleted file mode 100644 index 7c1c5cbf3..000000000 --- a/docs/Coverage/src/AH/Timing/index.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - LCOV - 52d245673dfd4cc8f3b584eac390ff0364ff06b7 - src/AH/Timing - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - src/AH/TimingHitTotalCoverage
Test:52d245673dfd4cc8f3b584eac390ff0364ff06b7Lines:1111100.0 %
Date:2019-12-23 15:42:58Functions:66100.0 %
Legend: Rating: - low: < 75 % - medium: >= 75 % - high: >= 90 % -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
MillisMicrosTimer.hpp -
100.0%
-
100.0 %11 / 11100.0 %6 / 6
-
-
- - - - -
Generated by: LCOV version 1.14-5-g4ff2ed6
-
- - - diff --git a/docs/Coverage/updown.png b/docs/Coverage/updown.png deleted file mode 100644 index aa56a238b..000000000 Binary files a/docs/Coverage/updown.png and /dev/null differ diff --git a/docs/Doxygen/Screenshot-Arduino-IDE-Debug.png b/docs/Doxygen/Screenshot-Arduino-IDE-Debug.png deleted file mode 100644 index 5c4955222..000000000 Binary files a/docs/Doxygen/Screenshot-Arduino-IDE-Debug.png and /dev/null differ diff --git a/docs/Doxygen/annotated.html b/docs/Doxygen/annotated.html deleted file mode 100644 index a434c5c49..000000000 --- a/docs/Doxygen/annotated.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - -Arduino Helpers: Class List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
Class List
-
-
-
Here are the classes, structs, unions and interfaces with brief descriptions:
-
[detail level 12]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 Ndetail
 CIncrementorUtility class that acts as a functor to return incremental values
 CAnalogMultiplexA class for reading multiplexed analog inputs
 CArrayAn array wrapper for easy copying, comparing, and iterating
 CArraySliceClass for a view on a slice of an array
 CIterator
 CBitArrayA class for arrays of bits
 CButtonA class for reading and debouncing buttons and switches
 CButtonMatrixA class that reads the states of a button matrix
 CDotBarDisplayLEDsA class for LED bars
 CDoublyLinkableA class that can be inherited from to allow inserting into a DoublyLinkedList
 CDoublyLinkedListA class for doubly linked lists
 Cnode_iteratorForward bidirectional doubly linked list iterator
 Cnode_iterator_baseBase class for doubly linked list iterators
 Creverse_node_iteratorReverse bidirectional doubly linked list iterator
 CEMAA class for single-pole infinite impulse response filters or exponential moving average filters
 CEMA_fA class for single-pole infinite impulse response filters or exponential moving average filters
 CExtendedIOElementAn abstract base class for Extended Input/Output elements
 CFilteredAnalogA class that reads and filters an analog input
 CFrequencyType-safe class for frequency values
 CHysteresisA class for applying hysteresis to a given input
 CIncrementButtonA class for buttons that increment some counter or setting
 CIncrementDecrementButtonsA class for buttons that increment and decrement some counter or setting
 CLEDsA class for collections of LEDs that can display ranges
 CMAX7219A class for LED outputs using the MAX7219 LED display driver
 CMAX7219_BaseA base class for classes that control MAX7219 LED drivers
 CMAX7219SevenSegmentDisplayA class for 8-digit 7-segment displays with a MAX7219 driver
 CNormalUpdatable
 CSetbase
 CSetbytesep
 CSetprecision
 CShiftRegisterOutA class for serial-in/parallel-out shift registers, like the 74HC595
 CShiftRegisterOutBaseA class for serial-in/parallel-out shift registers, like the 74HC595
 CShiftRegisterOutRGBA struct for setting the RGB mode for RGB shift registers
 CSPIShiftRegisterOutA class for serial-in/parallel-out shift registers, like the 74HC595 that are connected to the SPI bus
 CStaticSizeExtendedIOElementA class for ExtendedIOElements with a fixed size
 CTimerA class for easily managing timed events
 CUniquePtrVery basic smart pointer
 CUpdatableA super class for object that have to be updated regularly
-
-
- - - - diff --git a/docs/Doxygen/bc_s.png b/docs/Doxygen/bc_s.png deleted file mode 100644 index 91327433e..000000000 Binary files a/docs/Doxygen/bc_s.png and /dev/null differ diff --git a/docs/Doxygen/bdwn.png b/docs/Doxygen/bdwn.png deleted file mode 100644 index f0d2d937d..000000000 Binary files a/docs/Doxygen/bdwn.png and /dev/null differ diff --git a/docs/Doxygen/classes.html b/docs/Doxygen/classes.html deleted file mode 100644 index a09f246e5..000000000 --- a/docs/Doxygen/classes.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - - -Arduino Helpers: Class Index - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
Class Index
-
-
-
a | b | d | e | f | h | i | l | m | n | r | s | t | u
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  a  
-
DoublyLinkedList   IncrementDecrementButtons   DoublyLinkedList::node_iterator_base   StaticSizeExtendedIOElement   
  e  
-
Incrementor (detail)   NormalUpdatable   
  t  
-
AnalogMultiplex   ArraySlice::Iterator   
  r  
-
Array   EMA   
  l  
-
Timer   
ArraySlice   EMA_f   DoublyLinkedList::reverse_node_iterator   
  u  
-
  b  
-
ExtendedIOElement   LEDs   
  s  
-
  f  
-
  m  
-
UniquePtr   
BitArray   Setbase   Updatable   
Button   FilteredAnalog   MAX7219   Setbytesep   
ButtonMatrix   Frequency   MAX7219_Base   Setprecision   
  d  
-
  h  
-
MAX7219SevenSegmentDisplay   ShiftRegisterOut   
  n  
-
ShiftRegisterOutBase   
DotBarDisplayLEDs   Hysteresis   ShiftRegisterOutRGB   
DoublyLinkable   
  i  
-
DoublyLinkedList::node_iterator   SPIShiftRegisterOut   
IncrementButton   
-
a | b | d | e | f | h | i | l | m | n | r | s | t | u
-
- - - - diff --git a/docs/Doxygen/closed.png b/docs/Doxygen/closed.png deleted file mode 100644 index de1c881b1..000000000 Binary files a/docs/Doxygen/closed.png and /dev/null differ diff --git a/docs/Doxygen/custom_stylesheet.css b/docs/Doxygen/custom_stylesheet.css deleted file mode 100644 index 8fad23a83..000000000 --- a/docs/Doxygen/custom_stylesheet.css +++ /dev/null @@ -1,220 +0,0 @@ -img.xbm { - image-rendering:optimizeSpeed; /* Legal fallback */ - image-rendering:-moz-crisp-edges; /* Firefox */ - image-rendering:-o-crisp-edges; /* Opera */ - image-rendering:-webkit-optimize-contrast; /* Safari */ - image-rendering:optimize-contrast; /* CSS3 Proposed */ - image-rendering:crisp-edges; /* CSS4 Proposed */ - image-rendering:pixelated; /* CSS4 Proposed */ - -ms-interpolation-mode:nearest-neighbor; /* IE8+ */ - border: 1px solid #CCC; -} -div.image { - text-align: initial; -} -div.contents { - max-width: 1100px; - box-sizing: border-box; - margin: 0 auto 6em auto; - padding: 1em 2.5em 2.5em 2.5em; - box-shadow: 1px 1px 5px #555; - background-color: white; -} -div.memitem { - display: block !important; - overflow: inherit; - clear: both; -} -div.memproto, div.memdoc, div.directory, div.dyncontent { - overflow: auto; -} -body { - background-color: #DDD; - width: 100%; -} -* { - max-width: 100%; -} -iframe { - max-width: initial; -} -#MSearchField { - max-width: initial; -} -body > div.header, div.PageDoc > div.header { - max-width: 1100px; - box-sizing: border-box; - margin: auto; - padding: 0.8em 2.5em 0.6em 2.5em; - box-shadow: 1px 0px 5px #555; - border-bottom: solid white 5px; -} -div.ingroups { - font-size: initial; -} -hr.footer { display: none; } -address.footer { - box-shadow: 1px 1px 4px #555; - background-color: white; - position: fixed; - bottom: 0; - left: 0; - width: 100%; - padding: 0; -} -address.footer * { - display: inline-block; -} -address.footer > small { - padding: 0.6em; -} -div#top { - /* position: sticky; */ - top: 0; - left: 0; - width: 100%; - background-color: white; - z-index: 100; -} -body > div.header { - position: relative; - top: 0; - left: 0; - width: 100%; -} -ul.sm-dox { - background-color: #dde; - background-image: none; - box-shadow: 0px 1px 2px #458; -} -div.navpath > ul { - background-color: #dde; - background-image: none; - box-shadow: 0px 1px 1px #569; - margin-bottom: -3px; - z-index: 101; - position: relative; -} -.directory td > .el { - display: inline-block; - padding: 0.4em 0.5em 0.4em 0; -} -.directory td.desc { - padding: 0.4em 0.5em 0.4em 0.5em; -} -h2.memtitle, .memproto { - background-color: #dde; - background-image: none; - border-radius: 0; -} -.memdoc { - border-radius: 0; -} -#MSearchResultsWindow { - margin-top: 8px; -} -code { - background-color: #f4f4ff; - padding: 0 1px; -} - -/* --------------------- */ - -/* Portrait and Landscape */ -@media only screen and (max-width: 900px) /* and (orientation : portrait) */ { - div#top { - position: relative; - } - #side-nav { display: none; } - #nav-path { display: none; } - body { - overflow-x: hidden; - } - .summary { display: none; } - .memitem { page-break-inside: avoid; } - div.contents { - margin-left:0 !important; - overflow-x: hidden; - display: block; - padding: 0.6em; - margin-bottom: 0; - } - #MSearchResultsWindow { - display: none; - position: initial; - left: 0; - top: 0; - bottom: 0; - border: 1px solid #ddd; - z-index: 9999; - } - .sm-dox a, .sm-dox a:focus, .sm-dox a:hover, .sm-dox a:active { - line-height: 2.4; - } - .sm-dox a:hover { - background-image: url(tab_a.png); - background-repeat: repeat-x; - color: white; - text-shadow: initial; - } - .sm-dox li>a span.sub-arrow:before { - display: block; - content: '+'; - } - .sm-dox li { - border-bottom: 1px solid #ccd; - } - - /* - address.footer { - position: initial; - box-shadow: none; - background-image: url(nav_h.png); - background-repeat: repeat-x; - background-color: #F9FAFC; - text-align: center; - } - */ - address.footer { - display: none; - } - - div.fragment { - font-size: 11px; - } - - div.contents p, - div.dyncontent, - div.textblock, - table.memberdecls, - div.memitem, - div.contents p *, - div.dyncontent *, - table.memberdecls *, - div.memitem * { - font-size: 12px; - line-height: 1.5; - } - div.memproto * { - font-size: 11px; - line-height: 1.2; - } - .textblock h2 { - font-size: 16px; - } - .textblock h3 { - font-size: 14px; - } - .textblock h4 { - font-size: 13px; - } - h2.groupheader { - font-size: 20px; - } - h2.memtitle { - font-size: 18px; - } - td.memSeparator { - line-height: 1px; - } -} \ No newline at end of file diff --git a/docs/Doxygen/d0/d1b/classArraySlice-members.html b/docs/Doxygen/d0/d1b/classArraySlice-members.html deleted file mode 100644 index 45079b71d..000000000 --- a/docs/Doxygen/d0/d1b/classArraySlice-members.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
ArraySlice< T, N, Reverse, Const > Member List
-
- - - - - diff --git a/docs/Doxygen/d0/d2e/classdetail_1_1Incrementor__coll__graph.map b/docs/Doxygen/d0/d2e/classdetail_1_1Incrementor__coll__graph.map deleted file mode 100644 index 502ad01bd..000000000 --- a/docs/Doxygen/d0/d2e/classdetail_1_1Incrementor__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/d0/d2e/classdetail_1_1Incrementor__coll__graph.md5 b/docs/Doxygen/d0/d2e/classdetail_1_1Incrementor__coll__graph.md5 deleted file mode 100644 index a70fa82d4..000000000 --- a/docs/Doxygen/d0/d2e/classdetail_1_1Incrementor__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -4aa07b781b9e8b2f17d6b484b3dd5a32 \ No newline at end of file diff --git a/docs/Doxygen/d0/d2e/classdetail_1_1Incrementor__coll__graph.svg b/docs/Doxygen/d0/d2e/classdetail_1_1Incrementor__coll__graph.svg deleted file mode 100644 index 2b8b8e050..000000000 --- a/docs/Doxygen/d0/d2e/classdetail_1_1Incrementor__coll__graph.svg +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - -Incrementor< T, V > - - -Node1 - - -Incrementor< T, V > - -- increment - -+ Incrementor() -+ operator()() - - - - -Node2 - - -T - - - - - - - - -Node2->Node1 - - - -value - - - diff --git a/docs/Doxygen/d0/d3b/FixArduinoMacros_8hpp__incl.map b/docs/Doxygen/d0/d3b/FixArduinoMacros_8hpp__incl.map deleted file mode 100644 index 42a05bf6e..000000000 --- a/docs/Doxygen/d0/d3b/FixArduinoMacros_8hpp__incl.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/Doxygen/d0/d3b/FixArduinoMacros_8hpp__incl.md5 b/docs/Doxygen/d0/d3b/FixArduinoMacros_8hpp__incl.md5 deleted file mode 100644 index 968843440..000000000 --- a/docs/Doxygen/d0/d3b/FixArduinoMacros_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -551f8175830d5d2c0932f9ea2a40389a \ No newline at end of file diff --git a/docs/Doxygen/d0/d3b/FixArduinoMacros_8hpp__incl.svg b/docs/Doxygen/d0/d3b/FixArduinoMacros_8hpp__incl.svg deleted file mode 100644 index 46371895d..000000000 --- a/docs/Doxygen/d0/d3b/FixArduinoMacros_8hpp__incl.svg +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - -FixArduinoMacros.hpp - - -Node1 - - -FixArduinoMacros.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -Arduino.h - - - - -Node1->Node3 - - - - - diff --git a/docs/Doxygen/d0/d44/classStaticSizeExtendedIOElement__coll__graph.map b/docs/Doxygen/d0/d44/classStaticSizeExtendedIOElement__coll__graph.map deleted file mode 100644 index 1effcebcb..000000000 --- a/docs/Doxygen/d0/d44/classStaticSizeExtendedIOElement__coll__graph.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/Doxygen/d0/d44/classStaticSizeExtendedIOElement__coll__graph.md5 b/docs/Doxygen/d0/d44/classStaticSizeExtendedIOElement__coll__graph.md5 deleted file mode 100644 index 7d3206d82..000000000 --- a/docs/Doxygen/d0/d44/classStaticSizeExtendedIOElement__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -caa9f17795cf5165f44814d16dd1e02e \ No newline at end of file diff --git a/docs/Doxygen/d0/d44/classStaticSizeExtendedIOElement__coll__graph.svg b/docs/Doxygen/d0/d44/classStaticSizeExtendedIOElement__coll__graph.svg deleted file mode 100644 index 5e33a0e25..000000000 --- a/docs/Doxygen/d0/d44/classStaticSizeExtendedIOElement__coll__graph.svg +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - -StaticSizeExtendedIOElement< N > - - -Node1 - - -StaticSizeExtendedIOElement< N > - - - -+ pins() -+ length() -# StaticSizeExtendedIOElement() - - - - -Node2 - - -ExtendedIOElement - -- length -- start -- end -- offset - -+ ~ExtendedIOElement() -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogWrite() -+ analogRead() -+ begin() -+ update() -+ pin() -+ operator[]() -+ getLength() -+ getEnd() -+ getStart() -+ beginAll() -+ getAll() -# ExtendedIOElement() - - - - -Node2->Node1 - - - - -Node3 - - -DoublyLinkable< Extended -IOElement > - - - -# ~DoublyLinkable() - - - - -Node2->Node3 - - - #next -#previous - - -Node4 - - -DoublyLinkedList< Extended -IOElement > - - - -+ append() -+ append() -+ insertBefore() -+ insertBefore() -+ insertSorted() -+ insertSorted() -+ remove() -+ remove() -+ moveDown() -+ couldContain() -+ begin() -+ begin() -+ end() -+ end() -+ rbegin() -+ rbegin() -+ rend() -+ rend() -+ getFirst() -+ getLast() - - - - -Node2->Node4 - - - -last --first - - -Node3->Node2 - - - - -Node4->Node2 - - - -elements - - - diff --git a/docs/Doxygen/d0/d55/IncrementDecrementButtons_8hpp__incl.map b/docs/Doxygen/d0/d55/IncrementDecrementButtons_8hpp__incl.map deleted file mode 100644 index a78566a9d..000000000 --- a/docs/Doxygen/d0/d55/IncrementDecrementButtons_8hpp__incl.map +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d0/d55/IncrementDecrementButtons_8hpp__incl.md5 b/docs/Doxygen/d0/d55/IncrementDecrementButtons_8hpp__incl.md5 deleted file mode 100644 index cafc001a7..000000000 --- a/docs/Doxygen/d0/d55/IncrementDecrementButtons_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -ad45f3023bd02296c46b076df045f28d \ No newline at end of file diff --git a/docs/Doxygen/d0/d55/IncrementDecrementButtons_8hpp__incl.svg b/docs/Doxygen/d0/d55/IncrementDecrementButtons_8hpp__incl.svg deleted file mode 100644 index 1a4cfd946..000000000 --- a/docs/Doxygen/d0/d55/IncrementDecrementButtons_8hpp__incl.svg +++ /dev/null @@ -1,499 +0,0 @@ - - - - - - -IncrementDecrementButtons.hpp - - -Node1 - - -IncrementDecrementButtons.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -Button.hpp - - - - -Node1->Node3 - - - - -Node3->Node2 - - - - -Node4 - - -AH/Hardware/ExtendedInput -Output/ExtendedInputOutput.hpp - - - - -Node3->Node4 - - - - -Node12 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node3->Node12 - - - - -Node4->Node2 - - - - -Node5 - - -Arduino.h - - - - -Node4->Node5 - - - - -Node6 - - -ExtendedIOElement.hpp - - - - -Node4->Node6 - - - - -Node6->Node2 - - - - -Node7 - - -AH/Hardware/Hardware --Types.hpp - - - - -Node6->Node7 - - - - -Node24 - - -AH/Containers/LinkedList.hpp - - - - -Node6->Node24 - - - - -Node7->Node2 - - - - -Node8 - - -AH/Containers/Array.hpp - - - - -Node7->Node8 - - - - -Node13 - - -NamespaceSettings.hpp - - - - -Node7->Node13 - - - - -Node19 - - -stdint.h - - - - -Node7->Node19 - - - - -Node8->Node2 - - - - -Node9 - - -AH/Error/Error.hpp - - - - -Node8->Node9 - - - - -Node18 - - -stddef.h - - - - -Node8->Node18 - - - - -Node22 - - -AH/STL/iterator - - - - -Node8->Node22 - - - - -Node23 - - -AH/STL/type_traits - - - - -Node8->Node23 - - - - -Node9->Node2 - - - - -Node10 - - -AH/Debug/Debug.hpp - - - - -Node9->Node10 - - - - -Node10->Node2 - - - - -Node11 - - -AH/PrintStream/PrintStream.hpp - - - - -Node10->Node11 - - - - -Node10->Node12 - - - - -Node21 - - -DebugVal.hpp - - - - -Node10->Node21 - - - - -Node11->Node2 - - - - -Node11->Node5 - - - - -Node12->Node2 - - - - -Node12->Node10 - - - - -Node12->Node13 - - - - -Node14 - - -Settings.hpp - - - - -Node12->Node14 - - - - -Node20 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node12->Node20 - - - - -Node15 - - -AH/Types/Frequency.hpp - - - - -Node14->Node15 - - - - -Node16 - - -AH/Hardware/ADCConfig.hpp - - - - -Node14->Node16 - - - - -Node17 - - -limits.h - - - - -Node14->Node17 - - - - -Node14->Node18 - - - - -Node14->Node19 - - - - -Node15->Node2 - - - - -Node15->Node13 - - - - -Node16->Node2 - - - - -Node16->Node5 - - - - -Node24->Node2 - - - - -Node24->Node10 - - - - -Node25 - - -AH/Math/MinMaxFix.hpp - - - - -Node24->Node25 - - - - -Node27 - - -stdlib.h - - - - -Node24->Node27 - - - - -Node28 - - -iterator - - - - -Node24->Node28 - - - - -Node25->Node2 - - - - -Node25->Node13 - - - - -Node26 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node25->Node26 - - - - -Node26->Node2 - - - - -Node26->Node5 - - - - - diff --git a/docs/Doxygen/d0/d67/ShiftRegisterOut_8hpp__dep__incl.map b/docs/Doxygen/d0/d67/ShiftRegisterOut_8hpp__dep__incl.map deleted file mode 100644 index 963494bc4..000000000 --- a/docs/Doxygen/d0/d67/ShiftRegisterOut_8hpp__dep__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/d0/d67/ShiftRegisterOut_8hpp__dep__incl.md5 b/docs/Doxygen/d0/d67/ShiftRegisterOut_8hpp__dep__incl.md5 deleted file mode 100644 index 18566f23a..000000000 --- a/docs/Doxygen/d0/d67/ShiftRegisterOut_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -3674ba641cadaed279c06a8b6b7999e4 \ No newline at end of file diff --git a/docs/Doxygen/d0/d67/ShiftRegisterOut_8hpp__dep__incl.svg b/docs/Doxygen/d0/d67/ShiftRegisterOut_8hpp__dep__incl.svg deleted file mode 100644 index 3b452808b..000000000 --- a/docs/Doxygen/d0/d67/ShiftRegisterOut_8hpp__dep__incl.svg +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - -ShiftRegisterOut.hpp - - -Node1 - - -ShiftRegisterOut.hpp - - - - -Node2 - - -ShiftRegisterOut.ipp - - - - -Node1->Node2 - - - - -Node2->Node1 - - - - - diff --git a/docs/Doxygen/d0/d81/Math_8dox.html b/docs/Doxygen/d0/d81/Math_8dox.html deleted file mode 100644 index 641f7eee0..000000000 --- a/docs/Doxygen/d0/d81/Math_8dox.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Math.dox File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Math.dox File Reference
-
-
-
- - - - diff --git a/docs/Doxygen/d0/d84/IncreaseBitDepth_8hpp__incl.map b/docs/Doxygen/d0/d84/IncreaseBitDepth_8hpp__incl.map deleted file mode 100644 index 4875e1181..000000000 --- a/docs/Doxygen/d0/d84/IncreaseBitDepth_8hpp__incl.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/Doxygen/d0/d84/IncreaseBitDepth_8hpp__incl.md5 b/docs/Doxygen/d0/d84/IncreaseBitDepth_8hpp__incl.md5 deleted file mode 100644 index 2c97b62e9..000000000 --- a/docs/Doxygen/d0/d84/IncreaseBitDepth_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -e4a56b310090641b1343ccb92f022588 \ No newline at end of file diff --git a/docs/Doxygen/d0/d84/IncreaseBitDepth_8hpp__incl.svg b/docs/Doxygen/d0/d84/IncreaseBitDepth_8hpp__incl.svg deleted file mode 100644 index 895b10cee..000000000 --- a/docs/Doxygen/d0/d84/IncreaseBitDepth_8hpp__incl.svg +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - -IncreaseBitDepth.hpp - - -Node1 - - -IncreaseBitDepth.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -AH/STL/type_traits - - - - -Node1->Node3 - - - - -Node4 - - -limits.h - - - - -Node1->Node4 - - - - -Node5 - - -stddef.h - - - - -Node1->Node5 - - - - - diff --git a/docs/Doxygen/d0/d9a/IncrementDecrementButtons_8cpp__incl.map b/docs/Doxygen/d0/d9a/IncrementDecrementButtons_8cpp__incl.map deleted file mode 100644 index b0bd23ac2..000000000 --- a/docs/Doxygen/d0/d9a/IncrementDecrementButtons_8cpp__incl.map +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d0/d9a/IncrementDecrementButtons_8cpp__incl.md5 b/docs/Doxygen/d0/d9a/IncrementDecrementButtons_8cpp__incl.md5 deleted file mode 100644 index 7fd37ef8d..000000000 --- a/docs/Doxygen/d0/d9a/IncrementDecrementButtons_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -b393cc7c52bd4b16a4c5d85a9ca5957d \ No newline at end of file diff --git a/docs/Doxygen/d0/d9a/IncrementDecrementButtons_8cpp__incl.svg b/docs/Doxygen/d0/d9a/IncrementDecrementButtons_8cpp__incl.svg deleted file mode 100644 index 3b740c4be..000000000 --- a/docs/Doxygen/d0/d9a/IncrementDecrementButtons_8cpp__incl.svg +++ /dev/null @@ -1,512 +0,0 @@ - - - - - - -IncrementDecrementButtons.cpp - - -Node1 - - -IncrementDecrementButtons.cpp - - - - -Node2 - - -IncrementDecrementButtons.hpp - - - - -Node1->Node2 - - - - -Node3 - - -AH/Settings/Warnings.hpp - - - - -Node2->Node3 - - - - -Node4 - - -Button.hpp - - - - -Node2->Node4 - - - - -Node4->Node3 - - - - -Node5 - - -AH/Hardware/ExtendedInput -Output/ExtendedInputOutput.hpp - - - - -Node4->Node5 - - - - -Node13 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node4->Node13 - - - - -Node5->Node3 - - - - -Node6 - - -Arduino.h - - - - -Node5->Node6 - - - - -Node7 - - -ExtendedIOElement.hpp - - - - -Node5->Node7 - - - - -Node7->Node3 - - - - -Node8 - - -AH/Hardware/Hardware --Types.hpp - - - - -Node7->Node8 - - - - -Node25 - - -AH/Containers/LinkedList.hpp - - - - -Node7->Node25 - - - - -Node8->Node3 - - - - -Node9 - - -AH/Containers/Array.hpp - - - - -Node8->Node9 - - - - -Node14 - - -NamespaceSettings.hpp - - - - -Node8->Node14 - - - - -Node20 - - -stdint.h - - - - -Node8->Node20 - - - - -Node9->Node3 - - - - -Node10 - - -AH/Error/Error.hpp - - - - -Node9->Node10 - - - - -Node19 - - -stddef.h - - - - -Node9->Node19 - - - - -Node23 - - -AH/STL/iterator - - - - -Node9->Node23 - - - - -Node24 - - -AH/STL/type_traits - - - - -Node9->Node24 - - - - -Node10->Node3 - - - - -Node11 - - -AH/Debug/Debug.hpp - - - - -Node10->Node11 - - - - -Node11->Node3 - - - - -Node12 - - -AH/PrintStream/PrintStream.hpp - - - - -Node11->Node12 - - - - -Node11->Node13 - - - - -Node22 - - -DebugVal.hpp - - - - -Node11->Node22 - - - - -Node12->Node3 - - - - -Node12->Node6 - - - - -Node13->Node3 - - - - -Node13->Node11 - - - - -Node13->Node14 - - - - -Node15 - - -Settings.hpp - - - - -Node13->Node15 - - - - -Node21 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node13->Node21 - - - - -Node16 - - -AH/Types/Frequency.hpp - - - - -Node15->Node16 - - - - -Node17 - - -AH/Hardware/ADCConfig.hpp - - - - -Node15->Node17 - - - - -Node18 - - -limits.h - - - - -Node15->Node18 - - - - -Node15->Node19 - - - - -Node15->Node20 - - - - -Node16->Node3 - - - - -Node16->Node14 - - - - -Node17->Node3 - - - - -Node17->Node6 - - - - -Node25->Node3 - - - - -Node25->Node11 - - - - -Node26 - - -AH/Math/MinMaxFix.hpp - - - - -Node25->Node26 - - - - -Node28 - - -stdlib.h - - - - -Node25->Node28 - - - - -Node29 - - -iterator - - - - -Node25->Node29 - - - - -Node26->Node3 - - - - -Node26->Node14 - - - - -Node27 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node26->Node27 - - - - -Node27->Node3 - - - - -Node27->Node6 - - - - - diff --git a/docs/Doxygen/d0/da9/2_8Button_8ino-example.html b/docs/Doxygen/d0/da9/2_8Button_8ino-example.html deleted file mode 100644 index 20a6f8b39..000000000 --- a/docs/Doxygen/d0/da9/2_8Button_8ino-example.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - -Arduino Helpers: 2.Button.ino - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
2.Button.ino
-
-
-

-2.Button

-

This examples shows how to use the debounced Button class to toggle an LED.

-
Boards:
AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32
-

-Connections

-
    -
  • 2: Momentary push button (other pin to ground)
  • -
-

The internal pull-up resistor will be enabled.

-

-Behavior

-
    -
  • If you press the push button once, the built-in LED is turned on.
  • -
  • If you press the button again, the LED is turned off again.
  • -
-

Written by PieterP, 2019-11-22
- https://github.com/tttapa/Arduino-Helpers

-
-
// Include the library
- -
- -
-
// Create a Button object that reads a push button connected to pin 2:
-
Button pushbutton = {2};
-
-
// The pin with the LED connected:
-
const pin_t ledPin = LED_BUILTIN;
-
-
void setup() {
-
pinMode(ledPin, OUTPUT);
-
pushbutton.begin();
-
// You can invert the input, for use with normally closed (NC) switches:
-
// pushbutton.invert();
-
}
-
-
void loop() {
-
static bool ledState = LOW;
-
// Read the digital input, debounce the signal, and check the state of
-
// the button:
-
if (pushbutton.update() == Button::Falling) {
-
ledState = !ledState; // Invert the state of the LED
-
digitalWrite(ledPin, ledState); // Update the LED with the new state
-
}
-
}
-
-
Input went from high to low (1,0)
Definition: Button.hpp:56
- -
void digitalWrite(pin_t pin, uint8_t val)
An ExtIO version of the Arduino function.
-
A class for reading and debouncing buttons and switches.
Definition: Button.hpp:18
-
State update()
Read the button and return its new state.
Definition: Button.cpp:19
-
const uint8_t LOW
-
void begin()
Initialize (enable the internal pull-up resistor).
Definition: Button.cpp:11
-
void pinMode(pin_t pin, uint8_t mode)
An ExtIO version of the Arduino function.
-
Dummy header file for Arduino builder. You have to add this file first, so the other headers are in t...
-
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
-
const uint8_t OUTPUT
- - - - diff --git a/docs/Doxygen/d0/daf/ButtonMatrix_8hpp__incl.map b/docs/Doxygen/d0/daf/ButtonMatrix_8hpp__incl.map deleted file mode 100644 index 99e359c5e..000000000 --- a/docs/Doxygen/d0/daf/ButtonMatrix_8hpp__incl.map +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d0/daf/ButtonMatrix_8hpp__incl.md5 b/docs/Doxygen/d0/daf/ButtonMatrix_8hpp__incl.md5 deleted file mode 100644 index e282dbbb5..000000000 --- a/docs/Doxygen/d0/daf/ButtonMatrix_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -ba4f077ddfad54e38c811cef05e2f634 \ No newline at end of file diff --git a/docs/Doxygen/d0/daf/ButtonMatrix_8hpp__incl.svg b/docs/Doxygen/d0/daf/ButtonMatrix_8hpp__incl.svg deleted file mode 100644 index 7b372cb9b..000000000 --- a/docs/Doxygen/d0/daf/ButtonMatrix_8hpp__incl.svg +++ /dev/null @@ -1,512 +0,0 @@ - - - - - - -ButtonMatrix.hpp - - -Node1 - - -ButtonMatrix.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -AH/Hardware/Hardware --Types.hpp - - - - -Node1->Node3 - - - - -Node21 - - -ButtonMatrix.ipp - - - - -Node1->Node21 - - - - -Node3->Node2 - - - - -Node4 - - -AH/Containers/Array.hpp - - - - -Node3->Node4 - - - - -Node10 - - -NamespaceSettings.hpp - - - - -Node3->Node10 - - - - -Node16 - - -stdint.h - - - - -Node3->Node16 - - - - -Node4->Node2 - - - - -Node5 - - -AH/Error/Error.hpp - - - - -Node4->Node5 - - - - -Node15 - - -stddef.h - - - - -Node4->Node15 - - - - -Node19 - - -AH/STL/iterator - - - - -Node4->Node19 - - - - -Node20 - - -AH/STL/type_traits - - - - -Node4->Node20 - - - - -Node5->Node2 - - - - -Node6 - - -AH/Debug/Debug.hpp - - - - -Node5->Node6 - - - - -Node6->Node2 - - - - -Node7 - - -AH/PrintStream/PrintStream.hpp - - - - -Node6->Node7 - - - - -Node9 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node6->Node9 - - - - -Node18 - - -DebugVal.hpp - - - - -Node6->Node18 - - - - -Node7->Node2 - - - - -Node8 - - -Arduino.h - - - - -Node7->Node8 - - - - -Node9->Node2 - - - - -Node9->Node6 - - - - -Node9->Node10 - - - - -Node11 - - -Settings.hpp - - - - -Node9->Node11 - - - - -Node17 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node9->Node17 - - - - -Node12 - - -AH/Types/Frequency.hpp - - - - -Node11->Node12 - - - - -Node13 - - -AH/Hardware/ADCConfig.hpp - - - - -Node11->Node13 - - - - -Node14 - - -limits.h - - - - -Node11->Node14 - - - - -Node11->Node15 - - - - -Node11->Node16 - - - - -Node12->Node2 - - - - -Node12->Node10 - - - - -Node13->Node2 - - - - -Node13->Node8 - - - - -Node21->Node1 - - - - -Node22 - - -AH/Hardware/ExtendedInput -Output/ExtendedInputOutput.hpp - - - - -Node21->Node22 - - - - -Node29 - - -string.h - - - - -Node21->Node29 - - - - -Node22->Node2 - - - - -Node22->Node8 - - - - -Node23 - - -ExtendedIOElement.hpp - - - - -Node22->Node23 - - - - -Node23->Node2 - - - - -Node23->Node3 - - - - -Node24 - - -AH/Containers/LinkedList.hpp - - - - -Node23->Node24 - - - - -Node24->Node2 - - - - -Node24->Node6 - - - - -Node25 - - -AH/Math/MinMaxFix.hpp - - - - -Node24->Node25 - - - - -Node27 - - -stdlib.h - - - - -Node24->Node27 - - - - -Node28 - - -iterator - - - - -Node24->Node28 - - - - -Node25->Node2 - - - - -Node25->Node10 - - - - -Node26 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node25->Node26 - - - - -Node26->Node2 - - - - -Node26->Node8 - - - - - diff --git a/docs/Doxygen/d0/db4/ShiftRegisterOut_8hpp.html b/docs/Doxygen/d0/db4/ShiftRegisterOut_8hpp.html deleted file mode 100644 index 82be524f7..000000000 --- a/docs/Doxygen/d0/db4/ShiftRegisterOut_8hpp.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - -Arduino Helpers: ShiftRegisterOut.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ShiftRegisterOut.hpp File Reference
-
-
-
#include <AH/Settings/Warnings.hpp>
-#include "ShiftRegisterOutBase.hpp"
-#include <Arduino.h>
-#include "ShiftRegisterOut.ipp"
-
-Include dependency graph for ShiftRegisterOut.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - -

-Classes

class  ShiftRegisterOut< N >
 A class for serial-in/parallel-out shift registers, like the 74HC595. More...
 
-
- - - - diff --git a/docs/Doxygen/d0/db4/ShiftRegisterOut_8hpp_source.html b/docs/Doxygen/d0/db4/ShiftRegisterOut_8hpp_source.html deleted file mode 100644 index bcddb1ac7..000000000 --- a/docs/Doxygen/d0/db4/ShiftRegisterOut_8hpp_source.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - - -Arduino Helpers: ShiftRegisterOut.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ShiftRegisterOut.hpp
-
-
-Go to the documentation of this file.
1 /* ✔ */
-
2 
-
3 #pragma once
-
4 
- -
6 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
7 
-
8 #include "ShiftRegisterOutBase.hpp"
-
9 
- -
11 #include <Arduino.h> // MSBFIRST
- -
13 
- -
15 
-
22 template <uint8_t N>
- -
24  public:
- -
26 
-
57  ShiftRegisterOut(pin_t dataPin, pin_t clockPin, pin_t latchPin,
-
58  BitOrder_t bitOrder = MSBFIRST);
-
59 
-
65  void begin() override;
-
66 
-
70  void update() override;
-
71 
-
72  private:
-
73  const pin_t dataPin;
-
74  const pin_t clockPin;
-
75 };
-
76 
- -
78 
-
79 #include "ShiftRegisterOut.ipp"
-
80 
- -
-
#define BEGIN_AH_NAMESPACE
-
A class for serial-in/parallel-out shift registers, like the 74HC595.
- -
typename ShiftRegisterOutBase< N >::BitOrder_t BitOrder_t
- -
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
A class for serial-in/parallel-out shift registers, like the 74HC595.
-
#define AH_DIAGNOSTIC_EXTERNAL_HEADER()
Definition: Warnings.hpp:18
- - -
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
-
#define END_AH_NAMESPACE
- - - - - diff --git a/docs/Doxygen/d0/dbd/MAX7219__Base_8hpp__dep__incl.map b/docs/Doxygen/d0/dbd/MAX7219__Base_8hpp__dep__incl.map deleted file mode 100644 index 7babf810b..000000000 --- a/docs/Doxygen/d0/dbd/MAX7219__Base_8hpp__dep__incl.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/Doxygen/d0/dbd/MAX7219__Base_8hpp__dep__incl.md5 b/docs/Doxygen/d0/dbd/MAX7219__Base_8hpp__dep__incl.md5 deleted file mode 100644 index 435d91780..000000000 --- a/docs/Doxygen/d0/dbd/MAX7219__Base_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -1ae5159b82327432588f96f78e50b939 \ No newline at end of file diff --git a/docs/Doxygen/d0/dbd/MAX7219__Base_8hpp__dep__incl.svg b/docs/Doxygen/d0/dbd/MAX7219__Base_8hpp__dep__incl.svg deleted file mode 100644 index 98ce95a10..000000000 --- a/docs/Doxygen/d0/dbd/MAX7219__Base_8hpp__dep__incl.svg +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - -MAX7219_Base.hpp - - -Node1 - - -MAX7219_Base.hpp - - - - -Node2 - - -MAX7219.hpp - - - - -Node1->Node2 - - - - -Node3 - - -MAX7219SevenSegmentDisplay.hpp - - - - -Node1->Node3 - - - - - diff --git a/docs/Doxygen/d0/ddd/classUniquePtr.html b/docs/Doxygen/d0/ddd/classUniquePtr.html deleted file mode 100644 index f69ee1d08..000000000 --- a/docs/Doxygen/d0/ddd/classUniquePtr.html +++ /dev/null @@ -1,617 +0,0 @@ - - - - - - - -Arduino Helpers: UniquePtr< T > Class Template Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
- -
-
UniquePtr< T > Class Template Reference
-
-
- -

Very basic smart pointer. - More...

- -

#include <UniquePtr.hpp>

-
-Collaboration diagram for UniquePtr< T >:
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 UniquePtr ()=default
 
 UniquePtr (T *p)
 
 UniquePtr (const UniquePtr &)=delete
 
template<class U >
 UniquePtr (UniquePtr< U > &&r)
 
 ~UniquePtr ()
 
UniquePtroperator= (const UniquePtr &)=delete
 
UniquePtr< T > & operator= (UniquePtr< T > &&r)
 
void reset (T *newP=nullptr)
 
T * release ()
 
 operator bool () const
 
T * get ()
 
const T * get () const
 
T * operator-> ()
 
const T * operator-> () const
 
T & operator* ()
 
const T & operator* () const
 
- - - -

-Private Attributes

T * p = nullptr
 
-

Detailed Description

-

template<class T>
-class UniquePtr< T >

- -

Very basic smart pointer.

-

Doesn't support array types.

-
Template Parameters
- - -
TThe type of the pointee.
-
-
- -

Definition at line 21 of file UniquePtr.hpp.

-

Constructor & Destructor Documentation

- -

◆ UniquePtr() [1/4]

- -
-
- - - - - -
- - - - - - - -
UniquePtr ()
-
-default
-
- -
-
- -

◆ UniquePtr() [2/4]

- -
-
- - - - - -
- - - - - - - - -
UniquePtr (T * p)
-
-inlineexplicit
-
- -

Definition at line 24 of file UniquePtr.hpp.

- -
-
- -

◆ UniquePtr() [3/4]

- -
-
- - - - - -
- - - - - - - - -
UniquePtr (const UniquePtr< T > & )
-
-delete
-
- -
-
- -

◆ UniquePtr() [4/4]

- -
-
- - - - - -
- - - - - - - - -
UniquePtr (UniquePtr< U > && r)
-
-inline
-
- -

Definition at line 27 of file UniquePtr.hpp.

- -
-
- -

◆ ~UniquePtr()

- -
-
- - - - - -
- - - - - - - -
~UniquePtr ()
-
-inline
-
- -

Definition at line 31 of file UniquePtr.hpp.

- -
-
-

Member Function Documentation

- -

◆ operator=() [1/2]

- -
-
- - - - - -
- - - - - - - - -
UniquePtr& operator= (const UniquePtr< T > & )
-
-delete
-
- -
-
- -

◆ operator=() [2/2]

- -
-
- - - - - -
- - - - - - - - -
UniquePtr<T>& operator= (UniquePtr< T > && r)
-
-inline
-
- -

Definition at line 34 of file UniquePtr.hpp.

- -
-
- -

◆ reset()

- -
-
- - - - - -
- - - - - - - - -
void reset (T * newP = nullptr)
-
-inline
-
- -

Definition at line 39 of file UniquePtr.hpp.

- -
-
- -

◆ release()

- -
-
- - - - - -
- - - - - - - -
T* release ()
-
-inline
-
- -

Definition at line 45 of file UniquePtr.hpp.

- -
-
- -

◆ operator bool()

- -
-
- - - - - -
- - - - - - - -
operator bool () const
-
-inlineexplicit
-
- -

Definition at line 51 of file UniquePtr.hpp.

- -
-
- -

◆ get() [1/2]

- -
-
- - - - - -
- - - - - - - -
T* get ()
-
-inline
-
- -

Definition at line 53 of file UniquePtr.hpp.

- -
-
- -

◆ get() [2/2]

- -
-
- - - - - -
- - - - - - - -
const T* get () const
-
-inline
-
- -

Definition at line 54 of file UniquePtr.hpp.

- -
-
- -

◆ operator->() [1/2]

- -
-
- - - - - -
- - - - - - - -
T* operator-> ()
-
-inline
-
- -

Definition at line 56 of file UniquePtr.hpp.

- -
-
- -

◆ operator->() [2/2]

- -
-
- - - - - -
- - - - - - - -
const T* operator-> () const
-
-inline
-
- -

Definition at line 57 of file UniquePtr.hpp.

- -
-
- -

◆ operator*() [1/2]

- -
-
- - - - - -
- - - - - - - -
T& operator* ()
-
-inline
-
- -

Definition at line 58 of file UniquePtr.hpp.

- -
-
- -

◆ operator*() [2/2]

- -
-
- - - - - -
- - - - - - - -
const T& operator* () const
-
-inline
-
- -

Definition at line 59 of file UniquePtr.hpp.

- -
-
-

Member Data Documentation

- -

◆ p

- -
-
- - - - - -
- - - - -
T* p = nullptr
-
-private
-
- -

Definition at line 62 of file UniquePtr.hpp.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/Doxygen/d0/df7/group__AH__Error.html b/docs/Doxygen/d0/df7/group__AH__Error.html deleted file mode 100644 index 2883c1c66..000000000 --- a/docs/Doxygen/d0/df7/group__AH__Error.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - - -Arduino Helpers: Error - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
- -
-
Error
-
-
- -

Macros for handling and reporting both fatal and non-fatal errors. -More...

- - - - - - - - -

-Macros

#define ERROR(msg, errc)
 Print the error message and error code, and stop the execution if FATAL_ERRORS are enabled. More...
 
#define FATAL_ERROR(msg, errc)
 Print the error message and error code, and stop the execution. More...
 
-

Detailed Description

-

Macros for handling and reporting both fatal and non-fatal errors.

-

Macro Definition Documentation

- -

◆ ERROR

- -
-
- - - - - - - - - - - - - - - - - - -
#define ERROR( msg,
 errc 
)
-
-Value:
do { \
-
DEBUGFN(msg << " (0x" << hex << uppercase << errc << dec \
-
<< nouppercase << ')'); \
-
} while (0)
-
-

Print the error message and error code, and stop the execution if FATAL_ERRORS are enabled.

-

Otherwise just prints the error.

-
Parameters
- - - -
msgThe information to print, can contain streaming operators (<<) to print multiple things.
errcA unique error code.
-
-
- -

Definition at line 42 of file Error.hpp.

- -
-
- -

◆ FATAL_ERROR

- -
-
- - - - - - - - - - - - - - - - - - -
#define FATAL_ERROR( msg,
 errc 
)
-
-Value:
do { \
-
USING_AH_NAMESPACE; \
-
DEBUGFN(F("Fatal Error: ") << msg << " (0x" << hex << uppercase \
-
<< errc << dec << nouppercase << ')'); \
-
fatalErrorExit(); \
-
} while (0)
-
-

Print the error message and error code, and stop the execution.

-

Doesn't depend on FATAL_ERRORS, it always stops the execution.

-
Parameters
- - - -
msgThe information to print, can contain streaming operators (<<) to print multiple things.
errcA unique error code.
-
-
- -

Definition at line 60 of file Error.hpp.

- -
-
-
-
Print & nouppercase(Print &printer)
Definition: PrintStream.cpp:40
-
Print & uppercase(Print &printer)
Definition: PrintStream.cpp:35
-
Print & hex(Print &printer)
Definition: PrintStream.cpp:62
-
Print & dec(Print &printer)
Definition: PrintStream.cpp:77
- - - - diff --git a/docs/Doxygen/d1/d00/classArraySlice__coll__graph.map b/docs/Doxygen/d1/d00/classArraySlice__coll__graph.map deleted file mode 100644 index cc7e5dbd7..000000000 --- a/docs/Doxygen/d1/d00/classArraySlice__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/d1/d00/classArraySlice__coll__graph.md5 b/docs/Doxygen/d1/d00/classArraySlice__coll__graph.md5 deleted file mode 100644 index 6a6e87789..000000000 --- a/docs/Doxygen/d1/d00/classArraySlice__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -c0c7cf656456c8a1cd3c95411144c6ea \ No newline at end of file diff --git a/docs/Doxygen/d1/d00/classArraySlice__coll__graph.svg b/docs/Doxygen/d1/d00/classArraySlice__coll__graph.svg deleted file mode 100644 index b5c042b00..000000000 --- a/docs/Doxygen/d1/d00/classArraySlice__coll__graph.svg +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - -ArraySlice< T, N, Reverse, Const > - - -Node1 - - -ArraySlice< T, N, Reverse, - Const > - -- array - -+ ArraySlice() -+ operator Array< T, N >() -+ asArray() -+ operator[]() -+ begin() -+ end() -+ slice() - - - - - diff --git a/docs/Doxygen/d1/d13/classStaticSizeExtendedIOElement.html b/docs/Doxygen/d1/d13/classStaticSizeExtendedIOElement.html deleted file mode 100644 index 6b86c45d7..000000000 --- a/docs/Doxygen/d1/d13/classStaticSizeExtendedIOElement.html +++ /dev/null @@ -1,930 +0,0 @@ - - - - - - - -Arduino Helpers: StaticSizeExtendedIOElement< N > Class Template Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

A class for ExtendedIOElements with a fixed size. - More...

- -

#include <StaticSizeExtendedIOElement.hpp>

-
-Inheritance diagram for StaticSizeExtendedIOElement< N >:
-
-
-
-
-Collaboration diagram for StaticSizeExtendedIOElement< N >:
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

Array< pin_t, N > pins () const
 Get an array containing all pins of the element. More...
 
virtual void pinMode (pin_t pin, uint8_t mode)=0
 Set the mode of a given pin. More...
 
virtual void digitalWrite (pin_t pin, uint8_t state)=0
 Set the output of the given pin to the given state. More...
 
virtual int digitalRead (pin_t pin)=0
 Read the state of the given pin. More...
 
virtual void analogWrite (pin_t pin, analog_t val)=0
 Write an analog (or PWM) value to the given pin. More...
 
virtual analog_t analogRead (pin_t pin)=0
 Read the analog value of the given pin. More...
 
virtual void begin ()=0
 Initialize the extended IO element. More...
 
virtual void update ()=0
 Update the extended IO element: write the internal state to the physical outputs, or read the physical state into the input buffers. More...
 
pin_t pin (pin_t pin) const
 Get the extended IO pin number of a given physical pin of this extended IO element. More...
 
pin_t operator[] (pin_t pin) const
 Get the extended IO pin number of a given physical pin of this extended IO element. More...
 
pin_t getLength () const
 Get the number of pins this IO element has. More...
 
pin_t getEnd () const
 Get the largest global extended IO pin number that belongs to this extended IO element. More...
 
pin_t getStart () const
 Get the smallest global extended IO pin number that belongs to this extended IO element. More...
 
- - - - - - - - - -

-Static Public Member Functions

static constexpr uint16_t length ()
 
static void beginAll ()
 Initialize all extended IO elements. More...
 
static DoublyLinkedList< ExtendedIOElement > & getAll ()
 Get the list of all Extended IO elements. More...
 
- - - -

-Protected Member Functions

 StaticSizeExtendedIOElement ()
 
- - - - - -

-Protected Attributes

ExtendedIOElementnext
 
ExtendedIOElementprevious
 
- - - - - -

-Private Attributes

const pin_t start
 
const pin_t end
 
- - - - - -

-Static Private Attributes

static pin_t offset = NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS
 
static DoublyLinkedList< ExtendedIOElementelements
 
-

Detailed Description

-

template<uint16_t N>
-class StaticSizeExtendedIOElement< N >

- -

A class for ExtendedIOElements with a fixed size.

-

This class is to make it easier to get an array of all pins of the element.

- -

Definition at line 19 of file StaticSizeExtendedIOElement.hpp.

-

Constructor & Destructor Documentation

- -

◆ StaticSizeExtendedIOElement()

- -
-
- - - - - -
- - - - - - - -
StaticSizeExtendedIOElement ()
-
-inlineprotected
-
- -

Definition at line 21 of file StaticSizeExtendedIOElement.hpp.

- -
-
-

Member Function Documentation

- -

◆ pins()

- -
-
- - - - - -
- - - - - - - -
Array<pin_t, N> pins () const
-
-inline
-
- -

Get an array containing all pins of the element.

- -

Definition at line 27 of file StaticSizeExtendedIOElement.hpp.

- -
-
- -

◆ length()

- -
-
- - - - - -
- - - - - - - -
static constexpr uint16_t length ()
-
-inlinestaticconstexpr
-
- -

Definition at line 31 of file StaticSizeExtendedIOElement.hpp.

- -
-
- -

◆ pinMode()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
virtual void pinMode (pin_t pin,
uint8_t mode 
)
-
-pure virtualinherited
-
- -

Set the mode of a given pin.

-
Note
This function might not be implemented by all subclasses.
- Some extended IO types, such as shift registers, can only be used as outputs.
- On others, it might be implemented, but it could impact all pins of the IO element. For example, enabling the internal pull-up resistor on an analog multiplexer affects all pins of the mux.
-
Parameters
- - - -
pinThe (zero-based) pin of this IO element.
modeThe mode to set the pin to (e.g. INPUT, OUTPUT or INPUT_PULLUP).
-
-
- -

Implemented in ShiftRegisterOutBase< N >, MAX7219, and AnalogMultiplex< N >.

- -
-
- -

◆ digitalWrite()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
virtual void digitalWrite (pin_t pin,
uint8_t state 
)
-
-pure virtualinherited
-
- -

Set the output of the given pin to the given state.

-
Parameters
- - - -
pinThe (zero-based) pin of this IO element.
stateThe new state to set the pin to.
-
-
- -

Implemented in AnalogMultiplex< N >, ShiftRegisterOutBase< N >, and MAX7219.

- -
-
- -

◆ digitalRead()

- -
-
- - - - - -
- - - - - - - - -
virtual int digitalRead (pin_t pin)
-
-pure virtualinherited
-
- -

Read the state of the given pin.

-
Parameters
- - -
pinThe (zero-based) pin of this IO element.
-
-
-
Returns
The state of the given pin.
- -

Implemented in AnalogMultiplex< N >, ShiftRegisterOutBase< N >, and MAX7219.

- -
-
- -

◆ analogWrite()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
virtual void analogWrite (pin_t pin,
analog_t val 
)
-
-pure virtualinherited
-
- -

Write an analog (or PWM) value to the given pin.

-
Parameters
- - - -
pinThe (zero-based) pin of this IO element.
valThe new analog value to set the pin to.
-
-
- -

Implemented in AnalogMultiplex< N >, ShiftRegisterOutBase< N >, and MAX7219.

- -
-
- -

◆ analogRead()

- -
-
- - - - - -
- - - - - - - - -
virtual analog_t analogRead (pin_t pin)
-
-pure virtualinherited
-
- -

Read the analog value of the given pin.

-
Parameters
- - -
pinThe (zero-based) pin of this IO element.
-
-
-
Returns
The new analog value of pin.
- -

Implemented in ShiftRegisterOutBase< N >, MAX7219, and AnalogMultiplex< N >.

- -
-
- -

◆ begin()

- -
-
- - - - - -
- - - - - - - -
virtual void begin ()
-
-pure virtualinherited
-
- -

Initialize the extended IO element.

- -

Implemented in AnalogMultiplex< N >, ShiftRegisterOut< N >, SPIShiftRegisterOut< N >, and MAX7219.

- -
-
- -

◆ beginAll()

- -
-
- - - - - -
- - - - - - - -
void beginAll ()
-
-staticinherited
-
- -

Initialize all extended IO elements.

- -

Definition at line 23 of file ExtendedIOElement.cpp.

- -
-
- -

◆ update()

- -
-
- - - - - -
- - - - - - - -
virtual void update ()
-
-pure virtualinherited
-
- -

Update the extended IO element: write the internal state to the physical outputs, or read the physical state into the input buffers.

- -

Implemented in MAX7219, AnalogMultiplex< N >, ShiftRegisterOut< N >, and SPIShiftRegisterOut< N >.

- -
-
- -

◆ pin()

- -
-
- - - - - -
- - - - - - - - -
pin_t pin (pin_t pin) const
-
-inherited
-
- -

Get the extended IO pin number of a given physical pin of this extended IO element.

-
Parameters
- - -
pinThe zero-based physical pin number of this IO element.
-
-
-
Returns
The global, unique extended IO pin number for the given pin.
-
Examples
Toggle-LEDs.ino.
-
- -

Definition at line 28 of file ExtendedIOElement.cpp.

- -
-
- -

◆ operator[]()

- -
-
- - - - - -
- - - - - - - - -
pin_t operator[] (pin_t pin) const
-
-inherited
-
- -

Get the extended IO pin number of a given physical pin of this extended IO element.

-


- It is alias for ExtendedIOElement::pin.

Parameters
- - -
pinThe zero-based physical pin number of this IO element.
-
-
-
Returns
The global, unique extended IO pin number for the given pin.
- -

Definition at line 43 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getLength()

- -
-
- - - - - -
- - - - - - - -
pin_t getLength () const
-
-inherited
-
- -

Get the number of pins this IO element has.

-
Returns
The number of pins this IO element has.
-
Examples
1.AnalogReadSerial.ino, and 2.DigitalReadSerial.ino.
-
- -

Definition at line 45 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getEnd()

- -
-
- - - - - -
- - - - - - - -
pin_t getEnd () const
-
-inherited
-
- -

Get the largest global extended IO pin number that belongs to this extended IO element.

- -

Definition at line 47 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getStart()

- -
-
- - - - - -
- - - - - - - -
pin_t getStart () const
-
-inherited
-
- -

Get the smallest global extended IO pin number that belongs to this extended IO element.

- -

Definition at line 49 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getAll()

- -
-
- - - - - -
- - - - - - - -
DoublyLinkedList< ExtendedIOElement > & getAll ()
-
-staticinherited
-
- -

Get the list of all Extended IO elements.

- -

Definition at line 51 of file ExtendedIOElement.cpp.

- -
-
-

Member Data Documentation

- -

◆ start

- -
-
- - - - - -
- - - - -
const pin_t start
-
-privateinherited
-
- -

Definition at line 193 of file ExtendedIOElement.hpp.

- -
-
- -

◆ end

- -
-
- - - - - -
- - - - -
const pin_t end
-
-privateinherited
-
- -

Definition at line 194 of file ExtendedIOElement.hpp.

- -
-
- -

◆ offset

- -
-
- - - - - -
- - - - -
pin_t offset = NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS
-
-staticprivateinherited
-
- -

Definition at line 195 of file ExtendedIOElement.hpp.

- -
-
- -

◆ elements

- -
-
- - - - - -
- - - - -
DoublyLinkedList< ExtendedIOElement > elements
-
-staticprivateinherited
-
- -

Definition at line 197 of file ExtendedIOElement.hpp.

- -
-
- -

◆ next

- -
-
- - - - - -
- - - - -
ExtendedIOElement * next
-
-protectedinherited
-
- -

Definition at line 305 of file LinkedList.hpp.

- -
-
- -

◆ previous

- -
-
- - - - - -
- - - - -
ExtendedIOElement * previous
-
-protectedinherited
-
- -

Definition at line 306 of file LinkedList.hpp.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/Doxygen/d1/d19/classButton.html b/docs/Doxygen/d1/d19/classButton.html deleted file mode 100644 index ab441ec95..000000000 --- a/docs/Doxygen/d1/d19/classButton.html +++ /dev/null @@ -1,695 +0,0 @@ - - - - - - - -Arduino Helpers: Button Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

A class for reading and debouncing buttons and switches. - More...

- -

#include <Button.hpp>

-
-Collaboration diagram for Button:
-
-
-
- - - - - -

-Public Types

enum  State { Pressed = 0b00, -Released = 0b11, -Falling = 0b10, -Rising = 0b01 - }
 An enumeration of the different states a button can be in. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 Button ()
 Construct a new Button object. More...
 
 Button (pin_t pin)
 Construct a new Button object. More...
 
void begin ()
 Initialize (enable the internal pull-up resistor). More...
 
AH_INDIVIDUAL_BUTTON_INVERT_STATIC void invert ()
 Invert the state of all buttons, or of this specific button (button pressed is HIGH instead of LOW). More...
 
State update ()
 Read the button and return its new state. More...
 
State getState () const
 Get the state of the button, without updating it. More...
 
unsigned long previousBounceTime () const
 Return the time point (in milliseconds) when the button last bounced. More...
 
unsigned long stableTime (unsigned long now) const
 Return the time (in milliseconds) that the button has been stable for, compared to the given time point. More...
 
unsigned long stableTime () const
 Return the time (in milliseconds) that the button has been stable for. More...
 
- - - - - - - - - - -

-Static Public Member Functions

static const __FlashStringHelper * getName (State state)
 Return the name of the state as a string. More...
 
static void setDebounceTime (unsigned long debounceTime=BUTTON_DEBOUNCE_TIME)
 Set the debounce time for all Buttons. More...
 
static unsigned long getDebounceTime ()
 Get the debounce time. More...
 
- - - - - - - - - -

-Private Attributes

pin_t pin
 
bool prevInput = HIGH
 
State debouncedState = Released
 
unsigned long prevBounceTime = 0
 
- - - - - - -

-Static Private Attributes

static bool invertState = false
 
static unsigned long debounceTime = BUTTON_DEBOUNCE_TIME
 Edit this in Settings.hpp. More...
 
-

Detailed Description

-

A class for reading and debouncing buttons and switches.

-
Examples
2.Button.ino, CountPressedButtons.ino, and Toggle-LEDs.ino.
-
- -

Definition at line 18 of file Button.hpp.

-

Member Enumeration Documentation

- -

◆ State

- -
-
- - - - -
enum State
-
- -

An enumeration of the different states a button can be in.

- - - - - -
Enumerator
Pressed 

Input went from low to low (0,0)

-
Released 

Input went from high to high (1,1)

-
Falling 

Input went from high to low (1,0)

-
Rising 

Input went from low to high (0,1)

-
- -

Definition at line 53 of file Button.hpp.

- -
-
-

Constructor & Destructor Documentation

- -

◆ Button() [1/2]

- -
-
- - - - - -
- - - - - - - -
Button ()
-
-inline
-
- -

Construct a new Button object.

-

This constructor should not be used.
- It is just a way to easily create arrays of buttons, and initializing them later.

- -

Definition at line 27 of file Button.hpp.

- -
-
- -

◆ Button() [2/2]

- -
-
- - - - - - - - -
Button (pin_t pin)
-
- -

Construct a new Button object.

-
Parameters
- - -
pinThe digital pin to read from. The internal pull-up resistor will be enabled when begin is called.
-
-
- -

Definition at line 9 of file Button.cpp.

- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - -
void begin ()
-
- -

Initialize (enable the internal pull-up resistor).

-
Examples
2.Button.ino, and CountPressedButtons.ino.
-
- -

Definition at line 11 of file Button.cpp.

- -
-
- -

◆ invert()

- -
-
- - - - - - - -
void invert ()
-
- -

Invert the state of all buttons, or of this specific button (button pressed is HIGH instead of LOW).

-
Note
This affects all Button objects if AH_INDIVIDUAL_BUTTON_INVERT is not defined.
-
See also
AH_INDIVIDUAL_BUTTON_INVERT
- -

Definition at line 13 of file Button.cpp.

- -
-
- -

◆ update()

- -
-
- - - - - - - -
Button::State update ()
-
- -

Read the button and return its new state.

-

The button is debounced, the debounce time can be set in Settings.hpp: BUTTON_DEBOUNCE_TIME.

-
Debounce time: ├────┤
-
-
Raw input:
-
HIGH ──────┐ ┌──────┐ ┌─┐ ┌─┐ ┌──────┐ ┌────────
-
LOW └──────┘ └─┘ └──────┘ └─┘ └─┘
-
├────┤ ├────┤ ├─┼─┼────┤ ├─┼─┼────┤ ├─┼────┤
-
-
Debounced output:
-
HIGH ──────┐ ┌──────┐ ┌──────────┐ ┌───
-
LOW └──────┘ └──────────┘ └──────┘
-
-
States:
-
HIGH ────────────────┐ ┌─────────────────
-
LOW └──────────────────┘
-
RELEASED FALLING PRESSED RISING
-
Returns
The state of the button, either Button::PRESSED, Button::RELEASED, Button::FALLING or Button::RISING.
-
Examples
2.Button.ino.
-
- -

Definition at line 19 of file Button.cpp.

- -
-
- -

◆ getState()

- -
-
- - - - - - - -
Button::State getState () const
-
- -

Get the state of the button, without updating it.

-

Returns the same value as the last call to update.

-
Returns
The state of the button, either Button::PRESSED, Button::RELEASED, Button::FALLING or Button::RISING.
- -

Definition at line 36 of file Button.cpp.

- -
-
- -

◆ getName()

- -
-
- - - - - -
- - - - - - - - -
const __FlashStringHelper * getName (Button::State state)
-
-static
-
- -

Return the name of the state as a string.

- -

Definition at line 38 of file Button.cpp.

- -
-
- -

◆ previousBounceTime()

- -
-
- - - - - - - -
unsigned long previousBounceTime () const
-
- -

Return the time point (in milliseconds) when the button last bounced.

- -

Definition at line 48 of file Button.cpp.

- -
-
- -

◆ stableTime() [1/2]

- -
-
- - - - - - - - -
unsigned long stableTime (unsigned long now) const
-
- -

Return the time (in milliseconds) that the button has been stable for, compared to the given time point.

- -

Definition at line 50 of file Button.cpp.

- -
-
- -

◆ stableTime() [2/2]

- -
-
- - - - - - - -
unsigned long stableTime () const
-
- -

Return the time (in milliseconds) that the button has been stable for.

- -

Definition at line 54 of file Button.cpp.

- -
-
- -

◆ setDebounceTime()

- -
-
- - - - - -
- - - - - - - - -
void setDebounceTime (unsigned long debounceTime = BUTTON_DEBOUNCE_TIME)
-
-static
-
- -

Set the debounce time for all Buttons.

-
Note
This function affects all Button objects.
-
Parameters
- - -
debounceTimeThe new debounce time in milliseconds.
-
-
- -

Definition at line 56 of file Button.cpp.

- -
-
- -

◆ getDebounceTime()

- -
-
- - - - - -
- - - - - - - -
unsigned long getDebounceTime ()
-
-static
-
- -

Get the debounce time.

-
Returns
The debounce time in milliseconds.
-
See also
setDebounceTime
- -

Definition at line 60 of file Button.cpp.

- -
-
-

Member Data Documentation

- -

◆ pin

- -
-
- - - - - -
- - - - -
pin_t pin
-
-private
-
- -

Definition at line 130 of file Button.hpp.

- -
-
- -

◆ prevInput

- -
-
- - - - - -
- - - - -
bool prevInput = HIGH
-
-private
-
- -

Definition at line 132 of file Button.hpp.

- -
-
- -

◆ debouncedState

- -
-
- - - - - -
- - - - -
State debouncedState = Released
-
-private
-
- -

Definition at line 133 of file Button.hpp.

- -
-
- -

◆ prevBounceTime

- -
-
- - - - - -
- - - - -
unsigned long prevBounceTime = 0
-
-private
-
- -

Definition at line 134 of file Button.hpp.

- -
-
- -

◆ invertState

- -
-
- - - - - -
- - - - -
bool invertState = false
-
-staticprivate
-
- -

Definition at line 139 of file Button.hpp.

- -
-
- -

◆ debounceTime

- -
-
- - - - - -
- - - - -
unsigned long debounceTime = BUTTON_DEBOUNCE_TIME
-
-staticprivate
-
- -

Edit this in Settings.hpp.

-
See also
BUTTON_DEBOUNCE_TIME
- -

Definition at line 144 of file Button.hpp.

- -
-
-
The documentation for this class was generated from the following files: -
-
const uint8_t HIGH
-
const uint8_t LOW
- - - - diff --git a/docs/Doxygen/d1/d1f/ShiftRegisterOutRGB_8hpp.html b/docs/Doxygen/d1/d1f/ShiftRegisterOutRGB_8hpp.html deleted file mode 100644 index 4d400b6f1..000000000 --- a/docs/Doxygen/d1/d1f/ShiftRegisterOutRGB_8hpp.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Arduino Helpers: ShiftRegisterOutRGB.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ShiftRegisterOutRGB.hpp File Reference
-
-
-
#include <AH/Settings/Warnings.hpp>
-#include <stdint.h>
-#include <AH/Settings/SettingsWrapper.hpp>
-
-Include dependency graph for ShiftRegisterOutRGB.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - -

-Classes

struct  ShiftRegisterOutRGB
 A struct for setting the RGB mode for RGB shift registers. More...
 
-
- - - - diff --git a/docs/Doxygen/d1/d1f/ShiftRegisterOutRGB_8hpp_source.html b/docs/Doxygen/d1/d1f/ShiftRegisterOutRGB_8hpp_source.html deleted file mode 100644 index de2423d9f..000000000 --- a/docs/Doxygen/d1/d1f/ShiftRegisterOutRGB_8hpp_source.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - -Arduino Helpers: ShiftRegisterOutRGB.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ShiftRegisterOutRGB.hpp
-
-
-Go to the documentation of this file.
1 /* ✔ */
-
2 
-
3 #pragma once
-
4 
- -
6 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
7 
-
8 #include <stdint.h>
- -
10 
- -
12 
- -
21  const static uint8_t redBit; // = 0;
-
26  const static uint8_t greenBit; // = 1;
-
31  const static uint8_t blueBit; // = 2;
-
32 };
-
33 
- -
35 
- -
-
#define BEGIN_AH_NAMESPACE
-
const static uint8_t redBit
The position of the red output pin for 3-color LEDs.
-
const static uint8_t greenBit
The position of the green output pin for 3-color LEDs.
- -
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
const static uint8_t blueBit
The position of the blue output pin for 3-color LEDs.
-
A struct for setting the RGB mode for RGB shift registers.
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
#define END_AH_NAMESPACE
- - - - - diff --git a/docs/Doxygen/d1/d32/Array_8cpp.html b/docs/Doxygen/d1/d32/Array_8cpp.html deleted file mode 100644 index 727c07fd2..000000000 --- a/docs/Doxygen/d1/d32/Array_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: Array.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Array.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/d1/d32/Array_8cpp_source.html b/docs/Doxygen/d1/d32/Array_8cpp_source.html deleted file mode 100644 index 105876427..000000000 --- a/docs/Doxygen/d1/d32/Array_8cpp_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Arduino Helpers: Array.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Array.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
-
2 #include "Array.hpp"
-
3 #endif
-
- - - - - diff --git a/docs/Doxygen/d1/d33/PrintStream_8hpp__dep__incl.map b/docs/Doxygen/d1/d33/PrintStream_8hpp__dep__incl.map deleted file mode 100644 index 8e4ca2bf4..000000000 --- a/docs/Doxygen/d1/d33/PrintStream_8hpp__dep__incl.map +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d1/d33/PrintStream_8hpp__dep__incl.md5 b/docs/Doxygen/d1/d33/PrintStream_8hpp__dep__incl.md5 deleted file mode 100644 index 909e07873..000000000 --- a/docs/Doxygen/d1/d33/PrintStream_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -98ef354ccc8b8da0616336997e8f7288 \ No newline at end of file diff --git a/docs/Doxygen/d1/d33/PrintStream_8hpp__dep__incl.svg b/docs/Doxygen/d1/d33/PrintStream_8hpp__dep__incl.svg deleted file mode 100644 index b14bab5e8..000000000 --- a/docs/Doxygen/d1/d33/PrintStream_8hpp__dep__incl.svg +++ /dev/null @@ -1,676 +0,0 @@ - - - - - - -PrintStream.hpp - - -Node1 - - -PrintStream.hpp - - - - -Node2 - - -ArrayHelpers.hpp - - - - -Node1->Node2 - - - - -Node12 - - -Debug.hpp - - - - -Node1->Node12 - - - - -Node41 - - -PrintStream.cpp - - - - -Node1->Node41 - - - - -Node3 - - -StaticSizeExtendedIOElement.hpp - - - - -Node2->Node3 - - - - -Node4 - - -AnalogMultiplex.hpp - - - - -Node3->Node4 - - - - -Node5 - - -MAX7219.hpp - - - - -Node3->Node5 - - - - -Node6 - - -ShiftRegisterOutBase.hpp - - - - -Node3->Node6 - - - - -Node7 - - -ShiftRegisterOut.hpp - - - - -Node6->Node7 - - - - -Node9 - - -ShiftRegisterOutBase.ipp - - - - -Node6->Node9 - - - - -Node10 - - -SPIShiftRegisterOut.hpp - - - - -Node6->Node10 - - - - -Node8 - - -ShiftRegisterOut.ipp - - - - -Node7->Node8 - - - - -Node8->Node7 - - - - -Node9->Node6 - - - - -Node11 - - -SPIShiftRegisterOut.ipp - - - - -Node10->Node11 - - - - -Node11->Node10 - - - - -Node13 - - -LinkedList.hpp - - - - -Node12->Node13 - - - - -Node32 - - -Debug.cpp - - - - -Node12->Node32 - - - - -Node33 - - -Error.hpp - - - - -Node12->Node33 - - - - -Node38 - - -SettingsWrapper.hpp - - - - -Node12->Node38 - - - - -Node14 - - -Updatable.hpp - - - - -Node13->Node14 - - - - -Node15 - - -ExtendedIOElement.hpp - - - - -Node13->Node15 - - - - -Node15->Node3 - - - - -Node16 - - -ExtendedInputOutput.hpp - - - - -Node15->Node16 - - - - -Node25 - - -ExtendedInputOutput.cpp - - - - -Node15->Node25 - - - - -Node31 - - -ExtendedIOElement.cpp - - - - -Node15->Node31 - - - - -Node16->Node4 - - - - -Node16->Node8 - - - - -Node16->Node9 - - - - -Node16->Node11 - - - - -Node17 - - -Button.hpp - - - - -Node16->Node17 - - - - -Node23 - - -ButtonMatrix.ipp - - - - -Node16->Node23 - - - - -Node16->Node25 - - - - -Node26 - - -FilteredAnalog.hpp - - - - -Node16->Node26 - - - - -Node27 - - -LEDs.hpp - - - - -Node16->Node27 - - - - -Node29 - - -MAX7219_Base.hpp - - - - -Node16->Node29 - - - - -Node18 - - -Button.cpp - - - - -Node17->Node18 - - - - -Node19 - - -IncrementButton.hpp - - - - -Node17->Node19 - - - - -Node21 - - -IncrementDecrementButtons.hpp - - - - -Node17->Node21 - - - - -Node20 - - -IncrementButton.cpp - - - - -Node19->Node20 - - - - -Node22 - - -IncrementDecrementButtons.cpp - - - - -Node21->Node22 - - - - -Node24 - - -ButtonMatrix.hpp - - - - -Node23->Node24 - - - - -Node24->Node23 - - - - -Node28 - - -DotBarDisplayLEDs.hpp - - - - -Node27->Node28 - - - - -Node29->Node5 - - - - -Node30 - - -MAX7219SevenSegmentDisplay.hpp - - - - -Node29->Node30 - - - - -Node33->Node14 - - - - -Node33->Node25 - - - - -Node33->Node31 - - - - -Node34 - - -Array.hpp - - - - -Node33->Node34 - - - - -Node36 - - -BitArray.hpp - - - - -Node33->Node36 - - - - -Node37 - - -Exit.cpp - - - - -Node33->Node37 - - - - -Node34->Node2 - - - - -Node34->Node4 - - - - -Node35 - - -Hardware-Types.hpp - - - - -Node34->Node35 - - - - -Node35->Node15 - - - - -Node35->Node24 - - - - -Node35->Node26 - - - - -Node36->Node5 - - - - -Node36->Node6 - - - - -Node36->Node10 - - - - -Node38->Node12 - - - - -Node38->Node14 - - - - -Node38->Node17 - - - - -Node38->Node26 - - - - -Node39 - - -ShiftRegisterOutRGB.hpp - - - - -Node38->Node39 - - - - -Node39->Node9 - - - - -Node40 - - -ShiftRegisterOutRGB.cpp - - - - -Node39->Node40 - - - - - diff --git a/docs/Doxygen/d1/d3e/classDotBarDisplayLEDs.html b/docs/Doxygen/d1/d3e/classDotBarDisplayLEDs.html deleted file mode 100644 index e3c8b0955..000000000 --- a/docs/Doxygen/d1/d3e/classDotBarDisplayLEDs.html +++ /dev/null @@ -1,679 +0,0 @@ - - - - - - - -Arduino Helpers: DotBarDisplayLEDs< N > Class Template Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
- -
-
DotBarDisplayLEDs< N > Class Template Reference
-
-
- -

A class for LED bars. - More...

- -

#include <DotBarDisplayLEDs.hpp>

-
-Inheritance diagram for DotBarDisplayLEDs< N >:
-
-
-
-
-Collaboration diagram for DotBarDisplayLEDs< N >:
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 DotBarDisplayLEDs (const PinList< N > &ledPins)
 Constructor from list of pins. More...
 
void display (uint8_t value) const
 Display the given number of LEDs on the LED bar. More...
 
void display (float value) const
 Display the given fraction of the LED bar. More...
 
DotBarMode getMode () const
 Get the dot/bar mode. More...
 
void setMode (DotBarMode mode)
 Set the mode to either dot or bar mode. More...
 
void dotMode ()
 Set the mode to dot mode. More...
 
void barMode ()
 Set the mode to bar mode. More...
 
void toggleMode ()
 Toggle the dot/bar mode. More...
 
void begin () const
 Initialize (set LED pins as outputs). More...
 
void displayRange (uint8_t startOn, uint8_t startOff) const
 Turn on a range of the LEDs. More...
 
void set (uint8_t index) const
 Turn on the given LED. More...
 
void clear (uint8_t index) const
 Turn off the given LED. More...
 
void clear () const
 Turn off all LEDs. More...
 
void displayDot (uint8_t led) const
 Turn on a single LED, and turn off all others. More...
 
- - - - - -

-Private Attributes

DotBarMode mode = DotBarMode::Bar
 
const PinList< N > ledPins
 
-

Detailed Description

-

template<uint8_t N>
-class DotBarDisplayLEDs< N >

- -

A class for LED bars.

-
Template Parameters
- - -
NThe number of LEDs in the bar.
-
-
- -

Definition at line 29 of file DotBarDisplayLEDs.hpp.

-

Constructor & Destructor Documentation

- -

◆ DotBarDisplayLEDs()

- -
-
- - - - - -
- - - - - - - - -
DotBarDisplayLEDs (const PinList< N > & ledPins)
-
-inline
-
- -

Constructor from list of pins.

- -

Definition at line 32 of file DotBarDisplayLEDs.hpp.

- -
-
-

Member Function Documentation

- -

◆ display() [1/2]

- -
-
- - - - - -
- - - - - - - - -
void display (uint8_t value) const
-
-inline
-
- -

Display the given number of LEDs on the LED bar.

-
Parameters
- - -
valueThe number of the LED to activate.
-
-
- -

Definition at line 40 of file DotBarDisplayLEDs.hpp.

- -
-
- -

◆ display() [2/2]

- -
-
- - - - - -
- - - - - - - - -
void display (float value) const
-
-inline
-
- -

Display the given fraction of the LED bar.

-
Parameters
- - -
valueThe fraction of the LED bar to display.
-
-
- -

Definition at line 55 of file DotBarDisplayLEDs.hpp.

- -
-
- -

◆ getMode()

- -
-
- - - - - -
- - - - - - - -
DotBarMode getMode () const
-
-inline
-
- -

Get the dot/bar mode.

- -

Definition at line 58 of file DotBarDisplayLEDs.hpp.

- -
-
- -

◆ setMode()

- -
-
- - - - - -
- - - - - - - - -
void setMode (DotBarMode mode)
-
-inline
-
- -

Set the mode to either dot or bar mode.

-
Parameters
- - -
modeThe mode.
-
-
- -

Definition at line 66 of file DotBarDisplayLEDs.hpp.

- -
-
- -

◆ dotMode()

- -
-
- - - - - -
- - - - - - - -
void dotMode ()
-
-inline
-
- -

Set the mode to dot mode.

- -

Definition at line 69 of file DotBarDisplayLEDs.hpp.

- -
-
- -

◆ barMode()

- -
-
- - - - - -
- - - - - - - -
void barMode ()
-
-inline
-
- -

Set the mode to bar mode.

- -

Definition at line 72 of file DotBarDisplayLEDs.hpp.

- -
-
- -

◆ toggleMode()

- -
-
- - - - - -
- - - - - - - -
void toggleMode ()
-
-inline
-
- -

Toggle the dot/bar mode.

- -

Definition at line 75 of file DotBarDisplayLEDs.hpp.

- -
-
- -

◆ begin()

- -
-
- - - - - -
- - - - - - - -
void begin () const
-
-inlineinherited
-
- -

Initialize (set LED pins as outputs).

- -

Definition at line 34 of file LEDs.hpp.

- -
-
- -

◆ displayRange()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void displayRange (uint8_t startOn,
uint8_t startOff 
) const
-
-inlineinherited
-
- -

Turn on a range of the LEDs.

-
Parameters
- - - -
startOnThe first LED of the range to turn on (the LEDs before this one are turned off).
startOffThe first LED after the range to turn off.
-
-
- -

Definition at line 48 of file LEDs.hpp.

- -
-
- -

◆ set()

- -
-
- - - - - -
- - - - - - - - -
void set (uint8_t index) const
-
-inlineinherited
-
- -

Turn on the given LED.

- -

Definition at line 58 of file LEDs.hpp.

- -
-
- -

◆ clear() [1/2]

- -
-
- - - - - -
- - - - - - - - -
void clear (uint8_t index) const
-
-inlineinherited
-
- -

Turn off the given LED.

- -

Definition at line 64 of file LEDs.hpp.

- -
-
- -

◆ clear() [2/2]

- -
-
- - - - - -
- - - - - - - -
void clear () const
-
-inlineinherited
-
- -

Turn off all LEDs.

- -

Definition at line 80 of file LEDs.hpp.

- -
-
- -

◆ displayDot()

- -
-
- - - - - -
- - - - - - - - -
void displayDot (uint8_t led) const
-
-inlineinherited
-
- -

Turn on a single LED, and turn off all others.

-
Parameters
- - -
ledThe LED to turn on.
-
-
- -

Definition at line 75 of file LEDs.hpp.

- -
-
-

Member Data Documentation

- -

◆ mode

- -
-
- - - - - -
- - - - -
DotBarMode mode = DotBarMode::Bar
-
-private
-
- -

Definition at line 78 of file DotBarDisplayLEDs.hpp.

- -
-
- -

◆ ledPins

- -
-
- - - - - -
- - - - -
const PinList<N> ledPins
-
-privateinherited
-
- -

Definition at line 86 of file LEDs.hpp.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/Doxygen/d1/d40/BitArray_8hpp.html b/docs/Doxygen/d1/d40/BitArray_8hpp.html deleted file mode 100644 index 32ee4ca01..000000000 --- a/docs/Doxygen/d1/d40/BitArray_8hpp.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - -Arduino Helpers: BitArray.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
BitArray.hpp File Reference
-
-
-
#include <AH/Settings/Warnings.hpp>
-#include <AH/Error/Error.hpp>
-#include <AH/Settings/NamespaceSettings.hpp>
-#include <stdint.h>
-
-Include dependency graph for BitArray.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - -

-Classes

class  BitArray< N >
 A class for arrays of bits. More...
 
-
- - - - diff --git a/docs/Doxygen/d1/d40/BitArray_8hpp_source.html b/docs/Doxygen/d1/d40/BitArray_8hpp_source.html deleted file mode 100644 index 256be21b4..000000000 --- a/docs/Doxygen/d1/d40/BitArray_8hpp_source.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - - -Arduino Helpers: BitArray.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
BitArray.hpp
-
-
-Go to the documentation of this file.
1 /* ✔ */
-
2 
-
3 #pragma once
-
4 
- -
6 
-
7 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
8 
-
9 #include <AH/Error/Error.hpp>
- -
11 #include <stdint.h>
-
12 
-
15 
- -
17 
-
24 template <uint8_t N>
-
25 class BitArray {
-
26  public:
-
33  bool get(uint8_t bitIndex) const {
-
34  return buffer[getBufferIndex(bitIndex)] & getBufferMask(bitIndex);
-
35  }
-
36 
-
43  void set(uint8_t bitIndex) {
-
44  buffer[getBufferIndex(bitIndex)] |= getBufferMask(bitIndex);
-
45  }
-
46 
-
53  void clear(uint8_t bitIndex) {
-
54  buffer[getBufferIndex(bitIndex)] &= ~getBufferMask(bitIndex);
-
55  }
-
56 
-
65  void set(uint8_t bitIndex, bool state) {
-
66  state ? set(bitIndex) : clear(bitIndex);
-
67  }
-
68 
-
77  uint8_t safeIndex(uint8_t byteIndex) const {
-
78  if (byteIndex >= getBufferLength()) {
-
79  ERROR(F("Error: index out of bounds (")
-
80  << byteIndex << F(", length is ") << getBufferLength()
-
81  << ')',
-
82  0xFFFF);
-
83  return getBufferLength() - 1;
-
84  }
-
85  return byteIndex;
-
86  }
-
87 
-
99  uint8_t getByte(uint8_t byteIndex) const {
-
100  return buffer[byteIndex];
-
101  // return buffer[safeIndex(byteIndex)];
-
102  }
-
103 
-
107  uint8_t getBufferLength() const { return bufferLength; }
-
108 
-
109  private:
-
110  uint8_t getBufferIndex(uint8_t bitIndex) const {
-
111  return safeIndex(bitIndex / 8);
-
112  }
-
113  uint8_t getBufferBit(uint8_t bitIndex) const { return bitIndex % 8; }
-
114  uint8_t getBufferMask(uint8_t bitIndex) const {
-
115  return 1 << getBufferBit(bitIndex);
-
116  }
-
117 
-
118  constexpr static uint8_t bufferLength = (uint8_t)((N + 7) / 8);
-
119  uint8_t buffer[bufferLength] = {};
-
120 };
-
121 
- -
123 
-
125 
- -
-
#define BEGIN_AH_NAMESPACE
- -
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
uint8_t getBufferMask(uint8_t bitIndex) const
Definition: BitArray.hpp:114
-
void clear(uint8_t bitIndex)
Clear the value of the given bit to 0.
Definition: BitArray.hpp:53
-
#define ERROR(msg, errc)
Print the error message and error code, and stop the execution if FATAL_ERRORS are enabled.
Definition: Error.hpp:42
-
uint8_t buffer[bufferLength]
Definition: BitArray.hpp:119
-
uint8_t safeIndex(uint8_t byteIndex) const
Check the given byte index, and return it if it is within the bounds of the array,...
Definition: BitArray.hpp:77
-
constexpr static uint8_t bufferLength
Definition: BitArray.hpp:118
-
void set(uint8_t bitIndex)
Set the value of the given bit to 1.
Definition: BitArray.hpp:43
- -
uint8_t getByte(uint8_t byteIndex) const
Get the byte at the given index.
Definition: BitArray.hpp:99
-
uint8_t getBufferBit(uint8_t bitIndex) const
Definition: BitArray.hpp:113
-
void set(uint8_t bitIndex, bool state)
Set the value of the given bit to the given state.
Definition: BitArray.hpp:65
-
bool get(uint8_t bitIndex) const
Get the value of the given bit.
Definition: BitArray.hpp:33
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
uint8_t getBufferLength() const
Get the buffer length in bytes.
Definition: BitArray.hpp:107
-
#define END_AH_NAMESPACE
-
uint8_t getBufferIndex(uint8_t bitIndex) const
Definition: BitArray.hpp:110
-
A class for arrays of bits.
Definition: BitArray.hpp:25
- - - - diff --git a/docs/Doxygen/d1/d4a/ADCConfig_8cpp.html b/docs/Doxygen/d1/d4a/ADCConfig_8cpp.html deleted file mode 100644 index 64d8b394a..000000000 --- a/docs/Doxygen/d1/d4a/ADCConfig_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: ADCConfig.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ADCConfig.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/d1/d4a/ADCConfig_8cpp_source.html b/docs/Doxygen/d1/d4a/ADCConfig_8cpp_source.html deleted file mode 100644 index 33b2e27e5..000000000 --- a/docs/Doxygen/d1/d4a/ADCConfig_8cpp_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Arduino Helpers: ADCConfig.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ADCConfig.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
-
2 #include "ADCConfig.hpp"
-
3 #endif
-
-
This file contains the platform-specific ADC resolutions. By default, the library automatically selec...
- - - - diff --git a/docs/Doxygen/d1/d4c/classDoublyLinkedList_1_1reverse__node__iterator.html b/docs/Doxygen/d1/d4c/classDoublyLinkedList_1_1reverse__node__iterator.html deleted file mode 100644 index eaf58113e..000000000 --- a/docs/Doxygen/d1/d4c/classDoublyLinkedList_1_1reverse__node__iterator.html +++ /dev/null @@ -1,403 +0,0 @@ - - - - - - - -Arduino Helpers: DoublyLinkedList< Node >::reverse_node_iterator< INode > Class Template Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
DoublyLinkedList< Node >::reverse_node_iterator< INode > Class Template Reference
-
-
- -

Reverse bidirectional doubly linked list iterator. - More...

- -

#include <LinkedList.hpp>

-
-Inheritance diagram for DoublyLinkedList< Node >::reverse_node_iterator< INode >:
-
-
-
-
-Collaboration diagram for DoublyLinkedList< Node >::reverse_node_iterator< INode >:
-
-
-
- - - - - - - - - - - - -

-Public Types

using difference_type = void
 
using value_type = INode
 
using pointer = INode *
 
using reference = INode &
 
using iterator_category = std::bidirectional_iterator_tag
 
- - - - - - - - - - - - - -

-Public Member Functions

 reverse_node_iterator (INode *node)
 
reverse_node_iteratoroperator++ ()
 Prefix increment operator. More...
 
reverse_node_iteratoroperator-- ()
 Prefix decrement operator. More...
 
bool operator!= (const node_iterator_base &rhs) const
 
INode & operator* () const
 
- - - -

-Protected Attributes

INode * node
 
-

Detailed Description

-

template<class Node>
-template<class INode>
-class DoublyLinkedList< Node >::reverse_node_iterator< INode >

- -

Reverse bidirectional doubly linked list iterator.

- -

Definition at line 79 of file LinkedList.hpp.

-

Member Typedef Documentation

- -

◆ difference_type

- -
-
- - - - -
using difference_type = void
-
- -

Definition at line 84 of file LinkedList.hpp.

- -
-
- -

◆ value_type

- -
-
- - - - -
using value_type = INode
-
- -

Definition at line 85 of file LinkedList.hpp.

- -
-
- -

◆ pointer

- -
-
- - - - -
using pointer = INode *
-
- -

Definition at line 86 of file LinkedList.hpp.

- -
-
- -

◆ reference

- -
-
- - - - -
using reference = INode &
-
- -

Definition at line 87 of file LinkedList.hpp.

- -
-
- -

◆ iterator_category

- -
-
- - - - -
using iterator_category = std::bidirectional_iterator_tag
-
- -

Definition at line 88 of file LinkedList.hpp.

- -
-
-

Constructor & Destructor Documentation

- -

◆ reverse_node_iterator()

- -
-
- - - - - -
- - - - - - - - -
reverse_node_iterator (INode * node)
-
-inline
-
- -

Definition at line 81 of file LinkedList.hpp.

- -
-
-

Member Function Documentation

- -

◆ operator++()

- -
-
- - - - - -
- - - - - - - -
reverse_node_iterator& operator++ ()
-
-inline
-
- -

Prefix increment operator.

- -

Definition at line 92 of file LinkedList.hpp.

- -
-
- -

◆ operator--()

- -
-
- - - - - -
- - - - - - - -
reverse_node_iterator& operator-- ()
-
-inline
-
- -

Prefix decrement operator.

- -

Definition at line 99 of file LinkedList.hpp.

- -
-
- -

◆ operator!=()

- -
-
- - - - - -
- - - - - - - - -
bool operator!= (const node_iterator_base< INode > & rhs) const
-
-inlineinherited
-
- -

Definition at line 35 of file LinkedList.hpp.

- -
-
- -

◆ operator*()

- -
-
- - - - - -
- - - - - - - -
INode& operator* () const
-
-inlineinherited
-
- -

Definition at line 39 of file LinkedList.hpp.

- -
-
-

Member Data Documentation

- -

◆ node

- -
-
- - - - - -
- - - - -
INode* node
-
-protectedinherited
-
- -

Definition at line 45 of file LinkedList.hpp.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/Doxygen/d1/d5a/Hardware-Types_8hpp__incl.map b/docs/Doxygen/d1/d5a/Hardware-Types_8hpp__incl.map deleted file mode 100644 index 0dbee2481..000000000 --- a/docs/Doxygen/d1/d5a/Hardware-Types_8hpp__incl.map +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d1/d5a/Hardware-Types_8hpp__incl.md5 b/docs/Doxygen/d1/d5a/Hardware-Types_8hpp__incl.md5 deleted file mode 100644 index c35d73e77..000000000 --- a/docs/Doxygen/d1/d5a/Hardware-Types_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -9813441f5f2b9ab1bfe6a78ce69af0f3 \ No newline at end of file diff --git a/docs/Doxygen/d1/d5a/Hardware-Types_8hpp__incl.svg b/docs/Doxygen/d1/d5a/Hardware-Types_8hpp__incl.svg deleted file mode 100644 index 9b4c5240f..000000000 --- a/docs/Doxygen/d1/d5a/Hardware-Types_8hpp__incl.svg +++ /dev/null @@ -1,320 +0,0 @@ - - - - - - -Hardware-Types.hpp - - -Node1 - - -Hardware-Types.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -AH/Containers/Array.hpp - - - - -Node1->Node3 - - - - -Node9 - - -NamespaceSettings.hpp - - - - -Node1->Node9 - - - - -Node15 - - -stdint.h - - - - -Node1->Node15 - - - - -Node3->Node2 - - - - -Node4 - - -AH/Error/Error.hpp - - - - -Node3->Node4 - - - - -Node14 - - -stddef.h - - - - -Node3->Node14 - - - - -Node18 - - -AH/STL/iterator - - - - -Node3->Node18 - - - - -Node19 - - -AH/STL/type_traits - - - - -Node3->Node19 - - - - -Node4->Node2 - - - - -Node5 - - -AH/Debug/Debug.hpp - - - - -Node4->Node5 - - - - -Node5->Node2 - - - - -Node6 - - -AH/PrintStream/PrintStream.hpp - - - - -Node5->Node6 - - - - -Node8 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node5->Node8 - - - - -Node17 - - -DebugVal.hpp - - - - -Node5->Node17 - - - - -Node6->Node2 - - - - -Node7 - - -Arduino.h - - - - -Node6->Node7 - - - - -Node8->Node2 - - - - -Node8->Node5 - - - - -Node8->Node9 - - - - -Node10 - - -Settings.hpp - - - - -Node8->Node10 - - - - -Node16 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node8->Node16 - - - - -Node11 - - -AH/Types/Frequency.hpp - - - - -Node10->Node11 - - - - -Node12 - - -AH/Hardware/ADCConfig.hpp - - - - -Node10->Node12 - - - - -Node13 - - -limits.h - - - - -Node10->Node13 - - - - -Node10->Node14 - - - - -Node10->Node15 - - - - -Node11->Node2 - - - - -Node11->Node9 - - - - -Node12->Node2 - - - - -Node12->Node7 - - - - - diff --git a/docs/Doxygen/d1/d5c/classShiftRegisterOut.html b/docs/Doxygen/d1/d5c/classShiftRegisterOut.html deleted file mode 100644 index 48619c746..000000000 --- a/docs/Doxygen/d1/d5c/classShiftRegisterOut.html +++ /dev/null @@ -1,1375 +0,0 @@ - - - - - - - -Arduino Helpers: ShiftRegisterOut< N > Class Template Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

A class for serial-in/parallel-out shift registers, like the 74HC595. - More...

- -

#include <ShiftRegisterOut.hpp>

-
-Inheritance diagram for ShiftRegisterOut< N >:
-
-
-
-
-Collaboration diagram for ShiftRegisterOut< N >:
-
-
-
- - - - -

-Public Types

using BitOrder_t = typename ShiftRegisterOutBase< N >::BitOrder_t
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 ShiftRegisterOut (pin_t dataPin, pin_t clockPin, pin_t latchPin, BitOrder_t bitOrder=MSBFIRST)
 Create a new ShiftRegisterOut object with a shift register connected to the given pins, with a given bit order, and a given number of outputs. More...
 
void begin () override
 Initialize the shift register. More...
 
void update () override
 Write the state buffer to the physical outputs. More...
 
void pinMode (pin_t pin, uint8_t mode) override __attribute__((deprecated))
 The pinMode function is not implemented because the mode is OUTPUT by definition. More...
 
void digitalWrite (pin_t pin, uint8_t val) override
 Set the state of a given output pin. More...
 
int digitalRead (pin_t pin) override
 Get the current state of a given output pin. More...
 
analog_t analogRead (pin_t pin) override __attribute__((deprecated))
 The analogRead function is deprecated because a shift is always digital. More...
 
void analogWrite (pin_t pin, analog_t val) override __attribute__((deprecated))
 The analogWrite function is not deprecated because a shift is always digital. More...
 
pin_t red (pin_t id)
 Get the red output pin of the given LED. More...
 
Array< pin_t, N/3 > redPins ()
 Get an array containing all pins with red LEDs. More...
 
pin_t green (pin_t id)
 Get the green output pin of the given LED. More...
 
Array< pin_t, N/3 > greenPins ()
 Get an array containing all pins with green LEDs. More...
 
pin_t blue (pin_t id)
 Get the blue output pin of the given LED. More...
 
Array< pin_t, N/3 > bluePins ()
 Get an array containing all pins with blue LEDs. More...
 
Array< pin_t, N > pins () const
 Get an array containing all pins of the element. More...
 
pin_t pin (pin_t pin) const
 Get the extended IO pin number of a given physical pin of this extended IO element. More...
 
pin_t operator[] (pin_t pin) const
 Get the extended IO pin number of a given physical pin of this extended IO element. More...
 
pin_t getLength () const
 Get the number of pins this IO element has. More...
 
pin_t getEnd () const
 Get the largest global extended IO pin number that belongs to this extended IO element. More...
 
pin_t getStart () const
 Get the smallest global extended IO pin number that belongs to this extended IO element. More...
 
- - - - - - - - - -

-Static Public Member Functions

static constexpr uint16_t length ()
 
static void beginAll ()
 Initialize all extended IO elements. More...
 
static DoublyLinkedList< ExtendedIOElement > & getAll ()
 Get the list of all Extended IO elements. More...
 
- - - - - - - - - - - - - -

-Protected Attributes

const pin_t latchPin
 
const BitOrder_t bitOrder
 
BitArray< N > buffer
 
bool dirty = true
 
ExtendedIOElementnext
 
ExtendedIOElementprevious
 
- - - - - - - - - -

-Private Attributes

const pin_t dataPin
 
const pin_t clockPin
 
const pin_t start
 
const pin_t end
 
- - - - - -

-Static Private Attributes

static pin_t offset = NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS
 
static DoublyLinkedList< ExtendedIOElementelements
 
-

Detailed Description

-

template<uint8_t N>
-class ShiftRegisterOut< N >

- -

A class for serial-in/parallel-out shift registers, like the 74HC595.

-
Examples
2.BitBang-Blink.ino.
-
- -

Definition at line 23 of file ShiftRegisterOut.hpp.

-

Member Typedef Documentation

- -

◆ BitOrder_t

- -
-
- - - - -
using BitOrder_t = typename ShiftRegisterOutBase<N>::BitOrder_t
-
- -

Definition at line 25 of file ShiftRegisterOut.hpp.

- -
-
-

Constructor & Destructor Documentation

- -

◆ ShiftRegisterOut()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ShiftRegisterOut (pin_t dataPin,
pin_t clockPin,
pin_t latchPin,
BitOrder_t bitOrder = MSBFIRST 
)
-
- -

Create a new ShiftRegisterOut object with a shift register connected to the given pins, with a given bit order, and a given number of outputs.

-

Multiple shift registers can be cascaded by connecting the serial output of the first one to the input of the second one:

clockPin >───────────┬──────────────────────┬───────── ⋯
-
┏━━━━━━━┷━━━━━━━┓ ┏━━━━━━━┷━━━━━━━┓
-
┃ SH_CP ┃ ┃ SH_CP ┃
-
dataPin >───┨ DS Q7S ┠──────┨ DS Q7S ┠─ ⋯
-
┃ ST_CP ┃ ┃ ST_CP ┃
-
┗━━━━━━━┯━━━━━━━┛ ┗━━━━━━━┯━━━━━━━┛
-
latchPin >───────────┴──────────────────────┴───────── ⋯
-
Parameters
- - - - - -
dataPinThe digital output pin connected to the serial data input (DS or SER) of the shift register.
clockPinThe digital output pin connected to the clock input (SH_CP or SRCLK) of the shift register.
latchPinThe digital output pin connected to the latch pin (ST_CP or RCLK) of the shift register.
bitOrderEither MSBFIRST (most significant bit first) or LSBFIRST (least significant bit first).
-
-
- -

Definition at line 7 of file ShiftRegisterOut.ipp.

- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - -
- - - - - - - -
void begin ()
-
-overridevirtual
-
- -

Initialize the shift register.

-


- Set the data and clock pins to output mode, and set all shift register outputs to LOW.

- -

Implements ExtendedIOElement.

- -

Definition at line 13 of file ShiftRegisterOut.ipp.

- -
-
- -

◆ update()

- -
-
- - - - - -
- - - - - - - -
void update ()
-
-overridevirtual
-
- -

Write the state buffer to the physical outputs.

- -

Implements ExtendedIOElement.

- -

Definition at line 21 of file ShiftRegisterOut.ipp.

- -
-
- -

◆ pinMode()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void pinMode (pin_t pin,
uint8_t mode 
)
-
-inlineoverridevirtualinherited
-
- -

The pinMode function is not implemented because the mode is OUTPUT by definition.

- -

Implements ExtendedIOElement.

- -

Definition at line 52 of file ShiftRegisterOutBase.hpp.

- -
-
- -

◆ digitalWrite()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void digitalWrite (pin_t pin,
uint8_t val 
)
-
-overridevirtualinherited
-
- -

Set the state of a given output pin.

-
Parameters
- - - -
pinThe shift register pin to set.
valThe value to set the pin to. (Either HIGH (1) or LOW (0))
-
-
- -

Implements ExtendedIOElement.

- -

Definition at line 13 of file ShiftRegisterOutBase.ipp.

- -
-
- -

◆ digitalRead()

- -
-
- - - - - -
- - - - - - - - -
int digitalRead (pin_t pin)
-
-overridevirtualinherited
-
- -

Get the current state of a given output pin.

-
Parameters
- - -
pinThe shift register pin to read from.
-
-
-
Return values
- - - -
0The state of the pin is LOW.
1The state of the pin is HIGH.
-
-
- -

Implements ExtendedIOElement.

- -

Definition at line 20 of file ShiftRegisterOutBase.ipp.

- -
-
- -

◆ analogRead()

- -
-
- - - - - -
- - - - - - - - -
analog_t analogRead (pin_t pin)
-
-inlineoverridevirtualinherited
-
- -

The analogRead function is deprecated because a shift is always digital.

-
Parameters
- - -
pinThe shift register pin to read from.
-
-
-
Return values
- - - -
0The state of the pin is LOW.
1023The state of the pin is HIGH.
-
-
- -

Implements ExtendedIOElement.

- -

Definition at line 90 of file ShiftRegisterOutBase.hpp.

- -
-
- -

◆ analogWrite()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void analogWrite (pin_t pin,
analog_t val 
)
-
-inlineoverridevirtualinherited
-
- -

The analogWrite function is not deprecated because a shift is always digital.

-
Parameters
- - - -
pinThe shift register pin to set.
valThe value to set the pin to. A value greater or equal to 0x80 will set the pin to a HIGH state, a value less than 0x80 will set the pin to a LOW state.
-
-
- -

Implements ExtendedIOElement.

- -

Definition at line 104 of file ShiftRegisterOutBase.hpp.

- -
-
- -

◆ red()

- -
-
- - - - - -
- - - - - - - - -
pin_t red (pin_t id)
-
-inherited
-
- -

Get the red output pin of the given LED.

-
Parameters
- - -
idThe zero-based LED number.
-
-
- -

Definition at line 36 of file ShiftRegisterOutBase.ipp.

- -
-
- -

◆ redPins()

- -
-
- - - - - -
- - - - - - - -
Array< pin_t, N/3 > redPins ()
-
-inherited
-
- -

Get an array containing all pins with red LEDs.

- -

Definition at line 41 of file ShiftRegisterOutBase.ipp.

- -
-
- -

◆ green()

- -
-
- - - - - -
- - - - - - - - -
pin_t green (pin_t id)
-
-inherited
-
- -

Get the green output pin of the given LED.

-
Parameters
- - -
idThe zero-based LED number.
-
-
- -

Definition at line 25 of file ShiftRegisterOutBase.ipp.

- -
-
- -

◆ greenPins()

- -
-
- - - - - -
- - - - - - - -
Array< pin_t, N/3 > greenPins ()
-
-inherited
-
- -

Get an array containing all pins with green LEDs.

- -

Definition at line 30 of file ShiftRegisterOutBase.ipp.

- -
-
- -

◆ blue()

- -
-
- - - - - -
- - - - - - - - -
pin_t blue (pin_t id)
-
-inherited
-
- -

Get the blue output pin of the given LED.

-
Parameters
- - -
idThe zero-based LED number.
-
-
- -

Definition at line 47 of file ShiftRegisterOutBase.ipp.

- -
-
- -

◆ bluePins()

- -
-
- - - - - -
- - - - - - - -
Array< pin_t, N/3 > bluePins ()
-
-inherited
-
- -

Get an array containing all pins with blue LEDs.

- -

Definition at line 52 of file ShiftRegisterOutBase.ipp.

- -
-
- -

◆ pins()

- -
-
- - - - - -
- - - - - - - -
Array<pin_t, N> pins () const
-
-inlineinherited
-
- -

Get an array containing all pins of the element.

- -

Definition at line 27 of file StaticSizeExtendedIOElement.hpp.

- -
-
- -

◆ length()

- -
-
- - - - - -
- - - - - - - -
static constexpr uint16_t length ()
-
-inlinestaticconstexprinherited
-
- -

Definition at line 31 of file StaticSizeExtendedIOElement.hpp.

- -
-
- -

◆ beginAll()

- -
-
- - - - - -
- - - - - - - -
void beginAll ()
-
-staticinherited
-
- -

Initialize all extended IO elements.

- -

Definition at line 23 of file ExtendedIOElement.cpp.

- -
-
- -

◆ pin()

- -
-
- - - - - -
- - - - - - - - -
pin_t pin (pin_t pin) const
-
-inherited
-
- -

Get the extended IO pin number of a given physical pin of this extended IO element.

-
Parameters
- - -
pinThe zero-based physical pin number of this IO element.
-
-
-
Returns
The global, unique extended IO pin number for the given pin.
-
Examples
Toggle-LEDs.ino.
-
- -

Definition at line 28 of file ExtendedIOElement.cpp.

- -
-
- -

◆ operator[]()

- -
-
- - - - - -
- - - - - - - - -
pin_t operator[] (pin_t pin) const
-
-inherited
-
- -

Get the extended IO pin number of a given physical pin of this extended IO element.

-


- It is alias for ExtendedIOElement::pin.

Parameters
- - -
pinThe zero-based physical pin number of this IO element.
-
-
-
Returns
The global, unique extended IO pin number for the given pin.
- -

Definition at line 43 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getLength()

- -
-
- - - - - -
- - - - - - - -
pin_t getLength () const
-
-inherited
-
- -

Get the number of pins this IO element has.

-
Returns
The number of pins this IO element has.
-
Examples
1.AnalogReadSerial.ino, and 2.DigitalReadSerial.ino.
-
- -

Definition at line 45 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getEnd()

- -
-
- - - - - -
- - - - - - - -
pin_t getEnd () const
-
-inherited
-
- -

Get the largest global extended IO pin number that belongs to this extended IO element.

- -

Definition at line 47 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getStart()

- -
-
- - - - - -
- - - - - - - -
pin_t getStart () const
-
-inherited
-
- -

Get the smallest global extended IO pin number that belongs to this extended IO element.

- -

Definition at line 49 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getAll()

- -
-
- - - - - -
- - - - - - - -
DoublyLinkedList< ExtendedIOElement > & getAll ()
-
-staticinherited
-
- -

Get the list of all Extended IO elements.

- -

Definition at line 51 of file ExtendedIOElement.cpp.

- -
-
-

Member Data Documentation

- -

◆ dataPin

- -
-
- - - - - -
- - - - -
const pin_t dataPin
-
-private
-
- -

Definition at line 73 of file ShiftRegisterOut.hpp.

- -
-
- -

◆ clockPin

- -
-
- - - - - -
- - - - -
const pin_t clockPin
-
-private
-
- -

Definition at line 74 of file ShiftRegisterOut.hpp.

- -
-
- -

◆ latchPin

- -
-
- - - - - -
- - - - -
const pin_t latchPin
-
-protectedinherited
-
- -

Definition at line 149 of file ShiftRegisterOutBase.hpp.

- -
-
- -

◆ bitOrder

- -
-
- - - - - -
- - - - -
const BitOrder_t bitOrder
-
-protectedinherited
-
- -

Definition at line 150 of file ShiftRegisterOutBase.hpp.

- -
-
- -

◆ buffer

- -
-
- - - - - -
- - - - -
BitArray<N> buffer
-
-protectedinherited
-
- -

Definition at line 152 of file ShiftRegisterOutBase.hpp.

- -
-
- -

◆ dirty

- -
-
- - - - - -
- - - - -
bool dirty = true
-
-protectedinherited
-
- -

Definition at line 153 of file ShiftRegisterOutBase.hpp.

- -
-
- -

◆ start

- -
-
- - - - - -
- - - - -
const pin_t start
-
-privateinherited
-
- -

Definition at line 193 of file ExtendedIOElement.hpp.

- -
-
- -

◆ end

- -
-
- - - - - -
- - - - -
const pin_t end
-
-privateinherited
-
- -

Definition at line 194 of file ExtendedIOElement.hpp.

- -
-
- -

◆ offset

- -
-
- - - - - -
- - - - -
pin_t offset = NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS
-
-staticprivateinherited
-
- -

Definition at line 195 of file ExtendedIOElement.hpp.

- -
-
- -

◆ elements

- -
-
- - - - - -
- - - - -
DoublyLinkedList< ExtendedIOElement > elements
-
-staticprivateinherited
-
- -

Definition at line 197 of file ExtendedIOElement.hpp.

- -
-
- -

◆ next

- -
-
- - - - - -
- - - - -
ExtendedIOElement * next
-
-protectedinherited
-
- -

Definition at line 305 of file LinkedList.hpp.

- -
-
- -

◆ previous

- -
-
- - - - - -
- - - - -
ExtendedIOElement * previous
-
-protectedinherited
-
- -

Definition at line 306 of file LinkedList.hpp.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - - - - diff --git a/docs/Doxygen/d1/d5e/MAX7219_8hpp__incl.map b/docs/Doxygen/d1/d5e/MAX7219_8hpp__incl.map deleted file mode 100644 index ed68fd3ac..000000000 --- a/docs/Doxygen/d1/d5e/MAX7219_8hpp__incl.map +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d1/d5e/MAX7219_8hpp__incl.md5 b/docs/Doxygen/d1/d5e/MAX7219_8hpp__incl.md5 deleted file mode 100644 index ca9c78502..000000000 --- a/docs/Doxygen/d1/d5e/MAX7219_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -44075d8205c42cd5667b4acf6c541d81 \ No newline at end of file diff --git a/docs/Doxygen/d1/d5e/MAX7219_8hpp__incl.svg b/docs/Doxygen/d1/d5e/MAX7219_8hpp__incl.svg deleted file mode 100644 index bbc42744b..000000000 --- a/docs/Doxygen/d1/d5e/MAX7219_8hpp__incl.svg +++ /dev/null @@ -1,605 +0,0 @@ - - - - - - -MAX7219.hpp - - -Node1 - - -MAX7219.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -StaticSizeExtendedIOElement.hpp - - - - -Node1->Node3 - - - - -Node30 - - -AH/Containers/BitArray.hpp - - - - -Node1->Node30 - - - - -Node31 - - -AH/Hardware/LEDs/MAX7219 -_Base.hpp - - - - -Node1->Node31 - - - - -Node3->Node2 - - - - -Node4 - - -ExtendedIOElement.hpp - - - - -Node3->Node4 - - - - -Node28 - - -AH/Containers/ArrayHelpers.hpp - - - - -Node3->Node28 - - - - -Node4->Node2 - - - - -Node5 - - -AH/Hardware/Hardware --Types.hpp - - - - -Node4->Node5 - - - - -Node23 - - -AH/Containers/LinkedList.hpp - - - - -Node4->Node23 - - - - -Node5->Node2 - - - - -Node6 - - -AH/Containers/Array.hpp - - - - -Node5->Node6 - - - - -Node12 - - -NamespaceSettings.hpp - - - - -Node5->Node12 - - - - -Node18 - - -stdint.h - - - - -Node5->Node18 - - - - -Node6->Node2 - - - - -Node7 - - -AH/Error/Error.hpp - - - - -Node6->Node7 - - - - -Node17 - - -stddef.h - - - - -Node6->Node17 - - - - -Node21 - - -AH/STL/iterator - - - - -Node6->Node21 - - - - -Node22 - - -AH/STL/type_traits - - - - -Node6->Node22 - - - - -Node7->Node2 - - - - -Node8 - - -AH/Debug/Debug.hpp - - - - -Node7->Node8 - - - - -Node8->Node2 - - - - -Node9 - - -AH/PrintStream/PrintStream.hpp - - - - -Node8->Node9 - - - - -Node11 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node8->Node11 - - - - -Node20 - - -DebugVal.hpp - - - - -Node8->Node20 - - - - -Node9->Node2 - - - - -Node10 - - -Arduino.h - - - - -Node9->Node10 - - - - -Node11->Node2 - - - - -Node11->Node8 - - - - -Node11->Node12 - - - - -Node13 - - -Settings.hpp - - - - -Node11->Node13 - - - - -Node19 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node11->Node19 - - - - -Node14 - - -AH/Types/Frequency.hpp - - - - -Node13->Node14 - - - - -Node15 - - -AH/Hardware/ADCConfig.hpp - - - - -Node13->Node15 - - - - -Node16 - - -limits.h - - - - -Node13->Node16 - - - - -Node13->Node17 - - - - -Node13->Node18 - - - - -Node14->Node2 - - - - -Node14->Node12 - - - - -Node15->Node2 - - - - -Node15->Node10 - - - - -Node23->Node2 - - - - -Node23->Node8 - - - - -Node24 - - -AH/Math/MinMaxFix.hpp - - - - -Node23->Node24 - - - - -Node26 - - -stdlib.h - - - - -Node23->Node26 - - - - -Node27 - - -iterator - - - - -Node23->Node27 - - - - -Node24->Node2 - - - - -Node24->Node12 - - - - -Node25 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node24->Node25 - - - - -Node25->Node2 - - - - -Node25->Node10 - - - - -Node28->Node2 - - - - -Node28->Node6 - - - - -Node28->Node9 - - - - -Node29 - - -AH/STL/algorithm - - - - -Node28->Node29 - - - - -Node30->Node2 - - - - -Node30->Node7 - - - - -Node30->Node12 - - - - -Node30->Node18 - - - - -Node31->Node2 - - - - -Node32 - - -AH/Hardware/ExtendedInput -Output/ExtendedInputOutput.hpp - - - - -Node31->Node32 - - - - -Node33 - - -SPI.h - - - - -Node31->Node33 - - - - -Node32->Node2 - - - - -Node32->Node4 - - - - -Node32->Node10 - - - - - diff --git a/docs/Doxygen/d1/d5f/2_8BitBang-Blink_8ino-example.html b/docs/Doxygen/d1/d5f/2_8BitBang-Blink_8ino-example.html deleted file mode 100644 index f89fc6275..000000000 --- a/docs/Doxygen/d1/d5f/2_8BitBang-Blink_8ino-example.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - -Arduino Helpers: 2.BitBang-Blink.ino - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
2.BitBang-Blink.ino
-
-
-

-2.BitBang-Blink

-

This example demonstrates the use of shift registers as if they were just normal IO pins. This version uses bit-banging to drive the shift register. You should probably be using the SPI version instead.

-
Boards:
AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32
-

-Connections

-
    -
  • 10: 74HC595 ST_CP
  • -
  • 11: 74HC595 DS
  • -
  • 13: 74HC595 SH_CP
  • -
-

Connect an LED (and series resistor) between the first output of the shift register and ground.

-

Remember to connect the enable pin the shift register to ground and the master reset pin to Vcc in order to enable it.
-

-

-Behavior

-

This sketch will blink the LED once a second.

-

Written by PieterP, 2018-09-01 https://github.com/tttapa/Arduino-Helpers

-
-
#include <Arduino_Helpers.h> // Include the Arduino Helpers library.
- -
-
using namespace ExtIO; // Bring the ExtIO pin functions into your sketch
-
-
const pin_t latchPin = 10; // Pin connected to ST_CP of 74HC595
-
const pin_t dataPin = 11; // Pin connected to DS of 74HC595
-
const pin_t clockPin = 13; // Pin connected to SH_CP of 74HC595
-
-
// Instantiate a shift register on the correct pins, most significant bit first,
-
// and a total of 8 outputs.
-
ShiftRegisterOut<8> sreg = {dataPin, clockPin, latchPin, MSBFIRST};
-
-
const pin_t ledPin = sreg.pin(0); // first pin of the shift register
-
-
void setup() {
-
sreg.begin(); // Initialize the shift registers
-
pinMode(ledPin, OUTPUT); // You don't even need this line, since
-
// shift registers are always outputs
-
}
-
-
void loop() {
-
// Toggle the state of the LED every 1/2 second
-
digitalWrite(ledPin, HIGH);
-
delay(500);
-
digitalWrite(ledPin, LOW);
-
delay(500);
-
}
-
-
A class for serial-in/parallel-out shift registers, like the 74HC595.
-
void digitalWrite(pin_t pin, uint8_t val)
An ExtIO version of the Arduino function.
- -
pin_t pin(pin_t pin) const
Get the extended IO pin number of a given physical pin of this extended IO element.
-
const uint8_t HIGH
-
const uint8_t LOW
-
A namespace with alternatives to the standard Arduino IO functions that can be used with extended IO ...
-
void pinMode(pin_t pin, uint8_t mode)
An ExtIO version of the Arduino function.
-
void begin() override
Initialize the shift register.
-
Dummy header file for Arduino builder. You have to add this file first, so the other headers are in t...
-
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
-
const uint8_t OUTPUT
- - - - diff --git a/docs/Doxygen/d1/d65/Warnings_8hpp.html b/docs/Doxygen/d1/d65/Warnings_8hpp.html deleted file mode 100644 index a7c62e231..000000000 --- a/docs/Doxygen/d1/d65/Warnings_8hpp.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - -Arduino Helpers: Warnings.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
Warnings.hpp File Reference
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - - - - -

-Macros

#define AH_DIAGNOSTIC_WERROR()
 
#define AH_DIAGNOSTIC_POP()
 
#define AH_DIAGNOSTIC_EXTERNAL_HEADER()
 
-

Macro Definition Documentation

- -

◆ AH_DIAGNOSTIC_WERROR

- -
-
- - - - - - - -
#define AH_DIAGNOSTIC_WERROR()
-
-
Examples
STL-test.ino.
-
- -

Definition at line 16 of file Warnings.hpp.

- -
-
- -

◆ AH_DIAGNOSTIC_POP

- -
-
- - - - - - - -
#define AH_DIAGNOSTIC_POP()
-
-
Examples
STL-test.ino.
-
- -

Definition at line 17 of file Warnings.hpp.

- -
-
- -

◆ AH_DIAGNOSTIC_EXTERNAL_HEADER

- -
-
- - - - - - - -
#define AH_DIAGNOSTIC_EXTERNAL_HEADER()
-
- -

Definition at line 18 of file Warnings.hpp.

- -
-
-
- - - - diff --git a/docs/Doxygen/d1/d65/Warnings_8hpp_source.html b/docs/Doxygen/d1/d65/Warnings_8hpp_source.html deleted file mode 100644 index 932acd7a4..000000000 --- a/docs/Doxygen/d1/d65/Warnings_8hpp_source.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - -Arduino Helpers: Warnings.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Warnings.hpp
-
-
-Go to the documentation of this file.
1 #pragma once
-
2 
-
3 #if defined(__GNUC__) && !defined(__clang__)
-
4 
-
5 #define AH_DIAGNOSTIC_WERROR() \
-
6  _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic error \"-Wall\"") \
-
7  _Pragma("GCC diagnostic error \"-Wextra\"") \
-
8  _Pragma("GCC diagnostic ignored \"-Wc++0x-compat\"")
-
9 #define AH_DIAGNOSTIC_POP() _Pragma("GCC diagnostic pop")
-
10 #define AH_DIAGNOSTIC_EXTERNAL_HEADER() \
-
11  _Pragma("GCC diagnostic ignored \"-Wsuggest-override\"") \
-
12  _Pragma("GCC diagnostic ignored \"-Wunused-parameter\"")
-
13 
-
14 #else
-
15 
-
16 #define AH_DIAGNOSTIC_WERROR()
-
17 #define AH_DIAGNOSTIC_POP()
-
18 #define AH_DIAGNOSTIC_EXTERNAL_HEADER()
-
19 
-
20 #endif
-
- - - - diff --git a/docs/Doxygen/d1/d68/UniquePtr_8hpp__incl.map b/docs/Doxygen/d1/d68/UniquePtr_8hpp__incl.map deleted file mode 100644 index f2568fe76..000000000 --- a/docs/Doxygen/d1/d68/UniquePtr_8hpp__incl.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/Doxygen/d1/d68/UniquePtr_8hpp__incl.md5 b/docs/Doxygen/d1/d68/UniquePtr_8hpp__incl.md5 deleted file mode 100644 index 4ffb33ec6..000000000 --- a/docs/Doxygen/d1/d68/UniquePtr_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -eaa1201a3191d7fb918b346e187bfcd0 \ No newline at end of file diff --git a/docs/Doxygen/d1/d68/UniquePtr_8hpp__incl.svg b/docs/Doxygen/d1/d68/UniquePtr_8hpp__incl.svg deleted file mode 100644 index 13ff4a47c..000000000 --- a/docs/Doxygen/d1/d68/UniquePtr_8hpp__incl.svg +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - -UniquePtr.hpp - - -Node1 - - -UniquePtr.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -AH/STL/type_traits - - - - -Node1->Node3 - - - - -Node4 - - -AH/STL/utility - - - - -Node1->Node4 - - - - - diff --git a/docs/Doxygen/d1/d88/ShiftRegisterOutBase_8ipp__dep__incl.map b/docs/Doxygen/d1/d88/ShiftRegisterOutBase_8ipp__dep__incl.map deleted file mode 100644 index 20cbe666a..000000000 --- a/docs/Doxygen/d1/d88/ShiftRegisterOutBase_8ipp__dep__incl.map +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/Doxygen/d1/d88/ShiftRegisterOutBase_8ipp__dep__incl.md5 b/docs/Doxygen/d1/d88/ShiftRegisterOutBase_8ipp__dep__incl.md5 deleted file mode 100644 index bc3fa0929..000000000 --- a/docs/Doxygen/d1/d88/ShiftRegisterOutBase_8ipp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -b16e3e65dcb9c7dbecd7ef205b9e8286 \ No newline at end of file diff --git a/docs/Doxygen/d1/d88/ShiftRegisterOutBase_8ipp__dep__incl.svg b/docs/Doxygen/d1/d88/ShiftRegisterOutBase_8ipp__dep__incl.svg deleted file mode 100644 index accbcce9d..000000000 --- a/docs/Doxygen/d1/d88/ShiftRegisterOutBase_8ipp__dep__incl.svg +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - -ShiftRegisterOutBase.ipp - - -Node1 - - -ShiftRegisterOutBase.ipp - - - - -Node2 - - -ShiftRegisterOutBase.hpp - - - - -Node1->Node2 - - - - -Node2->Node1 - - - - -Node3 - - -ShiftRegisterOut.hpp - - - - -Node2->Node3 - - - - -Node5 - - -SPIShiftRegisterOut.hpp - - - - -Node2->Node5 - - - - -Node4 - - -ShiftRegisterOut.ipp - - - - -Node3->Node4 - - - - -Node4->Node3 - - - - -Node6 - - -SPIShiftRegisterOut.ipp - - - - -Node5->Node6 - - - - -Node6->Node5 - - - - - diff --git a/docs/Doxygen/d1/d93/Error_8hpp.html b/docs/Doxygen/d1/d93/Error_8hpp.html deleted file mode 100644 index 0675ad485..000000000 --- a/docs/Doxygen/d1/d93/Error_8hpp.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - -Arduino Helpers: Error.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
Error.hpp File Reference
-
-
-
-Include dependency graph for Error.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - - - - -

-Macros

#define ERROR(msg, errc)
 Print the error message and error code, and stop the execution if FATAL_ERRORS are enabled. More...
 
#define FATAL_ERROR(msg, errc)
 Print the error message and error code, and stop the execution. More...
 
- - - - -

-Functions

void fatalErrorExit () __attribute__((noreturn))
 Function that executes and loops forever, blinking the built-in LED when a fatal error is encountered. More...
 
-

Function Documentation

- -

◆ fatalErrorExit()

- -
-
- - - - - - - -
void fatalErrorExit ()
-
- -

Function that executes and loops forever, blinking the built-in LED when a fatal error is encountered.

- -

Definition at line 10 of file Exit.cpp.

- -
-
-
- - - - diff --git a/docs/Doxygen/d1/d93/Error_8hpp_source.html b/docs/Doxygen/d1/d93/Error_8hpp_source.html deleted file mode 100644 index e42eae03e..000000000 --- a/docs/Doxygen/d1/d93/Error_8hpp_source.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - -Arduino Helpers: Error.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Error.hpp
-
-
-Go to the documentation of this file.
1 #pragma once
-
2 
-
4 
- -
6 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
7 
-
8 #include <AH/Debug/Debug.hpp>
-
9 
-
10 #ifdef ARDUINO // ------------------------------------------------------ ARDUINO
-
11 
- -
13 
-
16 extern void fatalErrorExit() __attribute__((noreturn));
-
17 
- -
19 
-
20 #ifdef FATAL_ERRORS
-
21 
-
22 #define ERROR(msg, errc) \
-
23  do { \
-
24  USING_AH_NAMESPACE; \
-
25  DEBUGFN(msg << " (0x" << hex << uppercase << errc << dec \
-
26  << nouppercase << ')'); \
-
27  fatalErrorExit(); \
-
28  } while (0)
-
29 
-
30 #else
-
31 
-
42 #define ERROR(msg, errc) \
-
43  do { \
-
44  DEBUGFN(msg << " (0x" << hex << uppercase << errc << dec \
-
45  << nouppercase << ')'); \
-
46  } while (0)
-
47 
-
48 #endif
-
49 
-
60 #define FATAL_ERROR(msg, errc) \
-
61  do { \
-
62  USING_AH_NAMESPACE; \
-
63  DEBUGFN(F("Fatal Error: ") << msg << " (0x" << hex << uppercase \
-
64  << errc << dec << nouppercase << ')'); \
-
65  fatalErrorExit(); \
-
66  } while (0)
-
67 
-
68 #else // ----------------------------------------------------------------- TESTS
-
69 
-
70 #include <exception>
-
71 #include <sstream>
-
72 
- -
74 
-
75 class ErrorException : public std::exception {
-
76  public:
-
77  ErrorException(const std::string message, int errorCode)
-
78  : message(std::move(message)), errorCode(errorCode) {}
-
79  const char *what() const throw() override { return message.c_str(); }
-
80  int getErrorCode() const { return errorCode; }
-
81 
-
82  private:
-
83  const std::string message;
-
84  const int errorCode;
-
85 };
-
86 
- -
88 
-
89 #define ERROR(msg, errc) \
-
90  do { \
-
91  USING_AH_NAMESPACE; \
-
92  std::ostringstream s; \
-
93  s << DEBUG_FUNC_LOCATION << msg; \
-
94  throw ErrorException(s.str(), errc); \
-
95  } while (0)
-
96 
-
97 #define FATAL_ERROR(msg, errc) \
-
98  do { \
-
99  USING_AH_NAMESPACE; \
-
100  std::ostringstream s; \
-
101  s << DEBUG_FUNC_LOCATION << msg; \
-
102  throw ErrorException(s.str(), errc); \
-
103  } while (0)
-
104 
-
105 #endif
-
106 
- -
-
#define BEGIN_AH_NAMESPACE
- -
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
void fatalErrorExit() __attribute__((noreturn))
Function that executes and loops forever, blinking the built-in LED when a fatal error is encountered...
Definition: Exit.cpp:10
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
#define END_AH_NAMESPACE
- - - - diff --git a/docs/Doxygen/d1/d9c/structSetbytesep__coll__graph.map b/docs/Doxygen/d1/d9c/structSetbytesep__coll__graph.map deleted file mode 100644 index 1d6387ed9..000000000 --- a/docs/Doxygen/d1/d9c/structSetbytesep__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/d1/d9c/structSetbytesep__coll__graph.md5 b/docs/Doxygen/d1/d9c/structSetbytesep__coll__graph.md5 deleted file mode 100644 index 7e5685f36..000000000 --- a/docs/Doxygen/d1/d9c/structSetbytesep__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -e61dc9fee7a58d003acf4c7e5d0982cd \ No newline at end of file diff --git a/docs/Doxygen/d1/d9c/structSetbytesep__coll__graph.svg b/docs/Doxygen/d1/d9c/structSetbytesep__coll__graph.svg deleted file mode 100644 index 023e863ee..000000000 --- a/docs/Doxygen/d1/d9c/structSetbytesep__coll__graph.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - -Setbytesep - - -Node1 - - -Setbytesep - -+ M_bytesep - - - - - - - diff --git a/docs/Doxygen/d1/da6/LEDs_8hpp__incl.map b/docs/Doxygen/d1/da6/LEDs_8hpp__incl.map deleted file mode 100644 index 5e94fa6a4..000000000 --- a/docs/Doxygen/d1/da6/LEDs_8hpp__incl.map +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d1/da6/LEDs_8hpp__incl.md5 b/docs/Doxygen/d1/da6/LEDs_8hpp__incl.md5 deleted file mode 100644 index 003be82c3..000000000 --- a/docs/Doxygen/d1/da6/LEDs_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -0201f257b54687c540b47e1268d1d219 \ No newline at end of file diff --git a/docs/Doxygen/d1/da6/LEDs_8hpp__incl.svg b/docs/Doxygen/d1/da6/LEDs_8hpp__incl.svg deleted file mode 100644 index 307a71d2f..000000000 --- a/docs/Doxygen/d1/da6/LEDs_8hpp__incl.svg +++ /dev/null @@ -1,476 +0,0 @@ - - - - - - -LEDs.hpp - - -Node1 - - -LEDs.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -AH/Hardware/ExtendedInput -Output/ExtendedInputOutput.hpp - - - - -Node1->Node3 - - - - -Node3->Node2 - - - - -Node4 - - -Arduino.h - - - - -Node3->Node4 - - - - -Node5 - - -ExtendedIOElement.hpp - - - - -Node3->Node5 - - - - -Node5->Node2 - - - - -Node6 - - -AH/Hardware/Hardware --Types.hpp - - - - -Node5->Node6 - - - - -Node23 - - -AH/Containers/LinkedList.hpp - - - - -Node5->Node23 - - - - -Node6->Node2 - - - - -Node7 - - -AH/Containers/Array.hpp - - - - -Node6->Node7 - - - - -Node12 - - -NamespaceSettings.hpp - - - - -Node6->Node12 - - - - -Node18 - - -stdint.h - - - - -Node6->Node18 - - - - -Node7->Node2 - - - - -Node8 - - -AH/Error/Error.hpp - - - - -Node7->Node8 - - - - -Node17 - - -stddef.h - - - - -Node7->Node17 - - - - -Node21 - - -AH/STL/iterator - - - - -Node7->Node21 - - - - -Node22 - - -AH/STL/type_traits - - - - -Node7->Node22 - - - - -Node8->Node2 - - - - -Node9 - - -AH/Debug/Debug.hpp - - - - -Node8->Node9 - - - - -Node9->Node2 - - - - -Node10 - - -AH/PrintStream/PrintStream.hpp - - - - -Node9->Node10 - - - - -Node11 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node9->Node11 - - - - -Node20 - - -DebugVal.hpp - - - - -Node9->Node20 - - - - -Node10->Node2 - - - - -Node10->Node4 - - - - -Node11->Node2 - - - - -Node11->Node9 - - - - -Node11->Node12 - - - - -Node13 - - -Settings.hpp - - - - -Node11->Node13 - - - - -Node19 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node11->Node19 - - - - -Node14 - - -AH/Types/Frequency.hpp - - - - -Node13->Node14 - - - - -Node15 - - -AH/Hardware/ADCConfig.hpp - - - - -Node13->Node15 - - - - -Node16 - - -limits.h - - - - -Node13->Node16 - - - - -Node13->Node17 - - - - -Node13->Node18 - - - - -Node14->Node2 - - - - -Node14->Node12 - - - - -Node15->Node2 - - - - -Node15->Node4 - - - - -Node23->Node2 - - - - -Node23->Node9 - - - - -Node24 - - -AH/Math/MinMaxFix.hpp - - - - -Node23->Node24 - - - - -Node26 - - -stdlib.h - - - - -Node23->Node26 - - - - -Node27 - - -iterator - - - - -Node23->Node27 - - - - -Node24->Node2 - - - - -Node24->Node12 - - - - -Node25 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node24->Node25 - - - - -Node25->Node2 - - - - -Node25->Node4 - - - - - diff --git a/docs/Doxygen/d1/da7/ShiftRegisterOutRGB_8cpp__incl.map b/docs/Doxygen/d1/da7/ShiftRegisterOutRGB_8cpp__incl.map deleted file mode 100644 index 0aa8cdb77..000000000 --- a/docs/Doxygen/d1/da7/ShiftRegisterOutRGB_8cpp__incl.map +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d1/da7/ShiftRegisterOutRGB_8cpp__incl.md5 b/docs/Doxygen/d1/da7/ShiftRegisterOutRGB_8cpp__incl.md5 deleted file mode 100644 index 51dfddf7a..000000000 --- a/docs/Doxygen/d1/da7/ShiftRegisterOutRGB_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -9534355d97b9a0669d274e34892fdff5 \ No newline at end of file diff --git a/docs/Doxygen/d1/da7/ShiftRegisterOutRGB_8cpp__incl.svg b/docs/Doxygen/d1/da7/ShiftRegisterOutRGB_8cpp__incl.svg deleted file mode 100644 index b70df686d..000000000 --- a/docs/Doxygen/d1/da7/ShiftRegisterOutRGB_8cpp__incl.svg +++ /dev/null @@ -1,261 +0,0 @@ - - - - - - -ShiftRegisterOutRGB.cpp - - -Node1 - - -ShiftRegisterOutRGB.cpp - - - - -Node2 - - -ShiftRegisterOutRGB.hpp - - - - -Node1->Node2 - - - - -Node3 - - -AH/Settings/Warnings.hpp - - - - -Node2->Node3 - - - - -Node4 - - -stdint.h - - - - -Node2->Node4 - - - - -Node5 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node2->Node5 - - - - -Node5->Node3 - - - - -Node6 - - -NamespaceSettings.hpp - - - - -Node5->Node6 - - - - -Node7 - - -Settings.hpp - - - - -Node5->Node7 - - - - -Node13 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node5->Node13 - - - - -Node14 - - -AH/Debug/Debug.hpp - - - - -Node5->Node14 - - - - -Node7->Node4 - - - - -Node8 - - -AH/Types/Frequency.hpp - - - - -Node7->Node8 - - - - -Node9 - - -AH/Hardware/ADCConfig.hpp - - - - -Node7->Node9 - - - - -Node11 - - -limits.h - - - - -Node7->Node11 - - - - -Node12 - - -stddef.h - - - - -Node7->Node12 - - - - -Node8->Node3 - - - - -Node8->Node6 - - - - -Node9->Node3 - - - - -Node10 - - -Arduino.h - - - - -Node9->Node10 - - - - -Node14->Node3 - - - - -Node14->Node5 - - - - -Node15 - - -AH/PrintStream/PrintStream.hpp - - - - -Node14->Node15 - - - - -Node16 - - -DebugVal.hpp - - - - -Node14->Node16 - - - - -Node15->Node3 - - - - -Node15->Node10 - - - - - diff --git a/docs/Doxygen/d1/db8/MAX7219__Base_8hpp__incl.map b/docs/Doxygen/d1/db8/MAX7219__Base_8hpp__incl.map deleted file mode 100644 index ec375df33..000000000 --- a/docs/Doxygen/d1/db8/MAX7219__Base_8hpp__incl.map +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d1/db8/MAX7219__Base_8hpp__incl.md5 b/docs/Doxygen/d1/db8/MAX7219__Base_8hpp__incl.md5 deleted file mode 100644 index 625009d52..000000000 --- a/docs/Doxygen/d1/db8/MAX7219__Base_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -97fea5eba067b1a37797b418d4640cfd \ No newline at end of file diff --git a/docs/Doxygen/d1/db8/MAX7219__Base_8hpp__incl.svg b/docs/Doxygen/d1/db8/MAX7219__Base_8hpp__incl.svg deleted file mode 100644 index 44c027a75..000000000 --- a/docs/Doxygen/d1/db8/MAX7219__Base_8hpp__incl.svg +++ /dev/null @@ -1,489 +0,0 @@ - - - - - - -MAX7219_Base.hpp - - -Node1 - - -MAX7219_Base.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -AH/Hardware/ExtendedInput -Output/ExtendedInputOutput.hpp - - - - -Node1->Node3 - - - - -Node28 - - -SPI.h - - - - -Node1->Node28 - - - - -Node3->Node2 - - - - -Node4 - - -Arduino.h - - - - -Node3->Node4 - - - - -Node5 - - -ExtendedIOElement.hpp - - - - -Node3->Node5 - - - - -Node5->Node2 - - - - -Node6 - - -AH/Hardware/Hardware --Types.hpp - - - - -Node5->Node6 - - - - -Node23 - - -AH/Containers/LinkedList.hpp - - - - -Node5->Node23 - - - - -Node6->Node2 - - - - -Node7 - - -AH/Containers/Array.hpp - - - - -Node6->Node7 - - - - -Node12 - - -NamespaceSettings.hpp - - - - -Node6->Node12 - - - - -Node18 - - -stdint.h - - - - -Node6->Node18 - - - - -Node7->Node2 - - - - -Node8 - - -AH/Error/Error.hpp - - - - -Node7->Node8 - - - - -Node17 - - -stddef.h - - - - -Node7->Node17 - - - - -Node21 - - -AH/STL/iterator - - - - -Node7->Node21 - - - - -Node22 - - -AH/STL/type_traits - - - - -Node7->Node22 - - - - -Node8->Node2 - - - - -Node9 - - -AH/Debug/Debug.hpp - - - - -Node8->Node9 - - - - -Node9->Node2 - - - - -Node10 - - -AH/PrintStream/PrintStream.hpp - - - - -Node9->Node10 - - - - -Node11 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node9->Node11 - - - - -Node20 - - -DebugVal.hpp - - - - -Node9->Node20 - - - - -Node10->Node2 - - - - -Node10->Node4 - - - - -Node11->Node2 - - - - -Node11->Node9 - - - - -Node11->Node12 - - - - -Node13 - - -Settings.hpp - - - - -Node11->Node13 - - - - -Node19 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node11->Node19 - - - - -Node14 - - -AH/Types/Frequency.hpp - - - - -Node13->Node14 - - - - -Node15 - - -AH/Hardware/ADCConfig.hpp - - - - -Node13->Node15 - - - - -Node16 - - -limits.h - - - - -Node13->Node16 - - - - -Node13->Node17 - - - - -Node13->Node18 - - - - -Node14->Node2 - - - - -Node14->Node12 - - - - -Node15->Node2 - - - - -Node15->Node4 - - - - -Node23->Node2 - - - - -Node23->Node9 - - - - -Node24 - - -AH/Math/MinMaxFix.hpp - - - - -Node23->Node24 - - - - -Node26 - - -stdlib.h - - - - -Node23->Node26 - - - - -Node27 - - -iterator - - - - -Node23->Node27 - - - - -Node24->Node2 - - - - -Node24->Node12 - - - - -Node25 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node24->Node25 - - - - -Node25->Node2 - - - - -Node25->Node4 - - - - - diff --git a/docs/Doxygen/d1/dd0/MillisMicrosTimer_8hpp.html b/docs/Doxygen/d1/dd0/MillisMicrosTimer_8hpp.html deleted file mode 100644 index efa8bb440..000000000 --- a/docs/Doxygen/d1/dd0/MillisMicrosTimer_8hpp.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - -Arduino Helpers: MillisMicrosTimer.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
MillisMicrosTimer.hpp File Reference
-
-
-
#include <AH/Settings/Warnings.hpp>
-#include <Arduino.h>
-#include <AH/Settings/NamespaceSettings.hpp>
-
-Include dependency graph for MillisMicrosTimer.hpp:
-
-
-
-
-

Go to the source code of this file.

- - - - - -

-Classes

class  Timer< time >
 A class for easily managing timed events. More...
 
- - - - -

-Typedefs

using timefunction = unsigned long(*)()
 A function type that returns a time value. More...
 
-

Typedef Documentation

- -

◆ timefunction

- -
-
- - - - -
using timefunction = unsigned long (*)()
-
- -

A function type that returns a time value.

- -

Definition at line 15 of file MillisMicrosTimer.hpp.

- -
-
-
- - - - diff --git a/docs/Doxygen/d1/dd0/MillisMicrosTimer_8hpp_source.html b/docs/Doxygen/d1/dd0/MillisMicrosTimer_8hpp_source.html deleted file mode 100644 index 2c952b40a..000000000 --- a/docs/Doxygen/d1/dd0/MillisMicrosTimer_8hpp_source.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - - -Arduino Helpers: MillisMicrosTimer.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
MillisMicrosTimer.hpp
-
-
-Go to the documentation of this file.
1 #pragma once
-
2 
- -
4 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
5 
- -
7 #include <Arduino.h> // millis, micros
- -
9 
-
10 #include <AH/Settings/NamespaceSettings.hpp>
-
11 
- -
13 
-
15 using timefunction = unsigned long (*)();
-
16 
-
19 
-
27 template <timefunction time = micros>
-
28 class Timer {
-
29  public:
-
35  Timer(unsigned long interval) : interval(interval) {
-
36 #ifdef ARDUINO
-
37  begin();
-
38 #endif
-
39  }
-
41  void begin() { previous = time() - interval; }
-
43  explicit operator bool() {
-
44  auto now = time();
-
45  if (now - previous >= interval) {
-
46  previous += interval;
-
47  return true;
-
48  }
-
49  return false;
-
50  }
-
51 
-
53  unsigned long getInterval() const { return interval; }
-
55  void setInterval(unsigned long interval) { this->interval = interval; }
-
56 
-
57  private:
-
58  unsigned long interval;
-
59  unsigned long previous = 0;
-
60 };
-
61 
-
63 
- -
65 
- -
-
#define BEGIN_AH_NAMESPACE
- -
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
A class for easily managing timed events.
-
void begin()
Initialize the timer.
-
unsigned long previous
-
unsigned long getInterval() const
Get the interval of the timer.
-
#define AH_DIAGNOSTIC_EXTERNAL_HEADER()
Definition: Warnings.hpp:18
-
void setInterval(unsigned long interval)
Set the interval of the timer.
-
unsigned long interval
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
#define END_AH_NAMESPACE
-
unsigned long(*)() timefunction
A function type that returns a time value.
-
Timer(unsigned long interval)
Constructor.
- - - - diff --git a/docs/Doxygen/d1/de3/classExtendedIOElement__inherit__graph.map b/docs/Doxygen/d1/de3/classExtendedIOElement__inherit__graph.map deleted file mode 100644 index c93b57ccd..000000000 --- a/docs/Doxygen/d1/de3/classExtendedIOElement__inherit__graph.map +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/docs/Doxygen/d1/de3/classExtendedIOElement__inherit__graph.md5 b/docs/Doxygen/d1/de3/classExtendedIOElement__inherit__graph.md5 deleted file mode 100644 index e79e1cb3e..000000000 --- a/docs/Doxygen/d1/de3/classExtendedIOElement__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -5a539c03ff2cd9dd91cea9a07772c912 \ No newline at end of file diff --git a/docs/Doxygen/d1/de3/classExtendedIOElement__inherit__graph.svg b/docs/Doxygen/d1/de3/classExtendedIOElement__inherit__graph.svg deleted file mode 100644 index 371f0457d..000000000 --- a/docs/Doxygen/d1/de3/classExtendedIOElement__inherit__graph.svg +++ /dev/null @@ -1,247 +0,0 @@ - - - - - - -ExtendedIOElement - - -Node1 - - -ExtendedIOElement - -- length -- start -- end -- offset -- elements - -+ ~ExtendedIOElement() -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogWrite() -+ analogRead() -+ begin() -+ update() -+ pin() -+ operator[]() -+ getLength() -+ getEnd() -+ getStart() -+ beginAll() -+ getAll() -# ExtendedIOElement() - - - - -Node3 - - -StaticSizeExtendedIOElement< N > - - - -+ pins() -+ length() -# StaticSizeExtendedIOElement() - - - - -Node1->Node3 - - - - -Node7 - - -StaticSizeExtendedIOElement -< 1<< N > - - - -+ pins() -+ length() -# StaticSizeExtendedIOElement() - - - - -Node1->Node7 - - - - -Node9 - - -StaticSizeExtendedIOElement -< 8 *8 > - - - -+ pins() -+ length() -# StaticSizeExtendedIOElement() - - - - -Node1->Node9 - - - - -Node2 - - -DoublyLinkable< Extended -IOElement > - -# next -# previous - -# ~DoublyLinkable() - - - - -Node2->Node1 - - - - -Node4 - - -ShiftRegisterOutBase< N > - -# latchPin -# bitOrder -# buffer -# dirty - -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogRead() -+ analogWrite() -+ red() -+ redPins() -+ green() -+ greenPins() -+ blue() -+ bluePins() -# ShiftRegisterOutBase() - - - - -Node3->Node4 - - - - -Node5 - - -ShiftRegisterOut< N > - -- dataPin -- clockPin - -+ ShiftRegisterOut() -+ begin() -+ update() - - - - -Node4->Node5 - - - - -Node6 - - -SPIShiftRegisterOut< N > - - - -+ SPIShiftRegisterOut() -+ begin() -+ update() - - - - -Node4->Node6 - - - - -Node8 - - -AnalogMultiplex< N > - -- analogPin -- addressPins -- enablePin -- MUX_ENABLED -- MUX_DISABLED - -+ AnalogMultiplex() -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogRead() -+ analogWrite() -+ begin() -+ update() -- setMuxAddress() -- prepareReading() -- afterReading() - - - - -Node7->Node8 - - - - -Node10 - - -MAX7219 - -- buffer - -+ MAX7219() -+ begin() -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogRead() -+ analogWrite() -+ update() - - - - -Node9->Node10 - - - - - diff --git a/docs/Doxygen/d1/df1/group__AH__Timing.html b/docs/Doxygen/d1/df1/group__AH__Timing.html deleted file mode 100644 index 36aa526bf..000000000 --- a/docs/Doxygen/d1/df1/group__AH__Timing.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - -Arduino Helpers: Timing - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
- -
-
Timing
-
-
- -

Blink Without Delay-style timers. -More...

- - - - - -

-Classes

class  Timer< time >
 A class for easily managing timed events. More...
 
-

Detailed Description

-

Blink Without Delay-style timers.

-
- - - - diff --git a/docs/Doxygen/d2/d05/StaticSizeExtendedIOElement_8hpp.html b/docs/Doxygen/d2/d05/StaticSizeExtendedIOElement_8hpp.html deleted file mode 100644 index bb65f8c32..000000000 --- a/docs/Doxygen/d2/d05/StaticSizeExtendedIOElement_8hpp.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Arduino Helpers: StaticSizeExtendedIOElement.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
StaticSizeExtendedIOElement.hpp File Reference
-
-
-
-Include dependency graph for StaticSizeExtendedIOElement.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - -

-Classes

class  StaticSizeExtendedIOElement< N >
 A class for ExtendedIOElements with a fixed size. More...
 
-
- - - - diff --git a/docs/Doxygen/d2/d05/StaticSizeExtendedIOElement_8hpp_source.html b/docs/Doxygen/d2/d05/StaticSizeExtendedIOElement_8hpp_source.html deleted file mode 100644 index d26215e13..000000000 --- a/docs/Doxygen/d2/d05/StaticSizeExtendedIOElement_8hpp_source.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - -Arduino Helpers: StaticSizeExtendedIOElement.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
StaticSizeExtendedIOElement.hpp
-
-
-Go to the documentation of this file.
1 /* ✔ */
-
2 
-
3 #pragma once
-
4 
- -
6 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
7 
-
8 #include "ExtendedIOElement.hpp"
- -
10 
- -
12 
-
18 template <uint16_t N>
-
19 class StaticSizeExtendedIOElement : public ExtendedIOElement { // LCOV_EXCL_LINE
-
20  protected:
-
21  StaticSizeExtendedIOElement() : ExtendedIOElement{N} {} // LCOV_EXCL_LINE
-
22 
-
23  public:
- -
28  return generateIncrementalArray<pin_t, N>(getStart());
-
29  }
-
30 
-
31  static constexpr uint16_t length() { return N; }
-
32 };
-
33 
- -
35 
- -
-
#define BEGIN_AH_NAMESPACE
- -
A class for ExtendedIOElements with a fixed size.
-
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
- -
pin_t getStart() const
Get the smallest global extended IO pin number that belongs to this extended IO element.
- -
An abstract base class for Extended Input/Output elements.
- -
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
Array< pin_t, N > pins() const
Get an array containing all pins of the element.
-
#define END_AH_NAMESPACE
-
static constexpr uint16_t length()
- - - - diff --git a/docs/Doxygen/d2/d1b/classLEDs.html b/docs/Doxygen/d2/d1b/classLEDs.html deleted file mode 100644 index e30048777..000000000 --- a/docs/Doxygen/d2/d1b/classLEDs.html +++ /dev/null @@ -1,414 +0,0 @@ - - - - - - - -Arduino Helpers: LEDs< N > Class Template Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
- -
-
LEDs< N > Class Template Reference
-
-
- -

A class for collections of LEDs that can display ranges. - More...

- -

#include <LEDs.hpp>

-
-Inheritance diagram for LEDs< N >:
-
-
-
-
-Collaboration diagram for LEDs< N >:
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 LEDs (const PinList< N > &ledPins)
 Create a LEDs object. More...
 
void begin () const
 Initialize (set LED pins as outputs). More...
 
void displayRange (uint8_t startOn, uint8_t startOff) const
 Turn on a range of the LEDs. More...
 
void set (uint8_t index) const
 Turn on the given LED. More...
 
void clear (uint8_t index) const
 Turn off the given LED. More...
 
void displayDot (uint8_t led) const
 Turn on a single LED, and turn off all others. More...
 
void clear () const
 Turn off all LEDs. More...
 
- - - -

-Private Attributes

const PinList< N > ledPins
 
-

Detailed Description

-

template<uint8_t N>
-class LEDs< N >

- -

A class for collections of LEDs that can display ranges.

-
Template Parameters
- - -
NThe number of LEDs in the collection.
-
-
- -

Definition at line 21 of file LEDs.hpp.

-

Constructor & Destructor Documentation

- -

◆ LEDs()

- -
-
- - - - - -
- - - - - - - - -
LEDs (const PinList< N > & ledPins)
-
-inline
-
- -

Create a LEDs object.

-
Parameters
- - -
ledPinsAn array of pins with the LEDs connected.
-
-
- -

Definition at line 29 of file LEDs.hpp.

- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - -
- - - - - - - -
void begin () const
-
-inline
-
- -

Initialize (set LED pins as outputs).

- -

Definition at line 34 of file LEDs.hpp.

- -
-
- -

◆ displayRange()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void displayRange (uint8_t startOn,
uint8_t startOff 
) const
-
-inline
-
- -

Turn on a range of the LEDs.

-
Parameters
- - - -
startOnThe first LED of the range to turn on (the LEDs before this one are turned off).
startOffThe first LED after the range to turn off.
-
-
- -

Definition at line 48 of file LEDs.hpp.

- -
-
- -

◆ set()

- -
-
- - - - - -
- - - - - - - - -
void set (uint8_t index) const
-
-inline
-
- -

Turn on the given LED.

- -

Definition at line 58 of file LEDs.hpp.

- -
-
- -

◆ clear() [1/2]

- -
-
- - - - - -
- - - - - - - - -
void clear (uint8_t index) const
-
-inline
-
- -

Turn off the given LED.

- -

Definition at line 64 of file LEDs.hpp.

- -
-
- -

◆ displayDot()

- -
-
- - - - - -
- - - - - - - - -
void displayDot (uint8_t led) const
-
-inline
-
- -

Turn on a single LED, and turn off all others.

-
Parameters
- - -
ledThe LED to turn on.
-
-
- -

Definition at line 75 of file LEDs.hpp.

- -
-
- -

◆ clear() [2/2]

- -
-
- - - - - -
- - - - - - - -
void clear () const
-
-inline
-
- -

Turn off all LEDs.

- -

Definition at line 80 of file LEDs.hpp.

- -
-
-

Member Data Documentation

- -

◆ ledPins

- -
-
- - - - - -
- - - - -
const PinList<N> ledPins
-
-private
-
- -

Definition at line 86 of file LEDs.hpp.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/Doxygen/d2/d25/MAX7219_8hpp.html b/docs/Doxygen/d2/d25/MAX7219_8hpp.html deleted file mode 100644 index f103fc605..000000000 --- a/docs/Doxygen/d2/d25/MAX7219_8hpp.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - -Arduino Helpers: MAX7219.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
MAX7219.hpp File Reference
-
-
-
-Include dependency graph for MAX7219.hpp:
-
-
-
-
-

Go to the source code of this file.

- - - - - -

-Classes

class  MAX7219
 A class for LED outputs using the MAX7219 LED display driver. More...
 
-
- - - - diff --git a/docs/Doxygen/d2/d25/MAX7219_8hpp_source.html b/docs/Doxygen/d2/d25/MAX7219_8hpp_source.html deleted file mode 100644 index 8e9f02d52..000000000 --- a/docs/Doxygen/d2/d25/MAX7219_8hpp_source.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - -Arduino Helpers: MAX7219.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
MAX7219.hpp
-
-
-Go to the documentation of this file.
1 /* ✔ */
-
2 
-
3 #pragma once
-
4 
- -
6 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
7 
-
8 #include "StaticSizeExtendedIOElement.hpp"
- - -
11 
- -
13 
-
21 class MAX7219 : public MAX7219_Base, public StaticSizeExtendedIOElement<8 * 8> {
-
22  public:
- -
30 
-
33  void begin() override { init(); }
-
34 
-
39  void pinMode(pin_t pin, uint8_t mode) override __attribute__((deprecated)) {
-
40  (void)pin;
-
41  (void)mode;
-
42  }
-
43 
-
53  void digitalWrite(pin_t pin, uint8_t val) override {
-
54  buffer.set(pin, val);
-
55  update();
-
56  }
-
57 
-
68  int digitalRead(pin_t pin) override { return buffer.get(pin); }
-
69 
-
80  analog_t analogRead(pin_t pin) override __attribute__((deprecated)) {
-
81  return 1023 * digitalRead(pin);
-
82  }
-
83 
-
97  void analogWrite(pin_t pin, analog_t val) override
-
98  __attribute__((deprecated)) {
-
99  digitalWrite(pin, val >= 0x80);
-
100  }
-
101 
-
107  void update() override {
-
108  for (uint8_t i = 0; i < buffer.getBufferLength(); i++)
-
109  sendRaw(i + 1, buffer.getByte(i));
-
110  }
-
111 
-
112  private:
- -
114 };
-
115 
- -
117 
- -
-
void begin() override
Initialize.
Definition: MAX7219.hpp:33
-
#define BEGIN_AH_NAMESPACE
-
A base class for classes that control MAX7219 LED drivers.
-
analog_t analogRead(pin_t pin) override __attribute__((deprecated))
The analogRead function is deprecated because a MAX7219 is always digital.
Definition: MAX7219.hpp:80
-
void analogWrite(pin_t pin, analog_t val) override __attribute__((deprecated))
The analogWrite function is deprecated because a MAX7219 is always digital.
Definition: MAX7219.hpp:97
- -
uint16_t analog_t
The type returned from analogRead and similar functions.
- -
pin_t pin(pin_t pin) const
Get the extended IO pin number of a given physical pin of this extended IO element.
-
MAX7219(pin_t loadPin)
Create a MAX7219 ExtendedIOElement.
Definition: MAX7219.hpp:29
-
A class for ExtendedIOElements with a fixed size.
- -
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
int digitalRead(pin_t pin) override
Get the current state of a given output.
Definition: MAX7219.hpp:68
-
void pinMode(pin_t pin, uint8_t mode) override __attribute__((deprecated))
The pinMode function is not implemented because the mode is OUTPUT by definition.
Definition: MAX7219.hpp:39
-
void sendRaw(uint8_t opcode, uint8_t value)
Send a raw opcode and value to the MAX7219.
-
void set(uint8_t bitIndex)
Set the value of the given bit to 1.
Definition: BitArray.hpp:43
-
void update() override
Write the buffer to the display.
Definition: MAX7219.hpp:107
-
uint8_t getByte(uint8_t byteIndex) const
Get the byte at the given index.
Definition: BitArray.hpp:99
-
bool get(uint8_t bitIndex) const
Get the value of the given bit.
Definition: BitArray.hpp:33
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
void digitalWrite(pin_t pin, uint8_t val) override
Set the state of a given output pin.
Definition: MAX7219.hpp:53
-
uint8_t getBufferLength() const
Get the buffer length in bytes.
Definition: BitArray.hpp:107
-
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
-
BitArray< 8 *8 > buffer
Definition: MAX7219.hpp:113
-
#define END_AH_NAMESPACE
-
void init()
Initialize the Arduino pins, SPI, and the MAX7219.
- - -
A class for LED outputs using the MAX7219 LED display driver.
Definition: MAX7219.hpp:21
- - - - diff --git a/docs/Doxygen/d2/d3c/LinkedList_8hpp__dep__incl.map b/docs/Doxygen/d2/d3c/LinkedList_8hpp__dep__incl.map deleted file mode 100644 index 792350b00..000000000 --- a/docs/Doxygen/d2/d3c/LinkedList_8hpp__dep__incl.map +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d2/d3c/LinkedList_8hpp__dep__incl.md5 b/docs/Doxygen/d2/d3c/LinkedList_8hpp__dep__incl.md5 deleted file mode 100644 index 4737a84f8..000000000 --- a/docs/Doxygen/d2/d3c/LinkedList_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -ff7a74e75f15be781c2a9a7e0dc72321 \ No newline at end of file diff --git a/docs/Doxygen/d2/d3c/LinkedList_8hpp__dep__incl.svg b/docs/Doxygen/d2/d3c/LinkedList_8hpp__dep__incl.svg deleted file mode 100644 index 1d7ec3eb9..000000000 --- a/docs/Doxygen/d2/d3c/LinkedList_8hpp__dep__incl.svg +++ /dev/null @@ -1,422 +0,0 @@ - - - - - - -LinkedList.hpp - - -Node1 - - -LinkedList.hpp - - - - -Node2 - - -Updatable.hpp - - - - -Node1->Node2 - - - - -Node3 - - -ExtendedIOElement.hpp - - - - -Node1->Node3 - - - - -Node4 - - -ExtendedInputOutput.hpp - - - - -Node3->Node4 - - - - -Node14 - - -ExtendedInputOutput.cpp - - - - -Node3->Node14 - - - - -Node27 - - -StaticSizeExtendedIOElement.hpp - - - - -Node3->Node27 - - - - -Node28 - - -ExtendedIOElement.cpp - - - - -Node3->Node28 - - - - -Node5 - - -Button.hpp - - - - -Node4->Node5 - - - - -Node11 - - -ButtonMatrix.ipp - - - - -Node4->Node11 - - - - -Node13 - - -AnalogMultiplex.hpp - - - - -Node4->Node13 - - - - -Node4->Node14 - - - - -Node15 - - -ShiftRegisterOutBase.ipp - - - - -Node4->Node15 - - - - -Node18 - - -ShiftRegisterOut.ipp - - - - -Node4->Node18 - - - - -Node20 - - -SPIShiftRegisterOut.ipp - - - - -Node4->Node20 - - - - -Node21 - - -FilteredAnalog.hpp - - - - -Node4->Node21 - - - - -Node22 - - -LEDs.hpp - - - - -Node4->Node22 - - - - -Node24 - - -MAX7219_Base.hpp - - - - -Node4->Node24 - - - - -Node6 - - -Button.cpp - - - - -Node5->Node6 - - - - -Node7 - - -IncrementButton.hpp - - - - -Node5->Node7 - - - - -Node9 - - -IncrementDecrementButtons.hpp - - - - -Node5->Node9 - - - - -Node8 - - -IncrementButton.cpp - - - - -Node7->Node8 - - - - -Node10 - - -IncrementDecrementButtons.cpp - - - - -Node9->Node10 - - - - -Node12 - - -ButtonMatrix.hpp - - - - -Node11->Node12 - - - - -Node12->Node11 - - - - -Node16 - - -ShiftRegisterOutBase.hpp - - - - -Node15->Node16 - - - - -Node16->Node15 - - - - -Node17 - - -ShiftRegisterOut.hpp - - - - -Node16->Node17 - - - - -Node19 - - -SPIShiftRegisterOut.hpp - - - - -Node16->Node19 - - - - -Node17->Node18 - - - - -Node18->Node17 - - - - -Node19->Node20 - - - - -Node20->Node19 - - - - -Node23 - - -DotBarDisplayLEDs.hpp - - - - -Node22->Node23 - - - - -Node25 - - -MAX7219.hpp - - - - -Node24->Node25 - - - - -Node26 - - -MAX7219SevenSegmentDisplay.hpp - - - - -Node24->Node26 - - - - -Node27->Node13 - - - - -Node27->Node16 - - - - -Node27->Node25 - - - - - diff --git a/docs/Doxygen/d2/d44/classMAX7219SevenSegmentDisplay__inherit__graph.map b/docs/Doxygen/d2/d44/classMAX7219SevenSegmentDisplay__inherit__graph.map deleted file mode 100644 index 3f68ce71c..000000000 --- a/docs/Doxygen/d2/d44/classMAX7219SevenSegmentDisplay__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/d2/d44/classMAX7219SevenSegmentDisplay__inherit__graph.md5 b/docs/Doxygen/d2/d44/classMAX7219SevenSegmentDisplay__inherit__graph.md5 deleted file mode 100644 index 13cb6dbcb..000000000 --- a/docs/Doxygen/d2/d44/classMAX7219SevenSegmentDisplay__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -cd9f8926e9cd7eeb312cdf3dd77884e5 \ No newline at end of file diff --git a/docs/Doxygen/d2/d44/classMAX7219SevenSegmentDisplay__inherit__graph.svg b/docs/Doxygen/d2/d44/classMAX7219SevenSegmentDisplay__inherit__graph.svg deleted file mode 100644 index c078e8076..000000000 --- a/docs/Doxygen/d2/d44/classMAX7219SevenSegmentDisplay__inherit__graph.svg +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - -MAX7219SevenSegmentDisplay - - -Node1 - - -MAX7219SevenSegmentDisplay - - - -+ MAX7219SevenSegmentDisplay() -+ begin() -+ display() -+ display() -+ display() -+ printHex() - - - - -Node2 - - -MAX7219_Base - -+ DECODEMODE -+ INTENSITY -+ SCANLIMIT -+ SHUTDOWN -+ DISPLAYTEST -- loadPin -- settings - -+ MAX7219_Base() -+ init() -+ clear() -+ send() -+ sendRaw() -+ setIntensity() - - - - -Node2->Node1 - - - - - diff --git a/docs/Doxygen/d2/d47/ShiftRegisterOut_8hpp__incl.map b/docs/Doxygen/d2/d47/ShiftRegisterOut_8hpp__incl.map deleted file mode 100644 index 1ff922f27..000000000 --- a/docs/Doxygen/d2/d47/ShiftRegisterOut_8hpp__incl.map +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d2/d47/ShiftRegisterOut_8hpp__incl.md5 b/docs/Doxygen/d2/d47/ShiftRegisterOut_8hpp__incl.md5 deleted file mode 100644 index a6e138f8e..000000000 --- a/docs/Doxygen/d2/d47/ShiftRegisterOut_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -322bb48762abeaf7d60a6fd54311a44a \ No newline at end of file diff --git a/docs/Doxygen/d2/d47/ShiftRegisterOut_8hpp__incl.svg b/docs/Doxygen/d2/d47/ShiftRegisterOut_8hpp__incl.svg deleted file mode 100644 index 507659398..000000000 --- a/docs/Doxygen/d2/d47/ShiftRegisterOut_8hpp__incl.svg +++ /dev/null @@ -1,664 +0,0 @@ - - - - - - -ShiftRegisterOut.hpp - - -Node1 - - -ShiftRegisterOut.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -ShiftRegisterOutBase.hpp - - - - -Node1->Node3 - - - - -Node11 - - -Arduino.h - - - - -Node1->Node11 - - - - -Node35 - - -ShiftRegisterOut.ipp - - - - -Node1->Node35 - - - - -Node3->Node2 - - - - -Node4 - - -StaticSizeExtendedIOElement.hpp - - - - -Node3->Node4 - - - - -Node31 - - -AH/Containers/BitArray.hpp - - - - -Node3->Node31 - - - - -Node32 - - -ShiftRegisterOutBase.ipp - - - - -Node3->Node32 - - - - -Node4->Node2 - - - - -Node5 - - -ExtendedIOElement.hpp - - - - -Node4->Node5 - - - - -Node29 - - -AH/Containers/ArrayHelpers.hpp - - - - -Node4->Node29 - - - - -Node5->Node2 - - - - -Node6 - - -AH/Hardware/Hardware --Types.hpp - - - - -Node5->Node6 - - - - -Node24 - - -AH/Containers/LinkedList.hpp - - - - -Node5->Node24 - - - - -Node6->Node2 - - - - -Node7 - - -AH/Containers/Array.hpp - - - - -Node6->Node7 - - - - -Node13 - - -NamespaceSettings.hpp - - - - -Node6->Node13 - - - - -Node19 - - -stdint.h - - - - -Node6->Node19 - - - - -Node7->Node2 - - - - -Node8 - - -AH/Error/Error.hpp - - - - -Node7->Node8 - - - - -Node18 - - -stddef.h - - - - -Node7->Node18 - - - - -Node22 - - -AH/STL/iterator - - - - -Node7->Node22 - - - - -Node23 - - -AH/STL/type_traits - - - - -Node7->Node23 - - - - -Node8->Node2 - - - - -Node9 - - -AH/Debug/Debug.hpp - - - - -Node8->Node9 - - - - -Node9->Node2 - - - - -Node10 - - -AH/PrintStream/PrintStream.hpp - - - - -Node9->Node10 - - - - -Node12 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node9->Node12 - - - - -Node21 - - -DebugVal.hpp - - - - -Node9->Node21 - - - - -Node10->Node2 - - - - -Node10->Node11 - - - - -Node12->Node2 - - - - -Node12->Node9 - - - - -Node12->Node13 - - - - -Node14 - - -Settings.hpp - - - - -Node12->Node14 - - - - -Node20 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node12->Node20 - - - - -Node15 - - -AH/Types/Frequency.hpp - - - - -Node14->Node15 - - - - -Node16 - - -AH/Hardware/ADCConfig.hpp - - - - -Node14->Node16 - - - - -Node17 - - -limits.h - - - - -Node14->Node17 - - - - -Node14->Node18 - - - - -Node14->Node19 - - - - -Node15->Node2 - - - - -Node15->Node13 - - - - -Node16->Node2 - - - - -Node16->Node11 - - - - -Node24->Node2 - - - - -Node24->Node9 - - - - -Node25 - - -AH/Math/MinMaxFix.hpp - - - - -Node24->Node25 - - - - -Node27 - - -stdlib.h - - - - -Node24->Node27 - - - - -Node28 - - -iterator - - - - -Node24->Node28 - - - - -Node25->Node2 - - - - -Node25->Node13 - - - - -Node26 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node25->Node26 - - - - -Node26->Node2 - - - - -Node26->Node11 - - - - -Node29->Node2 - - - - -Node29->Node7 - - - - -Node29->Node10 - - - - -Node30 - - -AH/STL/algorithm - - - - -Node29->Node30 - - - - -Node31->Node2 - - - - -Node31->Node8 - - - - -Node31->Node13 - - - - -Node31->Node19 - - - - -Node32->Node3 - - - - -Node33 - - -ExtendedInputOutput.hpp - - - - -Node32->Node33 - - - - -Node34 - - -ShiftRegisterOutRGB.hpp - - - - -Node32->Node34 - - - - -Node33->Node2 - - - - -Node33->Node5 - - - - -Node33->Node11 - - - - -Node34->Node2 - - - - -Node34->Node12 - - - - -Node34->Node19 - - - - -Node35->Node1 - - - - -Node35->Node33 - - - - - diff --git a/docs/Doxygen/d2/d56/BitArray_8cpp.html b/docs/Doxygen/d2/d56/BitArray_8cpp.html deleted file mode 100644 index ac209e760..000000000 --- a/docs/Doxygen/d2/d56/BitArray_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: BitArray.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
BitArray.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/d2/d56/BitArray_8cpp_source.html b/docs/Doxygen/d2/d56/BitArray_8cpp_source.html deleted file mode 100644 index 2ef267ff0..000000000 --- a/docs/Doxygen/d2/d56/BitArray_8cpp_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Arduino Helpers: BitArray.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
BitArray.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
-
2 #include "BitArray.hpp"
-
3 #endif
-
- - - - - diff --git a/docs/Doxygen/d2/d83/classShiftRegisterOutBase__inherit__graph.map b/docs/Doxygen/d2/d83/classShiftRegisterOutBase__inherit__graph.map deleted file mode 100644 index 360f2f81e..000000000 --- a/docs/Doxygen/d2/d83/classShiftRegisterOutBase__inherit__graph.map +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/Doxygen/d2/d83/classShiftRegisterOutBase__inherit__graph.md5 b/docs/Doxygen/d2/d83/classShiftRegisterOutBase__inherit__graph.md5 deleted file mode 100644 index a8c1e0661..000000000 --- a/docs/Doxygen/d2/d83/classShiftRegisterOutBase__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -fd9ef4b39090a2963ec4d29b09ae29e3 \ No newline at end of file diff --git a/docs/Doxygen/d2/d83/classShiftRegisterOutBase__inherit__graph.svg b/docs/Doxygen/d2/d83/classShiftRegisterOutBase__inherit__graph.svg deleted file mode 100644 index f245fc31b..000000000 --- a/docs/Doxygen/d2/d83/classShiftRegisterOutBase__inherit__graph.svg +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - -ShiftRegisterOutBase< N > - - -Node1 - - -ShiftRegisterOutBase< N > - -# latchPin -# bitOrder -# buffer -# dirty - -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogRead() -+ analogWrite() -+ red() -+ redPins() -+ green() -+ greenPins() -+ blue() -+ bluePins() -# ShiftRegisterOutBase() - - - - -Node5 - - -ShiftRegisterOut< N > - -- dataPin -- clockPin - -+ ShiftRegisterOut() -+ begin() -+ update() - - - - -Node1->Node5 - - - - -Node6 - - -SPIShiftRegisterOut< N > - - - -+ SPIShiftRegisterOut() -+ begin() -+ update() - - - - -Node1->Node6 - - - - -Node2 - - -StaticSizeExtendedIOElement< N > - - - -+ pins() -+ length() -# StaticSizeExtendedIOElement() - - - - -Node2->Node1 - - - - -Node3 - - -ExtendedIOElement - -- length -- start -- end -- offset -- elements - -+ ~ExtendedIOElement() -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogWrite() -+ analogRead() -+ begin() -+ update() -+ pin() -+ operator[]() -+ getLength() -+ getEnd() -+ getStart() -+ beginAll() -+ getAll() -# ExtendedIOElement() - - - - -Node3->Node2 - - - - -Node4 - - -DoublyLinkable< Extended -IOElement > - -# next -# previous - -# ~DoublyLinkable() - - - - -Node4->Node3 - - - - - diff --git a/docs/Doxygen/d2/d9e/Frequency_8hpp__dep__incl.map b/docs/Doxygen/d2/d9e/Frequency_8hpp__dep__incl.map deleted file mode 100644 index 81e3ba223..000000000 --- a/docs/Doxygen/d2/d9e/Frequency_8hpp__dep__incl.map +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d2/d9e/Frequency_8hpp__dep__incl.md5 b/docs/Doxygen/d2/d9e/Frequency_8hpp__dep__incl.md5 deleted file mode 100644 index 4584c090e..000000000 --- a/docs/Doxygen/d2/d9e/Frequency_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -119f9235d071d3a0235ea5ef075d4508 \ No newline at end of file diff --git a/docs/Doxygen/d2/d9e/Frequency_8hpp__dep__incl.svg b/docs/Doxygen/d2/d9e/Frequency_8hpp__dep__incl.svg deleted file mode 100644 index 21e4725d6..000000000 --- a/docs/Doxygen/d2/d9e/Frequency_8hpp__dep__incl.svg +++ /dev/null @@ -1,671 +0,0 @@ - - - - - - -Frequency.hpp - - -Node1 - - -Frequency.hpp - - - - -Node2 - - -Settings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -SettingsWrapper.hpp - - - - -Node2->Node3 - - - - -Node4 - - -Updatable.hpp - - - - -Node3->Node4 - - - - -Node5 - - -Debug.hpp - - - - -Node3->Node5 - - - - -Node9 - - -Button.hpp - - - - -Node3->Node9 - - - - -Node25 - - -FilteredAnalog.hpp - - - - -Node3->Node25 - - - - -Node40 - - -ShiftRegisterOutRGB.hpp - - - - -Node3->Node40 - - - - -Node5->Node3 - - - - -Node6 - - -LinkedList.hpp - - - - -Node5->Node6 - - - - -Node33 - - -Debug.cpp - - - - -Node5->Node33 - - - - -Node34 - - -Error.hpp - - - - -Node5->Node34 - - - - -Node6->Node4 - - - - -Node7 - - -ExtendedIOElement.hpp - - - - -Node6->Node7 - - - - -Node8 - - -ExtendedInputOutput.hpp - - - - -Node7->Node8 - - - - -Node18 - - -ExtendedInputOutput.cpp - - - - -Node7->Node18 - - - - -Node31 - - -StaticSizeExtendedIOElement.hpp - - - - -Node7->Node31 - - - - -Node32 - - -ExtendedIOElement.cpp - - - - -Node7->Node32 - - - - -Node8->Node9 - - - - -Node15 - - -ButtonMatrix.ipp - - - - -Node8->Node15 - - - - -Node17 - - -AnalogMultiplex.hpp - - - - -Node8->Node17 - - - - -Node8->Node18 - - - - -Node19 - - -ShiftRegisterOutBase.ipp - - - - -Node8->Node19 - - - - -Node22 - - -ShiftRegisterOut.ipp - - - - -Node8->Node22 - - - - -Node24 - - -SPIShiftRegisterOut.ipp - - - - -Node8->Node24 - - - - -Node8->Node25 - - - - -Node26 - - -LEDs.hpp - - - - -Node8->Node26 - - - - -Node28 - - -MAX7219_Base.hpp - - - - -Node8->Node28 - - - - -Node10 - - -Button.cpp - - - - -Node9->Node10 - - - - -Node11 - - -IncrementButton.hpp - - - - -Node9->Node11 - - - - -Node13 - - -IncrementDecrementButtons.hpp - - - - -Node9->Node13 - - - - -Node12 - - -IncrementButton.cpp - - - - -Node11->Node12 - - - - -Node14 - - -IncrementDecrementButtons.cpp - - - - -Node13->Node14 - - - - -Node16 - - -ButtonMatrix.hpp - - - - -Node15->Node16 - - - - -Node16->Node15 - - - - -Node20 - - -ShiftRegisterOutBase.hpp - - - - -Node19->Node20 - - - - -Node20->Node19 - - - - -Node21 - - -ShiftRegisterOut.hpp - - - - -Node20->Node21 - - - - -Node23 - - -SPIShiftRegisterOut.hpp - - - - -Node20->Node23 - - - - -Node21->Node22 - - - - -Node22->Node21 - - - - -Node23->Node24 - - - - -Node24->Node23 - - - - -Node27 - - -DotBarDisplayLEDs.hpp - - - - -Node26->Node27 - - - - -Node29 - - -MAX7219.hpp - - - - -Node28->Node29 - - - - -Node30 - - -MAX7219SevenSegmentDisplay.hpp - - - - -Node28->Node30 - - - - -Node31->Node17 - - - - -Node31->Node20 - - - - -Node31->Node29 - - - - -Node34->Node4 - - - - -Node34->Node18 - - - - -Node34->Node32 - - - - -Node35 - - -Array.hpp - - - - -Node34->Node35 - - - - -Node38 - - -BitArray.hpp - - - - -Node34->Node38 - - - - -Node39 - - -Exit.cpp - - - - -Node34->Node39 - - - - -Node35->Node17 - - - - -Node36 - - -ArrayHelpers.hpp - - - - -Node35->Node36 - - - - -Node37 - - -Hardware-Types.hpp - - - - -Node35->Node37 - - - - -Node36->Node31 - - - - -Node37->Node7 - - - - -Node37->Node16 - - - - -Node37->Node25 - - - - -Node38->Node20 - - - - -Node38->Node23 - - - - -Node38->Node29 - - - - -Node40->Node19 - - - - -Node41 - - -ShiftRegisterOutRGB.cpp - - - - -Node40->Node41 - - - - - diff --git a/docs/Doxygen/d2/dc9/StaticSizeExtendedIOElement_8cpp.html b/docs/Doxygen/d2/dc9/StaticSizeExtendedIOElement_8cpp.html deleted file mode 100644 index 28a96e498..000000000 --- a/docs/Doxygen/d2/dc9/StaticSizeExtendedIOElement_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: StaticSizeExtendedIOElement.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
StaticSizeExtendedIOElement.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/d2/dc9/StaticSizeExtendedIOElement_8cpp_source.html b/docs/Doxygen/d2/dc9/StaticSizeExtendedIOElement_8cpp_source.html deleted file mode 100644 index 63eeaae6a..000000000 --- a/docs/Doxygen/d2/dc9/StaticSizeExtendedIOElement_8cpp_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Arduino Helpers: StaticSizeExtendedIOElement.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
StaticSizeExtendedIOElement.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
- -
3 #endif
-
- - - - - diff --git a/docs/Doxygen/d2/dcb/classHysteresis.html b/docs/Doxygen/d2/dcb/classHysteresis.html deleted file mode 100644 index 5a1b8c911..000000000 --- a/docs/Doxygen/d2/dcb/classHysteresis.html +++ /dev/null @@ -1,348 +0,0 @@ - - - - - - - -Arduino Helpers: Hysteresis< BITS, T_in, T_out > Class Template Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
- -
-
Hysteresis< BITS, T_in, T_out > Class Template Reference
-
-
- -

A class for applying hysteresis to a given input. - More...

- -

#include <Hysteresis.hpp>

-
-Collaboration diagram for Hysteresis< BITS, T_in, T_out >:
-
-
-
- - - - - - - - -

-Public Member Functions

bool update (T_in inputLevel)
 Update the hysteresis output with a new input value. More...
 
T_out getValue () const
 Get the current output level. More...
 
- - - -

-Private Attributes

T_out prevLevel = 0
 
- - - - - - - - - -

-Static Private Attributes

constexpr static T_in margin = (1UL << BITS) - 1
 
constexpr static T_in offset = 1UL << (BITS - 1)
 
constexpr static T_in max_in = -1
 
constexpr static T_out max_out = static_cast<T_out>(max_in >> BITS)
 
-

Detailed Description

-

template<uint8_t BITS, class T_in = uint16_t, class T_out = uint8_t>
-class Hysteresis< BITS, T_in, T_out >

- -

A class for applying hysteresis to a given input.

-

This reduces the noise by decreasing the resolution, and it prevents flipping back and forth between two values.

-

An example for BITS = 7 and an input from 0 to 1023

7 ┌───◄───┬───
-
o 6 ┌───◄───┼───►───┘
-
u 5 ┌───◄───┼───►───┘
-
t 4 ┌───◄───┼───►───┘
-
p 3 ┌───◄───┼───►───┘
-
u 2 ┌───◄───┼───►───┘
-
t 1 ┌───◄───┼───►───┘
-
0 ────┴───►───┘
-
0 128 256 384 512 640 768 896 1023
-
i n p u t
-
Template Parameters
- - -
BITSThe number of bits to decrease in resolution. Increasing this number will result in a decrease in fluctuations.
-
-
- -

Definition at line 36 of file Hysteresis.hpp.

-

Member Function Documentation

- -

◆ update()

- -
-
- - - - - -
- - - - - - - - -
bool update (T_in inputLevel)
-
-inline
-
- -

Update the hysteresis output with a new input value.

-
Parameters
- - -
inputLevelThe input to calculate the output level from.
-
-
-
Return values
- - - -
trueThe output level has changed.
falseThe output level is still the same.
-
-
- -

Definition at line 48 of file Hysteresis.hpp.

- -
-
- -

◆ getValue()

- -
-
- - - - - -
- - - - - - - -
T_out getValue () const
-
-inline
-
- -

Get the current output level.

-
Returns
The output level.
- -

Definition at line 64 of file Hysteresis.hpp.

- -
-
-

Member Data Documentation

- -

◆ prevLevel

- -
-
- - - - - -
- - - - -
T_out prevLevel = 0
-
-private
-
- -

Definition at line 67 of file Hysteresis.hpp.

- -
-
- -

◆ margin

- -
-
- - - - - -
- - - - -
constexpr static T_in margin = (1UL << BITS) - 1
-
-staticconstexprprivate
-
- -

Definition at line 68 of file Hysteresis.hpp.

- -
-
- -

◆ offset

- -
-
- - - - - -
- - - - -
constexpr static T_in offset = 1UL << (BITS - 1)
-
-staticconstexprprivate
-
- -

Definition at line 69 of file Hysteresis.hpp.

- -
-
- -

◆ max_in

- -
-
- - - - - -
- - - - -
constexpr static T_in max_in = -1
-
-staticconstexprprivate
-
- -

Definition at line 70 of file Hysteresis.hpp.

- -
-
- -

◆ max_out

- -
-
- - - - - -
- - - - -
constexpr static T_out max_out = static_cast<T_out>(max_in >> BITS)
-
-staticconstexprprivate
-
- -

Definition at line 71 of file Hysteresis.hpp.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/Doxygen/d2/dcd/classDoublyLinkedList_1_1reverse__node__iterator-members.html b/docs/Doxygen/d2/dcd/classDoublyLinkedList_1_1reverse__node__iterator-members.html deleted file mode 100644 index ba0a8b152..000000000 --- a/docs/Doxygen/d2/dcd/classDoublyLinkedList_1_1reverse__node__iterator-members.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
DoublyLinkedList< Node >::reverse_node_iterator< INode > Member List
-
- - - - - diff --git a/docs/Doxygen/d2/dd4/ArrayHelpers_8hpp__incl.map b/docs/Doxygen/d2/dd4/ArrayHelpers_8hpp__incl.map deleted file mode 100644 index 4073f751d..000000000 --- a/docs/Doxygen/d2/dd4/ArrayHelpers_8hpp__incl.map +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d2/dd4/ArrayHelpers_8hpp__incl.md5 b/docs/Doxygen/d2/dd4/ArrayHelpers_8hpp__incl.md5 deleted file mode 100644 index 48fc5de25..000000000 --- a/docs/Doxygen/d2/dd4/ArrayHelpers_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -5015a201720cd998144a8f94e3ee76a4 \ No newline at end of file diff --git a/docs/Doxygen/d2/dd4/ArrayHelpers_8hpp__incl.svg b/docs/Doxygen/d2/dd4/ArrayHelpers_8hpp__incl.svg deleted file mode 100644 index ee980587a..000000000 --- a/docs/Doxygen/d2/dd4/ArrayHelpers_8hpp__incl.svg +++ /dev/null @@ -1,328 +0,0 @@ - - - - - - -ArrayHelpers.hpp - - -Node1 - - -ArrayHelpers.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -Array.hpp - - - - -Node1->Node3 - - - - -Node6 - - -AH/PrintStream/PrintStream.hpp - - - - -Node1->Node6 - - - - -Node20 - - -AH/STL/algorithm - - - - -Node1->Node20 - - - - -Node3->Node2 - - - - -Node4 - - -AH/Error/Error.hpp - - - - -Node3->Node4 - - - - -Node14 - - -stddef.h - - - - -Node3->Node14 - - - - -Node18 - - -AH/STL/iterator - - - - -Node3->Node18 - - - - -Node19 - - -AH/STL/type_traits - - - - -Node3->Node19 - - - - -Node4->Node2 - - - - -Node5 - - -AH/Debug/Debug.hpp - - - - -Node4->Node5 - - - - -Node5->Node2 - - - - -Node5->Node6 - - - - -Node8 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node5->Node8 - - - - -Node17 - - -DebugVal.hpp - - - - -Node5->Node17 - - - - -Node6->Node2 - - - - -Node7 - - -Arduino.h - - - - -Node6->Node7 - - - - -Node8->Node2 - - - - -Node8->Node5 - - - - -Node9 - - -NamespaceSettings.hpp - - - - -Node8->Node9 - - - - -Node10 - - -Settings.hpp - - - - -Node8->Node10 - - - - -Node16 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node8->Node16 - - - - -Node11 - - -AH/Types/Frequency.hpp - - - - -Node10->Node11 - - - - -Node12 - - -AH/Hardware/ADCConfig.hpp - - - - -Node10->Node12 - - - - -Node13 - - -limits.h - - - - -Node10->Node13 - - - - -Node10->Node14 - - - - -Node15 - - -stdint.h - - - - -Node10->Node15 - - - - -Node11->Node2 - - - - -Node11->Node9 - - - - -Node12->Node2 - - - - -Node12->Node7 - - - - - diff --git a/docs/Doxygen/d2/dd5/SettingsWrapper_8hpp.html b/docs/Doxygen/d2/dd5/SettingsWrapper_8hpp.html deleted file mode 100644 index 2dff0b6be..000000000 --- a/docs/Doxygen/d2/dd5/SettingsWrapper_8hpp.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - -Arduino Helpers: SettingsWrapper.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
SettingsWrapper.hpp File Reference
-
-
-
-Include dependency graph for SettingsWrapper.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - - - - -

-Macros

#define AH_IS_EMPTY_HELPER(x)   x##1
 
#define AH_IS_EMPTY(x)   AH_IS_EMPTY_HELPER(x) == 1
 
#define AH_INDIVIDUAL_BUTTON_INVERT_STATIC
 
-

Macro Definition Documentation

- -

◆ AH_IS_EMPTY_HELPER

- -
-
- - - - - - - - -
#define AH_IS_EMPTY_HELPER( x)   x##1
-
- -

Definition at line 12 of file SettingsWrapper.hpp.

- -
-
- -

◆ AH_IS_EMPTY

- -
-
- - - - - - - - -
#define AH_IS_EMPTY( x)   AH_IS_EMPTY_HELPER(x) == 1
-
- -

Definition at line 13 of file SettingsWrapper.hpp.

- -
-
- -

◆ AH_INDIVIDUAL_BUTTON_INVERT_STATIC

- -
-
- - - - -
#define AH_INDIVIDUAL_BUTTON_INVERT_STATIC
-
- -

Definition at line 29 of file SettingsWrapper.hpp.

- -
-
-
- - - - diff --git a/docs/Doxygen/d2/dd5/SettingsWrapper_8hpp_source.html b/docs/Doxygen/d2/dd5/SettingsWrapper_8hpp_source.html deleted file mode 100644 index 026e518b3..000000000 --- a/docs/Doxygen/d2/dd5/SettingsWrapper_8hpp_source.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - -Arduino Helpers: SettingsWrapper.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
SettingsWrapper.hpp
-
-
-Go to the documentation of this file.
1 #ifndef AH_SETTINGSWRAPPER_HPP
-
2 #define AH_SETTINGSWRAPPER_HPP
-
3 
- -
5 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
6 
-
7 // ---- User Settings ---- //
-
8 // ======================= //
-
9 #include "NamespaceSettings.hpp"
-
10 #include "Settings.hpp"
-
11 
-
12 #define AH_IS_EMPTY_HELPER(x) x##1
-
13 #define AH_IS_EMPTY(x) AH_IS_EMPTY_HELPER(x) == 1
-
14 
-
15 #if AH_IS_EMPTY(DEBUG_OUT)
-
16 #undef DEBUG_OUT
-
17 #endif
-
18 
-
19 #ifndef ARDUINO
-
20 #ifdef DEBUG_OUT
-
21 #undef DEBUG_OUT
-
22 #ifndef NO_DEBUG_PRINTS
-
23 #define DEBUG_OUT std::cout
-
24 #endif
-
25 #endif
-
26 #endif
-
27 
-
28 #ifdef AH_INDIVIDUAL_BUTTON_INVERT
-
29 #define AH_INDIVIDUAL_BUTTON_INVERT_STATIC
-
30 #else
-
31 #define AH_INDIVIDUAL_BUTTON_INVERT_STATIC static
-
32 #endif
-
33 
-
34 #ifdef TEENSYDUINO
- -
36 #if defined(DEBUG_OUT) && (DEBUG_OUT == Serial) && \
-
37  !defined(TEENSY_SERIALUSB_ENABLED)
-
38 #error \
-
39  "Debugging is enabled on the CDC Serial port, but the USB type doesn't support Serial"
-
40 #endif
-
41 #endif
-
42 
- -
44 static_assert(
-
45  sizeof(ANALOG_FILTER_TYPE) * CHAR_BIT >=
- -
47  "ANALOG_FILTER_TYPE isn't wide enough to satisfy filter requirements. \n"
-
48  "Either decrease the ADC resolution, decrease the filter shift factor, or"
-
49  "use a wider type (e.g. uint32_t)");
- -
51 
-
52 // ------- Debug ------- //
-
53 // ===================== //
-
54 #include <AH/Debug/Debug.hpp>
-
55 
- -
57 
-
58 #endif // AH_SETTINGSWRAPPER_HPP
-
-
#define BEGIN_AH_NAMESPACE
-
uint16_t ANALOG_FILTER_TYPE
The unsigned integer type to use for analog inputs during filtering.
Definition: Settings.hpp:71
-
constexpr uint8_t ADC_BITS
The bit depth to use for the ADC (Analog to Digital Converter).
Definition: Settings.hpp:53
- -
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
- -
constexpr uint8_t ANALOG_FILTER_SHIFT_FACTOR
The factor for the analog filter: Difference equation: where .
Definition: Settings.hpp:64
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
- -
#define END_AH_NAMESPACE
-
All user settings and debugging options can be changed here.
- - - - diff --git a/docs/Doxygen/d2/dde/SPIShiftRegisterOut_8cpp.html b/docs/Doxygen/d2/dde/SPIShiftRegisterOut_8cpp.html deleted file mode 100644 index 171b32aac..000000000 --- a/docs/Doxygen/d2/dde/SPIShiftRegisterOut_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: SPIShiftRegisterOut.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
SPIShiftRegisterOut.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/d2/dde/SPIShiftRegisterOut_8cpp_source.html b/docs/Doxygen/d2/dde/SPIShiftRegisterOut_8cpp_source.html deleted file mode 100644 index 4b7a54939..000000000 --- a/docs/Doxygen/d2/dde/SPIShiftRegisterOut_8cpp_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Arduino Helpers: SPIShiftRegisterOut.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
SPIShiftRegisterOut.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
- -
3 #endif
-
- - - - - diff --git a/docs/Doxygen/d2/de5/MAX7219SevenSegmentDisplay_8hpp__incl.map b/docs/Doxygen/d2/de5/MAX7219SevenSegmentDisplay_8hpp__incl.map deleted file mode 100644 index 93308add3..000000000 --- a/docs/Doxygen/d2/de5/MAX7219SevenSegmentDisplay_8hpp__incl.map +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d2/de5/MAX7219SevenSegmentDisplay_8hpp__incl.md5 b/docs/Doxygen/d2/de5/MAX7219SevenSegmentDisplay_8hpp__incl.md5 deleted file mode 100644 index bf4b5cdfa..000000000 --- a/docs/Doxygen/d2/de5/MAX7219SevenSegmentDisplay_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -6f354ccdec9cd495bfa43cc27053d557 \ No newline at end of file diff --git a/docs/Doxygen/d2/de5/MAX7219SevenSegmentDisplay_8hpp__incl.svg b/docs/Doxygen/d2/de5/MAX7219SevenSegmentDisplay_8hpp__incl.svg deleted file mode 100644 index 4b580e63c..000000000 --- a/docs/Doxygen/d2/de5/MAX7219SevenSegmentDisplay_8hpp__incl.svg +++ /dev/null @@ -1,507 +0,0 @@ - - - - - - -MAX7219SevenSegmentDisplay.hpp - - -Node1 - - -MAX7219SevenSegmentDisplay.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -MAX7219_Base.hpp - - - - -Node1->Node3 - - - - -Node3->Node2 - - - - -Node4 - - -AH/Hardware/ExtendedInput -Output/ExtendedInputOutput.hpp - - - - -Node3->Node4 - - - - -Node29 - - -SPI.h - - - - -Node3->Node29 - - - - -Node4->Node2 - - - - -Node5 - - -Arduino.h - - - - -Node4->Node5 - - - - -Node6 - - -ExtendedIOElement.hpp - - - - -Node4->Node6 - - - - -Node6->Node2 - - - - -Node7 - - -AH/Hardware/Hardware --Types.hpp - - - - -Node6->Node7 - - - - -Node24 - - -AH/Containers/LinkedList.hpp - - - - -Node6->Node24 - - - - -Node7->Node2 - - - - -Node8 - - -AH/Containers/Array.hpp - - - - -Node7->Node8 - - - - -Node13 - - -NamespaceSettings.hpp - - - - -Node7->Node13 - - - - -Node19 - - -stdint.h - - - - -Node7->Node19 - - - - -Node8->Node2 - - - - -Node9 - - -AH/Error/Error.hpp - - - - -Node8->Node9 - - - - -Node18 - - -stddef.h - - - - -Node8->Node18 - - - - -Node22 - - -AH/STL/iterator - - - - -Node8->Node22 - - - - -Node23 - - -AH/STL/type_traits - - - - -Node8->Node23 - - - - -Node9->Node2 - - - - -Node10 - - -AH/Debug/Debug.hpp - - - - -Node9->Node10 - - - - -Node10->Node2 - - - - -Node11 - - -AH/PrintStream/PrintStream.hpp - - - - -Node10->Node11 - - - - -Node12 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node10->Node12 - - - - -Node21 - - -DebugVal.hpp - - - - -Node10->Node21 - - - - -Node11->Node2 - - - - -Node11->Node5 - - - - -Node12->Node2 - - - - -Node12->Node10 - - - - -Node12->Node13 - - - - -Node14 - - -Settings.hpp - - - - -Node12->Node14 - - - - -Node20 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node12->Node20 - - - - -Node15 - - -AH/Types/Frequency.hpp - - - - -Node14->Node15 - - - - -Node16 - - -AH/Hardware/ADCConfig.hpp - - - - -Node14->Node16 - - - - -Node17 - - -limits.h - - - - -Node14->Node17 - - - - -Node14->Node18 - - - - -Node14->Node19 - - - - -Node15->Node2 - - - - -Node15->Node13 - - - - -Node16->Node2 - - - - -Node16->Node5 - - - - -Node24->Node2 - - - - -Node24->Node10 - - - - -Node25 - - -AH/Math/MinMaxFix.hpp - - - - -Node24->Node25 - - - - -Node27 - - -stdlib.h - - - - -Node24->Node27 - - - - -Node28 - - -iterator - - - - -Node24->Node28 - - - - -Node25->Node2 - - - - -Node25->Node13 - - - - -Node26 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node25->Node26 - - - - -Node26->Node2 - - - - -Node26->Node5 - - - - - diff --git a/docs/Doxygen/d2/dea/classButton-members.html b/docs/Doxygen/d2/dea/classButton-members.html deleted file mode 100644 index 3754ceefc..000000000 --- a/docs/Doxygen/d2/dea/classButton-members.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Button Member List
-
-
- -

This is the complete list of members for Button, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - -
begin()Button
Button()Buttoninline
Button(pin_t pin)Button
debouncedStateButtonprivate
debounceTimeButtonprivatestatic
Falling enum valueButton
getDebounceTime()Buttonstatic
getName(State state)Buttonstatic
getState() constButton
invert()Button
invertStateButtonprivatestatic
pinButtonprivate
Pressed enum valueButton
prevBounceTimeButtonprivate
prevInputButtonprivate
previousBounceTime() constButton
Released enum valueButton
Rising enum valueButton
setDebounceTime(unsigned long debounceTime=BUTTON_DEBOUNCE_TIME)Buttonstatic
stableTime(unsigned long now) constButton
stableTime() constButton
State enum nameButton
update()Button
- - - - diff --git a/docs/Doxygen/d3/d09/Hysteresis_8hpp.html b/docs/Doxygen/d3/d09/Hysteresis_8hpp.html deleted file mode 100644 index f3f04506b..000000000 --- a/docs/Doxygen/d3/d09/Hysteresis_8hpp.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -Arduino Helpers: Hysteresis.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
Hysteresis.hpp File Reference
-
-
-
#include <AH/Settings/Warnings.hpp>
-#include <stdint.h>
-
-Include dependency graph for Hysteresis.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - -

-Classes

class  Hysteresis< BITS, T_in, T_out >
 A class for applying hysteresis to a given input. More...
 
-
- - - - diff --git a/docs/Doxygen/d3/d09/Hysteresis_8hpp_source.html b/docs/Doxygen/d3/d09/Hysteresis_8hpp_source.html deleted file mode 100644 index a2553d296..000000000 --- a/docs/Doxygen/d3/d09/Hysteresis_8hpp_source.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - -Arduino Helpers: Hysteresis.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Hysteresis.hpp
-
-
-Go to the documentation of this file.
1 #pragma once
-
2 
- -
4 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
5 
-
6 #include <stdint.h>
-
7 
-
10 
-
35 template <uint8_t BITS, class T_in = uint16_t, class T_out = uint8_t>
-
36 class Hysteresis {
-
37  public:
-
48  bool update(T_in inputLevel) {
-
49  T_in prevLevelFull = (T_in(prevLevel) << BITS) | offset;
-
50  T_in lowerbound = prevLevel > 0 ? prevLevelFull - margin : 0;
-
51  T_in upperbound = prevLevel < max_out ? prevLevelFull + margin : max_in;
-
52  if (inputLevel < lowerbound || inputLevel > upperbound) {
-
53  prevLevel = inputLevel >> BITS;
-
54  return true;
-
55  }
-
56  return false;
-
57  }
-
58 
-
64  T_out getValue() const { return prevLevel; }
-
65 
-
66  private:
-
67  T_out prevLevel = 0;
-
68  constexpr static T_in margin = (1UL << BITS) - 1;
-
69  constexpr static T_in offset = 1UL << (BITS - 1);
-
70  constexpr static T_in max_in = -1;
-
71  constexpr static T_out max_out = static_cast<T_out>(max_in >> BITS);
-
72  static_assert(max_in > 0, "Error: only unsigned types are supported");
-
73 };
-
74 
-
76 
- -
- -
constexpr static T_in margin
Definition: Hysteresis.hpp:68
-
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
T_out getValue() const
Get the current output level.
Definition: Hysteresis.hpp:64
-
constexpr static T_out max_out
Definition: Hysteresis.hpp:71
-
A class for applying hysteresis to a given input.
Definition: Hysteresis.hpp:36
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
constexpr static T_in offset
Definition: Hysteresis.hpp:69
-
bool update(T_in inputLevel)
Update the hysteresis output with a new input value.
Definition: Hysteresis.hpp:48
-
T_out prevLevel
Definition: Hysteresis.hpp:67
-
constexpr static T_in max_in
Definition: Hysteresis.hpp:70
- - - - diff --git a/docs/Doxygen/d3/d0b/classLEDs-members.html b/docs/Doxygen/d3/d0b/classLEDs-members.html deleted file mode 100644 index f517d6a4b..000000000 --- a/docs/Doxygen/d3/d0b/classLEDs-members.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
LEDs< N > Member List
-
-
- -

This is the complete list of members for LEDs< N >, including all inherited members.

- - - - - - - - - -
begin() constLEDs< N >inline
clear(uint8_t index) constLEDs< N >inline
clear() constLEDs< N >inline
displayDot(uint8_t led) constLEDs< N >inline
displayRange(uint8_t startOn, uint8_t startOff) constLEDs< N >inline
ledPinsLEDs< N >private
LEDs(const PinList< N > &ledPins)LEDs< N >inline
set(uint8_t index) constLEDs< N >inline
- - - - diff --git a/docs/Doxygen/d3/d21/Button_8hpp__incl.map b/docs/Doxygen/d3/d21/Button_8hpp__incl.map deleted file mode 100644 index ea365e10f..000000000 --- a/docs/Doxygen/d3/d21/Button_8hpp__incl.map +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d3/d21/Button_8hpp__incl.md5 b/docs/Doxygen/d3/d21/Button_8hpp__incl.md5 deleted file mode 100644 index cd6f4e5a9..000000000 --- a/docs/Doxygen/d3/d21/Button_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -0d8f0a967e264a7750effbd980285adc \ No newline at end of file diff --git a/docs/Doxygen/d3/d21/Button_8hpp__incl.svg b/docs/Doxygen/d3/d21/Button_8hpp__incl.svg deleted file mode 100644 index d7cb624a6..000000000 --- a/docs/Doxygen/d3/d21/Button_8hpp__incl.svg +++ /dev/null @@ -1,481 +0,0 @@ - - - - - - -Button.hpp - - -Node1 - - -Button.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -AH/Hardware/ExtendedInput -Output/ExtendedInputOutput.hpp - - - - -Node1->Node3 - - - - -Node11 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node1->Node11 - - - - -Node3->Node2 - - - - -Node4 - - -Arduino.h - - - - -Node3->Node4 - - - - -Node5 - - -ExtendedIOElement.hpp - - - - -Node3->Node5 - - - - -Node5->Node2 - - - - -Node6 - - -AH/Hardware/Hardware --Types.hpp - - - - -Node5->Node6 - - - - -Node23 - - -AH/Containers/LinkedList.hpp - - - - -Node5->Node23 - - - - -Node6->Node2 - - - - -Node7 - - -AH/Containers/Array.hpp - - - - -Node6->Node7 - - - - -Node12 - - -NamespaceSettings.hpp - - - - -Node6->Node12 - - - - -Node18 - - -stdint.h - - - - -Node6->Node18 - - - - -Node7->Node2 - - - - -Node8 - - -AH/Error/Error.hpp - - - - -Node7->Node8 - - - - -Node17 - - -stddef.h - - - - -Node7->Node17 - - - - -Node21 - - -AH/STL/iterator - - - - -Node7->Node21 - - - - -Node22 - - -AH/STL/type_traits - - - - -Node7->Node22 - - - - -Node8->Node2 - - - - -Node9 - - -AH/Debug/Debug.hpp - - - - -Node8->Node9 - - - - -Node9->Node2 - - - - -Node10 - - -AH/PrintStream/PrintStream.hpp - - - - -Node9->Node10 - - - - -Node9->Node11 - - - - -Node20 - - -DebugVal.hpp - - - - -Node9->Node20 - - - - -Node10->Node2 - - - - -Node10->Node4 - - - - -Node11->Node2 - - - - -Node11->Node9 - - - - -Node11->Node12 - - - - -Node13 - - -Settings.hpp - - - - -Node11->Node13 - - - - -Node19 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node11->Node19 - - - - -Node14 - - -AH/Types/Frequency.hpp - - - - -Node13->Node14 - - - - -Node15 - - -AH/Hardware/ADCConfig.hpp - - - - -Node13->Node15 - - - - -Node16 - - -limits.h - - - - -Node13->Node16 - - - - -Node13->Node17 - - - - -Node13->Node18 - - - - -Node14->Node2 - - - - -Node14->Node12 - - - - -Node15->Node2 - - - - -Node15->Node4 - - - - -Node23->Node2 - - - - -Node23->Node9 - - - - -Node24 - - -AH/Math/MinMaxFix.hpp - - - - -Node23->Node24 - - - - -Node26 - - -stdlib.h - - - - -Node23->Node26 - - - - -Node27 - - -iterator - - - - -Node23->Node27 - - - - -Node24->Node2 - - - - -Node24->Node12 - - - - -Node25 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node24->Node25 - - - - -Node25->Node2 - - - - -Node25->Node4 - - - - - diff --git a/docs/Doxygen/d3/d23/EMA_8hpp__incl.map b/docs/Doxygen/d3/d23/EMA_8hpp__incl.map deleted file mode 100644 index f30ff08d7..000000000 --- a/docs/Doxygen/d3/d23/EMA_8hpp__incl.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/Doxygen/d3/d23/EMA_8hpp__incl.md5 b/docs/Doxygen/d3/d23/EMA_8hpp__incl.md5 deleted file mode 100644 index 5457e1cc8..000000000 --- a/docs/Doxygen/d3/d23/EMA_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -b311343b38074ef78dbe44dc83378031 \ No newline at end of file diff --git a/docs/Doxygen/d3/d23/EMA_8hpp__incl.svg b/docs/Doxygen/d3/d23/EMA_8hpp__incl.svg deleted file mode 100644 index 82d396867..000000000 --- a/docs/Doxygen/d3/d23/EMA_8hpp__incl.svg +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - -EMA.hpp - - -Node1 - - -EMA.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -stdint.h - - - - -Node1->Node3 - - - - - diff --git a/docs/Doxygen/d3/d2b/MillisMicrosTimer_8cpp.html b/docs/Doxygen/d3/d2b/MillisMicrosTimer_8cpp.html deleted file mode 100644 index 47cd941f7..000000000 --- a/docs/Doxygen/d3/d2b/MillisMicrosTimer_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: MillisMicrosTimer.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
MillisMicrosTimer.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/d3/d2b/MillisMicrosTimer_8cpp_source.html b/docs/Doxygen/d3/d2b/MillisMicrosTimer_8cpp_source.html deleted file mode 100644 index bb63eae25..000000000 --- a/docs/Doxygen/d3/d2b/MillisMicrosTimer_8cpp_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Arduino Helpers: MillisMicrosTimer.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
MillisMicrosTimer.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
-
2 #include "MillisMicrosTimer.hpp"
-
3 #endif
-
- - - - - diff --git a/docs/Doxygen/d3/d2c/ArraySort_8ino-example.html b/docs/Doxygen/d3/d2c/ArraySort_8ino-example.html deleted file mode 100644 index d084ca15e..000000000 --- a/docs/Doxygen/d3/d2c/ArraySort_8ino-example.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - - -Arduino Helpers: ArraySort.ino - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
ArraySort.ino
-
-
-

-ArraySort

-

Example of using the standard library algorithms.

-
Boards:
AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32
-

This sketch creates an array with an unordered sequence of 10 numbers. It prints the array, and then creates a reverse view on the 6 elements in the middle of the array and sorts it. The resulting array has the same elements in the 4 outermost places, but the 6 elements in the middle have been sorted in reverse order.

-

Output

Before sorting: 3, 5, 9, 2, 1, 8, 6, 4, 7, 0
-
Sorting ├─────────────────┤ in ascending order
-
After sorting: 3, 5, 1, 2, 4, 6, 8, 9, 7, 0
-
Sorting ├─────────────────┤ in descending order
-
After sorting: 3, 5, 9, 8, 6, 4, 2, 1, 7, 0
-

Written by PieterP, 2019-11-12 https://github.com/tttapa/Arduino-Helpers

-
- -
-
#include <AH/Containers/Array.hpp> // Array
-
#include <AH/Containers/ArrayHelpers.hpp> // For printing the array
-
#include <AH/STL/algorithm> // std::sort
-
-
void setup() {
-
Serial.begin(115200);
-
while (!Serial)
-
;
-
-
Array<int, 10> array = {3, 5, 9, 2, 1, 8, 6, 4, 7, 0};
-
-
Serial << "Before sorting: " << array << endl;
-
-
Serial << " Sorting ├─────────────────┤ in ascending order"
-
<< endl;
-
-
// select elements 2 through 7 (inclusive)
-
auto forward_view = array.slice<2, 7>();
-
// sort the view in ascending order
-
std::sort(std::begin(forward_view), std::end(forward_view));
-
-
Serial << "After sorting: " << array << endl;
-
Serial << " Sorting ├─────────────────┤ in descending order"
-
<< endl;
-
-
// select elements 2 through 7 (inclusive) in reverse order
-
auto reverse_view = array.slice<7, 2>();
-
// sort the reverse view in ascending order (this means that the original
-
// array is sorted in descending order)
-
std::sort(std::begin(reverse_view), std::end(reverse_view));
-
-
Serial << "After sorting: " << array << endl;
-
}
-
-
void loop() {}
-
-
ArraySlice< T, abs_diff(Start, End)+1,(End< Start), false > slice()
Get a view on a slice of the Array.
-
An array wrapper for easy copying, comparing, and iterating.
Definition: Array.hpp:36
- - -
Print & endl(Print &printer)
Definition: PrintStream.cpp:27
-
Dummy header file for Arduino builder. You have to add this file first, so the other headers are in t...
- - - - diff --git a/docs/Doxygen/d3/d39/BitArray_8hpp__dep__incl.map b/docs/Doxygen/d3/d39/BitArray_8hpp__dep__incl.map deleted file mode 100644 index 960a943ba..000000000 --- a/docs/Doxygen/d3/d39/BitArray_8hpp__dep__incl.map +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/docs/Doxygen/d3/d39/BitArray_8hpp__dep__incl.md5 b/docs/Doxygen/d3/d39/BitArray_8hpp__dep__incl.md5 deleted file mode 100644 index 8e3408860..000000000 --- a/docs/Doxygen/d3/d39/BitArray_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -3750cc5c5739b7e740c016f5c8db0751 \ No newline at end of file diff --git a/docs/Doxygen/d3/d39/BitArray_8hpp__dep__incl.svg b/docs/Doxygen/d3/d39/BitArray_8hpp__dep__incl.svg deleted file mode 100644 index fcb174fab..000000000 --- a/docs/Doxygen/d3/d39/BitArray_8hpp__dep__incl.svg +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - -BitArray.hpp - - -Node1 - - -BitArray.hpp - - - - -Node2 - - -MAX7219.hpp - - - - -Node1->Node2 - - - - -Node3 - - -ShiftRegisterOutBase.hpp - - - - -Node1->Node3 - - - - -Node7 - - -SPIShiftRegisterOut.hpp - - - - -Node1->Node7 - - - - -Node4 - - -ShiftRegisterOut.hpp - - - - -Node3->Node4 - - - - -Node6 - - -ShiftRegisterOutBase.ipp - - - - -Node3->Node6 - - - - -Node3->Node7 - - - - -Node5 - - -ShiftRegisterOut.ipp - - - - -Node4->Node5 - - - - -Node5->Node4 - - - - -Node6->Node3 - - - - -Node8 - - -SPIShiftRegisterOut.ipp - - - - -Node7->Node8 - - - - -Node8->Node7 - - - - - diff --git a/docs/Doxygen/d3/d55/structSetbase.html b/docs/Doxygen/d3/d55/structSetbase.html deleted file mode 100644 index b66797e96..000000000 --- a/docs/Doxygen/d3/d55/structSetbase.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - -Arduino Helpers: Setbase Struct Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
- -
-
Setbase Struct Reference
-
-
- -

#include <PrintStream.hpp>

-
-Collaboration diagram for Setbase:
-
-
-
- - - - -

-Public Attributes

uint8_t M_base
 
-

Detailed Description

-
-

Definition at line 53 of file PrintStream.hpp.

-

Member Data Documentation

- -

◆ M_base

- -
-
- - - - -
uint8_t M_base
-
- -

Definition at line 54 of file PrintStream.hpp.

- -
-
-
The documentation for this struct was generated from the following file: -
- - - - diff --git a/docs/Doxygen/d3/d90/Updatable_8hpp__incl.map b/docs/Doxygen/d3/d90/Updatable_8hpp__incl.map deleted file mode 100644 index 20a754ee0..000000000 --- a/docs/Doxygen/d3/d90/Updatable_8hpp__incl.map +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d3/d90/Updatable_8hpp__incl.md5 b/docs/Doxygen/d3/d90/Updatable_8hpp__incl.md5 deleted file mode 100644 index 74e6a5ae9..000000000 --- a/docs/Doxygen/d3/d90/Updatable_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -8c987371b7f7e02fb62d3c4728e11eaf \ No newline at end of file diff --git a/docs/Doxygen/d3/d90/Updatable_8hpp__incl.svg b/docs/Doxygen/d3/d90/Updatable_8hpp__incl.svg deleted file mode 100644 index 51dee29b9..000000000 --- a/docs/Doxygen/d3/d90/Updatable_8hpp__incl.svg +++ /dev/null @@ -1,366 +0,0 @@ - - - - - - -Updatable.hpp - - -Node1 - - -Updatable.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -AH/Containers/LinkedList.hpp - - - - -Node1->Node3 - - - - -Node7 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node1->Node7 - - - - -Node13 - - -stddef.h - - - - -Node1->Node13 - - - - -Node21 - - -AH/Error/Error.hpp - - - - -Node1->Node21 - - - - -Node3->Node2 - - - - -Node4 - - -AH/Debug/Debug.hpp - - - - -Node3->Node4 - - - - -Node17 - - -AH/Math/MinMaxFix.hpp - - - - -Node3->Node17 - - - - -Node19 - - -stdlib.h - - - - -Node3->Node19 - - - - -Node20 - - -iterator - - - - -Node3->Node20 - - - - -Node4->Node2 - - - - -Node5 - - -AH/PrintStream/PrintStream.hpp - - - - -Node4->Node5 - - - - -Node4->Node7 - - - - -Node16 - - -DebugVal.hpp - - - - -Node4->Node16 - - - - -Node5->Node2 - - - - -Node6 - - -Arduino.h - - - - -Node5->Node6 - - - - -Node7->Node2 - - - - -Node7->Node4 - - - - -Node8 - - -NamespaceSettings.hpp - - - - -Node7->Node8 - - - - -Node9 - - -Settings.hpp - - - - -Node7->Node9 - - - - -Node15 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node7->Node15 - - - - -Node10 - - -AH/Types/Frequency.hpp - - - - -Node9->Node10 - - - - -Node11 - - -AH/Hardware/ADCConfig.hpp - - - - -Node9->Node11 - - - - -Node12 - - -limits.h - - - - -Node9->Node12 - - - - -Node9->Node13 - - - - -Node14 - - -stdint.h - - - - -Node9->Node14 - - - - -Node10->Node2 - - - - -Node10->Node8 - - - - -Node11->Node2 - - - - -Node11->Node6 - - - - -Node17->Node2 - - - - -Node17->Node8 - - - - -Node18 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node17->Node18 - - - - -Node18->Node2 - - - - -Node18->Node6 - - - - -Node21->Node2 - - - - -Node21->Node4 - - - - - diff --git a/docs/Doxygen/d3/d95/classEMA-members.html b/docs/Doxygen/d3/d95/classEMA-members.html deleted file mode 100644 index f5878af7d..000000000 --- a/docs/Doxygen/d3/d95/classEMA-members.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
EMA< K, uint_t > Member List
-
-
- -

This is the complete list of members for EMA< K, uint_t >, including all inherited members.

- - - - - -
filter(uint_t input)EMA< K, uint_t >inline
filteredEMA< K, uint_t >private
fixedPointAHalfEMA< K, uint_t >privatestatic
operator()(uint_t value)EMA< K, uint_t >inline
- - - - diff --git a/docs/Doxygen/d3/da9/DebugVal_8hpp__dep__incl.map b/docs/Doxygen/d3/da9/DebugVal_8hpp__dep__incl.map deleted file mode 100644 index 0dc228f34..000000000 --- a/docs/Doxygen/d3/da9/DebugVal_8hpp__dep__incl.map +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d3/da9/DebugVal_8hpp__dep__incl.md5 b/docs/Doxygen/d3/da9/DebugVal_8hpp__dep__incl.md5 deleted file mode 100644 index ba51ab894..000000000 --- a/docs/Doxygen/d3/da9/DebugVal_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -1e317ad9d03fbaa7be18bc710e5e0995 \ No newline at end of file diff --git a/docs/Doxygen/d3/da9/DebugVal_8hpp__dep__incl.svg b/docs/Doxygen/d3/da9/DebugVal_8hpp__dep__incl.svg deleted file mode 100644 index aa0ed1e5d..000000000 --- a/docs/Doxygen/d3/da9/DebugVal_8hpp__dep__incl.svg +++ /dev/null @@ -1,658 +0,0 @@ - - - - - - -DebugVal.hpp - - -Node1 - - -DebugVal.hpp - - - - -Node2 - - -Debug.hpp - - - - -Node1->Node2 - - - - -Node3 - - -LinkedList.hpp - - - - -Node2->Node3 - - - - -Node31 - - -Debug.cpp - - - - -Node2->Node31 - - - - -Node32 - - -Error.hpp - - - - -Node2->Node32 - - - - -Node38 - - -SettingsWrapper.hpp - - - - -Node2->Node38 - - - - -Node4 - - -Updatable.hpp - - - - -Node3->Node4 - - - - -Node5 - - -ExtendedIOElement.hpp - - - - -Node3->Node5 - - - - -Node6 - - -ExtendedInputOutput.hpp - - - - -Node5->Node6 - - - - -Node16 - - -ExtendedInputOutput.cpp - - - - -Node5->Node16 - - - - -Node29 - - -StaticSizeExtendedIOElement.hpp - - - - -Node5->Node29 - - - - -Node30 - - -ExtendedIOElement.cpp - - - - -Node5->Node30 - - - - -Node7 - - -Button.hpp - - - - -Node6->Node7 - - - - -Node13 - - -ButtonMatrix.ipp - - - - -Node6->Node13 - - - - -Node15 - - -AnalogMultiplex.hpp - - - - -Node6->Node15 - - - - -Node6->Node16 - - - - -Node17 - - -ShiftRegisterOutBase.ipp - - - - -Node6->Node17 - - - - -Node20 - - -ShiftRegisterOut.ipp - - - - -Node6->Node20 - - - - -Node22 - - -SPIShiftRegisterOut.ipp - - - - -Node6->Node22 - - - - -Node23 - - -FilteredAnalog.hpp - - - - -Node6->Node23 - - - - -Node24 - - -LEDs.hpp - - - - -Node6->Node24 - - - - -Node26 - - -MAX7219_Base.hpp - - - - -Node6->Node26 - - - - -Node8 - - -Button.cpp - - - - -Node7->Node8 - - - - -Node9 - - -IncrementButton.hpp - - - - -Node7->Node9 - - - - -Node11 - - -IncrementDecrementButtons.hpp - - - - -Node7->Node11 - - - - -Node10 - - -IncrementButton.cpp - - - - -Node9->Node10 - - - - -Node12 - - -IncrementDecrementButtons.cpp - - - - -Node11->Node12 - - - - -Node14 - - -ButtonMatrix.hpp - - - - -Node13->Node14 - - - - -Node14->Node13 - - - - -Node18 - - -ShiftRegisterOutBase.hpp - - - - -Node17->Node18 - - - - -Node18->Node17 - - - - -Node19 - - -ShiftRegisterOut.hpp - - - - -Node18->Node19 - - - - -Node21 - - -SPIShiftRegisterOut.hpp - - - - -Node18->Node21 - - - - -Node19->Node20 - - - - -Node20->Node19 - - - - -Node21->Node22 - - - - -Node22->Node21 - - - - -Node25 - - -DotBarDisplayLEDs.hpp - - - - -Node24->Node25 - - - - -Node27 - - -MAX7219.hpp - - - - -Node26->Node27 - - - - -Node28 - - -MAX7219SevenSegmentDisplay.hpp - - - - -Node26->Node28 - - - - -Node29->Node15 - - - - -Node29->Node18 - - - - -Node29->Node27 - - - - -Node32->Node4 - - - - -Node32->Node16 - - - - -Node32->Node30 - - - - -Node33 - - -Array.hpp - - - - -Node32->Node33 - - - - -Node36 - - -BitArray.hpp - - - - -Node32->Node36 - - - - -Node37 - - -Exit.cpp - - - - -Node32->Node37 - - - - -Node33->Node15 - - - - -Node34 - - -ArrayHelpers.hpp - - - - -Node33->Node34 - - - - -Node35 - - -Hardware-Types.hpp - - - - -Node33->Node35 - - - - -Node34->Node29 - - - - -Node35->Node5 - - - - -Node35->Node14 - - - - -Node35->Node23 - - - - -Node36->Node18 - - - - -Node36->Node21 - - - - -Node36->Node27 - - - - -Node38->Node2 - - - - -Node38->Node4 - - - - -Node38->Node7 - - - - -Node38->Node23 - - - - -Node39 - - -ShiftRegisterOutRGB.hpp - - - - -Node38->Node39 - - - - -Node39->Node17 - - - - -Node40 - - -ShiftRegisterOutRGB.cpp - - - - -Node39->Node40 - - - - - diff --git a/docs/Doxygen/d3/db1/classBitArray__coll__graph.map b/docs/Doxygen/d3/db1/classBitArray__coll__graph.map deleted file mode 100644 index b0ddcea69..000000000 --- a/docs/Doxygen/d3/db1/classBitArray__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/d3/db1/classBitArray__coll__graph.md5 b/docs/Doxygen/d3/db1/classBitArray__coll__graph.md5 deleted file mode 100644 index 7f592475f..000000000 --- a/docs/Doxygen/d3/db1/classBitArray__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -279b70eb0ae28d0b4ac396dded3ff7c8 \ No newline at end of file diff --git a/docs/Doxygen/d3/db1/classBitArray__coll__graph.svg b/docs/Doxygen/d3/db1/classBitArray__coll__graph.svg deleted file mode 100644 index 7a0307b8b..000000000 --- a/docs/Doxygen/d3/db1/classBitArray__coll__graph.svg +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - -BitArray< N > - - -Node1 - - -BitArray< N > - -- buffer -- bufferLength - -+ get() -+ set() -+ clear() -+ set() -+ safeIndex() -+ getByte() -+ getBufferLength() -- getBufferIndex() -- getBufferBit() -- getBufferMask() - - - - - diff --git a/docs/Doxygen/d3/dba/Debug_8md.html b/docs/Doxygen/d3/dba/Debug_8md.html deleted file mode 100644 index 24c3795a1..000000000 --- a/docs/Doxygen/d3/dba/Debug_8md.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Debug.md File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Debug.md File Reference
-
-
-
- - - - diff --git a/docs/Doxygen/d3/dbe/1_8FilteredAnalog_8ino-example.html b/docs/Doxygen/d3/dbe/1_8FilteredAnalog_8ino-example.html deleted file mode 100644 index 7e504d4a7..000000000 --- a/docs/Doxygen/d3/dbe/1_8FilteredAnalog_8ino-example.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - -Arduino Helpers: 1.FilteredAnalog.ino - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
1.FilteredAnalog.ino
-
-
-

-1.FilteredAnalog

-

This examples shows how to filter an analog input, so you can get the position of a knob or fader without noise.

-
Boards:
AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32
-

-Connections

-
    -
  • A0: wiper of a potentiometer
  • -
-

Connect the left terminal of the potentiometer to ground, and the right one to VCC.

-

-Behavior

-
    -
  • Upload the sketch to the Arduino, and open the Serial Monitor (CTRL+Shift+M)
  • -
  • When you turn the potentiometer, you should see the position of the potentiometer being printed as a number between 0 and 1023.
  • -
  • The analog input is filtered, so there shouldn't be any noise on the position. If there is, check your wiring, and make sure that the resistance of the potentiometer isn't too high (10 kΩ is ideal).
  • -
-

Written by PieterP, 2019-10-10
- https://github.com/tttapa/Arduino-Helpers

-
-
// Include the library
- -
- - -
-
// Create a filtered analog object on pin A0:
-
FilteredAnalog<10, // Output precision in bits
-
2, // The amount of filtering
-
uint16_t, // The integer type for the filter calculations
-
analog_t // The integer type for the upscaled analog values
-
>
-
analog = A0;
-
-
// If you want more filtering, you can increase the filter shift factor.
-
// The number of bits required for the intermediate calculations increases if
-
// you do so, so you have to use a larger type as well.
-
FilteredAnalog<10, // Output precision in bits
-
6, // The amount of filtering
-
uint32_t // The integer type for the filter calculations
-
>
-
moreFiltering = A0;
-
-
// If you don't care about the specific settings, and just want a
-
// default that works, you can use the following:
-
FilteredAnalog<> simpleAnalog = A0;
-
-
void setup() {
-
Serial.begin(115200);
-
while (!Serial)
-
;
-
// Select the correct ADC resolution
- -
// If you want, you can add mapping functions to invert the input, for example
-
analog.invert();
-
}
-
-
void loop() {
-
// Read the analog input every millisecond, and print if the value has changed
-
static Timer<millis> timer = 1; // ms
-
if (timer && analog.update())
-
Serial.println(analog.getValue());
-
-
// Explanation:
-
//
-
// analog.update() reads the analog input, applies the filters,
-
// saves the value, and returns true if the value has changed.
-
// You can then retreive the new value using analog.getValue().
-
//
-
// Timer is just a "Blink Without Delay" wrapper, it returns true
-
// every time the specified amount of time has passed.
-
}
-
- -
A class that reads and filters an analog input.
-
uint16_t analog_t
The type returned from analogRead and similar functions.
-
A class for easily managing timed events.
-
static void setupADC()
Select the configured ADC resolution.
-
Dummy header file for Arduino builder. You have to add this file first, so the other headers are in t...
- - - - - diff --git a/docs/Doxygen/d3/dbf/classMAX7219-members.html b/docs/Doxygen/d3/dbf/classMAX7219-members.html deleted file mode 100644 index bf917d144..000000000 --- a/docs/Doxygen/d3/dbf/classMAX7219-members.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
MAX7219 Member List
-
-
- -

This is the complete list of members for MAX7219, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
analogRead(pin_t pin) override __attribute__((deprecated))MAX7219inlinevirtual
analogWrite(pin_t pin, analog_t val) override __attribute__((deprecated))MAX7219inlinevirtual
begin() overrideMAX7219inlinevirtual
beginAll()ExtendedIOElementstatic
bufferMAX7219private
clear()MAX7219_Baseinline
DECODEMODEMAX7219_Basestatic
digitalRead(pin_t pin) overrideMAX7219inlinevirtual
digitalWrite(pin_t pin, uint8_t val) overrideMAX7219inlinevirtual
DISPLAYTESTMAX7219_Basestatic
elementsExtendedIOElementprivatestatic
endExtendedIOElementprivate
ExtendedIOElement(pin_t length)ExtendedIOElementprotected
getAll()ExtendedIOElementstatic
getEnd() constExtendedIOElement
getLength() constExtendedIOElement
getStart() constExtendedIOElement
init()MAX7219_Baseinline
INTENSITYMAX7219_Basestatic
length()StaticSizeExtendedIOElement< 8 *8 >inlinestatic
loadPinMAX7219_Baseprivate
MAX7219(pin_t loadPin)MAX7219inline
MAX7219_Base(pin_t loadPin)MAX7219_Baseinline
nextDoublyLinkable< ExtendedIOElement >protected
offsetExtendedIOElementprivatestatic
operator[](pin_t pin) constExtendedIOElement
pin(pin_t pin) constExtendedIOElement
pinMode(pin_t pin, uint8_t mode) override __attribute__((deprecated))MAX7219inlinevirtual
pins() constStaticSizeExtendedIOElement< 8 *8 >inline
previousDoublyLinkable< ExtendedIOElement >protected
SCANLIMITMAX7219_Basestatic
send(uint8_t digit, uint8_t value)MAX7219_Baseinline
sendRaw(uint8_t opcode, uint8_t value)MAX7219_Baseinline
setIntensity(uint8_t intensity)MAX7219_Baseinline
settingsMAX7219_Baseprivate
SHUTDOWNMAX7219_Basestatic
startExtendedIOElementprivate
StaticSizeExtendedIOElement()StaticSizeExtendedIOElement< 8 *8 >inlineprotected
update() overrideMAX7219inlinevirtual
~DoublyLinkable()=defaultDoublyLinkable< ExtendedIOElement >protectedvirtual
~ExtendedIOElement()ExtendedIOElementvirtual
- - - - diff --git a/docs/Doxygen/d3/dc0/classStaticSizeExtendedIOElement-members.html b/docs/Doxygen/d3/dc0/classStaticSizeExtendedIOElement-members.html deleted file mode 100644 index a64030904..000000000 --- a/docs/Doxygen/d3/dc0/classStaticSizeExtendedIOElement-members.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
StaticSizeExtendedIOElement< N > Member List
-
-
- -

This is the complete list of members for StaticSizeExtendedIOElement< N >, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
analogRead(pin_t pin)=0ExtendedIOElementpure virtual
analogWrite(pin_t pin, analog_t val)=0ExtendedIOElementpure virtual
begin()=0ExtendedIOElementpure virtual
beginAll()ExtendedIOElementstatic
digitalRead(pin_t pin)=0ExtendedIOElementpure virtual
digitalWrite(pin_t pin, uint8_t state)=0ExtendedIOElementpure virtual
elementsExtendedIOElementprivatestatic
endExtendedIOElementprivate
ExtendedIOElement(pin_t length)ExtendedIOElementprotected
getAll()ExtendedIOElementstatic
getEnd() constExtendedIOElement
getLength() constExtendedIOElement
getStart() constExtendedIOElement
length()StaticSizeExtendedIOElement< N >inlinestatic
nextDoublyLinkable< ExtendedIOElement >protected
offsetExtendedIOElementprivatestatic
operator[](pin_t pin) constExtendedIOElement
pin(pin_t pin) constExtendedIOElement
pinMode(pin_t pin, uint8_t mode)=0ExtendedIOElementpure virtual
pins() constStaticSizeExtendedIOElement< N >inline
previousDoublyLinkable< ExtendedIOElement >protected
startExtendedIOElementprivate
StaticSizeExtendedIOElement()StaticSizeExtendedIOElement< N >inlineprotected
update()=0ExtendedIOElementpure virtual
~DoublyLinkable()=defaultDoublyLinkable< ExtendedIOElement >protectedvirtual
~ExtendedIOElement()ExtendedIOElementvirtual
- - - - diff --git a/docs/Doxygen/d3/df0/EMA_8hpp.html b/docs/Doxygen/d3/df0/EMA_8hpp.html deleted file mode 100644 index c5cd71c09..000000000 --- a/docs/Doxygen/d3/df0/EMA_8hpp.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - -Arduino Helpers: EMA.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
EMA.hpp File Reference
-
-
-
#include <AH/Settings/Warnings.hpp>
-#include <stdint.h>
-
-Include dependency graph for EMA.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - - - - -

-Classes

class  EMA< K, uint_t >
 A class for single-pole infinite impulse response filters or exponential moving average filters. More...
 
class  EMA_f
 A class for single-pole infinite impulse response filters or exponential moving average filters. More...
 
-
- - - - diff --git a/docs/Doxygen/d3/df0/EMA_8hpp_source.html b/docs/Doxygen/d3/df0/EMA_8hpp_source.html deleted file mode 100644 index 535cc5525..000000000 --- a/docs/Doxygen/d3/df0/EMA_8hpp_source.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - -Arduino Helpers: EMA.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
EMA.hpp
-
-
-Go to the documentation of this file.
1 /* ✔ */
-
2 
-
3 #pragma once
-
4 
- -
6 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
7 
-
8 #include <stdint.h>
-
9 
-
41 template <uint8_t K, class uint_t>
-
42 class EMA {
-
43  public:
-
51  uint_t filter(uint_t input) {
-
52  filtered += input;
-
53  uint_t output = (filtered + fixedPointAHalf) >> K;
-
54  filtered -= output;
-
55  return output;
-
56  }
-
57 
-
65  uint_t operator()(uint_t value) { return filter(value); }
-
66 
-
67  static_assert(
-
68  uint_t(0) < uint_t(-1), // Check that `uint_t` is an unsigned type
-
69  "Error: the uint_t type should be an unsigned integer, otherwise, "
-
70  "the division using bit shifts is invalid.");
-
71 
-
72  private:
-
73  uint_t filtered = 0;
-
74  constexpr static uint_t fixedPointAHalf = 1 << (K - 1);
-
75 };
-
76 
-
77 // -------------------------------------------------------------------------- //
-
78 
-
93 class EMA_f {
-
94  public:
-
105  EMA_f(float pole) : alpha(1 - pole) {}
-
106 
-
114  float filter(float value) {
-
115  filtered += (value - filtered) * alpha;
-
116  return filtered;
-
117  }
-
118 
-
126  float operator()(float value) { return filter(value); }
-
127 
-
128  private:
-
129  float alpha;
-
130  float filtered = 0;
-
131 };
-
132 
- -
-
uint_t filter(uint_t input)
Filter the input: Given , calculate .
Definition: EMA.hpp:51
-
constexpr static uint_t fixedPointAHalf
Definition: EMA.hpp:74
- -
uint_t filtered
Definition: EMA.hpp:73
-
float alpha
Definition: EMA.hpp:129
-
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
A class for single-pole infinite impulse response filters or exponential moving average filters.
Definition: EMA.hpp:93
-
A class for single-pole infinite impulse response filters or exponential moving average filters.
Definition: EMA.hpp:42
-
float filtered
Definition: EMA.hpp:130
-
EMA_f(float pole)
Create an exponential moving average filter with a pole at the given location.
Definition: EMA.hpp:105
-
float operator()(float value)
Filter the input: Given , calculate .
Definition: EMA.hpp:126
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
uint_t operator()(uint_t value)
Filter the input: Given , calculate .
Definition: EMA.hpp:65
-
float filter(float value)
Filter the input: Given , calculate .
Definition: EMA.hpp:114
- - - - diff --git a/docs/Doxygen/d4/d13/classIncrementDecrementButtons-members.html b/docs/Doxygen/d4/d13/classIncrementDecrementButtons-members.html deleted file mode 100644 index 6aa69cea8..000000000 --- a/docs/Doxygen/d4/d13/classIncrementDecrementButtons-members.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IncrementDecrementButtons Member List
-
- - - - - diff --git a/docs/Doxygen/d4/d14/MinMaxFix_8hpp__dep__incl.map b/docs/Doxygen/d4/d14/MinMaxFix_8hpp__dep__incl.map deleted file mode 100644 index c44523b69..000000000 --- a/docs/Doxygen/d4/d14/MinMaxFix_8hpp__dep__incl.map +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d4/d14/MinMaxFix_8hpp__dep__incl.md5 b/docs/Doxygen/d4/d14/MinMaxFix_8hpp__dep__incl.md5 deleted file mode 100644 index 2e3e11f23..000000000 --- a/docs/Doxygen/d4/d14/MinMaxFix_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -06ee1e87131777002f2d6155ea1a99f2 \ No newline at end of file diff --git a/docs/Doxygen/d4/d14/MinMaxFix_8hpp__dep__incl.svg b/docs/Doxygen/d4/d14/MinMaxFix_8hpp__dep__incl.svg deleted file mode 100644 index 799bc410e..000000000 --- a/docs/Doxygen/d4/d14/MinMaxFix_8hpp__dep__incl.svg +++ /dev/null @@ -1,440 +0,0 @@ - - - - - - -MinMaxFix.hpp - - -Node1 - - -MinMaxFix.hpp - - - - -Node2 - - -LinkedList.hpp - - - - -Node1->Node2 - - - - -Node22 - - -FilteredAnalog.hpp - - - - -Node1->Node22 - - - - -Node3 - - -Updatable.hpp - - - - -Node2->Node3 - - - - -Node4 - - -ExtendedIOElement.hpp - - - - -Node2->Node4 - - - - -Node5 - - -ExtendedInputOutput.hpp - - - - -Node4->Node5 - - - - -Node15 - - -ExtendedInputOutput.cpp - - - - -Node4->Node15 - - - - -Node28 - - -StaticSizeExtendedIOElement.hpp - - - - -Node4->Node28 - - - - -Node29 - - -ExtendedIOElement.cpp - - - - -Node4->Node29 - - - - -Node6 - - -Button.hpp - - - - -Node5->Node6 - - - - -Node12 - - -ButtonMatrix.ipp - - - - -Node5->Node12 - - - - -Node14 - - -AnalogMultiplex.hpp - - - - -Node5->Node14 - - - - -Node5->Node15 - - - - -Node16 - - -ShiftRegisterOutBase.ipp - - - - -Node5->Node16 - - - - -Node19 - - -ShiftRegisterOut.ipp - - - - -Node5->Node19 - - - - -Node21 - - -SPIShiftRegisterOut.ipp - - - - -Node5->Node21 - - - - -Node5->Node22 - - - - -Node23 - - -LEDs.hpp - - - - -Node5->Node23 - - - - -Node25 - - -MAX7219_Base.hpp - - - - -Node5->Node25 - - - - -Node7 - - -Button.cpp - - - - -Node6->Node7 - - - - -Node8 - - -IncrementButton.hpp - - - - -Node6->Node8 - - - - -Node10 - - -IncrementDecrementButtons.hpp - - - - -Node6->Node10 - - - - -Node9 - - -IncrementButton.cpp - - - - -Node8->Node9 - - - - -Node11 - - -IncrementDecrementButtons.cpp - - - - -Node10->Node11 - - - - -Node13 - - -ButtonMatrix.hpp - - - - -Node12->Node13 - - - - -Node13->Node12 - - - - -Node17 - - -ShiftRegisterOutBase.hpp - - - - -Node16->Node17 - - - - -Node17->Node16 - - - - -Node18 - - -ShiftRegisterOut.hpp - - - - -Node17->Node18 - - - - -Node20 - - -SPIShiftRegisterOut.hpp - - - - -Node17->Node20 - - - - -Node18->Node19 - - - - -Node19->Node18 - - - - -Node20->Node21 - - - - -Node21->Node20 - - - - -Node24 - - -DotBarDisplayLEDs.hpp - - - - -Node23->Node24 - - - - -Node26 - - -MAX7219.hpp - - - - -Node25->Node26 - - - - -Node27 - - -MAX7219SevenSegmentDisplay.hpp - - - - -Node25->Node27 - - - - -Node28->Node14 - - - - -Node28->Node17 - - - - -Node28->Node26 - - - - - diff --git a/docs/Doxygen/d4/d16/classExtendedIOElement-members.html b/docs/Doxygen/d4/d16/classExtendedIOElement-members.html deleted file mode 100644 index 3955cc70d..000000000 --- a/docs/Doxygen/d4/d16/classExtendedIOElement-members.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
ExtendedIOElement Member List
-
-
- -

This is the complete list of members for ExtendedIOElement, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - -
analogRead(pin_t pin)=0ExtendedIOElementpure virtual
analogWrite(pin_t pin, analog_t val)=0ExtendedIOElementpure virtual
begin()=0ExtendedIOElementpure virtual
beginAll()ExtendedIOElementstatic
digitalRead(pin_t pin)=0ExtendedIOElementpure virtual
digitalWrite(pin_t pin, uint8_t state)=0ExtendedIOElementpure virtual
elementsExtendedIOElementprivatestatic
endExtendedIOElementprivate
ExtendedIOElement(pin_t length)ExtendedIOElementprotected
getAll()ExtendedIOElementstatic
getEnd() constExtendedIOElement
getLength() constExtendedIOElement
getStart() constExtendedIOElement
lengthExtendedIOElementprivate
nextDoublyLinkable< ExtendedIOElement >protected
offsetExtendedIOElementprivatestatic
operator[](pin_t pin) constExtendedIOElement
pin(pin_t pin) constExtendedIOElement
pinMode(pin_t pin, uint8_t mode)=0ExtendedIOElementpure virtual
previousDoublyLinkable< ExtendedIOElement >protected
startExtendedIOElementprivate
update()=0ExtendedIOElementpure virtual
~DoublyLinkable()=defaultDoublyLinkable< ExtendedIOElement >protectedvirtual
~ExtendedIOElement()ExtendedIOElementvirtual
- - - - diff --git a/docs/Doxygen/d4/d18/Error_8hpp__dep__incl.map b/docs/Doxygen/d4/d18/Error_8hpp__dep__incl.map deleted file mode 100644 index e69e26343..000000000 --- a/docs/Doxygen/d4/d18/Error_8hpp__dep__incl.map +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d4/d18/Error_8hpp__dep__incl.md5 b/docs/Doxygen/d4/d18/Error_8hpp__dep__incl.md5 deleted file mode 100644 index ee2f2404c..000000000 --- a/docs/Doxygen/d4/d18/Error_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -7080d31ddbb72678ba465eba247d7ebe \ No newline at end of file diff --git a/docs/Doxygen/d4/d18/Error_8hpp__dep__incl.svg b/docs/Doxygen/d4/d18/Error_8hpp__dep__incl.svg deleted file mode 100644 index cadb5309c..000000000 --- a/docs/Doxygen/d4/d18/Error_8hpp__dep__incl.svg +++ /dev/null @@ -1,532 +0,0 @@ - - - - - - -Error.hpp - - -Node1 - - -Error.hpp - - - - -Node2 - - -Array.hpp - - - - -Node1->Node2 - - - - -Node24 - - -ExtendedInputOutput.cpp - - - - -Node1->Node24 - - - - -Node30 - - -ExtendedIOElement.cpp - - - - -Node1->Node30 - - - - -Node31 - - -BitArray.hpp - - - - -Node1->Node31 - - - - -Node32 - - -Updatable.hpp - - - - -Node1->Node32 - - - - -Node33 - - -Exit.cpp - - - - -Node1->Node33 - - - - -Node3 - - -ArrayHelpers.hpp - - - - -Node2->Node3 - - - - -Node5 - - -AnalogMultiplex.hpp - - - - -Node2->Node5 - - - - -Node13 - - -Hardware-Types.hpp - - - - -Node2->Node13 - - - - -Node4 - - -StaticSizeExtendedIOElement.hpp - - - - -Node3->Node4 - - - - -Node4->Node5 - - - - -Node6 - - -MAX7219.hpp - - - - -Node4->Node6 - - - - -Node7 - - -ShiftRegisterOutBase.hpp - - - - -Node4->Node7 - - - - -Node8 - - -ShiftRegisterOut.hpp - - - - -Node7->Node8 - - - - -Node10 - - -ShiftRegisterOutBase.ipp - - - - -Node7->Node10 - - - - -Node11 - - -SPIShiftRegisterOut.hpp - - - - -Node7->Node11 - - - - -Node9 - - -ShiftRegisterOut.ipp - - - - -Node8->Node9 - - - - -Node9->Node8 - - - - -Node10->Node7 - - - - -Node12 - - -SPIShiftRegisterOut.ipp - - - - -Node11->Node12 - - - - -Node12->Node11 - - - - -Node14 - - -ButtonMatrix.hpp - - - - -Node13->Node14 - - - - -Node16 - - -ExtendedIOElement.hpp - - - - -Node13->Node16 - - - - -Node25 - - -FilteredAnalog.hpp - - - - -Node13->Node25 - - - - -Node15 - - -ButtonMatrix.ipp - - - - -Node14->Node15 - - - - -Node15->Node14 - - - - -Node16->Node4 - - - - -Node17 - - -ExtendedInputOutput.hpp - - - - -Node16->Node17 - - - - -Node16->Node24 - - - - -Node16->Node30 - - - - -Node17->Node5 - - - - -Node17->Node9 - - - - -Node17->Node10 - - - - -Node17->Node12 - - - - -Node17->Node15 - - - - -Node18 - - -Button.hpp - - - - -Node17->Node18 - - - - -Node17->Node24 - - - - -Node17->Node25 - - - - -Node26 - - -LEDs.hpp - - - - -Node17->Node26 - - - - -Node28 - - -MAX7219_Base.hpp - - - - -Node17->Node28 - - - - -Node19 - - -Button.cpp - - - - -Node18->Node19 - - - - -Node20 - - -IncrementButton.hpp - - - - -Node18->Node20 - - - - -Node22 - - -IncrementDecrementButtons.hpp - - - - -Node18->Node22 - - - - -Node21 - - -IncrementButton.cpp - - - - -Node20->Node21 - - - - -Node23 - - -IncrementDecrementButtons.cpp - - - - -Node22->Node23 - - - - -Node27 - - -DotBarDisplayLEDs.hpp - - - - -Node26->Node27 - - - - -Node28->Node6 - - - - -Node29 - - -MAX7219SevenSegmentDisplay.hpp - - - - -Node28->Node29 - - - - -Node31->Node6 - - - - -Node31->Node7 - - - - -Node31->Node11 - - - - - diff --git a/docs/Doxygen/d4/d21/classEMA__f__coll__graph.map b/docs/Doxygen/d4/d21/classEMA__f__coll__graph.map deleted file mode 100644 index faaa143fc..000000000 --- a/docs/Doxygen/d4/d21/classEMA__f__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/d4/d21/classEMA__f__coll__graph.md5 b/docs/Doxygen/d4/d21/classEMA__f__coll__graph.md5 deleted file mode 100644 index 490485b0e..000000000 --- a/docs/Doxygen/d4/d21/classEMA__f__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -7fd67895152bf22663288d529c7f3658 \ No newline at end of file diff --git a/docs/Doxygen/d4/d21/classEMA__f__coll__graph.svg b/docs/Doxygen/d4/d21/classEMA__f__coll__graph.svg deleted file mode 100644 index f3dc3677c..000000000 --- a/docs/Doxygen/d4/d21/classEMA__f__coll__graph.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - -EMA_f - - -Node1 - - -EMA_f - -- alpha -- filtered - -+ EMA_f() -+ filter() -+ operator()() - - - - - diff --git a/docs/Doxygen/d4/d23/classDoublyLinkable.html b/docs/Doxygen/d4/d23/classDoublyLinkable.html deleted file mode 100644 index a0cdd6fa8..000000000 --- a/docs/Doxygen/d4/d23/classDoublyLinkable.html +++ /dev/null @@ -1,203 +0,0 @@ - - - - - - - -Arduino Helpers: DoublyLinkable< Node > Class Template Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
- -
-
DoublyLinkable< Node > Class Template Reference
-
-
- -

A class that can be inherited from to allow inserting into a DoublyLinkedList. - More...

- -

#include <LinkedList.hpp>

-
-Collaboration diagram for DoublyLinkable< Node >:
-
-
-
- - - - -

-Protected Member Functions

virtual ~DoublyLinkable ()=default
 
- - - - - -

-Protected Attributes

Node * next = nullptr
 
Node * previous = nullptr
 
-

Detailed Description

-

template<class Node>
-class DoublyLinkable< Node >

- -

A class that can be inherited from to allow inserting into a DoublyLinkedList.

-
Template Parameters
- - -
NodeThe type of the nodes of the list.
-
-
- -

Definition at line 302 of file LinkedList.hpp.

-

Constructor & Destructor Documentation

- -

◆ ~DoublyLinkable()

- -
-
- - - - - -
- - - - - - - -
virtual ~DoublyLinkable ()
-
-protectedvirtualdefault
-
- -
-
-

Member Data Documentation

- -

◆ next

- -
-
- - - - - -
- - - - -
Node* next = nullptr
-
-protected
-
- -

Definition at line 305 of file LinkedList.hpp.

- -
-
- -

◆ previous

- -
-
- - - - - -
- - - - -
Node* previous = nullptr
-
-protected
-
- -

Definition at line 306 of file LinkedList.hpp.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/Doxygen/d4/d23/classUniquePtr__coll__graph.map b/docs/Doxygen/d4/d23/classUniquePtr__coll__graph.map deleted file mode 100644 index 8aecee4b2..000000000 --- a/docs/Doxygen/d4/d23/classUniquePtr__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/d4/d23/classUniquePtr__coll__graph.md5 b/docs/Doxygen/d4/d23/classUniquePtr__coll__graph.md5 deleted file mode 100644 index 21d333a07..000000000 --- a/docs/Doxygen/d4/d23/classUniquePtr__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -9d7e400e014aef61db167e3476105534 \ No newline at end of file diff --git a/docs/Doxygen/d4/d23/classUniquePtr__coll__graph.svg b/docs/Doxygen/d4/d23/classUniquePtr__coll__graph.svg deleted file mode 100644 index 5346294d7..000000000 --- a/docs/Doxygen/d4/d23/classUniquePtr__coll__graph.svg +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - -UniquePtr< T > - - -Node1 - - -UniquePtr< T > - -- p - -+ UniquePtr() -+ UniquePtr() -+ UniquePtr() -+ UniquePtr() -+ ~UniquePtr() -+ operator=() -+ operator=() -+ reset() -+ release() -+ operator bool() -+ get() -+ get() -+ operator->() -+ operator->() -+ operator*() -+ operator*() - - - - - diff --git a/docs/Doxygen/d4/d26/classMAX7219SevenSegmentDisplay.html b/docs/Doxygen/d4/d26/classMAX7219SevenSegmentDisplay.html deleted file mode 100644 index c1cbe2fa7..000000000 --- a/docs/Doxygen/d4/d26/classMAX7219SevenSegmentDisplay.html +++ /dev/null @@ -1,790 +0,0 @@ - - - - - - - -Arduino Helpers: MAX7219SevenSegmentDisplay Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

A class for 8-digit 7-segment displays with a MAX7219 driver. - More...

- -

#include <MAX7219SevenSegmentDisplay.hpp>

-
-Inheritance diagram for MAX7219SevenSegmentDisplay:
-
-
-
-
-Collaboration diagram for MAX7219SevenSegmentDisplay:
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 MAX7219SevenSegmentDisplay (pin_t loadPin)
 Create a MAX7219SevenSegmentDisplay. More...
 
void begin ()
 Initialize. More...
 
uint8_t display (long number, uint8_t startDigit=0, uint8_t endDigit=7)
 Display a long integer number to the display. More...
 
uint8_t display (const char *text, uint8_t startPos=0)
 Display a string of text to the display. More...
 
template<uint8_t N>
uint8_t display (const uint8_t(&characters)[N], uint8_t startPos=0)
 ? More...
 
void printHex (uint8_t digit, uint8_t value)
 Print a single hexadecimal digit. More...
 
void init ()
 Initialize the Arduino pins, SPI, and the MAX7219. More...
 
void clear ()
 Turn off all LEDs. More...
 
void send (uint8_t digit, uint8_t value)
 Send the value to the given digit. More...
 
void sendRaw (uint8_t opcode, uint8_t value)
 Send a raw opcode and value to the MAX7219. More...
 
void setIntensity (uint8_t intensity)
 Set the intensity of the LEDs. More...
 
- - - - - - - - - - - -

-Static Public Attributes

static constexpr uint8_t DECODEMODE = 9
 
static constexpr uint8_t INTENSITY = 10
 
static constexpr uint8_t SCANLIMIT = 11
 
static constexpr uint8_t SHUTDOWN = 12
 
static constexpr uint8_t DISPLAYTEST = 15
 
- - - - - -

-Private Attributes

pin_t loadPin
 
SPISettings settings = {SPI_MAX_SPEED, MSBFIRST, SPI_MODE0}
 
-

Detailed Description

-

A class for 8-digit 7-segment displays with a MAX7219 driver.

- -

Definition at line 49 of file MAX7219SevenSegmentDisplay.hpp.

-

Constructor & Destructor Documentation

- -

◆ MAX7219SevenSegmentDisplay()

- -
-
- - - - - -
- - - - - - - - -
MAX7219SevenSegmentDisplay (pin_t loadPin)
-
-inline
-
- -

Create a MAX7219SevenSegmentDisplay.

-
Parameters
- - -
loadPinThe pin connected to the load pin (C̄S̄) of the MAX7219.
-
-
- -

Definition at line 57 of file MAX7219SevenSegmentDisplay.hpp.

- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - -
- - - - - - - -
void begin ()
-
-inline
-
- -

Initialize.

-
See also
MAX7219::init
- -

Definition at line 61 of file MAX7219SevenSegmentDisplay.hpp.

- -
-
- -

◆ display() [1/3]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
uint8_t display (long number,
uint8_t startDigit = 0,
uint8_t endDigit = 7 
)
-
-inline
-
- -

Display a long integer number to the display.

-

The number will be right-aligned.

-
Parameters
- - - - -
numberThe number to display.
startDigitThe digit (zero-based, counting from the right) to start printing the number.
- Digits: 7 6 5 4 3 2 1 0
endDigitThe last digit (zero-based, counting from the right) that can be printed. If the number is larger than endDigit - startDigit, the number is truncated on the left. If the number is smaller than endDigit - startDigit, the leftmost digits including endDigit are cleared.
-
-
-
Returns
The number of digits that have been overwritten (endDigit - startDigit).
- -

Definition at line 83 of file MAX7219SevenSegmentDisplay.hpp.

- -
-
- -

◆ display() [2/3]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint8_t display (const char * text,
uint8_t startPos = 0 
)
-
-inline
-
- -

Display a string of text to the display.

-

Full stops are printed to the decimal point between characters.

-
Parameters
- - - -
textThe null-terminated string to display.
startPosThe position to start printing.
-
-
- -

Definition at line 108 of file MAX7219SevenSegmentDisplay.hpp.

- -
-
- -

◆ display() [3/3]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint8_t display (const uint8_t(&) characters[N],
uint8_t startPos = 0 
)
-
-inline
-
- -

?

-
Todo:
Find out what this function does, and write documentation.
- -

Definition at line 141 of file MAX7219SevenSegmentDisplay.hpp.

- -
-
- -

◆ printHex()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void printHex (uint8_t digit,
uint8_t value 
)
-
-inline
-
- -

Print a single hexadecimal digit.

-
Parameters
- - - -
digitThe digit to print to [0, 7].
valueThe 4-bit value to print [0, 15].
-
-
-
Todo:
Rename to printHexChar and create function that actually prints longer hexadecimal numbers.
- -

Definition at line 164 of file MAX7219SevenSegmentDisplay.hpp.

- -
-
- -

◆ init()

- -
-
- - - - - -
- - - - - - - -
void init ()
-
-inlineinherited
-
- -

Initialize the Arduino pins, SPI, and the MAX7219.

-
Todo:
Rename to begin.
- -

Definition at line 43 of file MAX7219_Base.hpp.

- -
-
- -

◆ clear()

- -
-
- - - - - -
- - - - - - - -
void clear ()
-
-inlineinherited
-
- -

Turn off all LEDs.

- -

Definition at line 58 of file MAX7219_Base.hpp.

- -
-
- -

◆ send()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void send (uint8_t digit,
uint8_t value 
)
-
-inlineinherited
-
- -

Send the value to the given digit.

-
Parameters
- - - -
digitThe digit or row to set [0, 7].
valueThe value to set the row to.
-
-
- -

Definition at line 71 of file MAX7219_Base.hpp.

- -
-
- -

◆ sendRaw()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void sendRaw (uint8_t opcode,
uint8_t value 
)
-
-inlineinherited
-
- -

Send a raw opcode and value to the MAX7219.

-
Parameters
- - - -
opcodeThe opcode to send.
valueThe value to send.
-
-
- -

Definition at line 83 of file MAX7219_Base.hpp.

- -
-
- -

◆ setIntensity()

- -
-
- - - - - -
- - - - - - - - -
void setIntensity (uint8_t intensity)
-
-inlineinherited
-
- -

Set the intensity of the LEDs.

-
Parameters
- - -
intensityThe intensity [0, 15].
-
-
- -

Definition at line 98 of file MAX7219_Base.hpp.

- -
-
-

Member Data Documentation

- -

◆ DECODEMODE

- -
-
- - - - - -
- - - - -
constexpr uint8_t DECODEMODE = 9
-
-staticconstexprinherited
-
- -

Definition at line 33 of file MAX7219_Base.hpp.

- -
-
- -

◆ INTENSITY

- -
-
- - - - - -
- - - - -
constexpr uint8_t INTENSITY = 10
-
-staticconstexprinherited
-
- -

Definition at line 34 of file MAX7219_Base.hpp.

- -
-
- -

◆ SCANLIMIT

- -
-
- - - - - -
- - - - -
constexpr uint8_t SCANLIMIT = 11
-
-staticconstexprinherited
-
- -

Definition at line 35 of file MAX7219_Base.hpp.

- -
-
- -

◆ SHUTDOWN

- -
-
- - - - - -
- - - - -
constexpr uint8_t SHUTDOWN = 12
-
-staticconstexprinherited
-
- -

Definition at line 36 of file MAX7219_Base.hpp.

- -
-
- -

◆ DISPLAYTEST

- -
-
- - - - - -
- - - - -
constexpr uint8_t DISPLAYTEST = 15
-
-staticconstexprinherited
-
- -

Definition at line 37 of file MAX7219_Base.hpp.

- -
-
- -

◆ loadPin

- -
-
- - - - - -
- - - - -
pin_t loadPin
-
-privateinherited
-
- -

Definition at line 103 of file MAX7219_Base.hpp.

- -
-
- -

◆ settings

- -
-
- - - - - -
- - - - -
SPISettings settings = {SPI_MAX_SPEED, MSBFIRST, SPI_MODE0}
-
-privateinherited
-
- -

Definition at line 104 of file MAX7219_Base.hpp.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/Doxygen/d4/d35/Hardware-Types_8hpp.html b/docs/Doxygen/d4/d35/Hardware-Types_8hpp.html deleted file mode 100644 index de2be2f05..000000000 --- a/docs/Doxygen/d4/d35/Hardware-Types_8hpp.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - - -Arduino Helpers: Hardware-Types.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
Hardware-Types.hpp File Reference
-
-
-
#include <AH/Settings/Warnings.hpp>
-#include <AH/Containers/Array.hpp>
-#include <AH/Settings/NamespaceSettings.hpp>
-#include <stdint.h>
-
-Include dependency graph for Hardware-Types.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - - - - - - - - -

-Typedefs

using analog_t = uint16_t
 The type returned from analogRead and similar functions. More...
 
using pin_t = uint16_t
 The type for Arduino pins (and ExtendedIOElement pins). More...
 
template<size_t N>
using PinList = Array< pin_t, N >
 An easy alias for arrays of pins. More...
 
- - - - -

-Variables

constexpr pin_t NO_PIN = 1 << (8 * sizeof(pin_t) - 1)
 A special pin number that indicates an unused or invalid pin. More...
 
-

Typedef Documentation

- -

◆ analog_t

- -
-
- - - - -
using analog_t = uint16_t
-
- -

The type returned from analogRead and similar functions.

- -

Definition at line 15 of file Hardware-Types.hpp.

- -
-
- -

◆ pin_t

- -
-
- - - - -
using pin_t = uint16_t
-
- -

The type for Arduino pins (and ExtendedIOElement pins).

- -

Definition at line 17 of file Hardware-Types.hpp.

- -
-
- -

◆ PinList

- -
-
- - - - -
using PinList = Array<pin_t, N>
-
- -

An easy alias for arrays of pins.

- -

Definition at line 28 of file Hardware-Types.hpp.

- -
-
-

Variable Documentation

- -

◆ NO_PIN

- -
-
- - - - - -
- - - - -
constexpr pin_t NO_PIN = 1 << (8 * sizeof(pin_t) - 1)
-
-constexpr
-
- -

A special pin number that indicates an unused or invalid pin.

- -

Definition at line 24 of file Hardware-Types.hpp.

- -
-
-
- - - - diff --git a/docs/Doxygen/d4/d35/Hardware-Types_8hpp_source.html b/docs/Doxygen/d4/d35/Hardware-Types_8hpp_source.html deleted file mode 100644 index 6e4d1fa23..000000000 --- a/docs/Doxygen/d4/d35/Hardware-Types_8hpp_source.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - -Arduino Helpers: Hardware-Types.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Hardware-Types.hpp
-
-
-Go to the documentation of this file.
1 /* ✔ */
-
2 
-
3 #pragma once
-
4 
- -
6 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
7 
-
8 #include <AH/Containers/Array.hpp>
- -
10 #include <stdint.h> // uint8_t
-
11 
- -
13 
-
15 using analog_t = uint16_t;
-
17 using pin_t = uint16_t;
-
18 
-
19 #ifdef NO_PIN // Fix for FastLED: https://github.com/FastLED/FastLED/issues/893
-
20 #undef NO_PIN
-
21 #endif
-
22 
-
24 constexpr pin_t NO_PIN = 1 << (8 * sizeof(pin_t) - 1);
-
25 
-
27 template <size_t N>
- -
29 
- -
31 
- -
-
#define BEGIN_AH_NAMESPACE
- -
uint16_t analog_t
The type returned from analogRead and similar functions.
-
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
- -
constexpr pin_t NO_PIN
A special pin number that indicates an unused or invalid pin.
- -
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
-
#define END_AH_NAMESPACE
- - - - diff --git a/docs/Doxygen/d4/d3a/classFilteredAnalog-members.html b/docs/Doxygen/d4/d3a/classFilteredAnalog-members.html deleted file mode 100644 index 42a987065..000000000 --- a/docs/Doxygen/d4/d3a/classFilteredAnalog-members.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
FilteredAnalog< Precision, FilterShiftFactor, FilterType, AnalogType, IncRes > Member List
-
- - - - - diff --git a/docs/Doxygen/d4/d45/Hardware_8dox.html b/docs/Doxygen/d4/d45/Hardware_8dox.html deleted file mode 100644 index 222f99e50..000000000 --- a/docs/Doxygen/d4/d45/Hardware_8dox.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Hardware.dox File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Hardware.dox File Reference
-
-
-
- - - - diff --git a/docs/Doxygen/d4/d48/ButtonMatrix_8ipp__incl.map b/docs/Doxygen/d4/d48/ButtonMatrix_8ipp__incl.map deleted file mode 100644 index ef55869b2..000000000 --- a/docs/Doxygen/d4/d48/ButtonMatrix_8ipp__incl.map +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d4/d48/ButtonMatrix_8ipp__incl.md5 b/docs/Doxygen/d4/d48/ButtonMatrix_8ipp__incl.md5 deleted file mode 100644 index f044b6d49..000000000 --- a/docs/Doxygen/d4/d48/ButtonMatrix_8ipp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -31fe0a0fd4261fc373527058c5949a6c \ No newline at end of file diff --git a/docs/Doxygen/d4/d48/ButtonMatrix_8ipp__incl.svg b/docs/Doxygen/d4/d48/ButtonMatrix_8ipp__incl.svg deleted file mode 100644 index 8700fa99f..000000000 --- a/docs/Doxygen/d4/d48/ButtonMatrix_8ipp__incl.svg +++ /dev/null @@ -1,512 +0,0 @@ - - - - - - -ButtonMatrix.ipp - - -Node1 - - -ButtonMatrix.ipp - - - - -Node2 - - -ButtonMatrix.hpp - - - - -Node1->Node2 - - - - -Node22 - - -AH/Hardware/ExtendedInput -Output/ExtendedInputOutput.hpp - - - - -Node1->Node22 - - - - -Node29 - - -string.h - - - - -Node1->Node29 - - - - -Node2->Node1 - - - - -Node3 - - -AH/Settings/Warnings.hpp - - - - -Node2->Node3 - - - - -Node4 - - -AH/Hardware/Hardware --Types.hpp - - - - -Node2->Node4 - - - - -Node4->Node3 - - - - -Node5 - - -AH/Containers/Array.hpp - - - - -Node4->Node5 - - - - -Node11 - - -NamespaceSettings.hpp - - - - -Node4->Node11 - - - - -Node17 - - -stdint.h - - - - -Node4->Node17 - - - - -Node5->Node3 - - - - -Node6 - - -AH/Error/Error.hpp - - - - -Node5->Node6 - - - - -Node16 - - -stddef.h - - - - -Node5->Node16 - - - - -Node20 - - -AH/STL/iterator - - - - -Node5->Node20 - - - - -Node21 - - -AH/STL/type_traits - - - - -Node5->Node21 - - - - -Node6->Node3 - - - - -Node7 - - -AH/Debug/Debug.hpp - - - - -Node6->Node7 - - - - -Node7->Node3 - - - - -Node8 - - -AH/PrintStream/PrintStream.hpp - - - - -Node7->Node8 - - - - -Node10 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node7->Node10 - - - - -Node19 - - -DebugVal.hpp - - - - -Node7->Node19 - - - - -Node8->Node3 - - - - -Node9 - - -Arduino.h - - - - -Node8->Node9 - - - - -Node10->Node3 - - - - -Node10->Node7 - - - - -Node10->Node11 - - - - -Node12 - - -Settings.hpp - - - - -Node10->Node12 - - - - -Node18 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node10->Node18 - - - - -Node13 - - -AH/Types/Frequency.hpp - - - - -Node12->Node13 - - - - -Node14 - - -AH/Hardware/ADCConfig.hpp - - - - -Node12->Node14 - - - - -Node15 - - -limits.h - - - - -Node12->Node15 - - - - -Node12->Node16 - - - - -Node12->Node17 - - - - -Node13->Node3 - - - - -Node13->Node11 - - - - -Node14->Node3 - - - - -Node14->Node9 - - - - -Node22->Node3 - - - - -Node22->Node9 - - - - -Node23 - - -ExtendedIOElement.hpp - - - - -Node22->Node23 - - - - -Node23->Node3 - - - - -Node23->Node4 - - - - -Node24 - - -AH/Containers/LinkedList.hpp - - - - -Node23->Node24 - - - - -Node24->Node3 - - - - -Node24->Node7 - - - - -Node25 - - -AH/Math/MinMaxFix.hpp - - - - -Node24->Node25 - - - - -Node27 - - -stdlib.h - - - - -Node24->Node27 - - - - -Node28 - - -iterator - - - - -Node24->Node28 - - - - -Node25->Node3 - - - - -Node25->Node11 - - - - -Node26 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node25->Node26 - - - - -Node26->Node3 - - - - -Node26->Node9 - - - - - diff --git a/docs/Doxygen/d4/d49/Hardware-Types_8hpp__dep__incl.map b/docs/Doxygen/d4/d49/Hardware-Types_8hpp__dep__incl.map deleted file mode 100644 index 08ef90b60..000000000 --- a/docs/Doxygen/d4/d49/Hardware-Types_8hpp__dep__incl.map +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d4/d49/Hardware-Types_8hpp__dep__incl.md5 b/docs/Doxygen/d4/d49/Hardware-Types_8hpp__dep__incl.md5 deleted file mode 100644 index af8247e1a..000000000 --- a/docs/Doxygen/d4/d49/Hardware-Types_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -06a839f67ebfec1ed076b4d34bda16bc \ No newline at end of file diff --git a/docs/Doxygen/d4/d49/Hardware-Types_8hpp__dep__incl.svg b/docs/Doxygen/d4/d49/Hardware-Types_8hpp__dep__incl.svg deleted file mode 100644 index 9dc629790..000000000 --- a/docs/Doxygen/d4/d49/Hardware-Types_8hpp__dep__incl.svg +++ /dev/null @@ -1,419 +0,0 @@ - - - - - - -Hardware-Types.hpp - - -Node1 - - -Hardware-Types.hpp - - - - -Node2 - - -ButtonMatrix.hpp - - - - -Node1->Node2 - - - - -Node4 - - -ExtendedIOElement.hpp - - - - -Node1->Node4 - - - - -Node20 - - -FilteredAnalog.hpp - - - - -Node1->Node20 - - - - -Node3 - - -ButtonMatrix.ipp - - - - -Node2->Node3 - - - - -Node3->Node2 - - - - -Node5 - - -ExtendedInputOutput.hpp - - - - -Node4->Node5 - - - - -Node13 - - -ExtendedInputOutput.cpp - - - - -Node4->Node13 - - - - -Node26 - - -StaticSizeExtendedIOElement.hpp - - - - -Node4->Node26 - - - - -Node27 - - -ExtendedIOElement.cpp - - - - -Node4->Node27 - - - - -Node5->Node3 - - - - -Node6 - - -Button.hpp - - - - -Node5->Node6 - - - - -Node12 - - -AnalogMultiplex.hpp - - - - -Node5->Node12 - - - - -Node5->Node13 - - - - -Node14 - - -ShiftRegisterOutBase.ipp - - - - -Node5->Node14 - - - - -Node17 - - -ShiftRegisterOut.ipp - - - - -Node5->Node17 - - - - -Node19 - - -SPIShiftRegisterOut.ipp - - - - -Node5->Node19 - - - - -Node5->Node20 - - - - -Node21 - - -LEDs.hpp - - - - -Node5->Node21 - - - - -Node23 - - -MAX7219_Base.hpp - - - - -Node5->Node23 - - - - -Node7 - - -Button.cpp - - - - -Node6->Node7 - - - - -Node8 - - -IncrementButton.hpp - - - - -Node6->Node8 - - - - -Node10 - - -IncrementDecrementButtons.hpp - - - - -Node6->Node10 - - - - -Node9 - - -IncrementButton.cpp - - - - -Node8->Node9 - - - - -Node11 - - -IncrementDecrementButtons.cpp - - - - -Node10->Node11 - - - - -Node15 - - -ShiftRegisterOutBase.hpp - - - - -Node14->Node15 - - - - -Node15->Node14 - - - - -Node16 - - -ShiftRegisterOut.hpp - - - - -Node15->Node16 - - - - -Node18 - - -SPIShiftRegisterOut.hpp - - - - -Node15->Node18 - - - - -Node16->Node17 - - - - -Node17->Node16 - - - - -Node18->Node19 - - - - -Node19->Node18 - - - - -Node22 - - -DotBarDisplayLEDs.hpp - - - - -Node21->Node22 - - - - -Node24 - - -MAX7219.hpp - - - - -Node23->Node24 - - - - -Node25 - - -MAX7219SevenSegmentDisplay.hpp - - - - -Node23->Node25 - - - - -Node26->Node12 - - - - -Node26->Node15 - - - - -Node26->Node24 - - - - - diff --git a/docs/Doxygen/d4/d57/ExtendedIOElement_8hpp.html b/docs/Doxygen/d4/d57/ExtendedIOElement_8hpp.html deleted file mode 100644 index 71478ad93..000000000 --- a/docs/Doxygen/d4/d57/ExtendedIOElement_8hpp.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Arduino Helpers: ExtendedIOElement.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ExtendedIOElement.hpp File Reference
-
-
-
-Include dependency graph for ExtendedIOElement.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - -

-Classes

class  ExtendedIOElement
 An abstract base class for Extended Input/Output elements. More...
 
-
- - - - diff --git a/docs/Doxygen/d4/d57/ExtendedIOElement_8hpp_source.html b/docs/Doxygen/d4/d57/ExtendedIOElement_8hpp_source.html deleted file mode 100644 index 4babdc7f2..000000000 --- a/docs/Doxygen/d4/d57/ExtendedIOElement_8hpp_source.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - - -Arduino Helpers: ExtendedIOElement.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ExtendedIOElement.hpp
-
-
-Go to the documentation of this file.
1 /* ✔ */
-
2 
-
3 #pragma once
-
4 
- -
6 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
7 
-
8 #include <AH/Hardware/Hardware-Types.hpp>
- -
10 
- -
12 
-
62 class ExtendedIOElement : public DoublyLinkable<ExtendedIOElement> {
-
63  protected:
- -
71 
-
72  public:
-
73  virtual ~ExtendedIOElement();
-
74 
-
91  virtual void pinMode(pin_t pin, uint8_t mode) = 0;
-
92 
-
101  virtual void digitalWrite(pin_t pin, uint8_t state) = 0;
-
102 
-
110  virtual int digitalRead(pin_t pin) = 0;
-
111 
-
120  virtual void analogWrite(pin_t pin, analog_t val) = 0;
-
121 
-
129  virtual analog_t analogRead(pin_t pin) = 0;
-
130 
-
134  virtual void begin() = 0;
-
135 
-
139  static void beginAll();
-
140 
-
146  virtual void update() = 0;
-
147 
-
155  pin_t pin(pin_t pin) const;
-
156 
-
165  pin_t operator[](pin_t pin) const;
-
166 
-
172  pin_t getLength() const;
-
173 
-
178  pin_t getEnd() const;
-
179 
-
184  pin_t getStart() const;
-
185 
- -
190 
-
191  private:
-
192  const pin_t length;
-
193  const pin_t start;
-
194  const pin_t end;
-
195  static pin_t offset;
-
196 
- -
198 };
-
199 
- -
201 
- -
-
#define BEGIN_AH_NAMESPACE
-
static void beginAll()
Initialize all extended IO elements.
- -
uint16_t analog_t
The type returned from analogRead and similar functions.
-
pin_t getEnd() const
Get the largest global extended IO pin number that belongs to this extended IO element.
-
pin_t pin(pin_t pin) const
Get the extended IO pin number of a given physical pin of this extended IO element.
-
virtual void pinMode(pin_t pin, uint8_t mode)=0
Set the mode of a given pin.
-
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
ExtendedIOElement(pin_t length)
Create an ExtendedIOElement with the given number of pins.
- -
pin_t getStart() const
Get the smallest global extended IO pin number that belongs to this extended IO element.
-
virtual int digitalRead(pin_t pin)=0
Read the state of the given pin.
- - -
An abstract base class for Extended Input/Output elements.
-
static DoublyLinkedList< ExtendedIOElement > elements
-
static DoublyLinkedList< ExtendedIOElement > & getAll()
Get the list of all Extended IO elements.
- -
virtual void digitalWrite(pin_t pin, uint8_t state)=0
Set the output of the given pin to the given state.
- - -
A class that can be inherited from to allow inserting into a DoublyLinkedList.
Definition: LinkedList.hpp:302
-
virtual void update()=0
Update the extended IO element: write the internal state to the physical outputs, or read the physica...
- -
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
-
virtual analog_t analogRead(pin_t pin)=0
Read the analog value of the given pin.
-
#define END_AH_NAMESPACE
-
virtual void begin()=0
Initialize the extended IO element.
-
pin_t operator[](pin_t pin) const
Get the extended IO pin number of a given physical pin of this extended IO element.
-
virtual void analogWrite(pin_t pin, analog_t val)=0
Write an analog (or PWM) value to the given pin.
-
pin_t getLength() const
Get the number of pins this IO element has.
- - - - diff --git a/docs/Doxygen/d4/d73/BitArray_8hpp__incl.map b/docs/Doxygen/d4/d73/BitArray_8hpp__incl.map deleted file mode 100644 index 498998b00..000000000 --- a/docs/Doxygen/d4/d73/BitArray_8hpp__incl.map +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d4/d73/BitArray_8hpp__incl.md5 b/docs/Doxygen/d4/d73/BitArray_8hpp__incl.md5 deleted file mode 100644 index c8d176131..000000000 --- a/docs/Doxygen/d4/d73/BitArray_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -6d53a40c9171b13fa9c75ee605fa5c72 \ No newline at end of file diff --git a/docs/Doxygen/d4/d73/BitArray_8hpp__incl.svg b/docs/Doxygen/d4/d73/BitArray_8hpp__incl.svg deleted file mode 100644 index 246a3d0db..000000000 --- a/docs/Doxygen/d4/d73/BitArray_8hpp__incl.svg +++ /dev/null @@ -1,271 +0,0 @@ - - - - - - -BitArray.hpp - - -Node1 - - -BitArray.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -AH/Error/Error.hpp - - - - -Node1->Node3 - - - - -Node8 - - -NamespaceSettings.hpp - - - - -Node1->Node8 - - - - -Node14 - - -stdint.h - - - - -Node1->Node14 - - - - -Node3->Node2 - - - - -Node4 - - -AH/Debug/Debug.hpp - - - - -Node3->Node4 - - - - -Node4->Node2 - - - - -Node5 - - -AH/PrintStream/PrintStream.hpp - - - - -Node4->Node5 - - - - -Node7 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node4->Node7 - - - - -Node16 - - -DebugVal.hpp - - - - -Node4->Node16 - - - - -Node5->Node2 - - - - -Node6 - - -Arduino.h - - - - -Node5->Node6 - - - - -Node7->Node2 - - - - -Node7->Node4 - - - - -Node7->Node8 - - - - -Node9 - - -Settings.hpp - - - - -Node7->Node9 - - - - -Node15 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node7->Node15 - - - - -Node10 - - -AH/Types/Frequency.hpp - - - - -Node9->Node10 - - - - -Node11 - - -AH/Hardware/ADCConfig.hpp - - - - -Node9->Node11 - - - - -Node12 - - -limits.h - - - - -Node9->Node12 - - - - -Node13 - - -stddef.h - - - - -Node9->Node13 - - - - -Node9->Node14 - - - - -Node10->Node2 - - - - -Node10->Node8 - - - - -Node11->Node2 - - - - -Node11->Node6 - - - - - diff --git a/docs/Doxygen/d4/d7a/Error_8dox.html b/docs/Doxygen/d4/d7a/Error_8dox.html deleted file mode 100644 index 4519e1490..000000000 --- a/docs/Doxygen/d4/d7a/Error_8dox.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Error.dox File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Error.dox File Reference
-
-
-
- - - - diff --git a/docs/Doxygen/d4/d81/Complex_8ino-example.html b/docs/Doxygen/d4/d81/Complex_8ino-example.html deleted file mode 100644 index f6f99a3a2..000000000 --- a/docs/Doxygen/d4/d81/Complex_8ino-example.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -Arduino Helpers: Complex.ino - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
Complex.ino
-
-
-

-Complex

-

Example of using the standard library complex numbers.

-
Boards:
AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32
-

Output

√(2i) = (1.00,1.00)
-

Written by PieterP, 2019-11-14 https://github.com/tttapa/Arduino-Helpers

-
- -
-
#include <AH/STL/complex>
-
-
void setup() {
-
Serial.begin(115200);
-
while (!Serial)
-
;
-
-
// Create a complex number
-
std::complex<double> c = 2i;
-
-
// Print the square root
-
Serial << "√(2i) = " << std::sqrt(c) << endl;
-
}
-
-
void loop() {}
-
-
Print & endl(Print &printer)
Definition: PrintStream.cpp:27
-
Dummy header file for Arduino builder. You have to add this file first, so the other headers are in t...
- - - - diff --git a/docs/Doxygen/d4/d88/classDoublyLinkable__coll__graph.map b/docs/Doxygen/d4/d88/classDoublyLinkable__coll__graph.map deleted file mode 100644 index 59e5a6701..000000000 --- a/docs/Doxygen/d4/d88/classDoublyLinkable__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/d4/d88/classDoublyLinkable__coll__graph.md5 b/docs/Doxygen/d4/d88/classDoublyLinkable__coll__graph.md5 deleted file mode 100644 index b63ab345d..000000000 --- a/docs/Doxygen/d4/d88/classDoublyLinkable__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -fa9b668cc81ebe1555553b98ea2f8178 \ No newline at end of file diff --git a/docs/Doxygen/d4/d88/classDoublyLinkable__coll__graph.svg b/docs/Doxygen/d4/d88/classDoublyLinkable__coll__graph.svg deleted file mode 100644 index b1e9117f3..000000000 --- a/docs/Doxygen/d4/d88/classDoublyLinkable__coll__graph.svg +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - -DoublyLinkable< Node > - - -Node1 - - -DoublyLinkable< Node > - - - -# ~DoublyLinkable() - - - - -Node2 - - -Node - - - - - - - - -Node2->Node1 - - - #next -#previous - - - diff --git a/docs/Doxygen/d4/d93/Updatable_8hpp.html b/docs/Doxygen/d4/d93/Updatable_8hpp.html deleted file mode 100644 index 51aa8a5d4..000000000 --- a/docs/Doxygen/d4/d93/Updatable_8hpp.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -Arduino Helpers: Updatable.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
Updatable.hpp File Reference
-
-
-
#include <AH/Settings/Warnings.hpp>
-#include <AH/Containers/LinkedList.hpp>
-#include <AH/Error/Error.hpp>
-#include <AH/Settings/SettingsWrapper.hpp>
-#include <stddef.h>
-
-Include dependency graph for Updatable.hpp:
-
-
-
-
-

Go to the source code of this file.

- - - - - - - -

-Classes

struct  NormalUpdatable
 
class  Updatable< T >
 A super class for object that have to be updated regularly. More...
 
-
- - - - diff --git a/docs/Doxygen/d4/d93/Updatable_8hpp_source.html b/docs/Doxygen/d4/d93/Updatable_8hpp_source.html deleted file mode 100644 index 6b4449b38..000000000 --- a/docs/Doxygen/d4/d93/Updatable_8hpp_source.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - - -Arduino Helpers: Updatable.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Updatable.hpp
-
-
-Go to the documentation of this file.
1 /* ✔ */
-
2 
-
3 #pragma once
-
4 
- -
6 
-
7 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
8 
-
9 #include <AH/Containers/LinkedList.hpp>
-
10 #include <AH/Error/Error.hpp>
- -
12 #include <stddef.h>
-
13 
- -
15 
-
16 struct NormalUpdatable {};
-
17 
-
24 template <class T = NormalUpdatable>
-
25 class Updatable : public DoublyLinkable<Updatable<T>> {
-
26  protected:
- -
29 
-
30  public:
-
32  virtual ~Updatable() {
-
33  if (isEnabled())
-
34  updatables.remove(this);
-
35  }
-
36 
-
38  virtual void update() = 0;
-
39 
-
41  virtual void begin() = 0;
-
42 
-
45  void enable() {
-
46  if (isEnabled()) {
-
47  ERROR(F("Error: This element is already enabled."), 0x1212);
-
48  return;
-
49  }
-
50  updatables.append(this);
-
51  }
-
52 
-
55  void disable() {
-
56  if (!isEnabled()) {
-
57  ERROR(F("Error: This element is already disabled."), 0x1213);
-
58  return;
-
59  }
-
60  updatables.remove(this);
-
61  }
-
62 
-
69  bool isEnabled() { return updatables.couldContain(this); }
-
70 
-
73  static void beginAll() {
-
74  for (Updatable &el : updatables)
-
75  el.begin();
-
76  }
-
77 
-
80  static void updateAll() {
-
81  for (Updatable &el : updatables)
-
82  el.update();
-
83  }
-
84 
-
85  static void enable(Updatable *element) { element->enable(); }
-
86 
-
87  static void enable(Updatable &element) { element.enable(); }
-
88 
-
89  template <class U, size_t N>
-
90  static void enable(U (&array)[N]) {
-
91  for (U &el : array)
-
92  enable(el);
-
93  }
-
94 
-
95  static void disable(Updatable<T> *element) { element->disable(); }
-
96 
-
97  static void disable(Updatable<T> &element) { element.disable(); }
-
98 
-
99  template <class U, size_t N>
-
100  static void disable(U (&array)[N]) {
-
101  for (U &el : array)
-
102  disable(el);
-
103  }
-
104 
-
105  private:
- -
107 };
-
108 
-
109 template <class T>
- -
111 
- -
113 
- -
-
#define BEGIN_AH_NAMESPACE
-
A super class for object that have to be updated regularly.
Definition: Updatable.hpp:25
-
void disable()
Disable this updatable: remove it from the linked list of instances, so it no longer gets updated aut...
Definition: Updatable.hpp:55
-
virtual void begin()=0
Initialize this updatable.
-
bool isEnabled()
Check if this updatable is enabled.
Definition: Updatable.hpp:69
- - -
static void beginAll()
Begin all enabled instances of this class.
Definition: Updatable.hpp:73
- -
static void disable(Updatable< T > *element)
Definition: Updatable.hpp:95
-
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
Updatable()
Create an Updatabe and add it to the linked list of instances.
Definition: Updatable.hpp:28
-
static void disable(U(&array)[N])
Definition: Updatable.hpp:100
-
void append(Node *node)
Append a node to a linked list.
Definition: LinkedList.hpp:117
-
static void updateAll()
Update all enabled instances of this class.
Definition: Updatable.hpp:80
-
virtual void update()=0
Update this updatable.
-
#define ERROR(msg, errc)
Print the error message and error code, and stop the execution if FATAL_ERRORS are enabled.
Definition: Error.hpp:42
-
static void enable(Updatable &element)
Definition: Updatable.hpp:87
-
virtual ~Updatable()
Destructor: remove the updatable from the linked list of instances.
Definition: Updatable.hpp:32
-
void remove(Node *node)
Remove a node from the linked list.
Definition: LinkedList.hpp:200
-
static DoublyLinkedList< Updatable< T > > updatables
Definition: Updatable.hpp:106
-
A class for doubly linked lists.
Definition: LinkedList.hpp:27
-
static void disable(Updatable< T > &element)
Definition: Updatable.hpp:97
-
A class that can be inherited from to allow inserting into a DoublyLinkedList.
Definition: LinkedList.hpp:302
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
#define END_AH_NAMESPACE
-
static void enable(Updatable *element)
Definition: Updatable.hpp:85
-
static void enable(U(&array)[N])
Definition: Updatable.hpp:90
-
void enable()
Enable this updatable: insert it into the linked list of instances, so it gets updated automatically.
Definition: Updatable.hpp:45
- -
bool couldContain(Node *node)
Check if the linked list could contain the given node.
Definition: LinkedList.hpp:268
- - - - diff --git a/docs/Doxygen/d4/d9d/classDoublyLinkedList_1_1reverse__node__iterator__coll__graph.map b/docs/Doxygen/d4/d9d/classDoublyLinkedList_1_1reverse__node__iterator__coll__graph.map deleted file mode 100644 index 82db80bd0..000000000 --- a/docs/Doxygen/d4/d9d/classDoublyLinkedList_1_1reverse__node__iterator__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/d4/d9d/classDoublyLinkedList_1_1reverse__node__iterator__coll__graph.md5 b/docs/Doxygen/d4/d9d/classDoublyLinkedList_1_1reverse__node__iterator__coll__graph.md5 deleted file mode 100644 index 81a53b66a..000000000 --- a/docs/Doxygen/d4/d9d/classDoublyLinkedList_1_1reverse__node__iterator__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -26c4cc7b021360a195ec96de64ea6a2b \ No newline at end of file diff --git a/docs/Doxygen/d4/d9d/classDoublyLinkedList_1_1reverse__node__iterator__coll__graph.svg b/docs/Doxygen/d4/d9d/classDoublyLinkedList_1_1reverse__node__iterator__coll__graph.svg deleted file mode 100644 index 61eef24b7..000000000 --- a/docs/Doxygen/d4/d9d/classDoublyLinkedList_1_1reverse__node__iterator__coll__graph.svg +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - -DoublyLinkedList< Node >::reverse_node_iterator< INode > - - -Node1 - - -DoublyLinkedList< Node - >::reverse_node_iterator -< INode > - - - -+ reverse_node_iterator() -+ operator++() -+ operator--() - - - - -Node2 - - -node_iterator_base - -# node - -+ node_iterator_base() -+ operator!=() -+ operator*() - - - - -Node2->Node1 - - - - - diff --git a/docs/Doxygen/d4/da5/group__AH__Debug.html b/docs/Doxygen/d4/da5/group__AH__Debug.html deleted file mode 100644 index be842ce75..000000000 --- a/docs/Doxygen/d4/da5/group__AH__Debug.html +++ /dev/null @@ -1,287 +0,0 @@ - - - - - - - -Arduino Helpers: Debug - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
- -
-
Debug
-
-
- -

Macros for printing debug information that can be easily enabled or disabled. -More...

- - - - - - - - - - - - - - - - - - - - -

-Macros

#define NAMEDVALUE(x)   F(DEBUG_STR(x) " = ") << x
 Macro for printing an expression as a string, followed by its value. More...
 
#define DEBUG(x)
 Print an expression to the debug output if debugging is enabled. More...
 
#define DEBUGREF(x)
 Print an expression and its location (file and line number) to the debug output if debugging is enabled. More...
 
#define DEBUGFN(x)
 Print an expression and its function (function name and line number) to the debug output if debugging is enabled. More...
 
#define DEBUGTIME(x)
 Print an expression and the time since startup to the debug output if debugging is enabled. More...
 
#define DEBUGVAL(...)   DEBUGVALN(COUNT(__VA_ARGS__))(__VA_ARGS__)
 Print multiple expressions and their values to the debug output if debugging is enabled. More...
 
-

Detailed Description

-

Macros for printing debug information that can be easily enabled or disabled.

-
See also
Debug for instructions on how to add an option in the Arduino IDE to easily enable and disable debugging.
-

Macro Definition Documentation

- -

◆ NAMEDVALUE

- -
-
- - - - - - - - -
#define NAMEDVALUE( x)   F(DEBUG_STR(x) " = ") << x
-
- -

Macro for printing an expression as a string, followed by its value.

-

The expression string is saved in PROGMEM using the F(...) macro.

-
Examples
Debug.ino.
-
- -

Definition at line 69 of file Debug.hpp.

- -
-
- -

◆ DEBUG

- -
-
- - - - - - - - -
#define DEBUG( x)
-
-Value:
do { \
-
DEBUG_OUT << x << DEBUG_ENDL; \
-
} while (0)
-
-

Print an expression to the debug output if debugging is enabled.

-
Examples
Debug.ino.
-
- -

Definition at line 75 of file Debug.hpp.

- -
-
- -

◆ DEBUGREF

- -
-
- - - - - - - - -
#define DEBUGREF( x)
-
-Value:
do { \
-
DEBUG_OUT << F(DEBUG_LOCATION) << x << DEBUG_ENDL; \
-
} while (0)
-
-

Print an expression and its location (file and line number) to the debug output if debugging is enabled.

-

The location is saved in PROGMEM using the F(...) macro.

-
Examples
Debug.ino.
-
- -

Definition at line 84 of file Debug.hpp.

- -
-
- -

◆ DEBUGFN

- -
-
- - - - - - - - -
#define DEBUGFN( x)
-
-Value:
do { \
-
DEBUG_OUT << DEBUG_FUNC_LOCATION << x << DEBUG_ENDL; \
-
} while (0)
-
-

Print an expression and its function (function name and line number) to the debug output if debugging is enabled.

-

The function name is saved in RAM.

-
Examples
Debug.ino.
-
- -

Definition at line 93 of file Debug.hpp.

- -
-
- -

◆ DEBUGTIME

- -
-
- - - - - - - - -
#define DEBUGTIME( x)
-
-Value:
do { \
-
unsigned long t = millis(); \
-
unsigned long h = t / (60UL * 60 * 1000); \
-
unsigned long m = (t / (60UL * 1000)) % 60; \
-
unsigned long s = (t / (1000UL)) % 60; \
-
unsigned long ms = t % 1000; \
-
const char *ms_zeros = ms > 99 ? "" : (ms > 9 ? "0" : "00"); \
-
DEBUG_OUT << '[' << h << ':' << m << ':' << s << '.' << ms_zeros << ms \
-
<< "]:\t" << x << DEBUG_ENDL; \
-
} while (0)
-
-

Print an expression and the time since startup to the debug output if debugging is enabled.

-

Format: [hours:minutes:seconds.milliseconds]

-
Examples
Debug.ino.
-
- -

Definition at line 104 of file Debug.hpp.

- -
-
- -

◆ DEBUGVAL

- -
-
- - - - - - - - -
#define DEBUGVAL( ...)   DEBUGVALN(COUNT(__VA_ARGS__))(__VA_ARGS__)
-
- -

Print multiple expressions and their values to the debug output if debugging is enabled.

-

For example, DEBUGVAL(1 + 1, digitalRead(2)) could print 1 + 1 = 2, digitalRead(2) = 0. A maximum of 10 expressions is supported. The expression strings are saved in PROGMEM using the F(...) macro.

-
Examples
Debug.ino.
-
- -

Definition at line 151 of file Debug.hpp.

- -
-
-
-
#define DEBUG_LOCATION
Definition: Debug.hpp:62
-
#define DEBUG_ENDL
Definition: Debug.hpp:48
-
#define DEBUG_FUNC_LOCATION
Definition: Debug.hpp:60
- - - - diff --git a/docs/Doxygen/d4/db3/Button_8hpp.html b/docs/Doxygen/d4/db3/Button_8hpp.html deleted file mode 100644 index bdf395321..000000000 --- a/docs/Doxygen/d4/db3/Button_8hpp.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Arduino Helpers: Button.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
Button.hpp File Reference
-
-
-
-Include dependency graph for Button.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - -

-Classes

class  Button
 A class for reading and debouncing buttons and switches. More...
 
-
- - - - diff --git a/docs/Doxygen/d4/db3/Button_8hpp_source.html b/docs/Doxygen/d4/db3/Button_8hpp_source.html deleted file mode 100644 index 08b9aa49c..000000000 --- a/docs/Doxygen/d4/db3/Button_8hpp_source.html +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - - -Arduino Helpers: Button.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Button.hpp
-
-
-Go to the documentation of this file.
1 /* ✔ */
-
2 
-
3 #pragma once
-
4 
- -
6 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
7 
-
8 #include <AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.hpp>
- -
10 
- -
12 
-
18 class Button {
-
19  public:
-
27  Button() : pin(NO_PIN) {}
-
28 
-
36  Button(pin_t pin);
-
37 
-
39  void begin();
-
40 
- -
51 
-
53  enum State {
-
54  Pressed = 0b00,
-
55  Released = 0b11,
-
56  Falling = 0b10,
-
57  Rising = 0b01
-
58  };
-
59 
-
87  State update();
-
88 
-
96  State getState() const;
-
97 
-
99  static const __FlashStringHelper *getName(State state);
-
100 
-
102  unsigned long previousBounceTime() const;
-
103 
-
106  unsigned long stableTime(unsigned long now) const;
-
107 
-
109  unsigned long stableTime() const;
-
110 
-
119  static void
- -
121 
-
127  static unsigned long getDebounceTime();
-
128 
-
129  private:
- -
131 
-
132  bool prevInput = HIGH;
- -
134  unsigned long prevBounceTime = 0;
-
135 
-
136 #ifdef AH_INDIVIDUAL_BUTTON_INVERT // Edit this in Settings/Settings.hpp
-
137  bool invertState = false;
-
138 #else
-
139  static bool invertState;
-
140 #endif
-
141 
-
144  static unsigned long debounceTime;
-
145 };
-
146 
- -
148 
- -
-
#define BEGIN_AH_NAMESPACE
-
static const __FlashStringHelper * getName(State state)
Return the name of the state as a string.
Definition: Button.cpp:38
-
State getState() const
Get the state of the button, without updating it.
Definition: Button.cpp:36
-
Input went from high to low (1,0)
Definition: Button.hpp:56
-
pin_t pin
Definition: Button.hpp:130
- -
static unsigned long debounceTime
Edit this in Settings.hpp.
Definition: Button.hpp:144
-
A class for reading and debouncing buttons and switches.
Definition: Button.hpp:18
-
Input went from low to low (0,0)
Definition: Button.hpp:54
-
constexpr unsigned long BUTTON_DEBOUNCE_TIME
The debounce time for momentary push buttons in milliseconds.
Definition: Settings.hpp:74
-
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
const uint8_t HIGH
-
unsigned long stableTime() const
Return the time (in milliseconds) that the button has been stable for.
Definition: Button.cpp:54
-
unsigned long previousBounceTime() const
Return the time point (in milliseconds) when the button last bounced.
Definition: Button.cpp:48
-
constexpr pin_t NO_PIN
A special pin number that indicates an unused or invalid pin.
-
State debouncedState
Definition: Button.hpp:133
-
static void setDebounceTime(unsigned long debounceTime=BUTTON_DEBOUNCE_TIME)
Set the debounce time for all Buttons.
Definition: Button.cpp:56
-
bool prevInput
Definition: Button.hpp:132
-
State update()
Read the button and return its new state.
Definition: Button.cpp:19
-
static bool invertState
Definition: Button.hpp:139
-
void begin()
Initialize (enable the internal pull-up resistor).
Definition: Button.cpp:11
-
#define AH_INDIVIDUAL_BUTTON_INVERT_STATIC
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
-
AH_INDIVIDUAL_BUTTON_INVERT_STATIC void invert()
Invert the state of all buttons, or of this specific button (button pressed is HIGH instead of LOW).
Definition: Button.cpp:13
-
Button()
Construct a new Button object.
Definition: Button.hpp:27
-
#define END_AH_NAMESPACE
- -
static unsigned long getDebounceTime()
Get the debounce time.
Definition: Button.cpp:60
-
unsigned long prevBounceTime
Definition: Button.hpp:134
-
State
An enumeration of the different states a button can be in.
Definition: Button.hpp:53
-
Input went from low to high (0,1)
Definition: Button.hpp:57
-
Input went from high to high (1,1)
Definition: Button.hpp:55
- - - - diff --git a/docs/Doxygen/d4/dc2/classButtonMatrix-members.html b/docs/Doxygen/d4/dc2/classButtonMatrix-members.html deleted file mode 100644 index ad3ba7540..000000000 --- a/docs/Doxygen/d4/dc2/classButtonMatrix-members.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
ButtonMatrix< nb_rows, nb_cols > Member List
-
-
- -

This is the complete list of members for ButtonMatrix< nb_rows, nb_cols >, including all inherited members.

- - - - - - - - - - - - - - - -
begin()ButtonMatrix< nb_rows, nb_cols >
bitsToBitmask(uint8_t bits)ButtonMatrix< nb_rows, nb_cols >inlineprivatestatic
bitsToIndex(uint8_t bits)ButtonMatrix< nb_rows, nb_cols >inlineprivatestatic
ButtonMatrix(const PinList< nb_rows > &rowPins, const PinList< nb_cols > &colPins)ButtonMatrix< nb_rows, nb_cols >
colPinsButtonMatrix< nb_rows, nb_cols >private
getPrevState(uint8_t col, uint8_t row)ButtonMatrix< nb_rows, nb_cols >
onButtonChanged(uint8_t row, uint8_t col, bool state)=0ButtonMatrix< nb_rows, nb_cols >privatepure virtual
positionToBits(uint8_t col, uint8_t row)ButtonMatrix< nb_rows, nb_cols >inlineprivatestatic
prevRefreshButtonMatrix< nb_rows, nb_cols >private
prevStatesButtonMatrix< nb_rows, nb_cols >private
rowPinsButtonMatrix< nb_rows, nb_cols >private
setPrevState(uint8_t col, uint8_t row, bool state)ButtonMatrix< nb_rows, nb_cols >private
update()ButtonMatrix< nb_rows, nb_cols >
~ButtonMatrix()=defaultButtonMatrix< nb_rows, nb_cols >virtual
- - - - diff --git a/docs/Doxygen/d4/dc3/ShiftRegisterOutRGB_8hpp__incl.map b/docs/Doxygen/d4/dc3/ShiftRegisterOutRGB_8hpp__incl.map deleted file mode 100644 index dab804251..000000000 --- a/docs/Doxygen/d4/dc3/ShiftRegisterOutRGB_8hpp__incl.map +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d4/dc3/ShiftRegisterOutRGB_8hpp__incl.md5 b/docs/Doxygen/d4/dc3/ShiftRegisterOutRGB_8hpp__incl.md5 deleted file mode 100644 index 6b9a2f4c9..000000000 --- a/docs/Doxygen/d4/dc3/ShiftRegisterOutRGB_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -a6f02adc982994287417704e49a1e3c0 \ No newline at end of file diff --git a/docs/Doxygen/d4/dc3/ShiftRegisterOutRGB_8hpp__incl.svg b/docs/Doxygen/d4/dc3/ShiftRegisterOutRGB_8hpp__incl.svg deleted file mode 100644 index 8bb03a6d2..000000000 --- a/docs/Doxygen/d4/dc3/ShiftRegisterOutRGB_8hpp__incl.svg +++ /dev/null @@ -1,248 +0,0 @@ - - - - - - -ShiftRegisterOutRGB.hpp - - -Node1 - - -ShiftRegisterOutRGB.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -stdint.h - - - - -Node1->Node3 - - - - -Node4 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node1->Node4 - - - - -Node4->Node2 - - - - -Node5 - - -NamespaceSettings.hpp - - - - -Node4->Node5 - - - - -Node6 - - -Settings.hpp - - - - -Node4->Node6 - - - - -Node12 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node4->Node12 - - - - -Node13 - - -AH/Debug/Debug.hpp - - - - -Node4->Node13 - - - - -Node6->Node3 - - - - -Node7 - - -AH/Types/Frequency.hpp - - - - -Node6->Node7 - - - - -Node8 - - -AH/Hardware/ADCConfig.hpp - - - - -Node6->Node8 - - - - -Node10 - - -limits.h - - - - -Node6->Node10 - - - - -Node11 - - -stddef.h - - - - -Node6->Node11 - - - - -Node7->Node2 - - - - -Node7->Node5 - - - - -Node8->Node2 - - - - -Node9 - - -Arduino.h - - - - -Node8->Node9 - - - - -Node13->Node2 - - - - -Node13->Node4 - - - - -Node14 - - -AH/PrintStream/PrintStream.hpp - - - - -Node13->Node14 - - - - -Node15 - - -DebugVal.hpp - - - - -Node13->Node15 - - - - -Node14->Node2 - - - - -Node14->Node9 - - - - - diff --git a/docs/Doxygen/d4/dc6/group__AH__Settings.html b/docs/Doxygen/d4/dc6/group__AH__Settings.html deleted file mode 100644 index 15e346fdf..000000000 --- a/docs/Doxygen/d4/dc6/group__AH__Settings.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - -Arduino Helpers: Settings - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
- -
-
Settings
-
-
- -

User settings and debugging options. -More...

- - - - - -

-Files

file  Settings.hpp
 All user settings and debugging options can be changed here.
 
-

Detailed Description

-

User settings and debugging options.

-
- - - - diff --git a/docs/Doxygen/d4/dd5/classFrequency__coll__graph.map b/docs/Doxygen/d4/dd5/classFrequency__coll__graph.map deleted file mode 100644 index af218af4a..000000000 --- a/docs/Doxygen/d4/dd5/classFrequency__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/d4/dd5/classFrequency__coll__graph.md5 b/docs/Doxygen/d4/dd5/classFrequency__coll__graph.md5 deleted file mode 100644 index e396ab4c8..000000000 --- a/docs/Doxygen/d4/dd5/classFrequency__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -d03e5aa69ab0b6ca21e700f1f9cd0436 \ No newline at end of file diff --git a/docs/Doxygen/d4/dd5/classFrequency__coll__graph.svg b/docs/Doxygen/d4/dd5/classFrequency__coll__graph.svg deleted file mode 100644 index aad6669a1..000000000 --- a/docs/Doxygen/d4/dd5/classFrequency__coll__graph.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - -Frequency - - -Node1 - - -Frequency - -- hertz - -+ Frequency() -+ operator unsigned long() - - - - - diff --git a/docs/Doxygen/d5/d04/IncrementButton_8hpp.html b/docs/Doxygen/d5/d04/IncrementButton_8hpp.html deleted file mode 100644 index 250f16b1f..000000000 --- a/docs/Doxygen/d5/d04/IncrementButton_8hpp.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -Arduino Helpers: IncrementButton.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
IncrementButton.hpp File Reference
-
-
-
#include <AH/Settings/Warnings.hpp>
-#include "Button.hpp"
-
-Include dependency graph for IncrementButton.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - -

-Classes

class  IncrementButton
 A class for buttons that increment some counter or setting. More...
 
-
- - - - diff --git a/docs/Doxygen/d5/d04/IncrementButton_8hpp_source.html b/docs/Doxygen/d5/d04/IncrementButton_8hpp_source.html deleted file mode 100644 index 4e34b11fc..000000000 --- a/docs/Doxygen/d5/d04/IncrementButton_8hpp_source.html +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - - -Arduino Helpers: IncrementButton.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
IncrementButton.hpp
-
-
-Go to the documentation of this file.
1 /* ✔ */
-
2 
-
3 #pragma once
-
4 
- -
6 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
7 
-
8 #include "Button.hpp"
-
9 
- -
11 
- -
23  public:
- -
32 
-
34  void begin() { button.begin(); }
-
35 
-
41  enum State {
-
42  Nothing = 0,
- -
44  };
-
45 
- -
50 
-
56  State getState() const { return state; }
-
57 
-
58 #ifdef AH_INDIVIDUAL_BUTTON_INVERT
-
59  void invert() { button.invert(); }
-
61 #endif
-
62 
-
63  protected:
- -
65 
-
66  private:
- -
68 
-
69  enum {
- - - -
73  unsigned long longPressRepeat;
-
74 
- -
76 };
-
77 
- -
79 
- -
- -
#define BEGIN_AH_NAMESPACE
- -
IncrementButton(const Button &button)
Create a IncrementButton.
-
State
An enumeration of the different actions to be performed by the counter.
-
A class for reading and debouncing buttons and switches.
Definition: Button.hpp:18
-
State getState() const
Return the state of the increment button without updating it.
-
The counter must be incremented.
-
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
enum IncrementButton::@0 longPressState
-
A class for buttons that increment some counter or setting.
-
State updateImplementation()
- -
void begin()
Initialize (enable the internal pull-up resistor).
Definition: Button.cpp:11
-
The counter must not be incremented.
- -
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
AH_INDIVIDUAL_BUTTON_INVERT_STATIC void invert()
Invert the state of all buttons, or of this specific button (button pressed is HIGH instead of LOW).
Definition: Button.cpp:13
-
#define END_AH_NAMESPACE
- - -
unsigned long longPressRepeat
-
State update()
Update and return the state of the increment button.
- - - - diff --git a/docs/Doxygen/d5/d0c/MAX7219SevenSegmentDisplay_8hpp.html b/docs/Doxygen/d5/d0c/MAX7219SevenSegmentDisplay_8hpp.html deleted file mode 100644 index 78869d793..000000000 --- a/docs/Doxygen/d5/d0c/MAX7219SevenSegmentDisplay_8hpp.html +++ /dev/null @@ -1,212 +0,0 @@ - - - - - - - -Arduino Helpers: MAX7219SevenSegmentDisplay.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
MAX7219SevenSegmentDisplay.hpp File Reference
-
-
-
-Include dependency graph for MAX7219SevenSegmentDisplay.hpp:
-
-
-
-
-

Go to the source code of this file.

- - - - - -

-Classes

class  MAX7219SevenSegmentDisplay
 A class for 8-digit 7-segment displays with a MAX7219 driver. More...
 
- - - - - - - - -

-Variables

static constexpr uint8_t SevenSegmentCharacters [0x40]
 A lookup table for 7-segment characters, as specified by the Logic Control manual. More...
 
static constexpr const uint8_t * AlphaChars = &SevenSegmentCharacters[0x01]
 
static constexpr const uint8_t * NumericChars = &SevenSegmentCharacters[0x30]
 
-

Variable Documentation

- -

◆ SevenSegmentCharacters

- -
-
- - - - - -
- - - - -
constexpr uint8_t SevenSegmentCharacters[0x40]
-
-staticconstexpr
-
-Initial value:
= {
-
0b00000000, 0b01110111, 0b00011111, 0b01001110,
-
0b00111101, 0b01001111, 0b01000111, 0b01011110,
-
0b00010111, 0b00110000, 0b00111100, 0b00000111,
-
0b00001110, 0b01110110, 0b00010101, 0b00011101,
-
0b01100111, 0b01110011, 0b00000101, 0b01011011,
-
0b00001111, 0b00011100, 0b00100111, 0b00111110,
-
0b00110111, 0b00111011, 0b01101101, 0b01001110,
-
0b00010011, 0b01111000, 0b01100010, 0b00001000,
-
0b00000000, 0b00000000, 0b00100010, 0b01100011,
-
0b01011011, 0b01100111, 0b01111101, 0b00000010,
-
0b01001110, 0b01111000, 0b01100011, 0b00110001,
-
0b00000100, 0b00000001, 0b00001000, 0b00100101,
-
0b01111110, 0b00110000, 0b01101101, 0b01111001,
-
0b00110011, 0b01011011, 0b01011111, 0b01110000,
-
0b01111111, 0b01111011, 0b00000000, 0b01000100,
-
0b00110001, 0b00001001, 0b00000111, 0b01100101,
-
}
-
-

A lookup table for 7-segment characters, as specified by the Logic Control manual.

-

A | | F | | B |__G__| | | E | | C |__D__| o DP

- -

Definition at line 22 of file MAX7219SevenSegmentDisplay.hpp.

- -
-
- -

◆ AlphaChars

- -
-
- - - - - -
- - - - -
constexpr const uint8_t* AlphaChars = &SevenSegmentCharacters[0x01]
-
-staticconstexpr
-
- -

Definition at line 41 of file MAX7219SevenSegmentDisplay.hpp.

- -
-
- -

◆ NumericChars

- -
-
- - - - - -
- - - - -
constexpr const uint8_t* NumericChars = &SevenSegmentCharacters[0x30]
-
-staticconstexpr
-
- -

Definition at line 42 of file MAX7219SevenSegmentDisplay.hpp.

- -
-
-
- - - - diff --git a/docs/Doxygen/d5/d0c/MAX7219SevenSegmentDisplay_8hpp_source.html b/docs/Doxygen/d5/d0c/MAX7219SevenSegmentDisplay_8hpp_source.html deleted file mode 100644 index 9f8aacade..000000000 --- a/docs/Doxygen/d5/d0c/MAX7219SevenSegmentDisplay_8hpp_source.html +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - - -Arduino Helpers: MAX7219SevenSegmentDisplay.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
MAX7219SevenSegmentDisplay.hpp
-
-
-Go to the documentation of this file.
1 #pragma once
-
2 
- -
4 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
5 
-
6 #include "MAX7219_Base.hpp"
-
7 
- -
9 
-
22 static constexpr uint8_t SevenSegmentCharacters[0x40] = {
-
23  0b00000000, 0b01110111, 0b00011111, 0b01001110, // @ A B C
-
24  0b00111101, 0b01001111, 0b01000111, 0b01011110, // D E F G
-
25  0b00010111, 0b00110000, 0b00111100, 0b00000111, // H I J K
-
26  0b00001110, 0b01110110, 0b00010101, 0b00011101, // L M N O
-
27  0b01100111, 0b01110011, 0b00000101, 0b01011011, // P Q R S
-
28  0b00001111, 0b00011100, 0b00100111, 0b00111110, // T U V W
-
29  0b00110111, 0b00111011, 0b01101101, 0b01001110, // X Y Z [
-
30  0b00010011, 0b01111000, 0b01100010, 0b00001000, // \ ] ^ _
-
31  0b00000000, 0b00000000, 0b00100010, 0b01100011, // ! " #
-
32  0b01011011, 0b01100111, 0b01111101, 0b00000010, // $ % & '
-
33  0b01001110, 0b01111000, 0b01100011, 0b00110001, // ( ) * +
-
34  0b00000100, 0b00000001, 0b00001000, 0b00100101, // , - . /
-
35  0b01111110, 0b00110000, 0b01101101, 0b01111001, // 0 1 2 3
-
36  0b00110011, 0b01011011, 0b01011111, 0b01110000, // 4 5 6 7
-
37  0b01111111, 0b01111011, 0b00000000, 0b01000100, // 8 9 : ;
-
38  0b00110001, 0b00001001, 0b00000111, 0b01100101, // < = > ?
-
39 };
-
40 
-
41 static constexpr const uint8_t *AlphaChars = &SevenSegmentCharacters[0x01];
-
42 static constexpr const uint8_t *NumericChars = &SevenSegmentCharacters[0x30];
-
43 
- -
50  public:
- -
58 
-
61  void begin() { init(); }
-
62 
-
83  uint8_t display(long number, uint8_t startDigit = 0, uint8_t endDigit = 7) {
-
84  long anumber = abs(number);
-
85  uint8_t i = startDigit + 1;
-
86  endDigit++;
-
87  do {
-
88  sendRaw(i++, NumericChars[anumber % 10]);
-
89  anumber /= 10;
-
90  } while (anumber && i <= endDigit);
-
91  if (number < 0 && i <= endDigit)
-
92  sendRaw(i++, 0b00000001); // minus sign
-
93  while (i <= endDigit)
-
94  sendRaw(i++, 0b00000000); // clear unused digits within range
-
95  return endDigit - startDigit;
-
96  }
-
97 
-
108  uint8_t display(const char *text, uint8_t startPos = 0) {
-
109  uint8_t i = 8 - startPos;
-
110  char prevD = '\0';
-
111  while (*text && (i > 0 || *text == '.')) {
-
112  char c = *text++;
-
113  uint8_t d = 0;
-
114  if (c == '.') {
-
115  if (prevD) {
-
116  sendRaw(1 + i, prevD | 0b10000000);
-
117  prevD = '\0';
-
118  continue;
-
119  } else {
-
120  sendRaw(i--, 0b10000000);
-
121  continue;
-
122  }
-
123  } else if (c >= '@' && c <= '_')
-
124  d = SevenSegmentCharacters[(uint8_t)c - '@'];
-
125  else if (c >= '!' && c <= '?')
-
126  d = SevenSegmentCharacters[(uint8_t)c];
-
127  else if (c >= 'a' && c <= 'z')
-
128  d = SevenSegmentCharacters[(uint8_t)c - 'a' + 'A' - '@'];
-
129  sendRaw(i--, d);
-
130  prevD = d;
-
131  }
-
132  return 8 - i - startPos;
-
133  }
-
134 
-
140  template <uint8_t N>
-
141  uint8_t display(const uint8_t (&characters)[N], uint8_t startPos = 0) {
-
142  uint8_t i = 8 - startPos;
-
143  const uint8_t *char_p = &characters[0];
-
144  const uint8_t *const end_p = &characters[N];
-
145  while (i && char_p < end_p) {
-
146  uint8_t c = *char_p++;
-
147  sendRaw(i--, SevenSegmentCharacters[(uint8_t)c & 0x3F] |
-
148  (((uint8_t)c & 0x40) << 1));
-
149  }
-
150  return 8 - i - startPos;
-
151  }
-
152 
-
164  void printHex(uint8_t digit, uint8_t value) {
-
165  value &= 0x0F;
-
166  uint8_t c =
-
167  value >= 0xA ? AlphaChars[value - 0x0A] : NumericChars[value];
-
168  send(digit, c);
-
169  }
-
170 };
-
171 
- -
173 
- -
-
uint8_t display(long number, uint8_t startDigit=0, uint8_t endDigit=7)
Display a long integer number to the display.
-
#define BEGIN_AH_NAMESPACE
-
A base class for classes that control MAX7219 LED drivers.
- - -
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
- -
void send(uint8_t digit, uint8_t value)
Send the value to the given digit.
-
void sendRaw(uint8_t opcode, uint8_t value)
Send a raw opcode and value to the MAX7219.
-
uint8_t display(const uint8_t(&characters)[N], uint8_t startPos=0)
?
-
MAX7219SevenSegmentDisplay(pin_t loadPin)
Create a MAX7219SevenSegmentDisplay.
-
uint8_t display(const char *text, uint8_t startPos=0)
Display a string of text to the display.
-
static constexpr const uint8_t * AlphaChars
-
void printHex(uint8_t digit, uint8_t value)
Print a single hexadecimal digit.
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
-
#define END_AH_NAMESPACE
-
static constexpr const uint8_t * NumericChars
-
void init()
Initialize the Arduino pins, SPI, and the MAX7219.
-
A class for 8-digit 7-segment displays with a MAX7219 driver.
-
static constexpr uint8_t SevenSegmentCharacters[0x40]
A lookup table for 7-segment characters, as specified by the Logic Control manual.
- - - - diff --git a/docs/Doxygen/d5/d20/classIncrementDecrementButtons.html b/docs/Doxygen/d5/d20/classIncrementDecrementButtons.html deleted file mode 100644 index a366aa5ef..000000000 --- a/docs/Doxygen/d5/d20/classIncrementDecrementButtons.html +++ /dev/null @@ -1,506 +0,0 @@ - - - - - - - -Arduino Helpers: IncrementDecrementButtons Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

A class for buttons that increment and decrement some counter or setting. - More...

- -

#include <IncrementDecrementButtons.hpp>

-
-Collaboration diagram for IncrementDecrementButtons:
-
-
-
- - - - - -

-Public Types

enum  State { Nothing = 0, -Increment, -Decrement, -Reset - }
 An enumeration of the different actions to be performed by the counter. More...
 
- - - - - - - - - - - - -

-Public Member Functions

 IncrementDecrementButtons (const Button &incrementButton, const Button &decrementButton)
 Create a IncrementDecrementButtons object. More...
 
void begin ()
 
State update ()
 Update and return the state of the increment/decrement button. More...
 
State getState () const
 Return the state of the increment/decrement button without updating it. More...
 
- - - -

-Protected Member Functions

State updateImplementation ()
 
- - - -

-Private Types

enum  { Initial, -LongPress, -AfterReset - }
 
- - - - - - - - - - - -

-Private Attributes

Button incrementButton
 
Button decrementButton
 
enum IncrementDecrementButtons:: { ... }  longPressState = Initial
 
unsigned long longPressRepeat
 
State state = Nothing
 
-

Detailed Description

-

A class for buttons that increment and decrement some counter or setting.

-

It behaves the same way as a computer keyboard: when you press the increment (decrement) button, it increments (decrements) the counter once. If you keep on pressing it for longer than a certain threshold, it keeps on incrementing (decrementing) at a faster rate, until you release it.
- If both the increment and the decrement button are pressed at once, it resets the counter.

-
Examples
Blink-Frequency-Buttons.ino.
-
- -

Definition at line 25 of file IncrementDecrementButtons.hpp.

-

Member Enumeration Documentation

- -

◆ State

- -
-
- - - - -
enum State
-
- -

An enumeration of the different actions to be performed by the counter.

-
Todo:
Add states for initial press.
- - - - - -
Enumerator
Nothing 

The counter should not be incremented.

-
Increment 

The counter should be incremented.

-
Decrement 

The counter should be decremented.

-
Reset 

The counter should be reset to the initial value.

-
- -

Definition at line 52 of file IncrementDecrementButtons.hpp.

- -
-
- -

◆ anonymous enum

- -
-
- - - - - -
- - - - -
anonymous enum
-
-private
-
- - - - -
Enumerator
Initial 
LongPress 
AfterReset 
- -

Definition at line 87 of file IncrementDecrementButtons.hpp.

- -
-
-

Constructor & Destructor Documentation

- -

◆ IncrementDecrementButtons()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
IncrementDecrementButtons (const ButtonincrementButton,
const ButtondecrementButton 
)
-
-inline
-
- -

Create a IncrementDecrementButtons object.

-
Parameters
- - - -
incrementButtonThe button to increment the counter.
- The button is copied.
decrementButtonThe button to decrement the counter.
- The button is copied.
-
-
- -

Definition at line 37 of file IncrementDecrementButtons.hpp.

- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - -
- - - - - - - -
void begin ()
-
-inline
-
-
See also
Button::begin
-
Examples
Blink-Frequency-Buttons.ino.
-
- -

Definition at line 42 of file IncrementDecrementButtons.hpp.

- -
-
- -

◆ update()

- -
-
- - - - - -
- - - - - - - -
State update ()
-
-inline
-
- -

Update and return the state of the increment/decrement button.

-
Examples
Blink-Frequency-Buttons.ino.
-
- -

Definition at line 62 of file IncrementDecrementButtons.hpp.

- -
-
- -

◆ getState()

- -
-
- - - - - -
- - - - - - - -
State getState () const
-
-inline
-
- -

Return the state of the increment/decrement button without updating it.

-

Returns the same value as the last update call.

-
Examples
Blink-Frequency-Buttons.ino.
-
- -

Definition at line 70 of file IncrementDecrementButtons.hpp.

- -
-
- -

◆ updateImplementation()

- -
-
- - - - - -
- - - - - - - -
IncrementDecrementButtons::State updateImplementation ()
-
-protected
-
- -

Definition at line 8 of file IncrementDecrementButtons.cpp.

- -
-
-

Member Data Documentation

- -

◆ incrementButton

- -
-
- - - - - -
- - - - -
Button incrementButton
-
-private
-
- -

Definition at line 84 of file IncrementDecrementButtons.hpp.

- -
-
- -

◆ decrementButton

- -
-
- - - - - -
- - - - -
Button decrementButton
-
-private
-
- -

Definition at line 85 of file IncrementDecrementButtons.hpp.

- -
-
- -

◆ longPressState

- -
-
- - - - -
enum { ... } longPressState
-
- -
-
- -

◆ longPressRepeat

- -
-
- - - - - -
- - - - -
unsigned long longPressRepeat
-
-private
-
- -

Definition at line 92 of file IncrementDecrementButtons.hpp.

- -
-
- -

◆ state

- -
-
- - - - - -
- - - - -
State state = Nothing
-
-private
-
- -

Definition at line 93 of file IncrementDecrementButtons.hpp.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/docs/Doxygen/d5/d3a/classUpdatable-members.html b/docs/Doxygen/d5/d3a/classUpdatable-members.html deleted file mode 100644 index bc85682d0..000000000 --- a/docs/Doxygen/d5/d3a/classUpdatable-members.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Updatable< T > Member List
-
-
- -

This is the complete list of members for Updatable< T >, including all inherited members.

- - - - - - - - - - - - - - - - - - - - -
begin()=0Updatable< T >pure virtual
beginAll()Updatable< T >inlinestatic
disable()Updatable< T >inline
disable(Updatable< T > *element)Updatable< T >inlinestatic
disable(Updatable< T > &element)Updatable< T >inlinestatic
disable(U(&array)[N])Updatable< T >inlinestatic
enable()Updatable< T >inline
enable(Updatable *element)Updatable< T >inlinestatic
enable(Updatable &element)Updatable< T >inlinestatic
enable(U(&array)[N])Updatable< T >inlinestatic
isEnabled()Updatable< T >inline
nextDoublyLinkable< Updatable< T > >protected
previousDoublyLinkable< Updatable< T > >protected
Updatable()Updatable< T >inlineprotected
updatablesUpdatable< T >privatestatic
update()=0Updatable< T >pure virtual
updateAll()Updatable< T >inlinestatic
~DoublyLinkable()=defaultDoublyLinkable< Updatable< T > >protectedvirtual
~Updatable()Updatable< T >inlinevirtual
- - - - diff --git a/docs/Doxygen/d5/d3f/ExtendedInputOutput_8cpp__incl.map b/docs/Doxygen/d5/d3f/ExtendedInputOutput_8cpp__incl.map deleted file mode 100644 index ae6dc8d43..000000000 --- a/docs/Doxygen/d5/d3f/ExtendedInputOutput_8cpp__incl.map +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d5/d3f/ExtendedInputOutput_8cpp__incl.md5 b/docs/Doxygen/d5/d3f/ExtendedInputOutput_8cpp__incl.md5 deleted file mode 100644 index 6c80135fa..000000000 --- a/docs/Doxygen/d5/d3f/ExtendedInputOutput_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -a1f916b8b3cd4bedfd7e69959754f28c \ No newline at end of file diff --git a/docs/Doxygen/d5/d3f/ExtendedInputOutput_8cpp__incl.svg b/docs/Doxygen/d5/d3f/ExtendedInputOutput_8cpp__incl.svg deleted file mode 100644 index 20eeb82aa..000000000 --- a/docs/Doxygen/d5/d3f/ExtendedInputOutput_8cpp__incl.svg +++ /dev/null @@ -1,485 +0,0 @@ - - - - - - -ExtendedInputOutput.cpp - - -Node1 - - -ExtendedInputOutput.cpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -ExtendedIOElement.hpp - - - - -Node1->Node3 - - - - -Node6 - - -AH/Error/Error.hpp - - - - -Node1->Node6 - - - - -Node27 - - -ExtendedInputOutput.hpp - - - - -Node1->Node27 - - - - -Node3->Node2 - - - - -Node4 - - -AH/Hardware/Hardware --Types.hpp - - - - -Node3->Node4 - - - - -Node22 - - -AH/Containers/LinkedList.hpp - - - - -Node3->Node22 - - - - -Node4->Node2 - - - - -Node5 - - -AH/Containers/Array.hpp - - - - -Node4->Node5 - - - - -Node11 - - -NamespaceSettings.hpp - - - - -Node4->Node11 - - - - -Node17 - - -stdint.h - - - - -Node4->Node17 - - - - -Node5->Node2 - - - - -Node5->Node6 - - - - -Node16 - - -stddef.h - - - - -Node5->Node16 - - - - -Node20 - - -AH/STL/iterator - - - - -Node5->Node20 - - - - -Node21 - - -AH/STL/type_traits - - - - -Node5->Node21 - - - - -Node6->Node2 - - - - -Node7 - - -AH/Debug/Debug.hpp - - - - -Node6->Node7 - - - - -Node7->Node2 - - - - -Node8 - - -AH/PrintStream/PrintStream.hpp - - - - -Node7->Node8 - - - - -Node10 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node7->Node10 - - - - -Node19 - - -DebugVal.hpp - - - - -Node7->Node19 - - - - -Node8->Node2 - - - - -Node9 - - -Arduino.h - - - - -Node8->Node9 - - - - -Node10->Node2 - - - - -Node10->Node7 - - - - -Node10->Node11 - - - - -Node12 - - -Settings.hpp - - - - -Node10->Node12 - - - - -Node18 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node10->Node18 - - - - -Node13 - - -AH/Types/Frequency.hpp - - - - -Node12->Node13 - - - - -Node14 - - -AH/Hardware/ADCConfig.hpp - - - - -Node12->Node14 - - - - -Node15 - - -limits.h - - - - -Node12->Node15 - - - - -Node12->Node16 - - - - -Node12->Node17 - - - - -Node13->Node2 - - - - -Node13->Node11 - - - - -Node14->Node2 - - - - -Node14->Node9 - - - - -Node22->Node2 - - - - -Node22->Node7 - - - - -Node23 - - -AH/Math/MinMaxFix.hpp - - - - -Node22->Node23 - - - - -Node25 - - -stdlib.h - - - - -Node22->Node25 - - - - -Node26 - - -iterator - - - - -Node22->Node26 - - - - -Node23->Node2 - - - - -Node23->Node11 - - - - -Node24 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node23->Node24 - - - - -Node24->Node2 - - - - -Node24->Node9 - - - - -Node27->Node2 - - - - -Node27->Node3 - - - - -Node27->Node9 - - - - - diff --git a/docs/Doxygen/d5/d41/ButtonMatrix_8ipp.html b/docs/Doxygen/d5/d41/ButtonMatrix_8ipp.html deleted file mode 100644 index d5fdc3303..000000000 --- a/docs/Doxygen/d5/d41/ButtonMatrix_8ipp.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - -Arduino Helpers: ButtonMatrix.ipp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ButtonMatrix.ipp File Reference
-
-
-
-Include dependency graph for ButtonMatrix.ipp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

-
- - - - diff --git a/docs/Doxygen/d5/d41/ButtonMatrix_8ipp_source.html b/docs/Doxygen/d5/d41/ButtonMatrix_8ipp_source.html deleted file mode 100644 index e30416971..000000000 --- a/docs/Doxygen/d5/d41/ButtonMatrix_8ipp_source.html +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - - -Arduino Helpers: ButtonMatrix.ipp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ButtonMatrix.ipp
-
-
-Go to the documentation of this file.
1 #include "ButtonMatrix.hpp"
- -
3 #include <string.h>
-
4 
- -
6 
-
7 using namespace ExtIO;
-
8 
-
9 template <uint8_t nb_rows, uint8_t nb_cols>
- -
11  const PinList<nb_cols> &colPins)
-
12  : rowPins(rowPins), colPins(colPins) {
-
13  memset(prevStates, 0xFF, sizeof(prevStates));
-
14 }
-
15 
-
16 template <uint8_t nb_rows, uint8_t nb_cols>
- -
18  unsigned long now = millis();
-
19  // only update 25 ms after previous change (crude software debounce).
-
20  // Edit this in Settings/Settings.hpp
-
21  if (now - prevRefresh < BUTTON_DEBOUNCE_TIME)
-
22  return;
-
23 
-
24  for (size_t row = 0; row < nb_rows; row++) { // scan through all rows
-
25  pinMode(rowPins[row], OUTPUT); // make the current row Lo-Z 0V
-
26  for (size_t col = 0; col < nb_cols; col++) { // scan through all columns
-
27  bool state = digitalRead(colPins[col]); // read the state
-
28  if (state != getPrevState(col, row)) {
-
29  // if the state changed since last time
-
30  // execute the handler
-
31  onButtonChanged(row, col, state);
-
32  setPrevState(col, row, state); // remember the state
-
33  prevRefresh = now;
-
34  }
-
35  }
-
36  pinMode(rowPins[row], INPUT); // make the current row Hi-Z again
-
37  }
-
38 }
-
39 
-
40 template <uint8_t nb_rows, uint8_t nb_cols>
- -
42  // make all columns input pins and enable
-
43  // the internal pull-up resistors
-
44  for (const pin_t &colPin : colPins)
-
45  pinMode(colPin, INPUT_PULLUP);
-
46  // make all rows Hi-Z
-
47  for (const pin_t &rowPin : rowPins)
-
48  pinMode(rowPin, INPUT);
-
49 }
-
50 
-
51 template <uint8_t nb_rows, uint8_t nb_cols>
- -
53  uint8_t row) {
-
54  // map from a 2D array of bits to a flat array of bits
-
55  return col * nb_rows + row;
-
56 }
-
57 
-
58 template <uint8_t nb_rows, uint8_t nb_cols>
-
59 inline uint8_t ButtonMatrix<nb_rows, nb_cols>::bitsToIndex(uint8_t bits) {
-
60  return bits >> 3; // bits / 8
-
61 }
-
62 
-
63 template <uint8_t nb_rows, uint8_t nb_cols>
-
64 inline uint8_t ButtonMatrix<nb_rows, nb_cols>::bitsToBitmask(uint8_t bits) {
-
65  return 1 << (bits & 7); // bits % 8
-
66 }
-
67 
-
68 template <uint8_t nb_rows, uint8_t nb_cols>
-
69 bool ButtonMatrix<nb_rows, nb_cols>::getPrevState(uint8_t col, uint8_t row) {
-
70  uint8_t bits = positionToBits(col, row);
-
71  return !!(prevStates[bitsToIndex(bits)] & bitsToBitmask(bits));
-
72 }
-
73 
-
74 template <uint8_t nb_rows, uint8_t nb_cols>
-
75 void ButtonMatrix<nb_rows, nb_cols>::setPrevState(uint8_t col, uint8_t row,
-
76  bool state) {
-
77  uint8_t bits = positionToBits(col, row);
-
78  if (state)
-
79  prevStates[bitsToIndex(bits)] |= bitsToBitmask(bits);
-
80  else
-
81  prevStates[bitsToIndex(bits)] &= ~bitsToBitmask(bits);
-
82 }
-
83 
- -
-
const uint8_t INPUT_PULLUP
-
#define BEGIN_AH_NAMESPACE
-
static uint8_t bitsToBitmask(uint8_t bits)
-
void setPrevState(uint8_t col, uint8_t row, bool state)
-
static uint8_t positionToBits(uint8_t col, uint8_t row)
-
uint8_t prevStates[(nb_cols *nb_rows+7)/8]
-
ButtonMatrix(const PinList< nb_rows > &rowPins, const PinList< nb_cols > &colPins)
Construct a new ButtonMatrix object.
-
int digitalRead(pin_t pin)
An ExtIO version of the Arduino function.
- -
void begin()
Initialize (enable internal pull-up resistors on column pins).
-
constexpr unsigned long BUTTON_DEBOUNCE_TIME
The debounce time for momentary push buttons in milliseconds.
Definition: Settings.hpp:74
- -
static uint8_t bitsToIndex(uint8_t bits)
-
void update()
Scan the matrix, read all button states, and call the onButtonChanged callback.
-
A namespace with alternatives to the standard Arduino IO functions that can be used with extended IO ...
-
void pinMode(pin_t pin, uint8_t mode)
An ExtIO version of the Arduino function.
-
bool getPrevState(uint8_t col, uint8_t row)
Get the state of the button in the given column and row.
-
const uint8_t INPUT
- -
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
-
#define END_AH_NAMESPACE
-
const uint8_t OUTPUT
- - - - diff --git a/docs/Doxygen/d5/d41/classTimer-members.html b/docs/Doxygen/d5/d41/classTimer-members.html deleted file mode 100644 index f073ccbbf..000000000 --- a/docs/Doxygen/d5/d41/classTimer-members.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Timer< time > Member List
-
-
- -

This is the complete list of members for Timer< time >, including all inherited members.

- - - - - - - - -
begin()Timer< time >inline
getInterval() constTimer< time >inline
intervalTimer< time >private
operator bool()Timer< time >inlineexplicit
previousTimer< time >private
setInterval(unsigned long interval)Timer< time >inline
Timer(unsigned long interval)Timer< time >inline
- - - - diff --git a/docs/Doxygen/d5/d45/structShiftRegisterOutRGB.html b/docs/Doxygen/d5/d45/structShiftRegisterOutRGB.html deleted file mode 100644 index 4eaf81b56..000000000 --- a/docs/Doxygen/d5/d45/structShiftRegisterOutRGB.html +++ /dev/null @@ -1,209 +0,0 @@ - - - - - - - -Arduino Helpers: ShiftRegisterOutRGB Struct Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
- -
-
ShiftRegisterOutRGB Struct Reference
-
-
- -

A struct for setting the RGB mode for RGB shift registers. - More...

- -

#include <ShiftRegisterOutRGB.hpp>

-
-Collaboration diagram for ShiftRegisterOutRGB:
-
-
-
- - - - - - - - - - - -

-Static Public Attributes

const static uint8_t redBit
 The position of the red output pin for 3-color LEDs. More...
 
const static uint8_t greenBit
 The position of the green output pin for 3-color LEDs. More...
 
const static uint8_t blueBit
 The position of the blue output pin for 3-color LEDs. More...
 
-

Detailed Description

-

A struct for setting the RGB mode for RGB shift registers.

- -

Definition at line 16 of file ShiftRegisterOutRGB.hpp.

-

Member Data Documentation

- -

◆ redBit

- -
-
- - - - - -
- - - - -
const static uint8_t redBit
-
-static
-
- -

The position of the red output pin for 3-color LEDs.

-


- For the usual RGB configuration, this is 0.

-
Examples
2.RGB-LED-Chaser.ino.
-
- -

Definition at line 21 of file ShiftRegisterOutRGB.hpp.

- -
-
- -

◆ greenBit

- -
-
- - - - - -
- - - - -
const static uint8_t greenBit
-
-static
-
- -

The position of the green output pin for 3-color LEDs.

-


- For the usual RGB configuration, this is 1.

-
Examples
2.RGB-LED-Chaser.ino.
-
- -

Definition at line 26 of file ShiftRegisterOutRGB.hpp.

- -
-
- -

◆ blueBit

- -
-
- - - - - -
- - - - -
const static uint8_t blueBit
-
-static
-
- -

The position of the blue output pin for 3-color LEDs.

-


- For the usual RGB configuration, this is 2.

-
Examples
2.RGB-LED-Chaser.ino.
-
- -

Definition at line 31 of file ShiftRegisterOutRGB.hpp.

- -
-
-
The documentation for this struct was generated from the following file: -
- - - - diff --git a/docs/Doxygen/d5/d47/ShiftRegisterOutBase_8ipp.html b/docs/Doxygen/d5/d47/ShiftRegisterOutBase_8ipp.html deleted file mode 100644 index 25f3f351a..000000000 --- a/docs/Doxygen/d5/d47/ShiftRegisterOutBase_8ipp.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - -Arduino Helpers: ShiftRegisterOutBase.ipp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ShiftRegisterOutBase.ipp File Reference
-
-
-
-Include dependency graph for ShiftRegisterOutBase.ipp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

-
- - - - diff --git a/docs/Doxygen/d5/d47/ShiftRegisterOutBase_8ipp_source.html b/docs/Doxygen/d5/d47/ShiftRegisterOutBase_8ipp_source.html deleted file mode 100644 index c25398520..000000000 --- a/docs/Doxygen/d5/d47/ShiftRegisterOutBase_8ipp_source.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - - -Arduino Helpers: ShiftRegisterOutBase.ipp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ShiftRegisterOutBase.ipp
-
-
-Go to the documentation of this file.
- - -
4 
- -
6 
-
7 template <uint8_t N>
- -
9  BitOrder_t bitOrder)
-
10  : latchPin(latchPin), bitOrder(bitOrder) {}
-
11 
-
12 template <uint8_t N>
- -
14  buffer.set(pin, val);
-
15  dirty = true;
-
16  this->update(); // TODO: should I always update?
-
17 }
-
18 
-
19 template <uint8_t N>
- -
21  return buffer.get(pin);
-
22 }
-
23 
-
24 template <uint8_t N>
- -
26  return this->pin(3 * id + ShiftRegisterOutRGB::greenBit);
-
27 }
-
28 
-
29 template <uint8_t N>
- -
31  return generateIncrementalArray<pin_t, N / 3>(
-
32  this->pin(ShiftRegisterOutRGB::greenBit), 3);
-
33 }
-
34 
-
35 template <uint8_t N>
- -
37  return this->pin(3 * id + ShiftRegisterOutRGB::redBit);
-
38 }
-
39 
-
40 template <uint8_t N>
- -
42  return generateIncrementalArray<pin_t, N / 3>(
-
43  this->pin(ShiftRegisterOutRGB::redBit), 3);
-
44 }
-
45 
-
46 template <uint8_t N>
- -
48  return this->pin(3 * id + ShiftRegisterOutRGB::blueBit);
-
49 }
-
50 
-
51 template <uint8_t N>
- -
53  return generateIncrementalArray<pin_t, N / 3>(
-
54  this->pin(ShiftRegisterOutRGB::blueBit), 3);
-
55 }
-
56 
- -
-
#define BEGIN_AH_NAMESPACE
- -
int digitalRead(pin_t pin) override
Get the current state of a given output pin.
-
pin_t green(pin_t id)
Get the green output pin of the given LED.
-
const static uint8_t redBit
The position of the red output pin for 3-color LEDs.
-
const static uint8_t greenBit
The position of the green output pin for 3-color LEDs.
-
Array< pin_t, N/3 > bluePins()
Get an array containing all pins with blue LEDs.
-
pin_t blue(pin_t id)
Get the blue output pin of the given LED.
-
Array< pin_t, N/3 > greenPins()
Get an array containing all pins with green LEDs.
- -
An array wrapper for easy copying, comparing, and iterating.
Definition: Array.hpp:36
-
const static uint8_t blueBit
The position of the blue output pin for 3-color LEDs.
-
Array< T, N > generateIncrementalArray(U start=0, V increment=V(1))
Generate an array where the first value is given, and the subsequent values are calculated as the pre...
- -
void digitalWrite(pin_t pin, uint8_t val) override
Set the state of a given output pin.
-
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
-
#define END_AH_NAMESPACE
-
ShiftRegisterOutBase(pin_t latchPin, BitOrder_t bitOrder)
Create a new ShiftRegisterOutBase object with a given bit order, and a given number of outputs.
- -
pin_t red(pin_t id)
Get the red output pin of the given LED.
-
Array< pin_t, N/3 > redPins()
Get an array containing all pins with red LEDs.
- - - - diff --git a/docs/Doxygen/d5/d4a/classdetail_1_1Incrementor.html b/docs/Doxygen/d5/d4a/classdetail_1_1Incrementor.html deleted file mode 100644 index c00dc8f1d..000000000 --- a/docs/Doxygen/d5/d4a/classdetail_1_1Incrementor.html +++ /dev/null @@ -1,251 +0,0 @@ - - - - - - - -Arduino Helpers: Incrementor< T, V > Class Template Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
Incrementor< T, V > Class Template Reference
-
-
- -

Utility class that acts as a functor to return incremental values. - More...

- -

#include <ArrayHelpers.hpp>

-
-Collaboration diagram for Incrementor< T, V >:
-
-
-
- - - - - - -

-Public Member Functions

 Incrementor (T start=0, V increment=1)
 
operator() ()
 
- - - - - -

-Private Attributes

value
 
const V increment
 
-

Detailed Description

-

template<class T, class V>
-class detail::Incrementor< T, V >

- -

Utility class that acts as a functor to return incremental values.

-
Template Parameters
- - - -
TThe type that will be returned by the functor, as well as the type of the initial value.
VThe type of the object that is added to the value on each call.
-
-
- -

Definition at line 32 of file ArrayHelpers.hpp.

-

Constructor & Destructor Documentation

- -

◆ Incrementor()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
Incrementor (start = 0,
increment = 1 
)
-
-inline
-
- -

Definition at line 34 of file ArrayHelpers.hpp.

- -
-
-

Member Function Documentation

- -

◆ operator()()

- -
-
- - - - - -
- - - - - - - -
T operator() ()
-
-inline
-
- -

Definition at line 36 of file ArrayHelpers.hpp.

- -
-
-

Member Data Documentation

- -

◆ value

- -
-
- - - - - -
- - - - -
T value
-
-private
-
- -

Definition at line 43 of file ArrayHelpers.hpp.

- -
-
- -

◆ increment

- -
-
- - - - - -
- - - - -
const V increment
-
-private
-
- -

Definition at line 44 of file ArrayHelpers.hpp.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/Doxygen/d5/d52/Debug_8hpp__dep__incl.map b/docs/Doxygen/d5/d52/Debug_8hpp__dep__incl.map deleted file mode 100644 index 4547a7ecc..000000000 --- a/docs/Doxygen/d5/d52/Debug_8hpp__dep__incl.map +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d5/d52/Debug_8hpp__dep__incl.md5 b/docs/Doxygen/d5/d52/Debug_8hpp__dep__incl.md5 deleted file mode 100644 index 1bc6d5e38..000000000 --- a/docs/Doxygen/d5/d52/Debug_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -da91609c8971c5a61a4072dcaabaf499 \ No newline at end of file diff --git a/docs/Doxygen/d5/d52/Debug_8hpp__dep__incl.svg b/docs/Doxygen/d5/d52/Debug_8hpp__dep__incl.svg deleted file mode 100644 index 9ddb2b9d7..000000000 --- a/docs/Doxygen/d5/d52/Debug_8hpp__dep__incl.svg +++ /dev/null @@ -1,645 +0,0 @@ - - - - - - -Debug.hpp - - -Node1 - - -Debug.hpp - - - - -Node2 - - -LinkedList.hpp - - - - -Node1->Node2 - - - - -Node30 - - -Debug.cpp - - - - -Node1->Node30 - - - - -Node31 - - -Error.hpp - - - - -Node1->Node31 - - - - -Node37 - - -SettingsWrapper.hpp - - - - -Node1->Node37 - - - - -Node3 - - -Updatable.hpp - - - - -Node2->Node3 - - - - -Node4 - - -ExtendedIOElement.hpp - - - - -Node2->Node4 - - - - -Node5 - - -ExtendedInputOutput.hpp - - - - -Node4->Node5 - - - - -Node15 - - -ExtendedInputOutput.cpp - - - - -Node4->Node15 - - - - -Node28 - - -StaticSizeExtendedIOElement.hpp - - - - -Node4->Node28 - - - - -Node29 - - -ExtendedIOElement.cpp - - - - -Node4->Node29 - - - - -Node6 - - -Button.hpp - - - - -Node5->Node6 - - - - -Node12 - - -ButtonMatrix.ipp - - - - -Node5->Node12 - - - - -Node14 - - -AnalogMultiplex.hpp - - - - -Node5->Node14 - - - - -Node5->Node15 - - - - -Node16 - - -ShiftRegisterOutBase.ipp - - - - -Node5->Node16 - - - - -Node19 - - -ShiftRegisterOut.ipp - - - - -Node5->Node19 - - - - -Node21 - - -SPIShiftRegisterOut.ipp - - - - -Node5->Node21 - - - - -Node22 - - -FilteredAnalog.hpp - - - - -Node5->Node22 - - - - -Node23 - - -LEDs.hpp - - - - -Node5->Node23 - - - - -Node25 - - -MAX7219_Base.hpp - - - - -Node5->Node25 - - - - -Node7 - - -Button.cpp - - - - -Node6->Node7 - - - - -Node8 - - -IncrementButton.hpp - - - - -Node6->Node8 - - - - -Node10 - - -IncrementDecrementButtons.hpp - - - - -Node6->Node10 - - - - -Node9 - - -IncrementButton.cpp - - - - -Node8->Node9 - - - - -Node11 - - -IncrementDecrementButtons.cpp - - - - -Node10->Node11 - - - - -Node13 - - -ButtonMatrix.hpp - - - - -Node12->Node13 - - - - -Node13->Node12 - - - - -Node17 - - -ShiftRegisterOutBase.hpp - - - - -Node16->Node17 - - - - -Node17->Node16 - - - - -Node18 - - -ShiftRegisterOut.hpp - - - - -Node17->Node18 - - - - -Node20 - - -SPIShiftRegisterOut.hpp - - - - -Node17->Node20 - - - - -Node18->Node19 - - - - -Node19->Node18 - - - - -Node20->Node21 - - - - -Node21->Node20 - - - - -Node24 - - -DotBarDisplayLEDs.hpp - - - - -Node23->Node24 - - - - -Node26 - - -MAX7219.hpp - - - - -Node25->Node26 - - - - -Node27 - - -MAX7219SevenSegmentDisplay.hpp - - - - -Node25->Node27 - - - - -Node28->Node14 - - - - -Node28->Node17 - - - - -Node28->Node26 - - - - -Node31->Node3 - - - - -Node31->Node15 - - - - -Node31->Node29 - - - - -Node32 - - -Array.hpp - - - - -Node31->Node32 - - - - -Node35 - - -BitArray.hpp - - - - -Node31->Node35 - - - - -Node36 - - -Exit.cpp - - - - -Node31->Node36 - - - - -Node32->Node14 - - - - -Node33 - - -ArrayHelpers.hpp - - - - -Node32->Node33 - - - - -Node34 - - -Hardware-Types.hpp - - - - -Node32->Node34 - - - - -Node33->Node28 - - - - -Node34->Node4 - - - - -Node34->Node13 - - - - -Node34->Node22 - - - - -Node35->Node17 - - - - -Node35->Node20 - - - - -Node35->Node26 - - - - -Node37->Node1 - - - - -Node37->Node3 - - - - -Node37->Node6 - - - - -Node37->Node22 - - - - -Node38 - - -ShiftRegisterOutRGB.hpp - - - - -Node37->Node38 - - - - -Node38->Node16 - - - - -Node39 - - -ShiftRegisterOutRGB.cpp - - - - -Node38->Node39 - - - - - diff --git a/docs/Doxygen/d5/d56/IncrementDecrementButtons_8hpp__dep__incl.map b/docs/Doxygen/d5/d56/IncrementDecrementButtons_8hpp__dep__incl.map deleted file mode 100644 index 8d167937a..000000000 --- a/docs/Doxygen/d5/d56/IncrementDecrementButtons_8hpp__dep__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/d5/d56/IncrementDecrementButtons_8hpp__dep__incl.md5 b/docs/Doxygen/d5/d56/IncrementDecrementButtons_8hpp__dep__incl.md5 deleted file mode 100644 index cd7b04703..000000000 --- a/docs/Doxygen/d5/d56/IncrementDecrementButtons_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -2eb6a5ca553c5db176c91c42cdaf66c4 \ No newline at end of file diff --git a/docs/Doxygen/d5/d56/IncrementDecrementButtons_8hpp__dep__incl.svg b/docs/Doxygen/d5/d56/IncrementDecrementButtons_8hpp__dep__incl.svg deleted file mode 100644 index ccfeb7e13..000000000 --- a/docs/Doxygen/d5/d56/IncrementDecrementButtons_8hpp__dep__incl.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - -IncrementDecrementButtons.hpp - - -Node1 - - -IncrementDecrementButtons.hpp - - - - -Node2 - - -IncrementDecrementButtons.cpp - - - - -Node1->Node2 - - - - - diff --git a/docs/Doxygen/d5/d80/classLEDs__coll__graph.map b/docs/Doxygen/d5/d80/classLEDs__coll__graph.map deleted file mode 100644 index d93f53750..000000000 --- a/docs/Doxygen/d5/d80/classLEDs__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/Doxygen/d5/d80/classLEDs__coll__graph.md5 b/docs/Doxygen/d5/d80/classLEDs__coll__graph.md5 deleted file mode 100644 index 9d2f0c5b8..000000000 --- a/docs/Doxygen/d5/d80/classLEDs__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -c574bb267887794c97959024ae490b0f \ No newline at end of file diff --git a/docs/Doxygen/d5/d80/classLEDs__coll__graph.svg b/docs/Doxygen/d5/d80/classLEDs__coll__graph.svg deleted file mode 100644 index 43ef63bf2..000000000 --- a/docs/Doxygen/d5/d80/classLEDs__coll__graph.svg +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - -LEDs< N > - - -Node1 - - -LEDs< N > - - - -+ LEDs() -+ begin() -+ displayRange() -+ set() -+ clear() -+ displayDot() -+ clear() - - - - -Node2 - - -Array< N > - -+ length - -+ operator[]() -+ operator[]() -+ begin() -+ begin() -+ end() -+ end() -+ operator==() -+ operator!=() -+ slice() -+ slice() -+ cslice() - - - - -Node2->Node1 - - - -ledPins - - -Node3 - - -N - - - - - - - - -Node3->Node2 - - - +data - - - diff --git a/docs/Doxygen/d5/d88/ShiftRegisterOutRGB_8hpp__dep__incl.map b/docs/Doxygen/d5/d88/ShiftRegisterOutRGB_8hpp__dep__incl.map deleted file mode 100644 index ab229df61..000000000 --- a/docs/Doxygen/d5/d88/ShiftRegisterOutRGB_8hpp__dep__incl.map +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/docs/Doxygen/d5/d88/ShiftRegisterOutRGB_8hpp__dep__incl.md5 b/docs/Doxygen/d5/d88/ShiftRegisterOutRGB_8hpp__dep__incl.md5 deleted file mode 100644 index ccaa6e31e..000000000 --- a/docs/Doxygen/d5/d88/ShiftRegisterOutRGB_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -e5c5878cccb17880661fb8a97c8e80a8 \ No newline at end of file diff --git a/docs/Doxygen/d5/d88/ShiftRegisterOutRGB_8hpp__dep__incl.svg b/docs/Doxygen/d5/d88/ShiftRegisterOutRGB_8hpp__dep__incl.svg deleted file mode 100644 index 685182ff2..000000000 --- a/docs/Doxygen/d5/d88/ShiftRegisterOutRGB_8hpp__dep__incl.svg +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - -ShiftRegisterOutRGB.hpp - - -Node1 - - -ShiftRegisterOutRGB.hpp - - - - -Node2 - - -ShiftRegisterOutBase.ipp - - - - -Node1->Node2 - - - - -Node8 - - -ShiftRegisterOutRGB.cpp - - - - -Node1->Node8 - - - - -Node3 - - -ShiftRegisterOutBase.hpp - - - - -Node2->Node3 - - - - -Node3->Node2 - - - - -Node4 - - -ShiftRegisterOut.hpp - - - - -Node3->Node4 - - - - -Node6 - - -SPIShiftRegisterOut.hpp - - - - -Node3->Node6 - - - - -Node5 - - -ShiftRegisterOut.ipp - - - - -Node4->Node5 - - - - -Node5->Node4 - - - - -Node7 - - -SPIShiftRegisterOut.ipp - - - - -Node6->Node7 - - - - -Node7->Node6 - - - - - diff --git a/docs/Doxygen/d5/d88/classDoublyLinkedList_1_1node__iterator__coll__graph.map b/docs/Doxygen/d5/d88/classDoublyLinkedList_1_1node__iterator__coll__graph.map deleted file mode 100644 index 1a6a9ab48..000000000 --- a/docs/Doxygen/d5/d88/classDoublyLinkedList_1_1node__iterator__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/d5/d88/classDoublyLinkedList_1_1node__iterator__coll__graph.md5 b/docs/Doxygen/d5/d88/classDoublyLinkedList_1_1node__iterator__coll__graph.md5 deleted file mode 100644 index 04b488e9d..000000000 --- a/docs/Doxygen/d5/d88/classDoublyLinkedList_1_1node__iterator__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -4433f93b3aed5dd245853516d4583617 \ No newline at end of file diff --git a/docs/Doxygen/d5/d88/classDoublyLinkedList_1_1node__iterator__coll__graph.svg b/docs/Doxygen/d5/d88/classDoublyLinkedList_1_1node__iterator__coll__graph.svg deleted file mode 100644 index ad046d4f3..000000000 --- a/docs/Doxygen/d5/d88/classDoublyLinkedList_1_1node__iterator__coll__graph.svg +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - -DoublyLinkedList< Node >::node_iterator< INode > - - -Node1 - - -DoublyLinkedList< Node - >::node_iterator< INode > - - - -+ node_iterator() -+ operator++() -+ operator--() - - - - -Node2 - - -node_iterator_base - -# node - -+ node_iterator_base() -+ operator!=() -+ operator*() - - - - -Node2->Node1 - - - - - diff --git a/docs/Doxygen/d5/d8d/classMAX7219__Base-members.html b/docs/Doxygen/d5/d8d/classMAX7219__Base-members.html deleted file mode 100644 index e2f7f1a04..000000000 --- a/docs/Doxygen/d5/d8d/classMAX7219__Base-members.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
MAX7219_Base Member List
-
-
- -

This is the complete list of members for MAX7219_Base, including all inherited members.

- - - - - - - - - - - - - - -
clear()MAX7219_Baseinline
DECODEMODEMAX7219_Basestatic
DISPLAYTESTMAX7219_Basestatic
init()MAX7219_Baseinline
INTENSITYMAX7219_Basestatic
loadPinMAX7219_Baseprivate
MAX7219_Base(pin_t loadPin)MAX7219_Baseinline
SCANLIMITMAX7219_Basestatic
send(uint8_t digit, uint8_t value)MAX7219_Baseinline
sendRaw(uint8_t opcode, uint8_t value)MAX7219_Baseinline
setIntensity(uint8_t intensity)MAX7219_Baseinline
settingsMAX7219_Baseprivate
SHUTDOWNMAX7219_Basestatic
- - - - diff --git a/docs/Doxygen/d5/d93/structSetbytesep.html b/docs/Doxygen/d5/d93/structSetbytesep.html deleted file mode 100644 index c454cf90e..000000000 --- a/docs/Doxygen/d5/d93/structSetbytesep.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - -Arduino Helpers: Setbytesep Struct Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
- -
-
Setbytesep Struct Reference
-
-
- -

#include <PrintStream.hpp>

-
-Collaboration diagram for Setbytesep:
-
-
-
- - - - -

-Public Attributes

char M_bytesep
 
-

Detailed Description

-
-

Definition at line 65 of file PrintStream.hpp.

-

Member Data Documentation

- -

◆ M_bytesep

- -
-
- - - - -
char M_bytesep
-
- -

Definition at line 66 of file PrintStream.hpp.

- -
-
-
The documentation for this struct was generated from the following file: -
- - - - diff --git a/docs/Doxygen/d5/d99/Debug_8ino-example.html b/docs/Doxygen/d5/d99/Debug_8ino-example.html deleted file mode 100644 index db6131465..000000000 --- a/docs/Doxygen/d5/d99/Debug_8ino-example.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - - -Arduino Helpers: Debug.ino - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
Debug.ino
-
-
-

-Debug

-

This examples shows how use the debug macros for printing different kinds of debugging information

-
Boards:
AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32
-

-Behavior

-
    -
  • Enable debugging in src/AH/Settings/Settings.hpp.
  • -
  • Upload the sketch to the Arduino, and open the Serial Monitor (CTRL+Shift+M)
  • -
  • Every five seconds, debugging information is printed, for example:
  • -
-
This is the result of `DEBUG`
-
[/home/pieter/GitHub/Arduino-Debugging/Example/Example.ino:12]: This is the result of `DEBUGREF`
-
[void loop() @ line 13]: This is the result of `DEBUGFN`
-
[0:2:11.085]: This is the result of `DEBUGTIME`
-
a = 1, b = 2, c = 3
-
log10(1000) - 2 = 1.00
-
millis() = 131085
-
Serial.read() = -1
-
[int someFunction(int) @ line 26]: parameter = 42
-
See also
Debug for instructions on how to add an option in the Arduino IDE to easily enable and disable debugging.
-

Written by PieterP, 2018-07-31
- https://github.com/tttapa/Arduino-Helpers

-
- -
- -
-
void setup() {
-
Serial.begin(115200);
-
while (!Serial)
-
;
-
}
-
-
void loop() {
-
DEBUG("This is the result of `DEBUG`");
-
DEBUGREF("This is the result of `DEBUGREF`");
-
DEBUGFN("This is the result of `DEBUGFN`");
-
DEBUGTIME("This is the result of `DEBUGTIME`");
-
int a = 1, b = 2, c = 3;
-
DEBUGVAL(a, b, c);
-
DEBUGVAL(log10(1000) - 2);
-
DEBUGVAL(millis());
-
DEBUGVAL(Serial.read());
-
someFunction(42);
-
DEBUG("");
-
delay(5000);
-
}
-
-
int someFunction(int parameter) {
-
DEBUGFN(NAMEDVALUE(parameter));
-
return parameter;
-
}
-
-
#define NAMEDVALUE(x)
Macro for printing an expression as a string, followed by its value.
Definition: Debug.hpp:69
-
#define DEBUGREF(x)
Print an expression and its location (file and line number) to the debug output if debugging is enabl...
Definition: Debug.hpp:84
-
#define DEBUGTIME(x)
Print an expression and the time since startup to the debug output if debugging is enabled.
Definition: Debug.hpp:104
-
#define DEBUGVAL(...)
Print multiple expressions and their values to the debug output if debugging is enabled.
Definition: Debug.hpp:151
-
#define DEBUGFN(x)
Print an expression and its function (function name and line number) to the debug output if debugging...
Definition: Debug.hpp:93
-
Dummy header file for Arduino builder. You have to add this file first, so the other headers are in t...
- -
#define DEBUG(x)
Print an expression to the debug output if debugging is enabled.
Definition: Debug.hpp:75
- - - - diff --git a/docs/Doxygen/d5/db0/SPIShiftRegisterOut_8hpp__incl.map b/docs/Doxygen/d5/db0/SPIShiftRegisterOut_8hpp__incl.map deleted file mode 100644 index 857917646..000000000 --- a/docs/Doxygen/d5/db0/SPIShiftRegisterOut_8hpp__incl.map +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d5/db0/SPIShiftRegisterOut_8hpp__incl.md5 b/docs/Doxygen/d5/db0/SPIShiftRegisterOut_8hpp__incl.md5 deleted file mode 100644 index be2a08e5e..000000000 --- a/docs/Doxygen/d5/db0/SPIShiftRegisterOut_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -80c20f628272458b755b264b5cb31863 \ No newline at end of file diff --git a/docs/Doxygen/d5/db0/SPIShiftRegisterOut_8hpp__incl.svg b/docs/Doxygen/d5/db0/SPIShiftRegisterOut_8hpp__incl.svg deleted file mode 100644 index 60520b6fa..000000000 --- a/docs/Doxygen/d5/db0/SPIShiftRegisterOut_8hpp__incl.svg +++ /dev/null @@ -1,682 +0,0 @@ - - - - - - -SPIShiftRegisterOut.hpp - - -Node1 - - -SPIShiftRegisterOut.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -ShiftRegisterOutBase.hpp - - - - -Node1->Node3 - - - - -Node11 - - -Arduino.h - - - - -Node1->Node11 - - - - -Node31 - - -AH/Containers/BitArray.hpp - - - - -Node1->Node31 - - - - -Node35 - - -SPIShiftRegisterOut.ipp - - - - -Node1->Node35 - - - - -Node3->Node2 - - - - -Node4 - - -StaticSizeExtendedIOElement.hpp - - - - -Node3->Node4 - - - - -Node3->Node31 - - - - -Node32 - - -ShiftRegisterOutBase.ipp - - - - -Node3->Node32 - - - - -Node4->Node2 - - - - -Node5 - - -ExtendedIOElement.hpp - - - - -Node4->Node5 - - - - -Node29 - - -AH/Containers/ArrayHelpers.hpp - - - - -Node4->Node29 - - - - -Node5->Node2 - - - - -Node6 - - -AH/Hardware/Hardware --Types.hpp - - - - -Node5->Node6 - - - - -Node24 - - -AH/Containers/LinkedList.hpp - - - - -Node5->Node24 - - - - -Node6->Node2 - - - - -Node7 - - -AH/Containers/Array.hpp - - - - -Node6->Node7 - - - - -Node13 - - -NamespaceSettings.hpp - - - - -Node6->Node13 - - - - -Node19 - - -stdint.h - - - - -Node6->Node19 - - - - -Node7->Node2 - - - - -Node8 - - -AH/Error/Error.hpp - - - - -Node7->Node8 - - - - -Node18 - - -stddef.h - - - - -Node7->Node18 - - - - -Node22 - - -AH/STL/iterator - - - - -Node7->Node22 - - - - -Node23 - - -AH/STL/type_traits - - - - -Node7->Node23 - - - - -Node8->Node2 - - - - -Node9 - - -AH/Debug/Debug.hpp - - - - -Node8->Node9 - - - - -Node9->Node2 - - - - -Node10 - - -AH/PrintStream/PrintStream.hpp - - - - -Node9->Node10 - - - - -Node12 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node9->Node12 - - - - -Node21 - - -DebugVal.hpp - - - - -Node9->Node21 - - - - -Node10->Node2 - - - - -Node10->Node11 - - - - -Node12->Node2 - - - - -Node12->Node9 - - - - -Node12->Node13 - - - - -Node14 - - -Settings.hpp - - - - -Node12->Node14 - - - - -Node20 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node12->Node20 - - - - -Node15 - - -AH/Types/Frequency.hpp - - - - -Node14->Node15 - - - - -Node16 - - -AH/Hardware/ADCConfig.hpp - - - - -Node14->Node16 - - - - -Node17 - - -limits.h - - - - -Node14->Node17 - - - - -Node14->Node18 - - - - -Node14->Node19 - - - - -Node15->Node2 - - - - -Node15->Node13 - - - - -Node16->Node2 - - - - -Node16->Node11 - - - - -Node24->Node2 - - - - -Node24->Node9 - - - - -Node25 - - -AH/Math/MinMaxFix.hpp - - - - -Node24->Node25 - - - - -Node27 - - -stdlib.h - - - - -Node24->Node27 - - - - -Node28 - - -iterator - - - - -Node24->Node28 - - - - -Node25->Node2 - - - - -Node25->Node13 - - - - -Node26 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node25->Node26 - - - - -Node26->Node2 - - - - -Node26->Node11 - - - - -Node29->Node2 - - - - -Node29->Node7 - - - - -Node29->Node10 - - - - -Node30 - - -AH/STL/algorithm - - - - -Node29->Node30 - - - - -Node31->Node2 - - - - -Node31->Node8 - - - - -Node31->Node13 - - - - -Node31->Node19 - - - - -Node32->Node3 - - - - -Node33 - - -ExtendedInputOutput.hpp - - - - -Node32->Node33 - - - - -Node34 - - -ShiftRegisterOutRGB.hpp - - - - -Node32->Node34 - - - - -Node33->Node2 - - - - -Node33->Node5 - - - - -Node33->Node11 - - - - -Node34->Node2 - - - - -Node34->Node12 - - - - -Node34->Node19 - - - - -Node35->Node1 - - - - -Node35->Node33 - - - - -Node36 - - -SPI.h - - - - -Node35->Node36 - - - - - diff --git a/docs/Doxygen/d5/db6/ArrayHelpers_8hpp.html b/docs/Doxygen/d5/db6/ArrayHelpers_8hpp.html deleted file mode 100644 index bc1abf35b..000000000 --- a/docs/Doxygen/d5/db6/ArrayHelpers_8hpp.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - - - -Arduino Helpers: ArrayHelpers.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ArrayHelpers.hpp File Reference
-
-
-
#include <AH/Settings/Warnings.hpp>
-#include "Array.hpp"
-#include <AH/STL/algorithm>
-#include <AH/PrintStream/PrintStream.hpp>
-
-Include dependency graph for ArrayHelpers.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - -

-Classes

class  Incrementor< T, V >
 Utility class that acts as a functor to return incremental values. More...
 
- - - -

-Namespaces

 detail
 
- - - -

-Macros

#define USE_CONSTEXPR_ARRAY_HELPERS
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<class T , size_t N, class G >
Array< T, N > generateArray (G generator)
 Generate an array using the given generator. More...
 
template<size_t N, class G >
auto generateArray (G generator) -> Array< decltype(generator()), N >
 Generate an array using the given generator. More...
 
template<class T , size_t N, class U >
Array< T, N > copyAs (const Array< U, N > &src)
 Copy an Array to an Array of a different type. More...
 
template<class F , class U , size_t N>
Array< decltype(F{}(U{})), N > apply (const Array< U, N > &src, F f)
 Apply a function to all elements of the array and return a copy. More...
 
template<class T , size_t N, class... Args>
Array< T, N > fillArray (Args... args)
 Fill the array with the same value for each element. More...
 
template<class T , size_t N, class U , class V = U>
Array< T, N > generateIncrementalArray (U start=0, V increment=V(1))
 Generate an array where the first value is given, and the subsequent values are calculated as the previous value incremented with a given value:
- \( x[0] = \mathrm{start} \)
- \( x[k+1] = x[k] + \mathrm{increment} \) . More...
 
template<class T , size_t M, size_t N>
Array< T, M+N > cat (const Array< T, M > &a, const Array< T, N > &b)
 Concatenate two arrays. More...
 
template<class T1 , class T2 , size_t N1, size_t N2, bool Reverse1, bool Reverse2, bool Const1, bool Const2>
Array< decltype(T1() *T2()), N1+N2 - 1 > distribute (const ArraySlice< T1, N1, Reverse1, Const1 > &a, const ArraySlice< T2, N2, Reverse2, Const2 > &b)
 
template<class T1 , class T2 , size_t N1, size_t N2, bool Reverse1, bool Const1>
Array< decltype(T1() *T2()), N1+N2 - 1 > distribute (const ArraySlice< T1, N1, Reverse1, Const1 > &a, const Array< T2, N2 > &b)
 
template<class T1 , class T2 , size_t N1, size_t N2, bool Reverse2, bool Const2>
Array< decltype(T1() *T2()), N1+N2 - 1 > distribute (const Array< T1, N1 > &a, const ArraySlice< T2, N2, Reverse2, Const2 > &b)
 
template<class T1 , class T2 , size_t N1, size_t N2>
Array< decltype(T1() *T2()), N1+N2 - 1 > distribute (const Array< T1, N1 > &a, const Array< T2, N2 > &b)
 
template<class T , size_t N, bool Reverse, bool Const>
std::enable_if_t< std::is_arithmetic< T >::value, Print & > operator<< (Print &os, const AH::ArraySlice< T, N, Reverse, Const > &a)
 
template<class T , size_t N>
std::enable_if_t< std::is_arithmetic< T >::value, Print & > operator<< (Print &os, const AH::Array< T, N > &a)
 
-

Macro Definition Documentation

- -

◆ USE_CONSTEXPR_ARRAY_HELPERS

- -
-
- - - - -
#define USE_CONSTEXPR_ARRAY_HELPERS
-
- -

Definition at line 15 of file ArrayHelpers.hpp.

- -
-
-

Function Documentation

- -

◆ operator<<() [1/2]

- -
-
- - - - - - - - - - - - - - - - - - -
std::enable_if_t<std::is_arithmetic<T>::value, Print &> operator<< (Print & os,
const AH::ArraySlice< T, N, Reverse, Const > & a 
)
-
- -

Definition at line 276 of file ArrayHelpers.hpp.

- -
-
- -

◆ operator<<() [2/2]

- -
-
- - - - - - - - - - - - - - - - - - -
std::enable_if_t<std::is_arithmetic<T>::value, Print &> operator<< (Print & os,
const AH::Array< T, N > & a 
)
-
- -

Definition at line 285 of file ArrayHelpers.hpp.

- -
-
-
- - - - diff --git a/docs/Doxygen/d5/db6/ArrayHelpers_8hpp_source.html b/docs/Doxygen/d5/db6/ArrayHelpers_8hpp_source.html deleted file mode 100644 index 4f4b0e9d4..000000000 --- a/docs/Doxygen/d5/db6/ArrayHelpers_8hpp_source.html +++ /dev/null @@ -1,297 +0,0 @@ - - - - - - - -Arduino Helpers: ArrayHelpers.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ArrayHelpers.hpp
-
-
-Go to the documentation of this file.
1 /* ✔ */
-
2 
-
3 #pragma once
-
4 
- -
6 
-
7 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
8 
-
9 #include "Array.hpp"
-
10 #include <AH/STL/algorithm>
-
11 
-
12 #if __cplusplus >= 201400L
-
13 #define USE_CONSTEXPR_ARRAY_HELPERS constexpr
-
14 #else
-
15 #define USE_CONSTEXPR_ARRAY_HELPERS
-
16 #endif
-
17 
- -
19 
-
20 namespace detail {
-
21 
-
31 template <class T, class V>
-
32 class Incrementor {
-
33  public:
- -
35  : value(start), increment(increment) {}
- -
37  T temp = value;
-
38  value += increment;
-
39  return temp;
-
40  }
-
41 
-
42  private:
-
43  T value;
-
44  const V increment;
-
45 };
-
46 
-
47 } // namespace detail
-
48 
- -
52 
- -
54 
-
70 template <class T, size_t N, class G>
- -
72  Array<T, N> array{{}};
-
73  std::generate(array.begin(), array.end(), generator);
-
74  return array;
-
75 }
-
76 
-
90 template <size_t N, class G>
- -
92  -> Array<decltype(generator()), N> {
-
93  Array<decltype(generator()), N> array{{}};
-
94  std::generate(array.begin(), array.end(), generator);
-
95  return array;
-
96 }
-
97 
-
111 template <class T, size_t N, class U>
- -
113  Array<T, N> dest{{}};
-
114  std::transform(std::begin(src), std::end(src), std::begin(dest),
-
115  [](const U &src) { return T(src); });
-
116  return dest;
-
117 }
-
118 
-
122 template <class F, class U, size_t N>
-
123 USE_CONSTEXPR_ARRAY_HELPERS Array<decltype(F{}(U{})), N>
-
124 apply(const Array<U, N> &src, F f) {
-
125  Array<decltype(F{}(U{})), N> dest{{}};
-
126  std::transform(std::begin(src), std::end(src), std::begin(dest), f);
-
127  return dest;
-
128 }
-
129 
-
130 #if !defined(__GNUC__) || (__GNUC__ > 7) || \
-
131  (__GNUC__ == 7 && __GNUC_MINOR__ >= 3) || defined(DOXYGEN)
-
132 
-
135 template <class T, size_t N, class... Args>
- -
137  return generateArray<N>([&]() { return T{args...}; });
-
138 }
-
139 #else
-
140 template <class T, size_t N, class... Args>
- -
142  Array<T, N> array{{}};
-
143  for (auto &el : array)
-
144  el = T{args...};
-
145  return array;
-
146 }
-
147 #endif
-
148 
-
181 template <class T, size_t N, class U, class V = U>
- -
183 generateIncrementalArray(U start = 0, V increment = V(1)) {
-
184  detail::Incrementor<U, V> g(start, increment);
-
185  return generateArray<T, N>(g);
-
186 }
-
187 
-
203 template <class T, size_t M, size_t N>
- -
205  const Array<T, N> &b) {
-
206  Array<T, M + N> result{{}};
-
207  size_t r = 0;
-
208  for (size_t i = 0; i < M; ++i, ++r)
-
209  result[r] = a[i];
-
210  for (size_t i = 0; i < N; ++i, ++r)
-
211  result[r] = b[i];
-
212  return result;
-
213 }
-
214 
-
215 template <class T1, class T2, size_t N1, size_t N2, bool Reverse1,
-
216  bool Reverse2, bool Const1, bool Const2>
-
217 USE_CONSTEXPR_ARRAY_HELPERS Array<decltype(T1() * T2()), N1 + N2 - 1>
- - -
220  Array<decltype(T1() * T2()), N1 + N2 - 1> result = {{}};
-
221  for (size_t i = 0; i < N1; ++i)
-
222  for (size_t j = 0; j < N2; ++j)
-
223  result[i + j] += a[i] * b[j];
-
224  return result;
-
225 }
-
226 
-
227 template <class T1, class T2, size_t N1, size_t N2, bool Reverse1, bool Const1>
-
228 USE_CONSTEXPR_ARRAY_HELPERS Array<decltype(T1() * T2()), N1 + N2 - 1>
- -
230  const Array<T2, N2> &b) {
-
231  return distribute(a, b.slice());
-
232 }
-
233 
-
234 template <class T1, class T2, size_t N1, size_t N2, bool Reverse2, bool Const2>
-
235 USE_CONSTEXPR_ARRAY_HELPERS Array<decltype(T1() * T2()), N1 + N2 - 1>
- - -
238  return distribute(a.slice(), b);
-
239 }
-
240 
-
241 template <class T1, class T2, size_t N1, size_t N2>
-
242 USE_CONSTEXPR_ARRAY_HELPERS Array<decltype(T1() * T2()), N1 + N2 - 1>
- -
244  return distribute(a.slice(), b.slice());
-
245 }
-
246 
- -
248 
-
250 
-
251 #ifndef ARDUINO
-
252 
-
253 #include <ostream>
-
254 
-
255 template <class T, size_t N, bool Reverse, bool Const>
-
256 std::enable_if_t<std::is_arithmetic<T>::value, std::ostream &>
-
257 operator<<(std::ostream &os, const AH::ArraySlice<T, N, Reverse, Const> &a) {
-
258  for (const T &el : a.template slice<0, N - 2>())
-
259  os << el << ", ";
-
260  os << a[N - 1];
-
261  return os;
-
262 }
-
263 
-
264 template <class T, size_t N>
-
265 std::enable_if_t<std::is_arithmetic<T>::value, std::ostream &>
-
266 operator<<(std::ostream &os, const AH::Array<T, N> &a) {
-
267  return os << a.slice();
-
268 }
-
269 
-
270 #endif
-
271 
- -
273 
-
274 template <class T, size_t N, bool Reverse, bool Const>
-
275 std::enable_if_t<std::is_arithmetic<T>::value, Print &>
-
276 operator<<(Print &os, const AH::ArraySlice<T, N, Reverse, Const> &a) {
-
277  for (const T &el : a.template slice<0, N - 2>())
-
278  os << el << ", ";
-
279  os << a[N - 1];
-
280  return os;
-
281 }
-
282 
-
283 template <class T, size_t N>
-
284 std::enable_if_t<std::is_arithmetic<T>::value, Print &>
-
285 operator<<(Print &os, const AH::Array<T, N> &a) {
-
286  return os << a.slice();
-
287 }
-
288 
- -
-
#define BEGIN_AH_NAMESPACE
-
ArraySlice< T, abs_diff(Start, End)+1,(End< Start), false > slice()
Get a view on a slice of the Array.
- - -
std::enable_if_t< std::is_arithmetic< T >::value, Print & > operator<<(Print &os, const AH::ArraySlice< T, N, Reverse, Const > &a)
- -
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
An array wrapper for easy copying, comparing, and iterating.
Definition: Array.hpp:36
-
#define USE_CONSTEXPR_ARRAY_HELPERS
-
Array< decltype(T1() *T2()), N1+N2 - 1 > distribute(const ArraySlice< T1, N1, Reverse1, Const1 > &a, const ArraySlice< T2, N2, Reverse2, Const2 > &b)
-
Array< decltype(F{}(U{})), N > apply(const Array< U, N > &src, F f)
Apply a function to all elements of the array and return a copy.
-
Incrementor(T start=0, V increment=1)
-
Array< T, N > generateIncrementalArray(U start=0, V increment=V(1))
Generate an array where the first value is given, and the subsequent values are calculated as the pre...
-
Array< T, N > copyAs(const Array< U, N > &src)
Copy an Array to an Array of a different type.
-
Array< T, N > fillArray(Args... args)
Fill the array with the same value for each element.
-
Class for a view on a slice of an array.
Definition: Array.hpp:25
- -
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
Array< T, M+N > cat(const Array< T, M > &a, const Array< T, N > &b)
Concatenate two arrays.
-
#define END_AH_NAMESPACE
- - -
Array< T, N > generateArray(G generator)
Generate an array using the given generator.
-
Utility class that acts as a functor to return incremental values.
- - - - diff --git a/docs/Doxygen/d5/db9/structNormalUpdatable.html b/docs/Doxygen/d5/db9/structNormalUpdatable.html deleted file mode 100644 index ad6fa2251..000000000 --- a/docs/Doxygen/d5/db9/structNormalUpdatable.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - -Arduino Helpers: NormalUpdatable Struct Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
NormalUpdatable Struct Reference
-
-
- -

#include <Updatable.hpp>

-
-Collaboration diagram for NormalUpdatable:
-
-
-
-

Detailed Description

-
-

Definition at line 16 of file Updatable.hpp.

-

The documentation for this struct was generated from the following file: -
- - - - diff --git a/docs/Doxygen/d5/dcd/classIncrementDecrementButtons__coll__graph.map b/docs/Doxygen/d5/dcd/classIncrementDecrementButtons__coll__graph.map deleted file mode 100644 index 55587688b..000000000 --- a/docs/Doxygen/d5/dcd/classIncrementDecrementButtons__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/d5/dcd/classIncrementDecrementButtons__coll__graph.md5 b/docs/Doxygen/d5/dcd/classIncrementDecrementButtons__coll__graph.md5 deleted file mode 100644 index 26b4c0774..000000000 --- a/docs/Doxygen/d5/dcd/classIncrementDecrementButtons__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -1599cd15e3a7540e28fff720732bc949 \ No newline at end of file diff --git a/docs/Doxygen/d5/dcd/classIncrementDecrementButtons__coll__graph.svg b/docs/Doxygen/d5/dcd/classIncrementDecrementButtons__coll__graph.svg deleted file mode 100644 index c87308293..000000000 --- a/docs/Doxygen/d5/dcd/classIncrementDecrementButtons__coll__graph.svg +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - -IncrementDecrementButtons - - -Node1 - - -IncrementDecrementButtons - -- longPressState -- longPressRepeat -- state - -+ IncrementDecrementButtons() -+ begin() -+ update() -+ getState() -# updateImplementation() - - - - -Node2 - - -Button - -- pin -- prevInput -- debouncedState -- prevBounceTime -- invertState -- debounceTime - -+ Button() -+ Button() -+ begin() -+ invert() -+ update() -+ getState() -+ previousBounceTime() -+ stableTime() -+ stableTime() -+ getName() -+ setDebounceTime() -+ getDebounceTime() - - - - -Node2->Node1 - - - -decrementButton --incrementButton - - - diff --git a/docs/Doxygen/d5/de0/classUpdatable.html b/docs/Doxygen/d5/de0/classUpdatable.html deleted file mode 100644 index 1366478cc..000000000 --- a/docs/Doxygen/d5/de0/classUpdatable.html +++ /dev/null @@ -1,684 +0,0 @@ - - - - - - - -Arduino Helpers: Updatable< T > Class Template Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

A super class for object that have to be updated regularly. - More...

- -

#include <Updatable.hpp>

-
-Inheritance diagram for Updatable< T >:
-
-
-
-
-Collaboration diagram for Updatable< T >:
-
-
-
- - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

virtual ~Updatable ()
 Destructor: remove the updatable from the linked list of instances. More...
 
virtual void update ()=0
 Update this updatable. More...
 
virtual void begin ()=0
 Initialize this updatable. More...
 
void enable ()
 Enable this updatable: insert it into the linked list of instances, so it gets updated automatically. More...
 
void disable ()
 Disable this updatable: remove it from the linked list of instances, so it no longer gets updated automatically. More...
 
bool isEnabled ()
 Check if this updatable is enabled. More...
 
- - - - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static void beginAll ()
 Begin all enabled instances of this class. More...
 
static void updateAll ()
 Update all enabled instances of this class. More...
 
static void enable (Updatable *element)
 
static void enable (Updatable &element)
 
template<class U , size_t N>
static void enable (U(&array)[N])
 
static void disable (Updatable< T > *element)
 
static void disable (Updatable< T > &element)
 
template<class U , size_t N>
static void disable (U(&array)[N])
 
- - - - -

-Protected Member Functions

 Updatable ()
 Create an Updatabe and add it to the linked list of instances. More...
 
- - - - - -

-Protected Attributes

Updatable< T > * next
 
Updatable< T > * previous
 
- - - -

-Static Private Attributes

static DoublyLinkedList< Updatable< T > > updatables
 
-

Detailed Description

-

template<class T = NormalUpdatable>
-class Updatable< T >

- -

A super class for object that have to be updated regularly.

-

All instances of this class are kept in a linked list, so it's easy to iterate over all of them to update them.

- -

Definition at line 25 of file Updatable.hpp.

-

Constructor & Destructor Documentation

- -

◆ Updatable()

- -
-
- - - - - -
- - - - - - - -
Updatable ()
-
-inlineprotected
-
- -

Create an Updatabe and add it to the linked list of instances.

- -

Definition at line 28 of file Updatable.hpp.

- -
-
- -

◆ ~Updatable()

- -
-
- - - - - -
- - - - - - - -
virtual ~Updatable ()
-
-inlinevirtual
-
- -

Destructor: remove the updatable from the linked list of instances.

- -

Definition at line 32 of file Updatable.hpp.

- -
-
-

Member Function Documentation

- -

◆ update()

- -
-
- - - - - -
- - - - - - - -
virtual void update ()
-
-pure virtual
-
- -

Update this updatable.

- -
-
- -

◆ begin()

- -
-
- - - - - -
- - - - - - - -
virtual void begin ()
-
-pure virtual
-
- -

Initialize this updatable.

- -
-
- -

◆ enable() [1/4]

- -
-
- - - - - -
- - - - - - - -
void enable ()
-
-inline
-
- -

Enable this updatable: insert it into the linked list of instances, so it gets updated automatically.

- -

Definition at line 45 of file Updatable.hpp.

- -
-
- -

◆ disable() [1/4]

- -
-
- - - - - -
- - - - - - - -
void disable ()
-
-inline
-
- -

Disable this updatable: remove it from the linked list of instances, so it no longer gets updated automatically.

- -

Definition at line 55 of file Updatable.hpp.

- -
-
- -

◆ isEnabled()

- -
-
- - - - - -
- - - - - - - -
bool isEnabled ()
-
-inline
-
- -

Check if this updatable is enabled.

-
Note
Assumes that the updatable is not added to a different linked list by the user.
- -

Definition at line 69 of file Updatable.hpp.

- -
-
- -

◆ beginAll()

- -
-
- - - - - -
- - - - - - - -
static void beginAll ()
-
-inlinestatic
-
- -

Begin all enabled instances of this class.

-
See also
begin()
- -

Definition at line 73 of file Updatable.hpp.

- -
-
- -

◆ updateAll()

- -
-
- - - - - -
- - - - - - - -
static void updateAll ()
-
-inlinestatic
-
- -

Update all enabled instances of this class.

-
See also
update()
- -

Definition at line 80 of file Updatable.hpp.

- -
-
- -

◆ enable() [2/4]

- -
-
- - - - - -
- - - - - - - - -
static void enable (Updatable< T > * element)
-
-inlinestatic
-
- -

Definition at line 85 of file Updatable.hpp.

- -
-
- -

◆ enable() [3/4]

- -
-
- - - - - -
- - - - - - - - -
static void enable (Updatable< T > & element)
-
-inlinestatic
-
- -

Definition at line 87 of file Updatable.hpp.

- -
-
- -

◆ enable() [4/4]

- -
-
- - - - - -
- - - - - - - - -
static void enable (U(&) array[N])
-
-inlinestatic
-
- -

Definition at line 90 of file Updatable.hpp.

- -
-
- -

◆ disable() [2/4]

- -
-
- - - - - -
- - - - - - - - -
static void disable (Updatable< T > * element)
-
-inlinestatic
-
- -

Definition at line 95 of file Updatable.hpp.

- -
-
- -

◆ disable() [3/4]

- -
-
- - - - - -
- - - - - - - - -
static void disable (Updatable< T > & element)
-
-inlinestatic
-
- -

Definition at line 97 of file Updatable.hpp.

- -
-
- -

◆ disable() [4/4]

- -
-
- - - - - -
- - - - - - - - -
static void disable (U(&) array[N])
-
-inlinestatic
-
- -

Definition at line 100 of file Updatable.hpp.

- -
-
-

Member Data Documentation

- -

◆ updatables

- -
-
- - - - - -
- - - - -
DoublyLinkedList< Updatable< T > > updatables
-
-staticprivate
-
- -

Definition at line 106 of file Updatable.hpp.

- -
-
- -

◆ next

- -
-
- - - - - -
- - - - -
Updatable< T > * next
-
-protectedinherited
-
- -

Definition at line 305 of file LinkedList.hpp.

- -
-
- -

◆ previous

- -
-
- - - - - -
- - - - -
Updatable< T > * previous
-
-protectedinherited
-
- -

Definition at line 306 of file LinkedList.hpp.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/Doxygen/d5/dee/IncreaseBitDepth_8hpp.html b/docs/Doxygen/d5/dee/IncreaseBitDepth_8hpp.html deleted file mode 100644 index 04eea7eba..000000000 --- a/docs/Doxygen/d5/dee/IncreaseBitDepth_8hpp.html +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - - -Arduino Helpers: IncreaseBitDepth.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
IncreaseBitDepth.hpp File Reference
-
-
-
#include <AH/Settings/Warnings.hpp>
-#include <AH/STL/type_traits>
-#include <limits.h>
-#include <stddef.h>
-
-Include dependency graph for IncreaseBitDepth.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - - - - - - - - -

-Functions

template<size_t Bits_out, size_t Bits_in, class T_out , class T_in >
std::enable_if_t<(Bits_out > 2 *Bits_in), T_out > increaseBitDepthImpl (T_in in)
 
template<size_t Bits_out, size_t Bits_in, class T_out , class T_in >
std::enable_if_t<(Bits_out<=2 *Bits_in), T_out > increaseBitDepthImpl (T_in in)
 
template<size_t Bits_out, size_t Bits_in, class T_out , class T_in >
T_out increaseBitDepth (T_in in)
 Increase the bit depth of the given value from Bits_in bits wide to Bits_out bits wide, evenly distributing the error across the entire range, such that the error for each element is between -0.5 and +0.5. More...
 
- - - - -

-Variables

template<size_t Bits_out, size_t Bits_in, class T_out , class T_in >
std::enable_if_t<(Bits_out<=2 *Bits_in), T_out > increaseBitDepthImpl (T_in in)
 
-

Function Documentation

- -

◆ increaseBitDepthImpl() [1/2]

- -
-
- - - - - - - - -
std::enable_if_t<(Bits_out > 2 * Bits_in), T_out> increaseBitDepthImpl (T_in in)
-
- -

Definition at line 18 of file IncreaseBitDepth.hpp.

- -
-
- -

◆ increaseBitDepthImpl() [2/2]

- -
-
- - - - - - - - -
std::enable_if_t<(Bits_out <= 2 * Bits_in), T_out> increaseBitDepthImpl (T_in in)
-
- -

Definition at line 26 of file IncreaseBitDepth.hpp.

- -
-
-

Variable Documentation

- -

◆ increaseBitDepthImpl

- -
-
- - - - -
std::enable_if_t<(Bits_out <= 2 * Bits_in), T_out> increaseBitDepthImpl(T_in in)
-
- -

Definition at line 14 of file IncreaseBitDepth.hpp.

- -
-
-
- - - - diff --git a/docs/Doxygen/d5/dee/IncreaseBitDepth_8hpp_source.html b/docs/Doxygen/d5/dee/IncreaseBitDepth_8hpp_source.html deleted file mode 100644 index 4e2ed5828..000000000 --- a/docs/Doxygen/d5/dee/IncreaseBitDepth_8hpp_source.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - -Arduino Helpers: IncreaseBitDepth.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
IncreaseBitDepth.hpp
-
-
-Go to the documentation of this file.
1 #pragma once
-
2 
- -
4 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
5 
-
6 #include <AH/STL/type_traits> // enable_if
-
7 #include <limits.h> // CHAR_BIT
-
8 #include <stddef.h> // size_t
-
9 
- -
11 
-
12 template <size_t Bits_out, size_t Bits_in, class T_out, class T_in>
-
13 std::enable_if_t<(Bits_out <= 2 * Bits_in), T_out>
- -
15 
-
16 template <size_t Bits_out, size_t Bits_in, class T_out, class T_in>
-
17 std::enable_if_t<(Bits_out > 2 * Bits_in), T_out>
- -
19  constexpr size_t leftShift = Bits_out - Bits_in;
-
20  return (T_out(in) << leftShift) |
-
21  increaseBitDepthImpl<leftShift, Bits_in, T_out>(in);
-
22 }
-
23 
-
24 template <size_t Bits_out, size_t Bits_in, class T_out, class T_in>
-
25 std::enable_if_t<(Bits_out <= 2 * Bits_in), T_out>
- -
27  constexpr size_t leftShift = Bits_out - Bits_in;
-
28  constexpr size_t rightShift = Bits_in - leftShift;
-
29  return (T_out(in) << leftShift) | (in >> rightShift);
-
30 }
-
31 
-
34 
-
67 template <size_t Bits_out, size_t Bits_in, class T_out, class T_in>
-
68 T_out increaseBitDepth(T_in in) {
-
69  static_assert(Bits_in <= sizeof(T_in) * CHAR_BIT,
-
70  "Error: Bits_in > bits(T_in)");
-
71  static_assert(Bits_out <= sizeof(T_out) * CHAR_BIT,
-
72  "Error: Bits_out > bits(T_out)");
-
73  return increaseBitDepthImpl<Bits_out, Bits_in, T_out>(in);
-
74 }
-
75 
-
77 
- -
79 
- -
-
#define BEGIN_AH_NAMESPACE
- -
std::enable_if_t<(Bits_out<=2 *Bits_in), T_out > increaseBitDepthImpl(T_in in)
-
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
T_out increaseBitDepth(T_in in)
Increase the bit depth of the given value from Bits_in bits wide to Bits_out bits wide,...
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
#define END_AH_NAMESPACE
- - - - diff --git a/docs/Doxygen/d5/dee/classArraySlice_1_1Iterator__coll__graph.map b/docs/Doxygen/d5/dee/classArraySlice_1_1Iterator__coll__graph.map deleted file mode 100644 index 8448d3f40..000000000 --- a/docs/Doxygen/d5/dee/classArraySlice_1_1Iterator__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/d5/dee/classArraySlice_1_1Iterator__coll__graph.md5 b/docs/Doxygen/d5/dee/classArraySlice_1_1Iterator__coll__graph.md5 deleted file mode 100644 index 3d1dcd1cf..000000000 --- a/docs/Doxygen/d5/dee/classArraySlice_1_1Iterator__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -ed7eeb575cbe3ff3ba03e57ce3e21a10 \ No newline at end of file diff --git a/docs/Doxygen/d5/dee/classArraySlice_1_1Iterator__coll__graph.svg b/docs/Doxygen/d5/dee/classArraySlice_1_1Iterator__coll__graph.svg deleted file mode 100644 index cbe8acdea..000000000 --- a/docs/Doxygen/d5/dee/classArraySlice_1_1Iterator__coll__graph.svg +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - -ArraySlice< T, N, Reverse, Const >::Iterator - - -Node1 - - -ArraySlice< T, N, Reverse, - Const >::Iterator - -- ptr - -+ Iterator() -+ operator!=() -+ operator==() -+ operator*() -+ operator++() -+ operator--() -+ operator-() -+ operator+() -+ operator-() -+ operator<() - - - - - diff --git a/docs/Doxygen/d5/def/Containers_8dox.html b/docs/Doxygen/d5/def/Containers_8dox.html deleted file mode 100644 index 278e976e4..000000000 --- a/docs/Doxygen/d5/def/Containers_8dox.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Containers.dox File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Containers.dox File Reference
-
-
-
- - - - diff --git a/docs/Doxygen/d6/d10/classSPIShiftRegisterOut__coll__graph.map b/docs/Doxygen/d6/d10/classSPIShiftRegisterOut__coll__graph.map deleted file mode 100644 index 3ff4d6b7c..000000000 --- a/docs/Doxygen/d6/d10/classSPIShiftRegisterOut__coll__graph.map +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/Doxygen/d6/d10/classSPIShiftRegisterOut__coll__graph.md5 b/docs/Doxygen/d6/d10/classSPIShiftRegisterOut__coll__graph.md5 deleted file mode 100644 index cfc6e886d..000000000 --- a/docs/Doxygen/d6/d10/classSPIShiftRegisterOut__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -a0c66f5a03338b32d6901c4d75d23494 \ No newline at end of file diff --git a/docs/Doxygen/d6/d10/classSPIShiftRegisterOut__coll__graph.svg b/docs/Doxygen/d6/d10/classSPIShiftRegisterOut__coll__graph.svg deleted file mode 100644 index f8d5a3ec3..000000000 --- a/docs/Doxygen/d6/d10/classSPIShiftRegisterOut__coll__graph.svg +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - -SPIShiftRegisterOut< N > - - -Node1 - - -SPIShiftRegisterOut< N > - - - -+ SPIShiftRegisterOut() -+ begin() -+ update() - - - - -Node2 - - -ShiftRegisterOutBase< N > - -# latchPin -# bitOrder -# buffer -# dirty - -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogRead() -+ analogWrite() -+ red() -+ redPins() -+ green() -+ greenPins() -+ blue() -+ bluePins() -# ShiftRegisterOutBase() - - - - -Node2->Node1 - - - - -Node3 - - -StaticSizeExtendedIOElement< N > - - - -+ pins() -+ length() -# StaticSizeExtendedIOElement() - - - - -Node3->Node2 - - - - -Node4 - - -ExtendedIOElement - -- length -- start -- end -- offset - -+ ~ExtendedIOElement() -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogWrite() -+ analogRead() -+ begin() -+ update() -+ pin() -+ operator[]() -+ getLength() -+ getEnd() -+ getStart() -+ beginAll() -+ getAll() -# ExtendedIOElement() - - - - -Node4->Node3 - - - - -Node5 - - -DoublyLinkable< Extended -IOElement > - - - -# ~DoublyLinkable() - - - - -Node4->Node5 - - - #next -#previous - - -Node6 - - -DoublyLinkedList< Extended -IOElement > - - - -+ append() -+ append() -+ insertBefore() -+ insertBefore() -+ insertSorted() -+ insertSorted() -+ remove() -+ remove() -+ moveDown() -+ couldContain() -+ begin() -+ begin() -+ end() -+ end() -+ rbegin() -+ rbegin() -+ rend() -+ rend() -+ getFirst() -+ getLast() - - - - -Node4->Node6 - - - -last --first - - -Node5->Node4 - - - - -Node6->Node4 - - - -elements - - - diff --git a/docs/Doxygen/d6/d19/DotBarDisplayLEDs_8hpp__incl.map b/docs/Doxygen/d6/d19/DotBarDisplayLEDs_8hpp__incl.map deleted file mode 100644 index 21a47ac75..000000000 --- a/docs/Doxygen/d6/d19/DotBarDisplayLEDs_8hpp__incl.map +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d6/d19/DotBarDisplayLEDs_8hpp__incl.md5 b/docs/Doxygen/d6/d19/DotBarDisplayLEDs_8hpp__incl.md5 deleted file mode 100644 index f1c8116b8..000000000 --- a/docs/Doxygen/d6/d19/DotBarDisplayLEDs_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -5f3f31ae63de7eb378ad6d8ca4b3ad3c \ No newline at end of file diff --git a/docs/Doxygen/d6/d19/DotBarDisplayLEDs_8hpp__incl.svg b/docs/Doxygen/d6/d19/DotBarDisplayLEDs_8hpp__incl.svg deleted file mode 100644 index df8cc6e65..000000000 --- a/docs/Doxygen/d6/d19/DotBarDisplayLEDs_8hpp__incl.svg +++ /dev/null @@ -1,494 +0,0 @@ - - - - - - -DotBarDisplayLEDs.hpp - - -Node1 - - -DotBarDisplayLEDs.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -AH/Hardware/LEDs/LEDs.hpp - - - - -Node1->Node3 - - - - -Node3->Node2 - - - - -Node4 - - -AH/Hardware/ExtendedInput -Output/ExtendedInputOutput.hpp - - - - -Node3->Node4 - - - - -Node4->Node2 - - - - -Node5 - - -Arduino.h - - - - -Node4->Node5 - - - - -Node6 - - -ExtendedIOElement.hpp - - - - -Node4->Node6 - - - - -Node6->Node2 - - - - -Node7 - - -AH/Hardware/Hardware --Types.hpp - - - - -Node6->Node7 - - - - -Node24 - - -AH/Containers/LinkedList.hpp - - - - -Node6->Node24 - - - - -Node7->Node2 - - - - -Node8 - - -AH/Containers/Array.hpp - - - - -Node7->Node8 - - - - -Node13 - - -NamespaceSettings.hpp - - - - -Node7->Node13 - - - - -Node19 - - -stdint.h - - - - -Node7->Node19 - - - - -Node8->Node2 - - - - -Node9 - - -AH/Error/Error.hpp - - - - -Node8->Node9 - - - - -Node18 - - -stddef.h - - - - -Node8->Node18 - - - - -Node22 - - -AH/STL/iterator - - - - -Node8->Node22 - - - - -Node23 - - -AH/STL/type_traits - - - - -Node8->Node23 - - - - -Node9->Node2 - - - - -Node10 - - -AH/Debug/Debug.hpp - - - - -Node9->Node10 - - - - -Node10->Node2 - - - - -Node11 - - -AH/PrintStream/PrintStream.hpp - - - - -Node10->Node11 - - - - -Node12 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node10->Node12 - - - - -Node21 - - -DebugVal.hpp - - - - -Node10->Node21 - - - - -Node11->Node2 - - - - -Node11->Node5 - - - - -Node12->Node2 - - - - -Node12->Node10 - - - - -Node12->Node13 - - - - -Node14 - - -Settings.hpp - - - - -Node12->Node14 - - - - -Node20 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node12->Node20 - - - - -Node15 - - -AH/Types/Frequency.hpp - - - - -Node14->Node15 - - - - -Node16 - - -AH/Hardware/ADCConfig.hpp - - - - -Node14->Node16 - - - - -Node17 - - -limits.h - - - - -Node14->Node17 - - - - -Node14->Node18 - - - - -Node14->Node19 - - - - -Node15->Node2 - - - - -Node15->Node13 - - - - -Node16->Node2 - - - - -Node16->Node5 - - - - -Node24->Node2 - - - - -Node24->Node10 - - - - -Node25 - - -AH/Math/MinMaxFix.hpp - - - - -Node24->Node25 - - - - -Node27 - - -stdlib.h - - - - -Node24->Node27 - - - - -Node28 - - -iterator - - - - -Node24->Node28 - - - - -Node25->Node2 - - - - -Node25->Node13 - - - - -Node26 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node25->Node26 - - - - -Node26->Node2 - - - - -Node26->Node5 - - - - - diff --git a/docs/Doxygen/d6/d3a/DotBarDisplayLEDs_8hpp.html b/docs/Doxygen/d6/d3a/DotBarDisplayLEDs_8hpp.html deleted file mode 100644 index 053470b0f..000000000 --- a/docs/Doxygen/d6/d3a/DotBarDisplayLEDs_8hpp.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - - -Arduino Helpers: DotBarDisplayLEDs.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
DotBarDisplayLEDs.hpp File Reference
-
-
-
-Include dependency graph for DotBarDisplayLEDs.hpp:
-
-
-
-
-

Go to the source code of this file.

- - - - - -

-Classes

class  DotBarDisplayLEDs< N >
 A class for LED bars. More...
 
- - - - -

-Enumerations

enum  DotBarMode : bool { Bar = false, -Dot = true - }
 An enumeration type to set an LED display to either bar or dot mode. More...
 
-

Enumeration Type Documentation

- -

◆ DotBarMode

- -
-
- - - - - -
- - - - -
enum DotBarMode : bool
-
-strong
-
- -

An enumeration type to set an LED display to either bar or dot mode.

- - - -
Enumerator
Bar 

Turn on a range of LEDs up to the active LED.

-
Dot 

Turn on only the active LED.

-
- -

Definition at line 15 of file DotBarDisplayLEDs.hpp.

- -
-
-
- - - - diff --git a/docs/Doxygen/d6/d3a/DotBarDisplayLEDs_8hpp_source.html b/docs/Doxygen/d6/d3a/DotBarDisplayLEDs_8hpp_source.html deleted file mode 100644 index ea18bd909..000000000 --- a/docs/Doxygen/d6/d3a/DotBarDisplayLEDs_8hpp_source.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - - -Arduino Helpers: DotBarDisplayLEDs.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
DotBarDisplayLEDs.hpp
-
-
-Go to the documentation of this file.
1 /* ✔ */
-
2 
-
3 #pragma once
-
4 
- -
6 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
7 
-
8 #include <AH/Hardware/LEDs/LEDs.hpp>
-
9 
- -
11 
-
15 enum class DotBarMode : bool {
-
16  Bar = false,
-
17  Dot = true,
-
18 };
-
19 
-
28 template <uint8_t N>
-
29 class DotBarDisplayLEDs : public LEDs<N> {
-
30  public:
- -
33 
-
40  void display(uint8_t value) const {
-
41  if (value == 0)
-
42  this->clear();
-
43  else if (mode == DotBarMode::Bar)
-
44  this->displayRange(0, value);
-
45  else
-
46  this->displayDot(value - 1);
-
47  }
-
48 
-
55  void display(float value) const { display(uint8_t(value * (N + 1))); }
-
56 
-
58  DotBarMode getMode() const { return mode; }
-
59 
-
66  void setMode(DotBarMode mode) { this->mode = mode; }
-
67 
- -
70 
- -
73 
- -
76 
-
77  private:
- -
79 };
-
80 
- -
82 
- -
-
#define BEGIN_AH_NAMESPACE
- - -
void display(float value) const
Display the given fraction of the LED bar.
-
DotBarMode
An enumeration type to set an LED display to either bar or dot mode.
-
DotBarDisplayLEDs(const PinList< N > &ledPins)
Constructor from list of pins.
-
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
- -
void setMode(DotBarMode mode)
Set the mode to either dot or bar mode.
-
DotBarMode getMode() const
Get the dot/bar mode.
-
void barMode()
Set the mode to bar mode.
-
Turn on only the active LED.
-
void clear() const
Turn off all LEDs.
Definition: LEDs.hpp:80
-
A class for collections of LEDs that can display ranges.
Definition: LEDs.hpp:21
-
Turn on a range of LEDs up to the active LED.
-
void dotMode()
Set the mode to dot mode.
-
A class for LED bars.
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
void displayRange(uint8_t startOn, uint8_t startOff) const
Turn on a range of the LEDs.
Definition: LEDs.hpp:48
-
const PinList< N > ledPins
Definition: LEDs.hpp:86
-
#define END_AH_NAMESPACE
-
void displayDot(uint8_t led) const
Turn on a single LED, and turn off all others.
Definition: LEDs.hpp:75
-
void toggleMode()
Toggle the dot/bar mode.
-
void display(uint8_t value) const
Display the given number of LEDs on the LED bar.
- - - - diff --git a/docs/Doxygen/d6/d3b/FixArduinoMacros_8hpp.html b/docs/Doxygen/d6/d3b/FixArduinoMacros_8hpp.html deleted file mode 100644 index 41b135edf..000000000 --- a/docs/Doxygen/d6/d3b/FixArduinoMacros_8hpp.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - -Arduino Helpers: FixArduinoMacros.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
FixArduinoMacros.hpp File Reference
-
-
-
#include <AH/Settings/Warnings.hpp>
-#include <Arduino.h>
-
-Include dependency graph for FixArduinoMacros.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

-
- - - - diff --git a/docs/Doxygen/d6/d3b/FixArduinoMacros_8hpp_source.html b/docs/Doxygen/d6/d3b/FixArduinoMacros_8hpp_source.html deleted file mode 100644 index bb793ba93..000000000 --- a/docs/Doxygen/d6/d3b/FixArduinoMacros_8hpp_source.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - -Arduino Helpers: FixArduinoMacros.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
FixArduinoMacros.hpp
-
-
-Go to the documentation of this file.
1 #pragma once
-
2 
- -
4 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
5 
- -
7 #include <Arduino.h> // min max
- -
9 
-
10 #ifdef min
-
11 #undef min
-
12 #endif
-
13 
-
14 #ifdef max
-
15 #undef max
-
16 #endif
-
17 
-
18 #ifdef abs
-
19 #undef abs
-
20 #endif
-
21 
-
22 #ifdef round
-
23 #undef round
-
24 #endif
-
25 
- -
- -
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
#define AH_DIAGNOSTIC_EXTERNAL_HEADER()
Definition: Warnings.hpp:18
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
- - - - diff --git a/docs/Doxygen/d6/d3c/ExtendedInputOutput_8cpp.html b/docs/Doxygen/d6/d3c/ExtendedInputOutput_8cpp.html deleted file mode 100644 index 204084b03..000000000 --- a/docs/Doxygen/d6/d3c/ExtendedInputOutput_8cpp.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - - -Arduino Helpers: ExtendedInputOutput.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ExtendedInputOutput.cpp File Reference
-
-
-
-Include dependency graph for ExtendedInputOutput.cpp:
-
-
-
-
-

Go to the source code of this file.

- - - - - -

-Namespaces

 ExtIO
 A namespace with alternatives to the standard Arduino IO functions that can be used with extended IO pin numbers.
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<class T >
bool inRange (T target, T start, T end)
 
ExtendedIOElementgetIOElementOfPin (pin_t pin)
 Find the IO element of a given extended IO pin number. More...
 
void pinMode (pin_t pin, uint8_t mode)
 An ExtIO version of the Arduino function. More...
 
void pinMode (int pin, uint8_t mode)
 An ExtIO version of the Arduino function. More...
 
void digitalWrite (pin_t pin, uint8_t val)
 An ExtIO version of the Arduino function. More...
 
void digitalWrite (int pin, uint8_t val)
 An ExtIO version of the Arduino function. More...
 
int digitalRead (pin_t pin)
 An ExtIO version of the Arduino function. More...
 
int digitalRead (int pin)
 An ExtIO version of the Arduino function. More...
 
void shiftOut (pin_t dataPin, pin_t clockPin, uint8_t bitOrder, uint8_t val)
 An ExtIO version of the Arduino function. More...
 
void shiftOut (int dataPin, int clockPin, uint8_t bitOrder, uint8_t val)
 An ExtIO version of the Arduino function. More...
 
analog_t analogRead (pin_t pin)
 An ExtIO version of the Arduino function. More...
 
analog_t analogRead (int pin)
 An ExtIO version of the Arduino function. More...
 
void analogWrite (pin_t pin, analog_t val)
 An ExtIO version of the Arduino function. More...
 
void analogWrite (int pin, analog_t val)
 An ExtIO version of the Arduino function. More...
 
void analogWrite (int pin, int val)
 An ExtIO version of the Arduino function. More...
 
void analogWrite (pin_t pin, int val)
 An ExtIO version of the Arduino function. More...
 
-
- - - - diff --git a/docs/Doxygen/d6/d3c/ExtendedInputOutput_8cpp_source.html b/docs/Doxygen/d6/d3c/ExtendedInputOutput_8cpp_source.html deleted file mode 100644 index 1c8043c23..000000000 --- a/docs/Doxygen/d6/d3c/ExtendedInputOutput_8cpp_source.html +++ /dev/null @@ -1,236 +0,0 @@ - - - - - - - -Arduino Helpers: ExtendedInputOutput.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ExtendedInputOutput.cpp
-
-
-Go to the documentation of this file.
-
2 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
3 
-
4 #include "ExtendedIOElement.hpp"
- -
6 #include <AH/Error/Error.hpp>
-
7 
- -
9 
-
10 namespace ExtIO {
-
11 
-
12 template <class T>
-
13 bool inRange(T target, T start, T end) {
-
14  return target >= start && target < end;
-
15 }
-
16 
- - -
19  if (pin < el.getStart())
-
20  break;
-
21  else if (inRange(pin, el.getStart(), el.getEnd()))
-
22  return el;
-
23 
- -
25  F("The given pin does not correspond to an Extended IO element."),
-
26  0x8888);
-
27 
-
28  // TODO: why doesn't this give a compilation error?
-
29  // No return statement. On desktop, FATAL_ERROR throws an exception, so
-
30  // I get why that works, but on Arduino, it just calls fatalErrorExit, which
-
31  // is marked 'noreturn'. However, if I remove the 'noreturn' attribute, and
-
32  // have it return immediately, it still compiles, without returning a valid
-
33  // reference.
-
34 }
-
35 
-
36 void pinMode(pin_t pin, uint8_t mode) {
-
37  // DEBUGFN(DEBUGVAR(pin) << '\t' << DEBUGVAR(mode));
-
38  if (pin < NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS) {
-
39  ::pinMode(pin, mode);
-
40  } else {
- -
42  el.pinMode(pin - el.getStart(), mode);
-
43  }
-
44 }
-
45 void pinMode(int pin, uint8_t mode) { pinMode((pin_t)pin, mode); }
-
46 
-
47 void digitalWrite(pin_t pin, uint8_t val) {
-
48  // DEBUGFN(DEBUGVAR(pin) << '\t' << DEBUGVAR(val));
-
49  if (pin < NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS) {
-
50  ::digitalWrite(pin, val);
-
51  } else {
- -
53  el.digitalWrite(pin - el.getStart(), val);
-
54  }
-
55 }
-
56 void digitalWrite(int pin, uint8_t val) { digitalWrite((pin_t)pin, val); }
-
57 
-
58 int digitalRead(pin_t pin) {
-
59  if (pin < NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS) {
- -
61  } else {
- -
63  return el.digitalRead(pin - el.getStart());
-
64  }
-
65  return 0;
-
66 }
-
67 int digitalRead(int pin) { return digitalRead((pin_t)pin); }
-
68 
-
69 void shiftOut(pin_t dataPin, pin_t clockPin, uint8_t bitOrder, uint8_t val) {
-
70  uint8_t i;
-
71 
-
72  for (i = 0; i < 8; i++) {
-
73  if (bitOrder == LSBFIRST)
-
74  digitalWrite(dataPin, !!(val & (1 << i)));
-
75  else
-
76  digitalWrite(dataPin, !!(val & (1 << (7 - i))));
-
77 
-
78  digitalWrite(clockPin, HIGH);
-
79  digitalWrite(clockPin, LOW);
-
80  }
-
81 }
-
82 void shiftOut(int dataPin, int clockPin, uint8_t bitOrder, uint8_t val) {
-
83  shiftOut((pin_t)dataPin, (pin_t)clockPin, bitOrder, val);
-
84 }
-
85 
- -
87  if (pin < NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS) {
- -
89  } else {
- -
91  return el.analogRead(pin - el.getStart());
-
92  }
-
93  return 0;
-
94 }
-
95 analog_t analogRead(int pin) { return analogRead((pin_t)pin); }
-
96 
-
97 void analogWrite(pin_t pin, analog_t val) {
-
98  // DEBUGFN(DEBUGVAR(pin) << '\t' << DEBUGVAR(val));
-
99  if (pin < NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS) {
-
100 #ifndef ESP32
-
101  ::analogWrite(pin, val);
-
102 #endif
-
103  } else {
- -
105  el.analogWrite(pin - el.getStart(), val);
-
106  }
-
107 }
-
108 void analogWrite(int pin, analog_t val) { analogWrite((pin_t)pin, val); }
-
109 void analogWrite(int pin, int val) { analogWrite((pin_t)pin, (analog_t)val); }
-
110 void analogWrite(pin_t pin, int val) { analogWrite(pin, (analog_t)val); }
-
111 
-
112 } // namespace ExtIO
-
113 
- -
115 
- -
-
#define BEGIN_AH_NAMESPACE
-
bool inRange(T target, T start, T end)
- -
void digitalWrite(pin_t pin, uint8_t val)
An ExtIO version of the Arduino function.
-
uint16_t analog_t
The type returned from analogRead and similar functions.
- -
void analogWrite(pin_t pin, analog_t val)
An ExtIO version of the Arduino function.
-
virtual void pinMode(pin_t pin, uint8_t mode)=0
Set the mode of a given pin.
-
int digitalRead(pin_t pin)
An ExtIO version of the Arduino function.
- -
void shiftOut(pin_t dataPin, pin_t clockPin, uint8_t bitOrder, uint8_t val)
An ExtIO version of the Arduino function.
-
ExtendedIOElement & getIOElementOfPin(pin_t pin)
Find the IO element of a given extended IO pin number.
-
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
const uint8_t HIGH
-
#define FATAL_ERROR(msg, errc)
Print the error message and error code, and stop the execution.
Definition: Error.hpp:60
-
int digitalRead(int pin)
An ExtIO version of the Arduino function.
-
pin_t getStart() const
Get the smallest global extended IO pin number that belongs to this extended IO element.
-
virtual int digitalRead(pin_t pin)=0
Read the state of the given pin.
-
analog_t analogRead(pin_t pin)
An ExtIO version of the Arduino function.
-
const uint8_t LOW
-
A namespace with alternatives to the standard Arduino IO functions that can be used with extended IO ...
-
An abstract base class for Extended Input/Output elements.
-
analog_t analogRead(int pin)
An ExtIO version of the Arduino function.
-
static DoublyLinkedList< ExtendedIOElement > & getAll()
Get the list of all Extended IO elements.
-
virtual void digitalWrite(pin_t pin, uint8_t state)=0
Set the output of the given pin to the given state.
-
void pinMode(pin_t pin, uint8_t mode)
An ExtIO version of the Arduino function.
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
-
virtual analog_t analogRead(pin_t pin)=0
Read the analog value of the given pin.
-
#define END_AH_NAMESPACE
-
virtual void analogWrite(pin_t pin, analog_t val)=0
Write an analog (or PWM) value to the given pin.
- - - - diff --git a/docs/Doxygen/d6/d3c/classHysteresis__coll__graph.map b/docs/Doxygen/d6/d3c/classHysteresis__coll__graph.map deleted file mode 100644 index ee976195f..000000000 --- a/docs/Doxygen/d6/d3c/classHysteresis__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/d6/d3c/classHysteresis__coll__graph.md5 b/docs/Doxygen/d6/d3c/classHysteresis__coll__graph.md5 deleted file mode 100644 index 60e8649ad..000000000 --- a/docs/Doxygen/d6/d3c/classHysteresis__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -f10de3fd27c06db1d80931942f8d9121 \ No newline at end of file diff --git a/docs/Doxygen/d6/d3c/classHysteresis__coll__graph.svg b/docs/Doxygen/d6/d3c/classHysteresis__coll__graph.svg deleted file mode 100644 index 63fbb6f76..000000000 --- a/docs/Doxygen/d6/d3c/classHysteresis__coll__graph.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - -Hysteresis< BITS, T_in, T_out > - - -Node1 - - -Hysteresis< BITS, T -_in, T_out > - -- prevLevel -- margin -- offset -- max_in -- max_out - -+ update() -+ getValue() - - - - - diff --git a/docs/Doxygen/d6/d60/Hysteresis_8hpp__dep__incl.map b/docs/Doxygen/d6/d60/Hysteresis_8hpp__dep__incl.map deleted file mode 100644 index 04e877241..000000000 --- a/docs/Doxygen/d6/d60/Hysteresis_8hpp__dep__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/d6/d60/Hysteresis_8hpp__dep__incl.md5 b/docs/Doxygen/d6/d60/Hysteresis_8hpp__dep__incl.md5 deleted file mode 100644 index a77489d7b..000000000 --- a/docs/Doxygen/d6/d60/Hysteresis_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -e40f9c9c46aa4bf324176ad9cc8fcddf \ No newline at end of file diff --git a/docs/Doxygen/d6/d60/Hysteresis_8hpp__dep__incl.svg b/docs/Doxygen/d6/d60/Hysteresis_8hpp__dep__incl.svg deleted file mode 100644 index 0ede1d1cb..000000000 --- a/docs/Doxygen/d6/d60/Hysteresis_8hpp__dep__incl.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - -Hysteresis.hpp - - -Node1 - - -Hysteresis.hpp - - - - -Node2 - - -FilteredAnalog.hpp - - - - -Node1->Node2 - - - - - diff --git a/docs/Doxygen/d6/d61/ExtendedIOElement_8hpp__dep__incl.map b/docs/Doxygen/d6/d61/ExtendedIOElement_8hpp__dep__incl.map deleted file mode 100644 index 3e0596839..000000000 --- a/docs/Doxygen/d6/d61/ExtendedIOElement_8hpp__dep__incl.map +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d6/d61/ExtendedIOElement_8hpp__dep__incl.md5 b/docs/Doxygen/d6/d61/ExtendedIOElement_8hpp__dep__incl.md5 deleted file mode 100644 index a799f0cff..000000000 --- a/docs/Doxygen/d6/d61/ExtendedIOElement_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -3c2a6a375b6867e793966aec1f4231e0 \ No newline at end of file diff --git a/docs/Doxygen/d6/d61/ExtendedIOElement_8hpp__dep__incl.svg b/docs/Doxygen/d6/d61/ExtendedIOElement_8hpp__dep__incl.svg deleted file mode 100644 index e2443e317..000000000 --- a/docs/Doxygen/d6/d61/ExtendedIOElement_8hpp__dep__incl.svg +++ /dev/null @@ -1,396 +0,0 @@ - - - - - - -ExtendedIOElement.hpp - - -Node1 - - -ExtendedIOElement.hpp - - - - -Node2 - - -ExtendedInputOutput.hpp - - - - -Node1->Node2 - - - - -Node12 - - -ExtendedInputOutput.cpp - - - - -Node1->Node12 - - - - -Node25 - - -StaticSizeExtendedIOElement.hpp - - - - -Node1->Node25 - - - - -Node26 - - -ExtendedIOElement.cpp - - - - -Node1->Node26 - - - - -Node3 - - -Button.hpp - - - - -Node2->Node3 - - - - -Node9 - - -ButtonMatrix.ipp - - - - -Node2->Node9 - - - - -Node11 - - -AnalogMultiplex.hpp - - - - -Node2->Node11 - - - - -Node2->Node12 - - - - -Node13 - - -ShiftRegisterOutBase.ipp - - - - -Node2->Node13 - - - - -Node16 - - -ShiftRegisterOut.ipp - - - - -Node2->Node16 - - - - -Node18 - - -SPIShiftRegisterOut.ipp - - - - -Node2->Node18 - - - - -Node19 - - -FilteredAnalog.hpp - - - - -Node2->Node19 - - - - -Node20 - - -LEDs.hpp - - - - -Node2->Node20 - - - - -Node22 - - -MAX7219_Base.hpp - - - - -Node2->Node22 - - - - -Node4 - - -Button.cpp - - - - -Node3->Node4 - - - - -Node5 - - -IncrementButton.hpp - - - - -Node3->Node5 - - - - -Node7 - - -IncrementDecrementButtons.hpp - - - - -Node3->Node7 - - - - -Node6 - - -IncrementButton.cpp - - - - -Node5->Node6 - - - - -Node8 - - -IncrementDecrementButtons.cpp - - - - -Node7->Node8 - - - - -Node10 - - -ButtonMatrix.hpp - - - - -Node9->Node10 - - - - -Node10->Node9 - - - - -Node14 - - -ShiftRegisterOutBase.hpp - - - - -Node13->Node14 - - - - -Node14->Node13 - - - - -Node15 - - -ShiftRegisterOut.hpp - - - - -Node14->Node15 - - - - -Node17 - - -SPIShiftRegisterOut.hpp - - - - -Node14->Node17 - - - - -Node15->Node16 - - - - -Node16->Node15 - - - - -Node17->Node18 - - - - -Node18->Node17 - - - - -Node21 - - -DotBarDisplayLEDs.hpp - - - - -Node20->Node21 - - - - -Node23 - - -MAX7219.hpp - - - - -Node22->Node23 - - - - -Node24 - - -MAX7219SevenSegmentDisplay.hpp - - - - -Node22->Node24 - - - - -Node25->Node11 - - - - -Node25->Node14 - - - - -Node25->Node23 - - - - - diff --git a/docs/Doxygen/d6/d65/structSetbytesep-members.html b/docs/Doxygen/d6/d65/structSetbytesep-members.html deleted file mode 100644 index 1b304bd04..000000000 --- a/docs/Doxygen/d6/d65/structSetbytesep-members.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Setbytesep Member List
-
-
- -

This is the complete list of members for Setbytesep, including all inherited members.

- - -
M_bytesepSetbytesep
- - - - diff --git a/docs/Doxygen/d6/d72/Debug_8cpp__incl.map b/docs/Doxygen/d6/d72/Debug_8cpp__incl.map deleted file mode 100644 index 81496c714..000000000 --- a/docs/Doxygen/d6/d72/Debug_8cpp__incl.map +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d6/d72/Debug_8cpp__incl.md5 b/docs/Doxygen/d6/d72/Debug_8cpp__incl.md5 deleted file mode 100644 index 7aaff70a6..000000000 --- a/docs/Doxygen/d6/d72/Debug_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -ea99b7491319214c88c0220b7e138e0e \ No newline at end of file diff --git a/docs/Doxygen/d6/d72/Debug_8cpp__incl.svg b/docs/Doxygen/d6/d72/Debug_8cpp__incl.svg deleted file mode 100644 index 021299723..000000000 --- a/docs/Doxygen/d6/d72/Debug_8cpp__incl.svg +++ /dev/null @@ -1,238 +0,0 @@ - - - - - - -Debug.cpp - - -Node1 - - -Debug.cpp - - - - -Node2 - - -Debug.hpp - - - - -Node1->Node2 - - - - -Node3 - - -AH/Settings/Warnings.hpp - - - - -Node2->Node3 - - - - -Node4 - - -AH/PrintStream/PrintStream.hpp - - - - -Node2->Node4 - - - - -Node6 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node2->Node6 - - - - -Node15 - - -DebugVal.hpp - - - - -Node2->Node15 - - - - -Node4->Node3 - - - - -Node5 - - -Arduino.h - - - - -Node4->Node5 - - - - -Node6->Node2 - - - - -Node6->Node3 - - - - -Node7 - - -NamespaceSettings.hpp - - - - -Node6->Node7 - - - - -Node8 - - -Settings.hpp - - - - -Node6->Node8 - - - - -Node14 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node6->Node14 - - - - -Node9 - - -AH/Types/Frequency.hpp - - - - -Node8->Node9 - - - - -Node10 - - -AH/Hardware/ADCConfig.hpp - - - - -Node8->Node10 - - - - -Node11 - - -limits.h - - - - -Node8->Node11 - - - - -Node12 - - -stddef.h - - - - -Node8->Node12 - - - - -Node13 - - -stdint.h - - - - -Node8->Node13 - - - - -Node9->Node3 - - - - -Node9->Node7 - - - - -Node10->Node3 - - - - -Node10->Node5 - - - - - diff --git a/docs/Doxygen/d6/d73/ShiftRegisterOutBase_8ipp__incl.map b/docs/Doxygen/d6/d73/ShiftRegisterOutBase_8ipp__incl.map deleted file mode 100644 index 9e889cb81..000000000 --- a/docs/Doxygen/d6/d73/ShiftRegisterOutBase_8ipp__incl.map +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d6/d73/ShiftRegisterOutBase_8ipp__incl.md5 b/docs/Doxygen/d6/d73/ShiftRegisterOutBase_8ipp__incl.md5 deleted file mode 100644 index 79b8a546d..000000000 --- a/docs/Doxygen/d6/d73/ShiftRegisterOutBase_8ipp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -6601e63bf4d78ebb29dc5b88eabcb5cb \ No newline at end of file diff --git a/docs/Doxygen/d6/d73/ShiftRegisterOutBase_8ipp__incl.svg b/docs/Doxygen/d6/d73/ShiftRegisterOutBase_8ipp__incl.svg deleted file mode 100644 index 8fbf9d5fc..000000000 --- a/docs/Doxygen/d6/d73/ShiftRegisterOutBase_8ipp__incl.svg +++ /dev/null @@ -1,618 +0,0 @@ - - - - - - -ShiftRegisterOutBase.ipp - - -Node1 - - -ShiftRegisterOutBase.ipp - - - - -Node2 - - -ExtendedInputOutput.hpp - - - - -Node1->Node2 - - - - -Node28 - - -ShiftRegisterOutBase.hpp - - - - -Node1->Node28 - - - - -Node33 - - -ShiftRegisterOutRGB.hpp - - - - -Node1->Node33 - - - - -Node3 - - -AH/Settings/Warnings.hpp - - - - -Node2->Node3 - - - - -Node4 - - -Arduino.h - - - - -Node2->Node4 - - - - -Node5 - - -ExtendedIOElement.hpp - - - - -Node2->Node5 - - - - -Node5->Node3 - - - - -Node6 - - -AH/Hardware/Hardware --Types.hpp - - - - -Node5->Node6 - - - - -Node23 - - -AH/Containers/LinkedList.hpp - - - - -Node5->Node23 - - - - -Node6->Node3 - - - - -Node7 - - -AH/Containers/Array.hpp - - - - -Node6->Node7 - - - - -Node12 - - -NamespaceSettings.hpp - - - - -Node6->Node12 - - - - -Node18 - - -stdint.h - - - - -Node6->Node18 - - - - -Node7->Node3 - - - - -Node8 - - -AH/Error/Error.hpp - - - - -Node7->Node8 - - - - -Node17 - - -stddef.h - - - - -Node7->Node17 - - - - -Node21 - - -AH/STL/iterator - - - - -Node7->Node21 - - - - -Node22 - - -AH/STL/type_traits - - - - -Node7->Node22 - - - - -Node8->Node3 - - - - -Node9 - - -AH/Debug/Debug.hpp - - - - -Node8->Node9 - - - - -Node9->Node3 - - - - -Node10 - - -AH/PrintStream/PrintStream.hpp - - - - -Node9->Node10 - - - - -Node11 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node9->Node11 - - - - -Node20 - - -DebugVal.hpp - - - - -Node9->Node20 - - - - -Node10->Node3 - - - - -Node10->Node4 - - - - -Node11->Node3 - - - - -Node11->Node9 - - - - -Node11->Node12 - - - - -Node13 - - -Settings.hpp - - - - -Node11->Node13 - - - - -Node19 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node11->Node19 - - - - -Node14 - - -AH/Types/Frequency.hpp - - - - -Node13->Node14 - - - - -Node15 - - -AH/Hardware/ADCConfig.hpp - - - - -Node13->Node15 - - - - -Node16 - - -limits.h - - - - -Node13->Node16 - - - - -Node13->Node17 - - - - -Node13->Node18 - - - - -Node14->Node3 - - - - -Node14->Node12 - - - - -Node15->Node3 - - - - -Node15->Node4 - - - - -Node23->Node3 - - - - -Node23->Node9 - - - - -Node24 - - -AH/Math/MinMaxFix.hpp - - - - -Node23->Node24 - - - - -Node26 - - -stdlib.h - - - - -Node23->Node26 - - - - -Node27 - - -iterator - - - - -Node23->Node27 - - - - -Node24->Node3 - - - - -Node24->Node12 - - - - -Node25 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node24->Node25 - - - - -Node25->Node3 - - - - -Node25->Node4 - - - - -Node28->Node1 - - - - -Node28->Node3 - - - - -Node29 - - -StaticSizeExtendedIOElement.hpp - - - - -Node28->Node29 - - - - -Node32 - - -AH/Containers/BitArray.hpp - - - - -Node28->Node32 - - - - -Node29->Node3 - - - - -Node29->Node5 - - - - -Node30 - - -AH/Containers/ArrayHelpers.hpp - - - - -Node29->Node30 - - - - -Node30->Node3 - - - - -Node30->Node7 - - - - -Node30->Node10 - - - - -Node31 - - -AH/STL/algorithm - - - - -Node30->Node31 - - - - -Node32->Node3 - - - - -Node32->Node8 - - - - -Node32->Node12 - - - - -Node32->Node18 - - - - -Node33->Node3 - - - - -Node33->Node11 - - - - -Node33->Node18 - - - - - diff --git a/docs/Doxygen/d6/d7f/classAnalogMultiplex__inherit__graph.map b/docs/Doxygen/d6/d7f/classAnalogMultiplex__inherit__graph.map deleted file mode 100644 index cac824af4..000000000 --- a/docs/Doxygen/d6/d7f/classAnalogMultiplex__inherit__graph.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/Doxygen/d6/d7f/classAnalogMultiplex__inherit__graph.md5 b/docs/Doxygen/d6/d7f/classAnalogMultiplex__inherit__graph.md5 deleted file mode 100644 index 9ab1ef421..000000000 --- a/docs/Doxygen/d6/d7f/classAnalogMultiplex__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -1f1b17cd73fa4ab5e735420a4b0e606e \ No newline at end of file diff --git a/docs/Doxygen/d6/d7f/classAnalogMultiplex__inherit__graph.svg b/docs/Doxygen/d6/d7f/classAnalogMultiplex__inherit__graph.svg deleted file mode 100644 index 64dd7ff2d..000000000 --- a/docs/Doxygen/d6/d7f/classAnalogMultiplex__inherit__graph.svg +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - -AnalogMultiplex< N > - - -Node1 - - -AnalogMultiplex< N > - -- analogPin -- addressPins -- enablePin -- MUX_ENABLED -- MUX_DISABLED - -+ AnalogMultiplex() -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogRead() -+ analogWrite() -+ begin() -+ update() -- setMuxAddress() -- prepareReading() -- afterReading() - - - - -Node2 - - -StaticSizeExtendedIOElement -< 1<< N > - - - -+ pins() -+ length() -# StaticSizeExtendedIOElement() - - - - -Node2->Node1 - - - - -Node3 - - -ExtendedIOElement - -- length -- start -- end -- offset -- elements - -+ ~ExtendedIOElement() -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogWrite() -+ analogRead() -+ begin() -+ update() -+ pin() -+ operator[]() -+ getLength() -+ getEnd() -+ getStart() -+ beginAll() -+ getAll() -# ExtendedIOElement() - - - - -Node3->Node2 - - - - -Node4 - - -DoublyLinkable< Extended -IOElement > - -# next -# previous - -# ~DoublyLinkable() - - - - -Node4->Node3 - - - - - diff --git a/docs/Doxygen/d6/d85/classUpdatable__coll__graph.map b/docs/Doxygen/d6/d85/classUpdatable__coll__graph.map deleted file mode 100644 index 43711517f..000000000 --- a/docs/Doxygen/d6/d85/classUpdatable__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/Doxygen/d6/d85/classUpdatable__coll__graph.md5 b/docs/Doxygen/d6/d85/classUpdatable__coll__graph.md5 deleted file mode 100644 index e1f0ff161..000000000 --- a/docs/Doxygen/d6/d85/classUpdatable__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -2041d11ece2015e23a45147409fa05d3 \ No newline at end of file diff --git a/docs/Doxygen/d6/d85/classUpdatable__coll__graph.svg b/docs/Doxygen/d6/d85/classUpdatable__coll__graph.svg deleted file mode 100644 index 98b4df2b6..000000000 --- a/docs/Doxygen/d6/d85/classUpdatable__coll__graph.svg +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - -Updatable< T > - - -Node1 - - -Updatable< T > - - - -+ ~Updatable() -+ update() -+ begin() -+ enable() -+ disable() -+ isEnabled() -+ beginAll() -+ updateAll() -+ enable() -+ enable() -+ enable() -+ disable() -+ disable() -+ disable() -# Updatable() - - - - -Node2 - - -DoublyLinkable< Updatable -< T > > - -# next -# previous - -# ~DoublyLinkable() - - - - -Node2->Node1 - - - - -Node3 - - -DoublyLinkedList< Updatable -< T > > - -- first -- last - -+ append() -+ append() -+ insertBefore() -+ insertBefore() -+ insertSorted() -+ insertSorted() -+ remove() -+ remove() -+ moveDown() -+ couldContain() -+ begin() -+ begin() -+ end() -+ end() -+ rbegin() -+ rbegin() -+ rend() -+ rend() -+ getFirst() -+ getLast() - - - - -Node3->Node1 - - - -updatables - - - diff --git a/docs/Doxygen/d6/d97/classExtendedIOElement__coll__graph.map b/docs/Doxygen/d6/d97/classExtendedIOElement__coll__graph.map deleted file mode 100644 index 8e4ac96b7..000000000 --- a/docs/Doxygen/d6/d97/classExtendedIOElement__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/Doxygen/d6/d97/classExtendedIOElement__coll__graph.md5 b/docs/Doxygen/d6/d97/classExtendedIOElement__coll__graph.md5 deleted file mode 100644 index a10af4d2f..000000000 --- a/docs/Doxygen/d6/d97/classExtendedIOElement__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -bd9401a229c0b113e3c9471f35e08398 \ No newline at end of file diff --git a/docs/Doxygen/d6/d97/classExtendedIOElement__coll__graph.svg b/docs/Doxygen/d6/d97/classExtendedIOElement__coll__graph.svg deleted file mode 100644 index d01de489f..000000000 --- a/docs/Doxygen/d6/d97/classExtendedIOElement__coll__graph.svg +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - -ExtendedIOElement - - -Node1 - - -ExtendedIOElement - -- length -- start -- end -- offset - -+ ~ExtendedIOElement() -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogWrite() -+ analogRead() -+ begin() -+ update() -+ pin() -+ operator[]() -+ getLength() -+ getEnd() -+ getStart() -+ beginAll() -+ getAll() -# ExtendedIOElement() - - - - -Node2 - - -DoublyLinkable< Extended -IOElement > - - - -# ~DoublyLinkable() - - - - -Node1->Node2 - - - #next -#previous - - -Node3 - - -DoublyLinkedList< Extended -IOElement > - - - -+ append() -+ append() -+ insertBefore() -+ insertBefore() -+ insertSorted() -+ insertSorted() -+ remove() -+ remove() -+ moveDown() -+ couldContain() -+ begin() -+ begin() -+ end() -+ end() -+ rbegin() -+ rbegin() -+ rend() -+ rend() -+ getFirst() -+ getLast() - - - - -Node1->Node3 - - - -last --first - - -Node2->Node1 - - - - -Node3->Node1 - - - -elements - - - diff --git a/docs/Doxygen/d6/d9e/MinMaxFix_8cpp.html b/docs/Doxygen/d6/d9e/MinMaxFix_8cpp.html deleted file mode 100644 index 87d489f6b..000000000 --- a/docs/Doxygen/d6/d9e/MinMaxFix_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: MinMaxFix.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
MinMaxFix.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/d6/d9e/MinMaxFix_8cpp_source.html b/docs/Doxygen/d6/d9e/MinMaxFix_8cpp_source.html deleted file mode 100644 index 7a56f20b8..000000000 --- a/docs/Doxygen/d6/d9e/MinMaxFix_8cpp_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Arduino Helpers: MinMaxFix.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
MinMaxFix.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
-
2 #include "MinMaxFix.hpp"
-
3 #endif
-
- - - - - diff --git a/docs/Doxygen/d6/dbc/structShiftRegisterOutRGB-members.html b/docs/Doxygen/d6/dbc/structShiftRegisterOutRGB-members.html deleted file mode 100644 index f83ac2a91..000000000 --- a/docs/Doxygen/d6/dbc/structShiftRegisterOutRGB-members.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
ShiftRegisterOutRGB Member List
-
-
- -

This is the complete list of members for ShiftRegisterOutRGB, including all inherited members.

- - - - -
blueBitShiftRegisterOutRGBstatic
greenBitShiftRegisterOutRGBstatic
redBitShiftRegisterOutRGBstatic
- - - - diff --git a/docs/Doxygen/d6/dbf/classButton__coll__graph.map b/docs/Doxygen/d6/dbf/classButton__coll__graph.map deleted file mode 100644 index 63a260b3e..000000000 --- a/docs/Doxygen/d6/dbf/classButton__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/d6/dbf/classButton__coll__graph.md5 b/docs/Doxygen/d6/dbf/classButton__coll__graph.md5 deleted file mode 100644 index b791f1c27..000000000 --- a/docs/Doxygen/d6/dbf/classButton__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -a7cfd12ca0c2f12df4241b437f5740df \ No newline at end of file diff --git a/docs/Doxygen/d6/dbf/classButton__coll__graph.svg b/docs/Doxygen/d6/dbf/classButton__coll__graph.svg deleted file mode 100644 index 05db1ecd3..000000000 --- a/docs/Doxygen/d6/dbf/classButton__coll__graph.svg +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - -Button - - -Node1 - - -Button - -- pin -- prevInput -- debouncedState -- prevBounceTime -- invertState -- debounceTime - -+ Button() -+ Button() -+ begin() -+ invert() -+ update() -+ getState() -+ previousBounceTime() -+ stableTime() -+ stableTime() -+ getName() -+ setDebounceTime() -+ getDebounceTime() - - - - - diff --git a/docs/Doxygen/d6/dc3/MAX7219_8cpp.html b/docs/Doxygen/d6/dc3/MAX7219_8cpp.html deleted file mode 100644 index 9832a4f2f..000000000 --- a/docs/Doxygen/d6/dc3/MAX7219_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: MAX7219.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
MAX7219.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/d6/dc3/MAX7219_8cpp_source.html b/docs/Doxygen/d6/dc3/MAX7219_8cpp_source.html deleted file mode 100644 index 3c575ef91..000000000 --- a/docs/Doxygen/d6/dc3/MAX7219_8cpp_source.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - -Arduino Helpers: MAX7219.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
MAX7219.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
-
2 // #include "MAX7219.hpp" // TODO
-
3 #endif
-
- - - - diff --git a/docs/Doxygen/d6/dc5/classAnalogMultiplex-members.html b/docs/Doxygen/d6/dc5/classAnalogMultiplex-members.html deleted file mode 100644 index bf5314df1..000000000 --- a/docs/Doxygen/d6/dc5/classAnalogMultiplex-members.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
AnalogMultiplex< N > Member List
-
-
- -

This is the complete list of members for AnalogMultiplex< N >, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addressPinsAnalogMultiplex< N >private
afterReading()AnalogMultiplex< N >private
AnalogMultiplex(pin_t analogPin, const Array< pin_t, N > &addressPins, pin_t enablePin=NO_PIN)AnalogMultiplex< N >inline
analogPinAnalogMultiplex< N >private
analogRead(pin_t pin) overrideAnalogMultiplex< N >virtual
analogWrite(pin_t, analog_t) override __attribute__((deprecated))AnalogMultiplex< N >inlinevirtual
begin() overrideAnalogMultiplex< N >virtual
beginAll()ExtendedIOElementstatic
digitalRead(pin_t pin) overrideAnalogMultiplex< N >virtual
digitalWrite(pin_t, uint8_t) override __attribute__((deprecated))AnalogMultiplex< N >inlinevirtual
elementsExtendedIOElementprivatestatic
enablePinAnalogMultiplex< N >private
endExtendedIOElementprivate
ExtendedIOElement(pin_t length)ExtendedIOElementprotected
getAll()ExtendedIOElementstatic
getEnd() constExtendedIOElement
getLength() constExtendedIOElement
getStart() constExtendedIOElement
length()StaticSizeExtendedIOElement< 1<< N >inlinestatic
MUX_DISABLEDAnalogMultiplex< N >privatestatic
MUX_ENABLEDAnalogMultiplex< N >privatestatic
nextDoublyLinkable< ExtendedIOElement >protected
offsetExtendedIOElementprivatestatic
operator[](pin_t pin) constExtendedIOElement
pin(pin_t pin) constExtendedIOElement
pinMode(pin_t pin, uint8_t mode) overrideAnalogMultiplex< N >virtual
pins() constStaticSizeExtendedIOElement< 1<< N >inline
prepareReading(uint8_t address)AnalogMultiplex< N >private
previousDoublyLinkable< ExtendedIOElement >protected
setMuxAddress(uint8_t address)AnalogMultiplex< N >private
startExtendedIOElementprivate
StaticSizeExtendedIOElement()StaticSizeExtendedIOElement< 1<< N >inlineprotected
update() overrideAnalogMultiplex< N >inlinevirtual
~DoublyLinkable()=defaultDoublyLinkable< ExtendedIOElement >protectedvirtual
~ExtendedIOElement()ExtendedIOElementvirtual
- - - - diff --git a/docs/Doxygen/d6/dea/Updatable_8cpp.html b/docs/Doxygen/d6/dea/Updatable_8cpp.html deleted file mode 100644 index 08c916bc3..000000000 --- a/docs/Doxygen/d6/dea/Updatable_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: Updatable.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Updatable.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/d6/dea/Updatable_8cpp_source.html b/docs/Doxygen/d6/dea/Updatable_8cpp_source.html deleted file mode 100644 index a0a238fef..000000000 --- a/docs/Doxygen/d6/dea/Updatable_8cpp_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Arduino Helpers: Updatable.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Updatable.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
-
2 #include "Updatable.hpp"
-
3 #endif
-
- - - - - diff --git a/docs/Doxygen/d6/df4/Exit_8cpp.html b/docs/Doxygen/d6/df4/Exit_8cpp.html deleted file mode 100644 index 7f2d6db00..000000000 --- a/docs/Doxygen/d6/df4/Exit_8cpp.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - -Arduino Helpers: Exit.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
Exit.cpp File Reference
-
-
-
#include <AH/Settings/Warnings.hpp>
-#include "Error.hpp"
-
-Include dependency graph for Exit.cpp:
-
-
-
-
-

Go to the source code of this file.

- - - - - -

-Functions

void fatalErrorExit ()
 Function that executes and loops forever, blinking the built-in LED when a fatal error is encountered. More...
 
-

Function Documentation

- -

◆ fatalErrorExit()

- -
-
- - - - - - - -
void fatalErrorExit ()
-
- -

Function that executes and loops forever, blinking the built-in LED when a fatal error is encountered.

- -

Definition at line 10 of file Exit.cpp.

- -
-
-
- - - - diff --git a/docs/Doxygen/d6/df4/Exit_8cpp_source.html b/docs/Doxygen/d6/df4/Exit_8cpp_source.html deleted file mode 100644 index 139797cff..000000000 --- a/docs/Doxygen/d6/df4/Exit_8cpp_source.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - -Arduino Helpers: Exit.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Exit.cpp
-
-
-Go to the documentation of this file.
1 #ifdef ARDUINO
-
2 
- -
4 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
5 
-
6 #include "Error.hpp"
-
7 
- -
9 
- -
11 #if defined(LED_BUILTIN) || (defined(ESP32) && defined(BUILTIN_LED))
-
12  pinMode(LED_BUILTIN, OUTPUT);
-
13  while (1) {
-
14  digitalWrite(LED_BUILTIN, HIGH);
-
15  delay(50);
-
16  digitalWrite(LED_BUILTIN, LOW);
-
17  delay(50);
-
18  digitalWrite(LED_BUILTIN, HIGH);
-
19  delay(50);
-
20  digitalWrite(LED_BUILTIN, LOW);
-
21  delay(850);
-
22  }
-
23 #else
-
24 #warning "LED_BUILTIN is not available, so it cannot blink when an error occurs"
-
25  noInterrupts();
-
26  while (1)
-
27  yield();
-
28 #endif
-
29 }
-
30 
- -
32 
- -
34 
-
35 #endif
-
-
void fatalErrorExit()
Function that executes and loops forever, blinking the built-in LED when a fatal error is encountered...
Definition: Exit.cpp:10
-
#define BEGIN_AH_NAMESPACE
- -
void digitalWrite(pin_t pin, uint8_t val)
An ExtIO version of the Arduino function.
-
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
const uint8_t HIGH
-
const uint8_t LOW
-
void pinMode(pin_t pin, uint8_t mode)
An ExtIO version of the Arduino function.
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
#define END_AH_NAMESPACE
-
const uint8_t OUTPUT
- - - - diff --git a/docs/Doxygen/d7/d13/MAX7219__Base_8hpp.html b/docs/Doxygen/d7/d13/MAX7219__Base_8hpp.html deleted file mode 100644 index 43d385301..000000000 --- a/docs/Doxygen/d7/d13/MAX7219__Base_8hpp.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Arduino Helpers: MAX7219_Base.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
MAX7219_Base.hpp File Reference
-
-
-
-Include dependency graph for MAX7219_Base.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - -

-Classes

class  MAX7219_Base
 A base class for classes that control MAX7219 LED drivers. More...
 
-
- - - - diff --git a/docs/Doxygen/d7/d13/MAX7219__Base_8hpp_source.html b/docs/Doxygen/d7/d13/MAX7219__Base_8hpp_source.html deleted file mode 100644 index 02f02e191..000000000 --- a/docs/Doxygen/d7/d13/MAX7219__Base_8hpp_source.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - - -Arduino Helpers: MAX7219_Base.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
MAX7219_Base.hpp
-
-
-Go to the documentation of this file.
1 /* ✔ */
-
2 
-
3 #pragma once
-
4 
- -
6 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
7 
-
8 #include <AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.hpp>
-
9 
- -
11 #include <SPI.h>
- -
13 
- -
15 
-
23 class MAX7219_Base {
-
24  public:
-
31  MAX7219_Base(pin_t loadPin) : loadPin(loadPin) {}
-
32 
-
33  static constexpr uint8_t DECODEMODE = 9;
-
34  static constexpr uint8_t INTENSITY = 10;
-
35  static constexpr uint8_t SCANLIMIT = 11;
-
36  static constexpr uint8_t SHUTDOWN = 12;
-
37  static constexpr uint8_t DISPLAYTEST = 15;
-
38 
-
43  void init() {
-
44  ExtIO::digitalWrite(loadPin, HIGH);
-
45  ExtIO::pinMode(loadPin, OUTPUT);
-
46  SPI.begin();
-
47  sendRaw(DISPLAYTEST, 0); // Normal operation, no test mode
-
48  sendRaw(SCANLIMIT, 7); // Scan all 8 digits
-
49  sendRaw(DECODEMODE, 0); // Raw LED addressing
-
50  sendRaw(INTENSITY, 0xF); // Maximum intensity
-
51  clear();
-
52  sendRaw(SHUTDOWN, 1); // Enable the display
-
53  }
-
54 
-
58  void clear() {
-
59  for (uint8_t j = 1; j < 8 + 1; j++)
-
60  sendRaw(j, 0);
-
61  }
-
62 
-
71  void send(uint8_t digit, uint8_t value) {
-
72  sendRaw((digit & 0x7) + 1, value);
-
73  }
-
74 
-
83  void sendRaw(uint8_t opcode, uint8_t value) {
-
84  ExtIO::digitalWrite(loadPin, LOW);
-
85  SPI.beginTransaction(settings);
-
86  SPI.transfer(opcode);
-
87  SPI.transfer(value);
-
88  ExtIO::digitalWrite(loadPin, HIGH);
-
89  SPI.endTransaction();
-
90  }
-
91 
-
98  void setIntensity(uint8_t intensity) {
-
99  sendRaw(INTENSITY, intensity & 0xF);
-
100  }
-
101 
-
102  private:
- -
104  SPISettings settings = {SPI_MAX_SPEED, MSBFIRST, SPI_MODE0};
-
105 };
-
106 
- -
108 
- -
-
#define BEGIN_AH_NAMESPACE
-
A base class for classes that control MAX7219 LED drivers.
- -
void digitalWrite(pin_t pin, uint8_t val)
An ExtIO version of the Arduino function.
- -
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
void send(uint8_t digit, uint8_t value)
Send the value to the given digit.
-
const uint8_t HIGH
-
void sendRaw(uint8_t opcode, uint8_t value)
Send a raw opcode and value to the MAX7219.
-
void setIntensity(uint8_t intensity)
Set the intensity of the LEDs.
-
void clear()
Turn off all LEDs.
-
const uint8_t LOW
-
#define AH_DIAGNOSTIC_EXTERNAL_HEADER()
Definition: Warnings.hpp:18
-
MAX7219_Base(pin_t loadPin)
Create a MAX7219_Base object.
-
constexpr static Frequency SPI_MAX_SPEED
Definition: Settings.hpp:85
-
void pinMode(pin_t pin, uint8_t mode)
An ExtIO version of the Arduino function.
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
-
#define END_AH_NAMESPACE
-
const uint8_t OUTPUT
-
void init()
Initialize the Arduino pins, SPI, and the MAX7219.
- - - - diff --git a/docs/Doxygen/d7/d25/Arduino__Helpers_8h__incl.map b/docs/Doxygen/d7/d25/Arduino__Helpers_8h__incl.map deleted file mode 100644 index 1e9449b2e..000000000 --- a/docs/Doxygen/d7/d25/Arduino__Helpers_8h__incl.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/Doxygen/d7/d25/Arduino__Helpers_8h__incl.md5 b/docs/Doxygen/d7/d25/Arduino__Helpers_8h__incl.md5 deleted file mode 100644 index b387dab69..000000000 --- a/docs/Doxygen/d7/d25/Arduino__Helpers_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -94f992d040b421e73aa8b4fb439939f3 \ No newline at end of file diff --git a/docs/Doxygen/d7/d25/Arduino__Helpers_8h__incl.svg b/docs/Doxygen/d7/d25/Arduino__Helpers_8h__incl.svg deleted file mode 100644 index e9917d2e2..000000000 --- a/docs/Doxygen/d7/d25/Arduino__Helpers_8h__incl.svg +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - -Arduino_Helpers.h - - -Node1 - - -Arduino_Helpers.h - - - - -Node2 - - -Arduino.h - - - - -Node1->Node2 - - - - -Node3 - - -AH/Settings/NamespaceSettings.hpp - - - - -Node1->Node3 - - - - - diff --git a/docs/Doxygen/d7/d30/PrintStream_8cpp__incl.map b/docs/Doxygen/d7/d30/PrintStream_8cpp__incl.map deleted file mode 100644 index ce36ab746..000000000 --- a/docs/Doxygen/d7/d30/PrintStream_8cpp__incl.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/Doxygen/d7/d30/PrintStream_8cpp__incl.md5 b/docs/Doxygen/d7/d30/PrintStream_8cpp__incl.md5 deleted file mode 100644 index 4911b4669..000000000 --- a/docs/Doxygen/d7/d30/PrintStream_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -d41c96202ab4ddc52c70490167f38cd4 \ No newline at end of file diff --git a/docs/Doxygen/d7/d30/PrintStream_8cpp__incl.svg b/docs/Doxygen/d7/d30/PrintStream_8cpp__incl.svg deleted file mode 100644 index dda1991bb..000000000 --- a/docs/Doxygen/d7/d30/PrintStream_8cpp__incl.svg +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - -PrintStream.cpp - - -Node1 - - -PrintStream.cpp - - - - -Node2 - - -PrintStream.hpp - - - - -Node1->Node2 - - - - -Node3 - - -AH/Settings/Warnings.hpp - - - - -Node2->Node3 - - - - -Node4 - - -Arduino.h - - - - -Node2->Node4 - - - - - diff --git a/docs/Doxygen/d7/d40/classEMA.html b/docs/Doxygen/d7/d40/classEMA.html deleted file mode 100644 index a585bebd6..000000000 --- a/docs/Doxygen/d7/d40/classEMA.html +++ /dev/null @@ -1,266 +0,0 @@ - - - - - - - -Arduino Helpers: EMA< K, uint_t > Class Template Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
- -
-
EMA< K, uint_t > Class Template Reference
-
-
- -

A class for single-pole infinite impulse response filters or exponential moving average filters. - More...

- -

#include <EMA.hpp>

-
-Collaboration diagram for EMA< K, uint_t >:
-
-
-
- - - - - - - - -

-Public Member Functions

uint_t filter (uint_t input)
 Filter the input: Given \( x[n] \), calculate \( y[n] \). More...
 
uint_t operator() (uint_t value)
 Filter the input: Given \( x[n] \), calculate \( y[n] \). More...
 
- - - -

-Private Attributes

uint_t filtered = 0
 
- - - -

-Static Private Attributes

constexpr static uint_t fixedPointAHalf = 1 << (K - 1)
 
-

Detailed Description

-

template<uint8_t K, class uint_t>
-class EMA< K, uint_t >

- -

A class for single-pole infinite impulse response filters or exponential moving average filters.

-

Optimized implementation of the difference equation with a slight optimization by using a factor of two as the pole location (this means that no division or floating point operations are required).

-

Difference equation: \( y[n] = \alpha·x[n]+(1-\alpha)·y[n-1] \) where \( \alpha = \left(\frac{1}{2}\right)^{K} \), \( x \) is the input sequence, and \( y \) is the output sequence.

-

An in-depth explanation of the EMA filter

-
Template Parameters
- - - -
KThe amount of bits to shift by. This determines the location of the pole in the EMA transfer function, and therefore the cut-off frequency.
- The higher this number, the more filtering takes place.
- The pole location is \( 1 - 2^{-K} \).
uint_tThe (signed) integer type to use for the input, intermediate values and the output. Should be at least \( M+K \) bits wide, where \( M \) is the maximum number of bits of the input. In case of the Arduino's built-in ADC, \( M = 10 = \log_2(1024) \).
-
-
- -

Definition at line 42 of file EMA.hpp.

-

Member Function Documentation

- -

◆ filter()

- -
-
- - - - - -
- - - - - - - - -
uint_t filter (uint_t input)
-
-inline
-
- -

Filter the input: Given \( x[n] \), calculate \( y[n] \).

-
Parameters
- - -
inputThe new raw input value.
-
-
-
Returns
The new filtered output value.
- -

Definition at line 51 of file EMA.hpp.

- -
-
- -

◆ operator()()

- -
-
- - - - - -
- - - - - - - - -
uint_t operator() (uint_t value)
-
-inline
-
- -

Filter the input: Given \( x[n] \), calculate \( y[n] \).

-
Parameters
- - -
valueThe new raw input value.
-
-
-
Returns
The new filtered output value.
- -

Definition at line 65 of file EMA.hpp.

- -
-
-

Member Data Documentation

- -

◆ filtered

- -
-
- - - - - -
- - - - -
uint_t filtered = 0
-
-private
-
- -

Definition at line 73 of file EMA.hpp.

- -
-
- -

◆ fixedPointAHalf

- -
-
- - - - - -
- - - - -
constexpr static uint_t fixedPointAHalf = 1 << (K - 1)
-
-staticconstexprprivate
-
- -

Definition at line 74 of file EMA.hpp.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/Doxygen/d7/d52/DebugVal_8hpp.html b/docs/Doxygen/d7/d52/DebugVal_8hpp.html deleted file mode 100644 index 1c8d572ba..000000000 --- a/docs/Doxygen/d7/d52/DebugVal_8hpp.html +++ /dev/null @@ -1,612 +0,0 @@ - - - - - - - -Arduino Helpers: DebugVal.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
DebugVal.hpp File Reference
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Macros

#define COUNT(...)   COUNT_HELPER(__VA_ARGS__, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
 
#define COUNT_HELPER(N1, N2, N3, N4, N5, N6, N7, N8, N9, N10, N, ...)   N
 
#define DEBUGVALN(N)   DEBUGVALN_HELPER(N)
 
#define DEBUGVALN_HELPER(N)   DEBUGVAL##N
 
#define DEBUGVAL10(x, ...)
 
#define DEBUGVAL9(x, ...)
 
#define DEBUGVAL8(x, ...)
 
#define DEBUGVAL7(x, ...)
 
#define DEBUGVAL6(x, ...)
 
#define DEBUGVAL5(x, ...)
 
#define DEBUGVAL4(x, ...)
 
#define DEBUGVAL3(x, ...)
 
#define DEBUGVAL2(x, ...)
 
#define DEBUGVAL1(x)
 
-

Macro Definition Documentation

- -

◆ COUNT

- -
-
- - - - - - - - -
#define COUNT( ...)   COUNT_HELPER(__VA_ARGS__, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
-
- -

Definition at line 1 of file DebugVal.hpp.

- -
-
- -

◆ COUNT_HELPER

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#define COUNT_HELPER( N1,
 N2,
 N3,
 N4,
 N5,
 N6,
 N7,
 N8,
 N9,
 N10,
 N,
 ... 
)   N
-
- -

Definition at line 2 of file DebugVal.hpp.

- -
-
- -

◆ DEBUGVALN

- -
-
- - - - - - - - -
#define DEBUGVALN( N)   DEBUGVALN_HELPER(N)
-
- -

Definition at line 4 of file DebugVal.hpp.

- -
-
- -

◆ DEBUGVALN_HELPER

- -
-
- - - - - - - - -
#define DEBUGVALN_HELPER( N)   DEBUGVAL##N
-
- -

Definition at line 5 of file DebugVal.hpp.

- -
-
- -

◆ DEBUGVAL10

- -
-
- - - - - - - - - - - - - - - - - - -
#define DEBUGVAL10( x,
 ... 
)
-
-Value:
do { \
-
DEBUG_OUT << NAMEDVALUE(x) << ", "; \
-
DEBUGVAL9(__VA_ARGS__); \
-
} while (0)
-
-

Definition at line 7 of file DebugVal.hpp.

- -
-
- -

◆ DEBUGVAL9

- -
-
- - - - - - - - - - - - - - - - - - -
#define DEBUGVAL9( x,
 ... 
)
-
-Value:
do { \
-
DEBUG_OUT << NAMEDVALUE(x) << ", "; \
-
DEBUGVAL8(__VA_ARGS__); \
-
} while (0)
-
-

Definition at line 12 of file DebugVal.hpp.

- -
-
- -

◆ DEBUGVAL8

- -
-
- - - - - - - - - - - - - - - - - - -
#define DEBUGVAL8( x,
 ... 
)
-
-Value:
do { \
-
DEBUG_OUT << NAMEDVALUE(x) << ", "; \
-
DEBUGVAL7(__VA_ARGS__); \
-
} while (0)
-
-

Definition at line 17 of file DebugVal.hpp.

- -
-
- -

◆ DEBUGVAL7

- -
-
- - - - - - - - - - - - - - - - - - -
#define DEBUGVAL7( x,
 ... 
)
-
-Value:
do { \
-
DEBUG_OUT << NAMEDVALUE(x) << ", "; \
-
DEBUGVAL6(__VA_ARGS__); \
-
} while (0)
-
-

Definition at line 22 of file DebugVal.hpp.

- -
-
- -

◆ DEBUGVAL6

- -
-
- - - - - - - - - - - - - - - - - - -
#define DEBUGVAL6( x,
 ... 
)
-
-Value:
do { \
-
DEBUG_OUT << NAMEDVALUE(x) << ", "; \
-
DEBUGVAL5(__VA_ARGS__); \
-
} while (0)
-
-

Definition at line 27 of file DebugVal.hpp.

- -
-
- -

◆ DEBUGVAL5

- -
-
- - - - - - - - - - - - - - - - - - -
#define DEBUGVAL5( x,
 ... 
)
-
-Value:
do { \
-
DEBUG_OUT << NAMEDVALUE(x) << ", "; \
-
DEBUGVAL4(__VA_ARGS__); \
-
} while (0)
-
-

Definition at line 32 of file DebugVal.hpp.

- -
-
- -

◆ DEBUGVAL4

- -
-
- - - - - - - - - - - - - - - - - - -
#define DEBUGVAL4( x,
 ... 
)
-
-Value:
do { \
-
DEBUG_OUT << NAMEDVALUE(x) << ", "; \
-
DEBUGVAL3(__VA_ARGS__); \
-
} while (0)
-
-

Definition at line 37 of file DebugVal.hpp.

- -
-
- -

◆ DEBUGVAL3

- -
-
- - - - - - - - - - - - - - - - - - -
#define DEBUGVAL3( x,
 ... 
)
-
-Value:
do { \
-
DEBUG_OUT << NAMEDVALUE(x) << ", "; \
-
DEBUGVAL2(__VA_ARGS__); \
-
} while (0)
-
-

Definition at line 42 of file DebugVal.hpp.

- -
-
- -

◆ DEBUGVAL2

- -
-
- - - - - - - - - - - - - - - - - - -
#define DEBUGVAL2( x,
 ... 
)
-
-Value:
do { \
-
DEBUG_OUT << NAMEDVALUE(x) << ", "; \
-
DEBUGVAL1(__VA_ARGS__); \
-
} while (0)
-
-

Definition at line 47 of file DebugVal.hpp.

- -
-
- -

◆ DEBUGVAL1

- -
-
- - - - - - - - -
#define DEBUGVAL1( x)
-
-Value:
do { \
-
DEBUG_OUT << NAMEDVALUE(x) << DEBUG_ENDL; \
-
} while (0)
-
-

Definition at line 52 of file DebugVal.hpp.

- -
-
-
-
#define NAMEDVALUE(x)
Macro for printing an expression as a string, followed by its value.
Definition: Debug.hpp:69
-
#define DEBUG_ENDL
Definition: Debug.hpp:48
- - - - diff --git a/docs/Doxygen/d7/d52/DebugVal_8hpp_source.html b/docs/Doxygen/d7/d52/DebugVal_8hpp_source.html deleted file mode 100644 index 406d9d3c6..000000000 --- a/docs/Doxygen/d7/d52/DebugVal_8hpp_source.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - -Arduino Helpers: DebugVal.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
DebugVal.hpp
-
-
-Go to the documentation of this file.
1 #define COUNT(...) COUNT_HELPER(__VA_ARGS__, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
-
2 #define COUNT_HELPER(N1, N2, N3, N4, N5, N6, N7, N8, N9, N10, N, ...) N
-
3 
-
4 #define DEBUGVALN(N) DEBUGVALN_HELPER(N)
-
5 #define DEBUGVALN_HELPER(N) DEBUGVAL##N
-
6 
-
7 #define DEBUGVAL10(x, ...) \
-
8  do { \
-
9  DEBUG_OUT << NAMEDVALUE(x) << ", "; \
-
10  DEBUGVAL9(__VA_ARGS__); \
-
11  } while (0)
-
12 #define DEBUGVAL9(x, ...) \
-
13  do { \
-
14  DEBUG_OUT << NAMEDVALUE(x) << ", "; \
-
15  DEBUGVAL8(__VA_ARGS__); \
-
16  } while (0)
-
17 #define DEBUGVAL8(x, ...) \
-
18  do { \
-
19  DEBUG_OUT << NAMEDVALUE(x) << ", "; \
-
20  DEBUGVAL7(__VA_ARGS__); \
-
21  } while (0)
-
22 #define DEBUGVAL7(x, ...) \
-
23  do { \
-
24  DEBUG_OUT << NAMEDVALUE(x) << ", "; \
-
25  DEBUGVAL6(__VA_ARGS__); \
-
26  } while (0)
-
27 #define DEBUGVAL6(x, ...) \
-
28  do { \
-
29  DEBUG_OUT << NAMEDVALUE(x) << ", "; \
-
30  DEBUGVAL5(__VA_ARGS__); \
-
31  } while (0)
-
32 #define DEBUGVAL5(x, ...) \
-
33  do { \
-
34  DEBUG_OUT << NAMEDVALUE(x) << ", "; \
-
35  DEBUGVAL4(__VA_ARGS__); \
-
36  } while (0)
-
37 #define DEBUGVAL4(x, ...) \
-
38  do { \
-
39  DEBUG_OUT << NAMEDVALUE(x) << ", "; \
-
40  DEBUGVAL3(__VA_ARGS__); \
-
41  } while (0)
-
42 #define DEBUGVAL3(x, ...) \
-
43  do { \
-
44  DEBUG_OUT << NAMEDVALUE(x) << ", "; \
-
45  DEBUGVAL2(__VA_ARGS__); \
-
46  } while (0)
-
47 #define DEBUGVAL2(x, ...) \
-
48  do { \
-
49  DEBUG_OUT << NAMEDVALUE(x) << ", "; \
-
50  DEBUGVAL1(__VA_ARGS__); \
-
51  } while (0)
-
52 #define DEBUGVAL1(x) \
-
53  do { \
-
54  DEBUG_OUT << NAMEDVALUE(x) << DEBUG_ENDL; \
-
55  } while (0)
-
- - - - diff --git a/docs/Doxygen/d7/d66/PrintStream_8dox.html b/docs/Doxygen/d7/d66/PrintStream_8dox.html deleted file mode 100644 index cd8f84ffb..000000000 --- a/docs/Doxygen/d7/d66/PrintStream_8dox.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: PrintStream.dox File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
PrintStream.dox File Reference
-
-
-
- - - - diff --git a/docs/Doxygen/d7/d6a/structArray.html b/docs/Doxygen/d7/d6a/structArray.html deleted file mode 100644 index c3710ff9d..000000000 --- a/docs/Doxygen/d7/d6a/structArray.html +++ /dev/null @@ -1,587 +0,0 @@ - - - - - - - -Arduino Helpers: Array< T, N > Struct Template Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

An array wrapper for easy copying, comparing, and iterating. - More...

- -

#include <Array.hpp>

-
-Collaboration diagram for Array< T, N >:
-
-
-
- - - - -

-Public Types

using type = T
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

T & operator[] (size_t index)
 Get the element at the given index. More...
 
const T & operator[] (size_t index) const
 Get the element at the given index. More...
 
T * begin ()
 Get a pointer to the first element. More...
 
const T * begin () const
 Get a pointer to the first element. More...
 
T * end ()
 Get a pointer to the memory beyond the array. More...
 
const T * end () const
 Get a pointer to the memory beyond the array. More...
 
bool operator== (const Array< T, N > &rhs) const
 Check the equality of all elements in two arrays. More...
 
bool operator!= (const Array< T, N > &rhs) const
 Check the inequality of all elements in two arrays. More...
 
template<size_t Start = 0, size_t End = N - 1>
ArraySlice< T, abs_diff(Start, End)+1,(End< Start), false > slice ()
 Get a view on a slice of the Array. More...
 
template<size_t Start = 0, size_t End = N - 1>
ArraySlice< T, abs_diff(Start, End)+1,(End< Start), true > slice () const
 Get a read-only view on a slice of the Array. More...
 
template<size_t Start = 0, size_t End = N - 1>
ArraySlice< T, abs_diff(Start, End)+1,(End< Start), true > cslice () const
 Get a read-only view on a slice of the Array. More...
 
- - - -

-Public Attributes

data [N]
 
- - - -

-Static Public Attributes

constexpr static size_t length = N
 
-

Detailed Description

-

template<class T, size_t N>
-struct Array< T, N >

- -

An array wrapper for easy copying, comparing, and iterating.

-
Template Parameters
- - - -
TThe type of the elements in the array.
NThe number of elements in the array.
-
-
-
Examples
ArraySort.ino, and Numeric.ino.
-
- -

Definition at line 36 of file Array.hpp.

-

Member Typedef Documentation

- -

◆ type

- -
-
- - - - -
using type = T
-
- -

Definition at line 38 of file Array.hpp.

- -
-
-

Member Function Documentation

- -

◆ operator[]() [1/2]

- -
-
- - - - - -
- - - - - - - - -
T& operator[] (size_t index)
-
-inline
-
- -

Get the element at the given index.

-
Note
Bounds checking is performed. If fatal errors are disabled, the last element is returned if the index is out of bounds.
-
Parameters
- - -
indexThe (zero-based) index of the element to return.
-
-
- -

Definition at line 50 of file Array.hpp.

- -
-
- -

◆ operator[]() [2/2]

- -
-
- - - - - -
- - - - - - - - -
const T& operator[] (size_t index) const
-
-inline
-
- -

Get the element at the given index.

-
Note
Bounds checking is performed. If fatal errors are disabled, the last element is returned if the index is out of bounds.
-
Parameters
- - -
indexThe (zero-based) index of the element to return.
-
-
- -

Definition at line 67 of file Array.hpp.

- -
-
- -

◆ begin() [1/2]

- -
-
- - - - - -
- - - - - - - -
T* begin ()
-
-inline
-
- -

Get a pointer to the first element.

- -

Definition at line 78 of file Array.hpp.

- -
-
- -

◆ begin() [2/2]

- -
-
- - - - - -
- - - - - - - -
const T* begin () const
-
-inline
-
- -

Get a pointer to the first element.

- -

Definition at line 83 of file Array.hpp.

- -
-
- -

◆ end() [1/2]

- -
-
- - - - - -
- - - - - - - -
T* end ()
-
-inline
-
- -

Get a pointer to the memory beyond the array.

- -

Definition at line 88 of file Array.hpp.

- -
-
- -

◆ end() [2/2]

- -
-
- - - - - -
- - - - - - - -
const T* end () const
-
-inline
-
- -

Get a pointer to the memory beyond the array.

- -

Definition at line 93 of file Array.hpp.

- -
-
- -

◆ operator==()

- -
-
- - - - - -
- - - - - - - - -
bool operator== (const Array< T, N > & rhs) const
-
-inline
-
- -

Check the equality of all elements in two arrays.

-
Parameters
- - -
rhsThe array to compare this array to.
-
-
- -

Definition at line 101 of file Array.hpp.

- -
-
- -

◆ operator!=()

- -
-
- - - - - -
- - - - - - - - -
bool operator!= (const Array< T, N > & rhs) const
-
-inline
-
- -

Check the inequality of all elements in two arrays.

-
Parameters
- - -
rhsThe array to compare this array to.
-
-
- -

Definition at line 116 of file Array.hpp.

- -
-
- -

◆ slice() [1/2]

- -
-
- - - - - - - -
ArraySlice<T, abs_diff(Start, End) + 1, (End < Start), false> slice ()
-
- -

Get a view on a slice of the Array.

-

Doesn't copy the contents of the array, it's just a reference to the original array.

-
Template Parameters
- - - -
StartThe start index of the slice.
EndThe end index of the slice.
-
-
- -
-
- -

◆ slice() [2/2]

- -
-
- - - - - - - -
ArraySlice<T, abs_diff(Start, End) + 1, (End < Start), true> slice () const
-
- -

Get a read-only view on a slice of the Array.

-

Doesn't copy the contents of the array, it's just a reference to the original array.

-
Template Parameters
- - - -
StartThe start index of the slice.
EndThe end index of the slice.
-
-
- -
-
- -

◆ cslice()

- -
-
- - - - - -
- - - - - - - -
ArraySlice<T, abs_diff(Start, End) + 1, (End < Start), true> cslice () const
-
-inline
-
- -

Get a read-only view on a slice of the Array.

-

Doesn't copy the contents of the array, it's just a reference to the original array.

-
Template Parameters
- - - -
StartThe start index of the slice.
EndThe end index of the slice.
-
-
- -

Definition at line 146 of file Array.hpp.

- -
-
-

Member Data Documentation

- -

◆ data

- -
-
- - - - -
T data[N]
-
- -

Definition at line 37 of file Array.hpp.

- -
-
- -

◆ length

- -
-
- - - - - -
- - - - -
constexpr static size_t length = N
-
-staticconstexpr
-
- -

Definition at line 39 of file Array.hpp.

- -
-
-
The documentation for this struct was generated from the following file: -
- - - - diff --git a/docs/Doxygen/d7/d70/EMA_8hpp__dep__incl.map b/docs/Doxygen/d7/d70/EMA_8hpp__dep__incl.map deleted file mode 100644 index 720489454..000000000 --- a/docs/Doxygen/d7/d70/EMA_8hpp__dep__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/d7/d70/EMA_8hpp__dep__incl.md5 b/docs/Doxygen/d7/d70/EMA_8hpp__dep__incl.md5 deleted file mode 100644 index e8c1eaf5a..000000000 --- a/docs/Doxygen/d7/d70/EMA_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -690d106605b751ba65a83f207352a748 \ No newline at end of file diff --git a/docs/Doxygen/d7/d70/EMA_8hpp__dep__incl.svg b/docs/Doxygen/d7/d70/EMA_8hpp__dep__incl.svg deleted file mode 100644 index 6825e5294..000000000 --- a/docs/Doxygen/d7/d70/EMA_8hpp__dep__incl.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - -EMA.hpp - - -Node1 - - -EMA.hpp - - - - -Node2 - - -FilteredAnalog.hpp - - - - -Node1->Node2 - - - - - diff --git a/docs/Doxygen/d7/d70/structSetprecision.html b/docs/Doxygen/d7/d70/structSetprecision.html deleted file mode 100644 index 0a2b2b2c5..000000000 --- a/docs/Doxygen/d7/d70/structSetprecision.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - -Arduino Helpers: Setprecision Struct Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
- -
-
Setprecision Struct Reference
-
-
- -

#include <PrintStream.hpp>

-
-Collaboration diagram for Setprecision:
-
-
-
- - - - -

-Public Attributes

int M_n
 
-

Detailed Description

-
-

Definition at line 59 of file PrintStream.hpp.

-

Member Data Documentation

- -

◆ M_n

- -
-
- - - - -
int M_n
-
- -

Definition at line 60 of file PrintStream.hpp.

- -
-
-
The documentation for this struct was generated from the following file: -
- - - - diff --git a/docs/Doxygen/d7/d79/MinMaxFix_8hpp.html b/docs/Doxygen/d7/d79/MinMaxFix_8hpp.html deleted file mode 100644 index 8fe4514e1..000000000 --- a/docs/Doxygen/d7/d79/MinMaxFix_8hpp.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -Arduino Helpers: MinMaxFix.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
MinMaxFix.hpp File Reference
-
-
-
-Include dependency graph for MinMaxFix.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - - - - - - -

-Functions

template<class T , class U >
constexpr auto min (const T &a, const U &b) -> decltype(b< a ? b :a)
 Return the smaller of two numbers/objects. More...
 
template<class T , class U >
constexpr auto max (const T &a, const U &b) -> decltype(a< b ? b :a)
 Return the larger of two numbers/objects. More...
 
-
- - - - diff --git a/docs/Doxygen/d7/d79/MinMaxFix_8hpp_source.html b/docs/Doxygen/d7/d79/MinMaxFix_8hpp_source.html deleted file mode 100644 index 7e06b477c..000000000 --- a/docs/Doxygen/d7/d79/MinMaxFix_8hpp_source.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - -Arduino Helpers: MinMaxFix.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
MinMaxFix.hpp
-
-
-Go to the documentation of this file.
1 #pragma once
-
2 
- -
4 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
5 
-
6 #include <AH/Math/FixArduinoMacros.hpp>
-
7 
- -
9 
- -
11 
-
14 template <class T, class U>
-
15 constexpr auto min(const T &a, const U &b) -> decltype(b < a ? b : a) {
-
16  return b < a ? b : a;
-
17 }
-
18 
-
21 template <class T, class U>
-
22 constexpr auto max(const T &a, const U &b) -> decltype(a < b ? b : a) {
-
23  return a < b ? b : a;
-
24 }
-
25 
- -
27 
- -
-
#define BEGIN_AH_NAMESPACE
- -
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
- -
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
#define END_AH_NAMESPACE
-
constexpr auto max(const T &a, const U &b) -> decltype(a< b ? b :a)
Return the larger of two numbers/objects.
Definition: MinMaxFix.hpp:22
-
constexpr auto min(const T &a, const U &b) -> decltype(b< a ? b :a)
Return the smaller of two numbers/objects.
Definition: MinMaxFix.hpp:15
- - - - diff --git a/docs/Doxygen/d7/d7c/ADCConfig_8hpp.html b/docs/Doxygen/d7/d7c/ADCConfig_8hpp.html deleted file mode 100644 index 268082cc5..000000000 --- a/docs/Doxygen/d7/d7c/ADCConfig_8hpp.html +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - - -Arduino Helpers: ADCConfig.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ADCConfig.hpp File Reference
-
-
- -

This file contains the platform-specific ADC resolutions. By default, the library automatically selects the maximum supported resolution for known boards, otherwise, it falls back to 10 bits. -More...

-
#include <AH/Settings/Warnings.hpp>
-#include <Arduino.h>
-
-Include dependency graph for ADCConfig.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - - - - -

-Macros

#define ADC_RESOLUTION   10
 The actual maximum resolution of the built-in ADC. More...
 
#define HAS_ANALOG_READ_RESOLUTION   0
 Whether the platform supports the analogReadResolution function. More...
 
-

Detailed Description

-

This file contains the platform-specific ADC resolutions. By default, the library automatically selects the maximum supported resolution for known boards, otherwise, it falls back to 10 bits.

-
See also
AH::ADC_BITS
- -

Definition in file ADCConfig.hpp.

-

Macro Definition Documentation

- -

◆ ADC_RESOLUTION

- -
-
- - - - -
#define ADC_RESOLUTION   10
-
- -

The actual maximum resolution of the built-in ADC.

- -

Definition at line 69 of file ADCConfig.hpp.

- -
-
- -

◆ HAS_ANALOG_READ_RESOLUTION

- -
-
- - - - -
#define HAS_ANALOG_READ_RESOLUTION   0
-
- -

Whether the platform supports the analogReadResolution function.

- -

Definition at line 71 of file ADCConfig.hpp.

- -
-
-
- - - - diff --git a/docs/Doxygen/d7/d7c/ADCConfig_8hpp_source.html b/docs/Doxygen/d7/d7c/ADCConfig_8hpp_source.html deleted file mode 100644 index cabe27c70..000000000 --- a/docs/Doxygen/d7/d7c/ADCConfig_8hpp_source.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - -Arduino Helpers: ADCConfig.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ADCConfig.hpp
-
-
-Go to the documentation of this file.
1 #pragma once
-
2 
-
11 #include <AH/Settings/Warnings.hpp>
-
12 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
13 
- -
15 #include <Arduino.h>
- -
17 
-
18 #if defined(ADC_RESOLUTION)
-
19 #define HAS_ANALOG_READ_RESOLUTION 1
-
20 
-
21 // Teensy
-
22 //------------------------------------------------------------------------------
-
23 #elif defined(TEENSYDUINO) && !defined(DOXYGEN)
-
24 
-
25 #if defined(__AVR__) // Teensy 2.x
-
26 #define ADC_RESOLUTION 10
-
27 #define HAS_ANALOG_READ_RESOLUTION 0
-
28 
-
29 #elif defined(__MK20DX128__) // Teensy 3.0
-
30 #define ADC_RESOLUTION 13
-
31 #define HAS_ANALOG_READ_RESOLUTION 1
-
32 
-
33 #elif defined(__MK20DX256__) // Teensy 3.1/3.2
-
34 #define ADC_RESOLUTION 13
-
35 #define HAS_ANALOG_READ_RESOLUTION 1
-
36 
-
37 #elif defined(__MKL26Z64__) // Teensy LC
-
38 #define ADC_RESOLUTION 12
-
39 #define HAS_ANALOG_READ_RESOLUTION 1
-
40 
-
41 #elif defined(__MK64FX512__) // Teensy 3.5
-
42 #define ADC_RESOLUTION 13
-
43 #define HAS_ANALOG_READ_RESOLUTION 1
-
44 
-
45 #elif defined(__MK66FX1M0__) // Teensy 3.6
-
46 #define ADC_RESOLUTION 13
-
47 #define HAS_ANALOG_READ_RESOLUTION 1
-
48 
-
49 #elif defined(__IMXRT1062__) || defined(__IMXRT1052__) // Teensy 4.0
-
50 #define ADC_RESOLUTION 12
-
51 #define HAS_ANALOG_READ_RESOLUTION 1
-
52 
-
53 #else
-
54 #warning "Unknown Teensy board, please open an issue on GitHub" \
-
55  "https://github.com/tttapa/Arduino-Helpers"
-
56 #endif
-
57 
-
58 // ESP32
-
59 //------------------------------------------------------------------------------
-
60 #elif defined(ESP32)
-
61 
-
62 #define ADC_RESOLUTION 12
-
63 #define HAS_ANALOG_READ_RESOLUTION 1
-
64 
-
65 // Unknown/Default
-
66 //------------------------------------------------------------------------------
-
67 #else
-
68 #define ADC_RESOLUTION 10
-
70 #define HAS_ANALOG_READ_RESOLUTION 0
-
72 
-
73 #endif
-
74 
- -
- -
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
#define AH_DIAGNOSTIC_EXTERNAL_HEADER()
Definition: Warnings.hpp:18
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
- - - - diff --git a/docs/Doxygen/d7/d88/SPIShiftRegisterOut_8hpp.html b/docs/Doxygen/d7/d88/SPIShiftRegisterOut_8hpp.html deleted file mode 100644 index b76124acd..000000000 --- a/docs/Doxygen/d7/d88/SPIShiftRegisterOut_8hpp.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - -Arduino Helpers: SPIShiftRegisterOut.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
SPIShiftRegisterOut.hpp File Reference
-
-
-
#include <AH/Settings/Warnings.hpp>
-#include "ShiftRegisterOutBase.hpp"
-#include <AH/Containers/BitArray.hpp>
-#include <Arduino.h>
-#include "SPIShiftRegisterOut.ipp"
-
-Include dependency graph for SPIShiftRegisterOut.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - -

-Classes

class  SPIShiftRegisterOut< N >
 A class for serial-in/parallel-out shift registers, like the 74HC595 that are connected to the SPI bus. More...
 
-
- - - - diff --git a/docs/Doxygen/d7/d88/SPIShiftRegisterOut_8hpp_source.html b/docs/Doxygen/d7/d88/SPIShiftRegisterOut_8hpp_source.html deleted file mode 100644 index 185d03f01..000000000 --- a/docs/Doxygen/d7/d88/SPIShiftRegisterOut_8hpp_source.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - -Arduino Helpers: SPIShiftRegisterOut.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
SPIShiftRegisterOut.hpp
-
-
-Go to the documentation of this file.
1 /* ✔ */
-
2 
-
3 #pragma once
-
4 
- -
6 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
7 
-
8 #include "ShiftRegisterOutBase.hpp"
- -
10 
- -
12 #include <Arduino.h> // MSBFIRST, SS
- -
14 
- -
16 
-
28 template <uint8_t N>
- -
30  public:
- -
32 
-
57  SPIShiftRegisterOut(pin_t latchPin = SS, BitOrder_t bitOrder = MSBFIRST);
-
58 
-
64  void begin() override;
-
65 
-
69  void update() override;
-
70 };
-
71 
- -
73 
-
74 #include "SPIShiftRegisterOut.ipp"
-
75 
- -
-
#define BEGIN_AH_NAMESPACE
- -
A class for serial-in/parallel-out shift registers, like the 74HC595 that are connected to the SPI bu...
- - -
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
A class for serial-in/parallel-out shift registers, like the 74HC595.
-
#define AH_DIAGNOSTIC_EXTERNAL_HEADER()
Definition: Warnings.hpp:18
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
-
#define END_AH_NAMESPACE
- - - - - diff --git a/docs/Doxygen/d7/d8d/classAnalogMultiplex.html b/docs/Doxygen/d7/d8d/classAnalogMultiplex.html deleted file mode 100644 index 830776c5a..000000000 --- a/docs/Doxygen/d7/d8d/classAnalogMultiplex.html +++ /dev/null @@ -1,1220 +0,0 @@ - - - - - - - -Arduino Helpers: AnalogMultiplex< N > Class Template Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

A class for reading multiplexed analog inputs. - More...

- -

#include <AnalogMultiplex.hpp>

-
-Inheritance diagram for AnalogMultiplex< N >:
-
-
-
-
-Collaboration diagram for AnalogMultiplex< N >:
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 AnalogMultiplex (pin_t analogPin, const Array< pin_t, N > &addressPins, pin_t enablePin=NO_PIN)
 Create a new AnalogMultiplex object on the given pins. More...
 
void pinMode (pin_t pin, uint8_t mode) override
 Set the pin mode of the analog input pin. More...
 
void digitalWrite (pin_t, uint8_t) override __attribute__((deprecated))
 The digitalWrite function is not implemented because writing an output to a multiplexer is not useful. More...
 
int digitalRead (pin_t pin) override
 Read the digital state of the given input. More...
 
analog_t analogRead (pin_t pin) override
 Read the analog value of the given input. More...
 
void analogWrite (pin_t, analog_t) override __attribute__((deprecated))
 The analogWrite function is not implemented because writing an output to a multiplexer is not useful. More...
 
void begin () override
 Initialize the multiplexer: set the pin mode of the address pins and the enable pin to output mode. More...
 
void update () override
 No periodic updating of the state is necessary, all actions are carried out when the user calls analogRead or digitalRead. More...
 
Array< pin_t, N > pins () const
 Get an array containing all pins of the element. More...
 
pin_t pin (pin_t pin) const
 Get the extended IO pin number of a given physical pin of this extended IO element. More...
 
pin_t operator[] (pin_t pin) const
 Get the extended IO pin number of a given physical pin of this extended IO element. More...
 
pin_t getLength () const
 Get the number of pins this IO element has. More...
 
pin_t getEnd () const
 Get the largest global extended IO pin number that belongs to this extended IO element. More...
 
pin_t getStart () const
 Get the smallest global extended IO pin number that belongs to this extended IO element. More...
 
- - - - - - - - - -

-Static Public Member Functions

static constexpr uint16_t length ()
 
static void beginAll ()
 Initialize all extended IO elements. More...
 
static DoublyLinkedList< ExtendedIOElement > & getAll ()
 Get the list of all Extended IO elements. More...
 
- - - - - -

-Protected Attributes

ExtendedIOElementnext
 
ExtendedIOElementprevious
 
- - - - - - - - - - -

-Private Member Functions

void setMuxAddress (uint8_t address)
 Write the pin number/address to the address pins of the multiplexer. More...
 
void prepareReading (uint8_t address)
 Select the correct address and enable the multiplexer. More...
 
void afterReading ()
 Disable the multiplexer. More...
 
- - - - - - - - - - - -

-Private Attributes

const pin_t analogPin
 
const Array< pin_t, N > addressPins
 
const pin_t enablePin
 
const pin_t start
 
const pin_t end
 
- - - - - - - - - -

-Static Private Attributes

constexpr static uint8_t MUX_ENABLED = LOW
 
constexpr static uint8_t MUX_DISABLED = HIGH
 
static pin_t offset = NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS
 
static DoublyLinkedList< ExtendedIOElementelements
 
-

Detailed Description

-

template<uint8_t N>
-class AnalogMultiplex< N >

- -

A class for reading multiplexed analog inputs.

-

Supports 74HC4067, 74HC4051, etc.

-

You can use many multiplexers on the same address lines if each of the multiplexers has a different enable line.

-
Template Parameters
- - -
NThe number of address lines.
-
-
-
Examples
1.AnalogReadSerial.ino, 2.DigitalReadSerial.ino, and Toggle-LEDs.ino.
-
- -

Definition at line 28 of file AnalogMultiplex.hpp.

-

Constructor & Destructor Documentation

- -

◆ AnalogMultiplex()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
AnalogMultiplex (pin_t analogPin,
const Array< pin_t, N > & addressPins,
pin_t enablePin = NO_PIN 
)
-
-inline
-
- -

Create a new AnalogMultiplex object on the given pins.

-
Parameters
- - - - -
analogPinThe analog input pin connected to the output of the multiplexer.
addressPinsAn array of the pins connected to the address lines of the multiplexer. (Labeled S0, S1, S2 ... in the datasheet.)
enablePinThe digital output pin connected to the enable pin of the multiplexer. (Labeled Ē in the datasheet.)
- If you don't need the enable pin, you can use NO_PIN, which is the default.
-
-
- -

Definition at line 44 of file AnalogMultiplex.hpp.

- -
-
-

Member Function Documentation

- -

◆ pinMode()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void pinMode (pin_t pin,
uint8_t mode 
)
-
-overridevirtual
-
- -

Set the pin mode of the analog input pin.

-


- This allows you to enable the internal pull-up resistor, for use with buttons or open-collector outputs.

-
Note
This applies to all pins of this multiplexer.
- This affects all pins of the multiplexer, because it has only a single common pin.
-
-
Parameters
- - - -
pin(Unused)
modeThe new mode of the input pin: either INPUT or INPUT_PULLUP.
-
-
- -

Implements ExtendedIOElement.

-
Examples
2.DigitalReadSerial.ino.
-
- -

Definition at line 159 of file AnalogMultiplex.hpp.

- -
-
- -

◆ digitalWrite()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void digitalWrite (pin_t ,
uint8_t  
)
-
-inlineoverridevirtual
-
- -

The digitalWrite function is not implemented because writing an output to a multiplexer is not useful.

- -

Implements ExtendedIOElement.

- -

Definition at line 70 of file AnalogMultiplex.hpp.

- -
-
- -

◆ digitalRead()

- -
-
- - - - - -
- - - - - - - - -
int digitalRead (pin_t pin)
-
-overridevirtual
-
- -

Read the digital state of the given input.

-
Parameters
- - -
pinThe multiplexer's pin number to read from.
-
-
- -

Implements ExtendedIOElement.

-
Examples
2.DigitalReadSerial.ino.
-
- -

Definition at line 164 of file AnalogMultiplex.hpp.

- -
-
- -

◆ analogRead()

- -
-
- - - - - -
- - - - - - - - -
analog_t analogRead (pin_t pin)
-
-overridevirtual
-
- -

Read the analog value of the given input.

-
Parameters
- - -
pinThe multiplexer's pin number to read from.
-
-
- -

Implements ExtendedIOElement.

-
Examples
1.AnalogReadSerial.ino.
-
- -

Definition at line 172 of file AnalogMultiplex.hpp.

- -
-
- -

◆ analogWrite()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void analogWrite (pin_t ,
analog_t  
)
-
-inlineoverridevirtual
-
- -

The analogWrite function is not implemented because writing an output to a multiplexer is not useful.

- -

Implements ExtendedIOElement.

- -

Definition at line 93 of file AnalogMultiplex.hpp.

- -
-
- -

◆ begin()

- -
-
- - - - - -
- - - - - - - -
void begin ()
-
-overridevirtual
-
- -

Initialize the multiplexer: set the pin mode of the address pins and the enable pin to output mode.

- -

Implements ExtendedIOElement.

-
Examples
1.AnalogReadSerial.ino, 2.DigitalReadSerial.ino, and Toggle-LEDs.ino.
-
- -

Definition at line 181 of file AnalogMultiplex.hpp.

- -
-
- -

◆ update()

- -
-
- - - - - -
- - - - - - - -
void update ()
-
-inlineoverridevirtual
-
- -

No periodic updating of the state is necessary, all actions are carried out when the user calls analogRead or digitalRead.

- -

Implements ExtendedIOElement.

- -

Definition at line 106 of file AnalogMultiplex.hpp.

- -
-
- -

◆ setMuxAddress()

- -
-
- - - - - -
- - - - - - - - -
void setMuxAddress (uint8_t address)
-
-private
-
- -

Write the pin number/address to the address pins of the multiplexer.

-
Parameters
- - -
addressThe address to select.
-
-
- -

Definition at line 191 of file AnalogMultiplex.hpp.

- -
-
- -

◆ prepareReading()

- -
-
- - - - - -
- - - - - - - - -
void prepareReading (uint8_t address)
-
-private
-
- -

Select the correct address and enable the multiplexer.

-
Parameters
- - -
addressThe address to select.
-
-
- -

Definition at line 203 of file AnalogMultiplex.hpp.

- -
-
- -

◆ afterReading()

- -
-
- - - - - -
- - - - - - - -
void afterReading ()
-
-private
-
- -

Disable the multiplexer.

- -

Definition at line 210 of file AnalogMultiplex.hpp.

- -
-
- -

◆ pins()

- -
-
- - - - - -
- - - - - - - -
Array<pin_t, N> pins () const
-
-inlineinherited
-
- -

Get an array containing all pins of the element.

-
Examples
1.AnalogReadSerial.ino, and 2.DigitalReadSerial.ino.
-
- -

Definition at line 27 of file StaticSizeExtendedIOElement.hpp.

- -
-
- -

◆ length()

- -
-
- - - - - -
- - - - - - - -
static constexpr uint16_t length ()
-
-inlinestaticconstexprinherited
-
-
Examples
Toggle-LEDs.ino.
-
- -

Definition at line 31 of file StaticSizeExtendedIOElement.hpp.

- -
-
- -

◆ beginAll()

- -
-
- - - - - -
- - - - - - - -
void beginAll ()
-
-staticinherited
-
- -

Initialize all extended IO elements.

- -

Definition at line 23 of file ExtendedIOElement.cpp.

- -
-
- -

◆ pin()

- -
-
- - - - - -
- - - - - - - - -
pin_t pin (pin_t pin) const
-
-inherited
-
- -

Get the extended IO pin number of a given physical pin of this extended IO element.

-
Parameters
- - -
pinThe zero-based physical pin number of this IO element.
-
-
-
Returns
The global, unique extended IO pin number for the given pin.
-
Examples
Toggle-LEDs.ino.
-
- -

Definition at line 28 of file ExtendedIOElement.cpp.

- -
-
- -

◆ operator[]()

- -
-
- - - - - -
- - - - - - - - -
pin_t operator[] (pin_t pin) const
-
-inherited
-
- -

Get the extended IO pin number of a given physical pin of this extended IO element.

-


- It is alias for ExtendedIOElement::pin.

Parameters
- - -
pinThe zero-based physical pin number of this IO element.
-
-
-
Returns
The global, unique extended IO pin number for the given pin.
- -

Definition at line 43 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getLength()

- -
-
- - - - - -
- - - - - - - -
pin_t getLength () const
-
-inherited
-
- -

Get the number of pins this IO element has.

-
Returns
The number of pins this IO element has.
-
Examples
1.AnalogReadSerial.ino, and 2.DigitalReadSerial.ino.
-
- -

Definition at line 45 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getEnd()

- -
-
- - - - - -
- - - - - - - -
pin_t getEnd () const
-
-inherited
-
- -

Get the largest global extended IO pin number that belongs to this extended IO element.

- -

Definition at line 47 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getStart()

- -
-
- - - - - -
- - - - - - - -
pin_t getStart () const
-
-inherited
-
- -

Get the smallest global extended IO pin number that belongs to this extended IO element.

- -

Definition at line 49 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getAll()

- -
-
- - - - - -
- - - - - - - -
DoublyLinkedList< ExtendedIOElement > & getAll ()
-
-staticinherited
-
- -

Get the list of all Extended IO elements.

- -

Definition at line 51 of file ExtendedIOElement.cpp.

- -
-
-

Member Data Documentation

- -

◆ analogPin

- -
-
- - - - - -
- - - - -
const pin_t analogPin
-
-private
-
- -

Definition at line 109 of file AnalogMultiplex.hpp.

- -
-
- -

◆ addressPins

- -
-
- - - - - -
- - - - -
const Array<pin_t, N> addressPins
-
-private
-
- -

Definition at line 110 of file AnalogMultiplex.hpp.

- -
-
- -

◆ enablePin

- -
-
- - - - - -
- - - - -
const pin_t enablePin
-
-private
-
- -

Definition at line 111 of file AnalogMultiplex.hpp.

- -
-
- -

◆ MUX_ENABLED

- -
-
- - - - - -
- - - - -
constexpr static uint8_t MUX_ENABLED = LOW
-
-staticconstexprprivate
-
- -

Definition at line 136 of file AnalogMultiplex.hpp.

- -
-
- -

◆ MUX_DISABLED

- -
-
- - - - - -
- - - - -
constexpr static uint8_t MUX_DISABLED = HIGH
-
-staticconstexprprivate
-
- -

Definition at line 137 of file AnalogMultiplex.hpp.

- -
-
- -

◆ start

- -
-
- - - - - -
- - - - -
const pin_t start
-
-privateinherited
-
- -

Definition at line 193 of file ExtendedIOElement.hpp.

- -
-
- -

◆ end

- -
-
- - - - - -
- - - - -
const pin_t end
-
-privateinherited
-
- -

Definition at line 194 of file ExtendedIOElement.hpp.

- -
-
- -

◆ offset

- -
-
- - - - - -
- - - - -
pin_t offset = NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS
-
-staticprivateinherited
-
- -

Definition at line 195 of file ExtendedIOElement.hpp.

- -
-
- -

◆ elements

- -
-
- - - - - -
- - - - -
DoublyLinkedList< ExtendedIOElement > elements
-
-staticprivateinherited
-
- -

Definition at line 197 of file ExtendedIOElement.hpp.

- -
-
- -

◆ next

- -
-
- - - - - -
- - - - -
ExtendedIOElement * next
-
-protectedinherited
-
- -

Definition at line 305 of file LinkedList.hpp.

- -
-
- -

◆ previous

- -
-
- - - - - -
- - - - -
ExtendedIOElement * previous
-
-protectedinherited
-
- -

Definition at line 306 of file LinkedList.hpp.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/Doxygen/d7/d90/classFrequency.html b/docs/Doxygen/d7/d90/classFrequency.html deleted file mode 100644 index 69bc92fc5..000000000 --- a/docs/Doxygen/d7/d90/classFrequency.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - -Arduino Helpers: Frequency Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
- -
-
Frequency Class Reference
-
-
- -

Type-safe class for frequency values. - More...

- -

#include <Frequency.hpp>

-
-Collaboration diagram for Frequency:
-
-
-
- - - - - - -

-Public Member Functions

constexpr Frequency (unsigned long hertz)
 
constexpr operator unsigned long () const
 
- - - -

-Private Attributes

unsigned long hertz
 
-

Detailed Description

-

Type-safe class for frequency values.

- -

Definition at line 11 of file Frequency.hpp.

-

Constructor & Destructor Documentation

- -

◆ Frequency()

- -
-
- - - - - -
- - - - - - - - -
constexpr Frequency (unsigned long hertz)
-
-inlineexplicitconstexpr
-
- -

Definition at line 13 of file Frequency.hpp.

- -
-
-

Member Function Documentation

- -

◆ operator unsigned long()

- -
-
- - - - - -
- - - - - - - -
constexpr operator unsigned long () const
-
-inlineconstexpr
-
- -

Definition at line 14 of file Frequency.hpp.

- -
-
-

Member Data Documentation

- -

◆ hertz

- -
-
- - - - - -
- - - - -
unsigned long hertz
-
-private
-
- -

Definition at line 17 of file Frequency.hpp.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/Doxygen/d7/da5/classDoublyLinkedList_1_1reverse__node__iterator__inherit__graph.map b/docs/Doxygen/d7/da5/classDoublyLinkedList_1_1reverse__node__iterator__inherit__graph.map deleted file mode 100644 index 82db80bd0..000000000 --- a/docs/Doxygen/d7/da5/classDoublyLinkedList_1_1reverse__node__iterator__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/d7/da5/classDoublyLinkedList_1_1reverse__node__iterator__inherit__graph.md5 b/docs/Doxygen/d7/da5/classDoublyLinkedList_1_1reverse__node__iterator__inherit__graph.md5 deleted file mode 100644 index 81a53b66a..000000000 --- a/docs/Doxygen/d7/da5/classDoublyLinkedList_1_1reverse__node__iterator__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -26c4cc7b021360a195ec96de64ea6a2b \ No newline at end of file diff --git a/docs/Doxygen/d7/da5/classDoublyLinkedList_1_1reverse__node__iterator__inherit__graph.svg b/docs/Doxygen/d7/da5/classDoublyLinkedList_1_1reverse__node__iterator__inherit__graph.svg deleted file mode 100644 index 61eef24b7..000000000 --- a/docs/Doxygen/d7/da5/classDoublyLinkedList_1_1reverse__node__iterator__inherit__graph.svg +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - -DoublyLinkedList< Node >::reverse_node_iterator< INode > - - -Node1 - - -DoublyLinkedList< Node - >::reverse_node_iterator -< INode > - - - -+ reverse_node_iterator() -+ operator++() -+ operator--() - - - - -Node2 - - -node_iterator_base - -# node - -+ node_iterator_base() -+ operator!=() -+ operator*() - - - - -Node2->Node1 - - - - - diff --git a/docs/Doxygen/d7/db1/classDoublyLinkedList_1_1node__iterator__base__inherit__graph.map b/docs/Doxygen/d7/db1/classDoublyLinkedList_1_1node__iterator__base__inherit__graph.map deleted file mode 100644 index b0d7bf8fc..000000000 --- a/docs/Doxygen/d7/db1/classDoublyLinkedList_1_1node__iterator__base__inherit__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/Doxygen/d7/db1/classDoublyLinkedList_1_1node__iterator__base__inherit__graph.md5 b/docs/Doxygen/d7/db1/classDoublyLinkedList_1_1node__iterator__base__inherit__graph.md5 deleted file mode 100644 index 0478b5a6b..000000000 --- a/docs/Doxygen/d7/db1/classDoublyLinkedList_1_1node__iterator__base__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -608d0fa7d200d86416fb5739809634a0 \ No newline at end of file diff --git a/docs/Doxygen/d7/db1/classDoublyLinkedList_1_1node__iterator__base__inherit__graph.svg b/docs/Doxygen/d7/db1/classDoublyLinkedList_1_1node__iterator__base__inherit__graph.svg deleted file mode 100644 index 6cdcb3949..000000000 --- a/docs/Doxygen/d7/db1/classDoublyLinkedList_1_1node__iterator__base__inherit__graph.svg +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - -DoublyLinkedList< Node >::node_iterator_base< INode > - - -Node1 - - -DoublyLinkedList< Node - >::node_iterator_base -< INode > - -# node - -+ node_iterator_base() -+ operator!=() -+ operator*() - - - - -Node2 - - -node_iterator - - - -+ node_iterator() -+ operator++() -+ operator--() - - - - -Node1->Node2 - - - - -Node3 - - -reverse_node_iterator - - - -+ reverse_node_iterator() -+ operator++() -+ operator--() - - - - -Node1->Node3 - - - - - diff --git a/docs/Doxygen/d7/dc4/Array_8hpp__dep__incl.map b/docs/Doxygen/d7/dc4/Array_8hpp__dep__incl.map deleted file mode 100644 index 565f4a606..000000000 --- a/docs/Doxygen/d7/dc4/Array_8hpp__dep__incl.map +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d7/dc4/Array_8hpp__dep__incl.md5 b/docs/Doxygen/d7/dc4/Array_8hpp__dep__incl.md5 deleted file mode 100644 index 8edb4b2a3..000000000 --- a/docs/Doxygen/d7/dc4/Array_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -08115dc22170a7bb503ed648ec8393aa \ No newline at end of file diff --git a/docs/Doxygen/d7/dc4/Array_8hpp__dep__incl.svg b/docs/Doxygen/d7/dc4/Array_8hpp__dep__incl.svg deleted file mode 100644 index 92fffe890..000000000 --- a/docs/Doxygen/d7/dc4/Array_8hpp__dep__incl.svg +++ /dev/null @@ -1,455 +0,0 @@ - - - - - - -Array.hpp - - -Node1 - - -Array.hpp - - - - -Node2 - - -ArrayHelpers.hpp - - - - -Node1->Node2 - - - - -Node4 - - -AnalogMultiplex.hpp - - - - -Node1->Node4 - - - - -Node12 - - -Hardware-Types.hpp - - - - -Node1->Node12 - - - - -Node3 - - -StaticSizeExtendedIOElement.hpp - - - - -Node2->Node3 - - - - -Node3->Node4 - - - - -Node5 - - -MAX7219.hpp - - - - -Node3->Node5 - - - - -Node6 - - -ShiftRegisterOutBase.hpp - - - - -Node3->Node6 - - - - -Node7 - - -ShiftRegisterOut.hpp - - - - -Node6->Node7 - - - - -Node9 - - -ShiftRegisterOutBase.ipp - - - - -Node6->Node9 - - - - -Node10 - - -SPIShiftRegisterOut.hpp - - - - -Node6->Node10 - - - - -Node8 - - -ShiftRegisterOut.ipp - - - - -Node7->Node8 - - - - -Node8->Node7 - - - - -Node9->Node6 - - - - -Node11 - - -SPIShiftRegisterOut.ipp - - - - -Node10->Node11 - - - - -Node11->Node10 - - - - -Node13 - - -ButtonMatrix.hpp - - - - -Node12->Node13 - - - - -Node15 - - -ExtendedIOElement.hpp - - - - -Node12->Node15 - - - - -Node24 - - -FilteredAnalog.hpp - - - - -Node12->Node24 - - - - -Node14 - - -ButtonMatrix.ipp - - - - -Node13->Node14 - - - - -Node14->Node13 - - - - -Node15->Node3 - - - - -Node16 - - -ExtendedInputOutput.hpp - - - - -Node15->Node16 - - - - -Node23 - - -ExtendedInputOutput.cpp - - - - -Node15->Node23 - - - - -Node29 - - -ExtendedIOElement.cpp - - - - -Node15->Node29 - - - - -Node16->Node4 - - - - -Node16->Node8 - - - - -Node16->Node9 - - - - -Node16->Node11 - - - - -Node16->Node14 - - - - -Node17 - - -Button.hpp - - - - -Node16->Node17 - - - - -Node16->Node23 - - - - -Node16->Node24 - - - - -Node25 - - -LEDs.hpp - - - - -Node16->Node25 - - - - -Node27 - - -MAX7219_Base.hpp - - - - -Node16->Node27 - - - - -Node18 - - -Button.cpp - - - - -Node17->Node18 - - - - -Node19 - - -IncrementButton.hpp - - - - -Node17->Node19 - - - - -Node21 - - -IncrementDecrementButtons.hpp - - - - -Node17->Node21 - - - - -Node20 - - -IncrementButton.cpp - - - - -Node19->Node20 - - - - -Node22 - - -IncrementDecrementButtons.cpp - - - - -Node21->Node22 - - - - -Node26 - - -DotBarDisplayLEDs.hpp - - - - -Node25->Node26 - - - - -Node27->Node5 - - - - -Node28 - - -MAX7219SevenSegmentDisplay.hpp - - - - -Node27->Node28 - - - - - diff --git a/docs/Doxygen/d7/dd4/LEDs_8cpp.html b/docs/Doxygen/d7/dd4/LEDs_8cpp.html deleted file mode 100644 index 27d33d3fd..000000000 --- a/docs/Doxygen/d7/dd4/LEDs_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: LEDs.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
LEDs.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/d7/dd4/LEDs_8cpp_source.html b/docs/Doxygen/d7/dd4/LEDs_8cpp_source.html deleted file mode 100644 index 75f76ef98..000000000 --- a/docs/Doxygen/d7/dd4/LEDs_8cpp_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Arduino Helpers: LEDs.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
LEDs.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
-
2 #include "LEDs.hpp"
-
3 #endif
-
- - - - - diff --git a/docs/Doxygen/d7/def/AnalogMultiplex_8hpp.html b/docs/Doxygen/d7/def/AnalogMultiplex_8hpp.html deleted file mode 100644 index 099b6c17a..000000000 --- a/docs/Doxygen/d7/def/AnalogMultiplex_8hpp.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - -Arduino Helpers: AnalogMultiplex.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
AnalogMultiplex.hpp File Reference
-
-
-
#include <AH/Settings/Warnings.hpp>
-#include "ExtendedInputOutput.hpp"
-#include "StaticSizeExtendedIOElement.hpp"
-#include <AH/Containers/Array.hpp>
-#include <stdlib.h>
-
-Include dependency graph for AnalogMultiplex.hpp:
-
-
-
-
-

Go to the source code of this file.

- - - - - -

-Classes

class  AnalogMultiplex< N >
 A class for reading multiplexed analog inputs. More...
 
- - - - - - - -

-Typedefs

using CD74HC4067 = AnalogMultiplex< 4 >
 An alias for AnalogMultiplex<4> to use with CD74HC4067 analog multiplexers. More...
 
using CD74HC4051 = AnalogMultiplex< 3 >
 An alias for AnalogMultiplex<3> to use with CD74HC4051 analog multiplexers. More...
 
-
- - - - diff --git a/docs/Doxygen/d7/def/AnalogMultiplex_8hpp_source.html b/docs/Doxygen/d7/def/AnalogMultiplex_8hpp_source.html deleted file mode 100644 index 10e86186e..000000000 --- a/docs/Doxygen/d7/def/AnalogMultiplex_8hpp_source.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - - - - -Arduino Helpers: AnalogMultiplex.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
AnalogMultiplex.hpp
-
-
-Go to the documentation of this file.
1 /* ✔ */
-
2 
-
3 #pragma once
-
4 
- -
6 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
7 
-
8 #include "ExtendedInputOutput.hpp"
- -
10 #include <AH/Containers/Array.hpp>
-
11 #include <stdlib.h>
-
12 
- -
14 
-
27 template <uint8_t N>
- -
29  public:
-
44  AnalogMultiplex(pin_t analogPin, const Array<pin_t, N> &addressPins,
-
45  pin_t enablePin = NO_PIN)
-
46  : analogPin(analogPin), addressPins(addressPins), enablePin(enablePin) {
-
47  }
-
48 
-
64  void pinMode(pin_t pin, uint8_t mode) override;
-
65 
-
70  void digitalWrite(pin_t, uint8_t) override // LCOV_EXCL_LINE
-
71  __attribute__((deprecated)) {} // LCOV_EXCL_LINE
-
72 
-
79  int digitalRead(pin_t pin) override;
-
80 
-
87  analog_t analogRead(pin_t pin) override;
-
88 
-
93  void analogWrite(pin_t, analog_t) override // LCOV_EXCL_LINE
-
94  __attribute__((deprecated)) {} // LCOV_EXCL_LINE
-
95 
-
100  void begin() override;
-
101 
-
106  void update() override {} // LCOV_EXCL_LINE
-
107 
-
108  private:
-
109  const pin_t analogPin;
-
110  const Array<pin_t, N> addressPins;
-
111  const pin_t enablePin;
-
112 
-
120  void setMuxAddress(uint8_t address);
-
121 
-
128  void prepareReading(uint8_t address);
-
129 
-
133  void afterReading();
-
134 
-
135  // The enable pin is active low.
-
136  constexpr static uint8_t MUX_ENABLED = LOW;
-
137  constexpr static uint8_t MUX_DISABLED = HIGH;
-
138 };
-
139 
-
146 using CD74HC4067 = AnalogMultiplex<4>;
-
147 
-
154 using CD74HC4051 = AnalogMultiplex<3>;
-
155 
-
156 // -------------------------------------------------------------------------- //
-
157 
-
158 template <uint8_t N>
-
159 void AnalogMultiplex<N>::pinMode(pin_t, uint8_t mode) {
-
160  ExtIO::pinMode(analogPin, mode);
-
161 }
-
162 
-
163 template <uint8_t N>
-
164 int AnalogMultiplex<N>::digitalRead(pin_t pin) {
-
165  prepareReading(pin);
-
166  int result = ExtIO::digitalRead(analogPin);
-
167  afterReading();
-
168  return result;
-
169 }
-
170 
-
171 template <uint8_t N>
-
172 analog_t AnalogMultiplex<N>::analogRead(pin_t pin) {
-
173  prepareReading(pin);
-
174  ExtIO::analogRead(analogPin); // Discard first reading
-
175  analog_t result = ExtIO::analogRead(analogPin);
-
176  afterReading();
-
177  return result;
-
178 }
-
179 
-
180 template <uint8_t N>
-
181 void AnalogMultiplex<N>::begin() {
-
182  for (const pin_t &addressPin : addressPins)
-
183  ExtIO::pinMode(addressPin, OUTPUT);
-
184  if (enablePin != NO_PIN) {
-
185  ExtIO::pinMode(enablePin, OUTPUT);
-
186  ExtIO::digitalWrite(enablePin, MUX_DISABLED);
-
187  }
-
188 }
-
189 
-
190 template <uint8_t N>
-
191 void AnalogMultiplex<N>::setMuxAddress(uint8_t address) {
-
192  uint8_t mask = 1;
-
193  for (const pin_t &addressPin : addressPins) {
-
194  ExtIO::digitalWrite(addressPin, (address & mask) != 0);
-
195  mask <<= 1;
-
196  }
-
197 #if !defined(__AVR__) && !defined(__x86_64__)
-
198  delayMicroseconds(5);
-
199 #endif
-
200 }
-
201 
-
202 template <uint8_t N>
-
203 void AnalogMultiplex<N>::prepareReading(uint8_t address) {
-
204  setMuxAddress(address);
-
205  if (enablePin != NO_PIN)
-
206  ExtIO::digitalWrite(enablePin, MUX_ENABLED);
-
207 }
-
208 
-
209 template <uint8_t N>
-
210 void AnalogMultiplex<N>::afterReading() {
-
211  if (enablePin != NO_PIN)
-
212  ExtIO::digitalWrite(enablePin, MUX_DISABLED);
-
213 }
-
214 
-
215 END_AH_NAMESPACE
-
216 
-
217 AH_DIAGNOSTIC_POP()
-
-
#define BEGIN_AH_NAMESPACE
- -
A class for ExtendedIOElements with a fixed size.
- -
A class for reading multiplexed analog inputs.
- -
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
- - - - diff --git a/docs/Doxygen/d8/d16/classIncrementButton-members.html b/docs/Doxygen/d8/d16/classIncrementButton-members.html deleted file mode 100644 index 896d72aac..000000000 --- a/docs/Doxygen/d8/d16/classIncrementButton-members.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IncrementButton Member List
-
-
- -

This is the complete list of members for IncrementButton, including all inherited members.

- - - - - - - - - - - - - - - -
begin()IncrementButtoninline
buttonIncrementButtonprivate
getState() constIncrementButtoninline
Increment enum valueIncrementButton
IncrementButton(const Button &button)IncrementButtoninline
Initial enum valueIncrementButtonprivate
LongPress enum valueIncrementButtonprivate
longPressRepeatIncrementButtonprivate
longPressStateIncrementButtonprivate
Nothing enum valueIncrementButton
State enum nameIncrementButton
stateIncrementButtonprivate
update()IncrementButtoninline
updateImplementation()IncrementButtonprotected
- - - - diff --git a/docs/Doxygen/d8/d20/classUpdatable__inherit__graph.map b/docs/Doxygen/d8/d20/classUpdatable__inherit__graph.map deleted file mode 100644 index 5d213adb7..000000000 --- a/docs/Doxygen/d8/d20/classUpdatable__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/d8/d20/classUpdatable__inherit__graph.md5 b/docs/Doxygen/d8/d20/classUpdatable__inherit__graph.md5 deleted file mode 100644 index 8a9734b3a..000000000 --- a/docs/Doxygen/d8/d20/classUpdatable__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -4a37a48db4b260f0dfbf9cacb4ad0e53 \ No newline at end of file diff --git a/docs/Doxygen/d8/d20/classUpdatable__inherit__graph.svg b/docs/Doxygen/d8/d20/classUpdatable__inherit__graph.svg deleted file mode 100644 index 898979cff..000000000 --- a/docs/Doxygen/d8/d20/classUpdatable__inherit__graph.svg +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - -Updatable< T > - - -Node1 - - -Updatable< T > - -- updatables - -+ ~Updatable() -+ update() -+ begin() -+ enable() -+ disable() -+ isEnabled() -+ beginAll() -+ updateAll() -+ enable() -+ enable() -+ enable() -+ disable() -+ disable() -+ disable() -# Updatable() - - - - -Node2 - - -DoublyLinkable< Updatable -< T > > - -# next -# previous - -# ~DoublyLinkable() - - - - -Node2->Node1 - - - - - diff --git a/docs/Doxygen/d8/d3d/namespaceExtIO.html b/docs/Doxygen/d8/d3d/namespaceExtIO.html deleted file mode 100644 index 2aec74d68..000000000 --- a/docs/Doxygen/d8/d3d/namespaceExtIO.html +++ /dev/null @@ -1,650 +0,0 @@ - - - - - - - -Arduino Helpers: ExtIO Namespace Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
- -
-
ExtIO Namespace Reference
-
-
- -

A namespace with alternatives to the standard Arduino IO functions that can be used with extended IO pin numbers. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<class T >
bool inRange (T target, T start, T end)
 
ExtendedIOElementgetIOElementOfPin (pin_t pin)
 Find the IO element of a given extended IO pin number. More...
 
void pinMode (pin_t pin, uint8_t mode)
 An ExtIO version of the Arduino function. More...
 
void pinMode (int pin, uint8_t mode)
 An ExtIO version of the Arduino function. More...
 
void digitalWrite (pin_t pin, uint8_t val)
 An ExtIO version of the Arduino function. More...
 
void digitalWrite (int pin, uint8_t val)
 An ExtIO version of the Arduino function. More...
 
int digitalRead (pin_t pin)
 An ExtIO version of the Arduino function. More...
 
int digitalRead (int pin)
 An ExtIO version of the Arduino function. More...
 
void shiftOut (pin_t dataPin, pin_t clockPin, uint8_t bitOrder, uint8_t val)
 An ExtIO version of the Arduino function. More...
 
void shiftOut (int dataPin, int clockPin, uint8_t bitOrder, uint8_t val)
 An ExtIO version of the Arduino function. More...
 
analog_t analogRead (pin_t pin)
 An ExtIO version of the Arduino function. More...
 
analog_t analogRead (int pin)
 An ExtIO version of the Arduino function. More...
 
void analogWrite (pin_t pin, analog_t val)
 An ExtIO version of the Arduino function. More...
 
void analogWrite (int pin, analog_t val)
 An ExtIO version of the Arduino function. More...
 
void analogWrite (int pin, int val)
 An ExtIO version of the Arduino function. More...
 
void analogWrite (pin_t pin, int val)
 An ExtIO version of the Arduino function. More...
 
-

Detailed Description

-

A namespace with alternatives to the standard Arduino IO functions that can be used with extended IO pin numbers.

-

Function Documentation

- -

◆ inRange()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
bool ExtIO::inRange (target,
start,
end 
)
-
- -

Definition at line 13 of file ExtendedInputOutput.cpp.

- -
-
- -

◆ getIOElementOfPin()

- -
-
- - - - - - - - -
ExtendedIOElement & getIOElementOfPin (pin_t pin)
-
- -

Find the IO element of a given extended IO pin number.

-
Parameters
- - -
pinThe extended IO pin number to find the IO element of.
-
-
-
Returns
A pointer to the extended IO element that the given pin belongs to.
- -

Definition at line 17 of file ExtendedInputOutput.cpp.

- -
-
- -

◆ pinMode() [1/2]

- -
-
- - - - - - - - - - - - - - - - - - -
void pinMode (pin_t pin,
uint8_t mode 
)
-
- -

An ExtIO version of the Arduino function.

-
Examples
1.SPI-Blink.ino, 2.BitBang-Blink.ino, 2.Button.ino, Blink-Frequency-Buttons.ino, and BlinkWithoutDelay-Timer.ino.
-
- -

Definition at line 36 of file ExtendedInputOutput.cpp.

- -
-
- -

◆ pinMode() [2/2]

- -
-
- - - - - - - - - - - - - - - - - - -
void pinMode (int pin,
uint8_t mode 
)
-
- -

An ExtIO version of the Arduino function.

- -

Definition at line 45 of file ExtendedInputOutput.cpp.

- -
-
- -

◆ digitalWrite() [1/2]

- -
-
- - - - - - - - - - - - - - - - - - -
void digitalWrite (pin_t pin,
uint8_t val 
)
-
- -

An ExtIO version of the Arduino function.

-
Examples
1.SPI-Blink.ino, 2.BitBang-Blink.ino, 2.Button.ino, 2.RGB-LED-Chaser.ino, Blink-Frequency-Buttons.ino, and BlinkWithoutDelay-Timer.ino.
-
- -

Definition at line 47 of file ExtendedInputOutput.cpp.

- -
-
- -

◆ digitalWrite() [2/2]

- -
-
- - - - - - - - - - - - - - - - - - -
void digitalWrite (int pin,
uint8_t val 
)
-
- -

An ExtIO version of the Arduino function.

- -

Definition at line 56 of file ExtendedInputOutput.cpp.

- -
-
- -

◆ digitalRead() [1/2]

- -
-
- - - - - - - - -
int digitalRead (pin_t pin)
-
- -

An ExtIO version of the Arduino function.

-
Examples
2.DigitalReadSerial.ino, Blink-Frequency-Buttons.ino, and BlinkWithoutDelay-Timer.ino.
-
- -

Definition at line 58 of file ExtendedInputOutput.cpp.

- -
-
- -

◆ digitalRead() [2/2]

- -
-
- - - - - - - - -
int digitalRead (int pin)
-
- -

An ExtIO version of the Arduino function.

- -

Definition at line 67 of file ExtendedInputOutput.cpp.

- -
-
- -

◆ shiftOut() [1/2]

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void shiftOut (pin_t dataPin,
pin_t clockPin,
uint8_t bitOrder,
uint8_t val 
)
-
- -

An ExtIO version of the Arduino function.

- -

Definition at line 69 of file ExtendedInputOutput.cpp.

- -
-
- -

◆ shiftOut() [2/2]

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void shiftOut (int dataPin,
int clockPin,
uint8_t bitOrder,
uint8_t val 
)
-
- -

An ExtIO version of the Arduino function.

- -

Definition at line 82 of file ExtendedInputOutput.cpp.

- -
-
- -

◆ analogRead() [1/2]

- -
-
- - - - - - - - -
analog_t analogRead (pin_t pin)
-
- -

An ExtIO version of the Arduino function.

-
Examples
1.AnalogReadSerial.ino.
-
- -

Definition at line 86 of file ExtendedInputOutput.cpp.

- -
-
- -

◆ analogRead() [2/2]

- -
-
- - - - - - - - -
analog_t analogRead (int pin)
-
- -

An ExtIO version of the Arduino function.

- -

Definition at line 95 of file ExtendedInputOutput.cpp.

- -
-
- -

◆ analogWrite() [1/4]

- -
-
- - - - - - - - - - - - - - - - - - -
void analogWrite (pin_t pin,
analog_t val 
)
-
- -

An ExtIO version of the Arduino function.

- -

Definition at line 97 of file ExtendedInputOutput.cpp.

- -
-
- -

◆ analogWrite() [2/4]

- -
-
- - - - - - - - - - - - - - - - - - -
void analogWrite (int pin,
analog_t val 
)
-
- -

An ExtIO version of the Arduino function.

- -

Definition at line 108 of file ExtendedInputOutput.cpp.

- -
-
- -

◆ analogWrite() [3/4]

- -
-
- - - - - - - - - - - - - - - - - - -
void analogWrite (int pin,
int val 
)
-
- -

An ExtIO version of the Arduino function.

- -

Definition at line 109 of file ExtendedInputOutput.cpp.

- -
-
- -

◆ analogWrite() [4/4]

- -
-
- - - - - - - - - - - - - - - - - - -
void analogWrite (pin_t pin,
int val 
)
-
- -

An ExtIO version of the Arduino function.

- -

Definition at line 110 of file ExtendedInputOutput.cpp.

- -
-
-
- - - - diff --git a/docs/Doxygen/d8/d4b/group__AH__PrintStream.html b/docs/Doxygen/d8/d4b/group__AH__PrintStream.html deleted file mode 100644 index 7c2934506..000000000 --- a/docs/Doxygen/d8/d4b/group__AH__PrintStream.html +++ /dev/null @@ -1,1027 +0,0 @@ - - - - - - - -Arduino Helpers: PrintStream - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
- -
-
PrintStream
-
-
- -

Functions for printing to Streams using the streaming operator <<. -More...

- - - - - - - - -

-Classes

struct  Setbase
 
struct  Setprecision
 
struct  Setbytesep
 
- - - -

-Typedefs

typedef Print & manipulator(Print &)
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

Print & endl (Print &printer)
 
Print & flush (Print &printer)
 
Print & hex (Print &printer)
 
Print & bin (Print &printer)
 
Print & dec (Print &printer)
 
Print & boolalpha (Print &printer)
 
Print & noboolalpha (Print &printer)
 
Print & leadingzeros (Print &printer)
 
Print & noleadingzeros (Print &printer)
 
Print & uppercase (Print &printer)
 
Print & nouppercase (Print &printer)
 
Print & showbase (Print &printer)
 
Print & noshowbase (Print &printer)
 
Print & operator<< (Print &printer, const __FlashStringHelper *s)
 
Print & operator<< (Print &printer, const String &s)
 
Print & operator<< (Print &printer, const char s[])
 
Print & operator<< (Print &printer, char c)
 
Print & operator<< (Print &printer, unsigned char c)
 
Print & operator<< (Print &printer, int i)
 
Print & operator<< (Print &printer, unsigned int i)
 
Print & operator<< (Print &printer, int8_t i)
 
Print & operator<< (Print &printer, long i)
 
Print & operator<< (Print &printer, unsigned long i)
 
Print & operator<< (Print &printer, double d)
 
Print & operator<< (Print &printer, const Printable &p)
 
Print & operator<< (Print &printer, bool b)
 
Print & operator<< (Print &printer, manipulator pf)
 
Setbase setbase (uint8_t base)
 
Print & operator<< (Print &printer, Setbase f)
 
Setprecision setprecision (int n)
 
Print & operator<< (Print &printer, Setprecision f)
 
Setbytesep setbytesep (char bytesep)
 
Print & operator<< (Print &printer, Setbytesep f)
 
-

Detailed Description

-

Functions for printing to Streams using the streaming operator <<.

-

PrintStream library

-

Typedef Documentation

- -

◆ manipulator

- -
-
- - - - -
typedef Print& manipulator(Print &)
-
- -

Definition at line 18 of file PrintStream.hpp.

- -
-
-

Function Documentation

- -

◆ endl()

- -
-
- - - - - - - - -
Print& endl (Print & printer)
-
- -

Definition at line 27 of file PrintStream.cpp.

- -
-
- -

◆ flush()

- -
-
- - - - - - - - -
Print& flush (Print & printer)
-
- -

Definition at line 55 of file PrintStream.cpp.

- -
-
- -

◆ hex()

- -
-
- - - - - - - - -
Print& hex (Print & printer)
-
- -

Definition at line 62 of file PrintStream.cpp.

- -
-
- -

◆ bin()

- -
-
- - - - - - - - -
Print& bin (Print & printer)
-
- -

Definition at line 72 of file PrintStream.cpp.

- -
-
- -

◆ dec()

- -
-
- - - - - - - - -
Print& dec (Print & printer)
-
- -

Definition at line 77 of file PrintStream.cpp.

- -
-
- -

◆ boolalpha()

- -
-
- - - - - - - - -
Print& boolalpha (Print & printer)
-
- -

Definition at line 82 of file PrintStream.cpp.

- -
-
- -

◆ noboolalpha()

- -
-
- - - - - - - - -
Print& noboolalpha (Print & printer)
-
- -

Definition at line 86 of file PrintStream.cpp.

- -
-
- -

◆ leadingzeros()

- -
-
- - - - - - - - -
Print& leadingzeros (Print & printer)
-
- -

Definition at line 91 of file PrintStream.cpp.

- -
-
- -

◆ noleadingzeros()

- -
-
- - - - - - - - -
Print& noleadingzeros (Print & printer)
-
- -

Definition at line 95 of file PrintStream.cpp.

- -
-
- -

◆ uppercase()

- -
-
- - - - - - - - -
Print& uppercase (Print & printer)
-
- -

Definition at line 35 of file PrintStream.cpp.

- -
-
- -

◆ nouppercase()

- -
-
- - - - - - - - -
Print& nouppercase (Print & printer)
-
- -

Definition at line 40 of file PrintStream.cpp.

- -
-
- -

◆ showbase()

- -
-
- - - - - - - - -
Print& showbase (Print & printer)
-
- -

Definition at line 45 of file PrintStream.cpp.

- -
-
- -

◆ noshowbase()

- -
-
- - - - - - - - -
Print& noshowbase (Print & printer)
-
- -

Definition at line 50 of file PrintStream.cpp.

- -
-
- -

◆ operator<<() [1/17]

- -
-
- - - - - - - - - - - - - - - - - - -
Print& operator<< (Print & printer,
const __FlashStringHelper * s 
)
-
- -

Definition at line 99 of file PrintStream.cpp.

- -
-
- -

◆ operator<<() [2/17]

- -
-
- - - - - - - - - - - - - - - - - - -
Print& operator<< (Print & printer,
const String & s 
)
-
- -

Definition at line 104 of file PrintStream.cpp.

- -
-
- -

◆ operator<<() [3/17]

- -
-
- - - - - - - - - - - - - - - - - - -
Print& operator<< (Print & printer,
const char s[] 
)
-
- -

Definition at line 109 of file PrintStream.cpp.

- -
-
- -

◆ operator<<() [4/17]

- -
-
- - - - - - - - - - - - - - - - - - -
Print& operator<< (Print & printer,
char c 
)
-
- -

Definition at line 113 of file PrintStream.cpp.

- -
-
- -

◆ operator<<() [5/17]

- -
-
- - - - - - - - - - - - - - - - - - -
Print& operator<< (Print & printer,
unsigned char c 
)
-
- -

Definition at line 117 of file PrintStream.cpp.

- -
-
- -

◆ operator<<() [6/17]

- -
-
- - - - - - - - - - - - - - - - - - -
Print& operator<< (Print & printer,
int i 
)
-
- -

Definition at line 120 of file PrintStream.cpp.

- -
-
- -

◆ operator<<() [7/17]

- -
-
- - - - - - - - - - - - - - - - - - -
Print& operator<< (Print & printer,
unsigned int i 
)
-
- -

Definition at line 123 of file PrintStream.cpp.

- -
-
- -

◆ operator<<() [8/17]

- -
-
- - - - - - - - - - - - - - - - - - -
Print& operator<< (Print & printer,
int8_t i 
)
-
- -

Definition at line 126 of file PrintStream.cpp.

- -
-
- -

◆ operator<<() [9/17]

- -
-
- - - - - - - - - - - - - - - - - - -
Print& operator<< (Print & printer,
long i 
)
-
- -

Definition at line 129 of file PrintStream.cpp.

- -
-
- -

◆ operator<<() [10/17]

- -
-
- - - - - - - - - - - - - - - - - - -
Print& operator<< (Print & printer,
unsigned long i 
)
-
- -

Definition at line 132 of file PrintStream.cpp.

- -
-
- -

◆ operator<<() [11/17]

- -
-
- - - - - - - - - - - - - - - - - - -
Print& operator<< (Print & printer,
double d 
)
-
- -

Definition at line 135 of file PrintStream.cpp.

- -
-
- -

◆ operator<<() [12/17]

- -
-
- - - - - - - - - - - - - - - - - - -
Print& operator<< (Print & printer,
const Printable & p 
)
-
- -

Definition at line 139 of file PrintStream.cpp.

- -
-
- -

◆ operator<<() [13/17]

- -
-
- - - - - - - - - - - - - - - - - - -
Print& operator<< (Print & printer,
bool b 
)
-
- -

Definition at line 143 of file PrintStream.cpp.

- -
-
- -

◆ operator<<() [14/17]

- -
-
- - - - - - - - - - - - - - - - - - -
Print& operator<< (Print & printer,
manipulator pf 
)
-
- -

Definition at line 173 of file PrintStream.cpp.

- -
-
- -

◆ setbase()

- -
-
- - - - - - - - -
Setbase setbase (uint8_t base)
-
- -

Definition at line 177 of file PrintStream.cpp.

- -
-
- -

◆ operator<<() [15/17]

- -
-
- - - - - - - - - - - - - - - - - - -
Print& operator<< (Print & printer,
Setbase f 
)
-
- -

Definition at line 180 of file PrintStream.cpp.

- -
-
- -

◆ setprecision()

- -
-
- - - - - - - - -
Setprecision setprecision (int n)
-
- -

Definition at line 193 of file PrintStream.cpp.

- -
-
- -

◆ operator<<() [16/17]

- -
-
- - - - - - - - - - - - - - - - - - -
Print& operator<< (Print & printer,
Setprecision f 
)
-
- -

Definition at line 196 of file PrintStream.cpp.

- -
-
- -

◆ setbytesep()

- -
-
- - - - - - - - -
Setbytesep setbytesep (char bytesep)
-
- -

Definition at line 185 of file PrintStream.cpp.

- -
-
- -

◆ operator<<() [17/17]

- -
-
- - - - - - - - - - - - - - - - - - -
Print& operator<< (Print & printer,
Setbytesep f 
)
-
- -

Definition at line 188 of file PrintStream.cpp.

- -
-
-
- - - - diff --git a/docs/Doxygen/d8/d53/group__AH__HardwareUtils.html b/docs/Doxygen/d8/d53/group__AH__HardwareUtils.html deleted file mode 100644 index 5df575b1a..000000000 --- a/docs/Doxygen/d8/d53/group__AH__HardwareUtils.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - -Arduino Helpers: Hardware Utilities - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
- -
-
Hardware Utilities
-
-
- -

Classes used for debouncing buttons, incrementing/decrementing push buttons, scanning switch matrices, filtering analog input, etc. -More...

- - - - - - - - - - - - - - - - - - - - - - - - - - -

-Classes

class  Button
 A class for reading and debouncing buttons and switches. More...
 
class  ButtonMatrix< nb_rows, nb_cols >
 A class that reads the states of a button matrix. More...
 
class  FilteredAnalog< Precision, FilterShiftFactor, FilterType, AnalogType, IncRes >
 A class that reads and filters an analog input. More...
 
class  IncrementButton
 A class for buttons that increment some counter or setting. More...
 
class  IncrementDecrementButtons
 A class for buttons that increment and decrement some counter or setting. More...
 
class  DotBarDisplayLEDs< N >
 A class for LED bars. More...
 
class  LEDs< N >
 A class for collections of LEDs that can display ranges. More...
 
class  MAX7219SevenSegmentDisplay
 A class for 8-digit 7-segment displays with a MAX7219 driver. More...
 
-

Detailed Description

-

Classes used for debouncing buttons, incrementing/decrementing push buttons, scanning switch matrices, filtering analog input, etc.

-
- - - - diff --git a/docs/Doxygen/d8/d5f/classFilteredAnalog__coll__graph.map b/docs/Doxygen/d8/d5f/classFilteredAnalog__coll__graph.map deleted file mode 100644 index 409899954..000000000 --- a/docs/Doxygen/d8/d5f/classFilteredAnalog__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/Doxygen/d8/d5f/classFilteredAnalog__coll__graph.md5 b/docs/Doxygen/d8/d5f/classFilteredAnalog__coll__graph.md5 deleted file mode 100644 index b23a6f2b4..000000000 --- a/docs/Doxygen/d8/d5f/classFilteredAnalog__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -739be9c29efa37312771636f5d9e9d0c \ No newline at end of file diff --git a/docs/Doxygen/d8/d5f/classFilteredAnalog__coll__graph.svg b/docs/Doxygen/d8/d5f/classFilteredAnalog__coll__graph.svg deleted file mode 100644 index 807b0cc2d..000000000 --- a/docs/Doxygen/d8/d5f/classFilteredAnalog__coll__graph.svg +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - -FilteredAnalog< Precision, FilterShiftFactor, FilterType, AnalogType, IncRes > - - -Node1 - - -FilteredAnalog< Precision, - FilterShiftFactor, FilterType, - AnalogType, IncRes > - -- analogPin -- mapFn - -+ FilteredAnalog() -+ map() -+ invert() -+ update() -+ getValue() -+ getFloatValue() -+ getRawValue() -+ setupADC() - - - - -Node2 - - -EMA< FilterShiftFactor, - FilterType > - -- filtered -- fixedPointAHalf - -+ filter() -+ operator()() - - - - -Node2->Node1 - - - -filter - - -Node3 - - -Hysteresis< ADC_BITS -+IncRes - Precision, - AnalogType, AnalogType > - -- prevLevel -- margin -- offset -- max_in -- max_out - -+ update() -+ getValue() - - - - -Node3->Node1 - - - -hysteresis - - - diff --git a/docs/Doxygen/d8/d67/classArraySlice_1_1Iterator-members.html b/docs/Doxygen/d8/d67/classArraySlice_1_1Iterator-members.html deleted file mode 100644 index 01ad15d83..000000000 --- a/docs/Doxygen/d8/d67/classArraySlice_1_1Iterator-members.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ArraySlice< T, N, Reverse, Const >::Iterator Member List
-
- - - - - diff --git a/docs/Doxygen/d8/d6c/classButtonMatrix.html b/docs/Doxygen/d8/d6c/classButtonMatrix.html deleted file mode 100644 index 0ee1a511e..000000000 --- a/docs/Doxygen/d8/d6c/classButtonMatrix.html +++ /dev/null @@ -1,598 +0,0 @@ - - - - - - - -Arduino Helpers: ButtonMatrix< nb_rows, nb_cols > Class Template Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
- -
-
ButtonMatrix< nb_rows, nb_cols > Class Template Referenceabstract
-
-
- -

A class that reads the states of a button matrix. - More...

- -

#include <ButtonMatrix.hpp>

-
-Collaboration diagram for ButtonMatrix< nb_rows, nb_cols >:
-
-
-
- - - - - - - - - - - - - - - - - -

-Public Member Functions

 ButtonMatrix (const PinList< nb_rows > &rowPins, const PinList< nb_cols > &colPins)
 Construct a new ButtonMatrix object. More...
 
virtual ~ButtonMatrix ()=default
 Destructor. More...
 
void begin ()
 Initialize (enable internal pull-up resistors on column pins). More...
 
void update ()
 Scan the matrix, read all button states, and call the onButtonChanged callback. More...
 
bool getPrevState (uint8_t col, uint8_t row)
 Get the state of the button in the given column and row. More...
 
- - - - - - -

-Private Member Functions

virtual void onButtonChanged (uint8_t row, uint8_t col, bool state)=0
 The callback function that is called whenever a button changes state. More...
 
void setPrevState (uint8_t col, uint8_t row, bool state)
 
- - - - - - - -

-Static Private Member Functions

static uint8_t positionToBits (uint8_t col, uint8_t row)
 
static uint8_t bitsToIndex (uint8_t bits)
 
static uint8_t bitsToBitmask (uint8_t bits)
 
- - - - - - - - - -

-Private Attributes

unsigned long prevRefresh = 0
 
uint8_t prevStates [(nb_cols *nb_rows+7)/8]
 
const PinList< nb_rows > rowPins
 
const PinList< nb_cols > colPins
 
-

Detailed Description

-

template<uint8_t nb_rows, uint8_t nb_cols>
-class ButtonMatrix< nb_rows, nb_cols >

- -

A class that reads the states of a button matrix.

-
Template Parameters
- - - -
nb_rowsThe number of rows in the button matrix.
nb_colsThe number of columns in the button matrix.
-
-
- -

Definition at line 23 of file ButtonMatrix.hpp.

-

Constructor & Destructor Documentation

- -

◆ ButtonMatrix()

- -
-
- - - - - - - - - - - - - - - - - - -
ButtonMatrix (const PinList< nb_rows > & rowPins,
const PinList< nb_cols > & colPins 
)
-
- -

Construct a new ButtonMatrix object.

-
Parameters
- - - -
rowPinsA list of pin numbers connected to the rows of the button matrix.
- These pins will be driven LOW as outputs (Lo-Z).
colPinsA list of pin numbers connected to the columns of the button matrix.
- These pins will be used as inputs (Hi-Z), and the internal pull-up resistor will be enabled.
-
-
- -

Definition at line 10 of file ButtonMatrix.ipp.

- -
-
- -

◆ ~ButtonMatrix()

- -
-
- - - - - -
- - - - - - - -
virtual ~ButtonMatrix ()
-
-virtualdefault
-
- -

Destructor.

- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - -
void begin ()
-
- -

Initialize (enable internal pull-up resistors on column pins).

- -

Definition at line 41 of file ButtonMatrix.ipp.

- -
-
- -

◆ update()

- -
-
- - - - - - - -
void update ()
-
- -

Scan the matrix, read all button states, and call the onButtonChanged callback.

- -

Definition at line 17 of file ButtonMatrix.ipp.

- -
-
- -

◆ getPrevState()

- -
-
- - - - - - - - - - - - - - - - - - -
bool getPrevState (uint8_t col,
uint8_t row 
)
-
- -

Get the state of the button in the given column and row.

-
Note
No bounds checking is performed.
- -

Definition at line 69 of file ButtonMatrix.ipp.

- -
-
- -

◆ onButtonChanged()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
virtual void onButtonChanged (uint8_t row,
uint8_t col,
bool state 
)
-
-privatepure virtual
-
- -

The callback function that is called whenever a button changes state.

-
Parameters
- - - - -
rowThe row of the button that changed state.
colThe column of the button that changed state.
stateThe new state of the button.
-
-
- -
-
- -

◆ positionToBits()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint8_t positionToBits (uint8_t col,
uint8_t row 
)
-
-inlinestaticprivate
-
- -

Definition at line 52 of file ButtonMatrix.ipp.

- -
-
- -

◆ bitsToIndex()

- -
-
- - - - - -
- - - - - - - - -
uint8_t bitsToIndex (uint8_t bits)
-
-inlinestaticprivate
-
- -

Definition at line 59 of file ButtonMatrix.ipp.

- -
-
- -

◆ bitsToBitmask()

- -
-
- - - - - -
- - - - - - - - -
uint8_t bitsToBitmask (uint8_t bits)
-
-inlinestaticprivate
-
- -

Definition at line 64 of file ButtonMatrix.ipp.

- -
-
- -

◆ setPrevState()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void setPrevState (uint8_t col,
uint8_t row,
bool state 
)
-
-private
-
- -

Definition at line 75 of file ButtonMatrix.ipp.

- -
-
-

Member Data Documentation

- -

◆ prevRefresh

- -
-
- - - - - -
- - - - -
unsigned long prevRefresh = 0
-
-private
-
- -

Definition at line 82 of file ButtonMatrix.hpp.

- -
-
- -

◆ prevStates

- -
-
- - - - - -
- - - - -
uint8_t prevStates[(nb_cols *nb_rows+7)/8]
-
-private
-
- -

Definition at line 83 of file ButtonMatrix.hpp.

- -
-
- -

◆ rowPins

- -
-
- - - - - -
- - - - -
const PinList<nb_rows> rowPins
-
-private
-
- -

Definition at line 85 of file ButtonMatrix.hpp.

- -
-
- -

◆ colPins

- -
-
- - - - - -
- - - - -
const PinList<nb_cols> colPins
-
-private
-
- -

Definition at line 86 of file ButtonMatrix.hpp.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/docs/Doxygen/d8/d82/LinkedList_8hpp__incl.map b/docs/Doxygen/d8/d82/LinkedList_8hpp__incl.map deleted file mode 100644 index c9f222aa8..000000000 --- a/docs/Doxygen/d8/d82/LinkedList_8hpp__incl.map +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d8/d82/LinkedList_8hpp__incl.md5 b/docs/Doxygen/d8/d82/LinkedList_8hpp__incl.md5 deleted file mode 100644 index d9a8fc51f..000000000 --- a/docs/Doxygen/d8/d82/LinkedList_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -aef97d1dc9361d89b5f64167a6cadf2f \ No newline at end of file diff --git a/docs/Doxygen/d8/d82/LinkedList_8hpp__incl.svg b/docs/Doxygen/d8/d82/LinkedList_8hpp__incl.svg deleted file mode 100644 index b8ee48a48..000000000 --- a/docs/Doxygen/d8/d82/LinkedList_8hpp__incl.svg +++ /dev/null @@ -1,315 +0,0 @@ - - - - - - -LinkedList.hpp - - -Node1 - - -LinkedList.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -AH/Debug/Debug.hpp - - - - -Node1->Node3 - - - - -Node16 - - -AH/Math/MinMaxFix.hpp - - - - -Node1->Node16 - - - - -Node18 - - -stdlib.h - - - - -Node1->Node18 - - - - -Node19 - - -iterator - - - - -Node1->Node19 - - - - -Node3->Node2 - - - - -Node4 - - -AH/PrintStream/PrintStream.hpp - - - - -Node3->Node4 - - - - -Node6 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node3->Node6 - - - - -Node15 - - -DebugVal.hpp - - - - -Node3->Node15 - - - - -Node4->Node2 - - - - -Node5 - - -Arduino.h - - - - -Node4->Node5 - - - - -Node6->Node2 - - - - -Node6->Node3 - - - - -Node7 - - -NamespaceSettings.hpp - - - - -Node6->Node7 - - - - -Node8 - - -Settings.hpp - - - - -Node6->Node8 - - - - -Node14 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node6->Node14 - - - - -Node9 - - -AH/Types/Frequency.hpp - - - - -Node8->Node9 - - - - -Node10 - - -AH/Hardware/ADCConfig.hpp - - - - -Node8->Node10 - - - - -Node11 - - -limits.h - - - - -Node8->Node11 - - - - -Node12 - - -stddef.h - - - - -Node8->Node12 - - - - -Node13 - - -stdint.h - - - - -Node8->Node13 - - - - -Node9->Node2 - - - - -Node9->Node7 - - - - -Node10->Node2 - - - - -Node10->Node5 - - - - -Node16->Node2 - - - - -Node16->Node7 - - - - -Node17 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node16->Node17 - - - - -Node17->Node2 - - - - -Node17->Node5 - - - - - diff --git a/docs/Doxygen/d8/d8b/MAX7219__Base_8cpp.html b/docs/Doxygen/d8/d8b/MAX7219__Base_8cpp.html deleted file mode 100644 index 7671d142c..000000000 --- a/docs/Doxygen/d8/d8b/MAX7219__Base_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: MAX7219_Base.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
MAX7219_Base.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/d8/d8b/MAX7219__Base_8cpp_source.html b/docs/Doxygen/d8/d8b/MAX7219__Base_8cpp_source.html deleted file mode 100644 index e1c3b28bc..000000000 --- a/docs/Doxygen/d8/d8b/MAX7219__Base_8cpp_source.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - -Arduino Helpers: MAX7219_Base.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
MAX7219_Base.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
-
2 // #include "MAX7219_Base.hpp" // TODO
-
3 #endif
-
- - - - diff --git a/docs/Doxygen/d8/d93/ShiftRegisterOutBase_8hpp.html b/docs/Doxygen/d8/d93/ShiftRegisterOutBase_8hpp.html deleted file mode 100644 index b75ad0d0c..000000000 --- a/docs/Doxygen/d8/d93/ShiftRegisterOutBase_8hpp.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - -Arduino Helpers: ShiftRegisterOutBase.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ShiftRegisterOutBase.hpp File Reference
-
-
-
-Include dependency graph for ShiftRegisterOutBase.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - -

-Classes

class  ShiftRegisterOutBase< N >
 A class for serial-in/parallel-out shift registers, like the 74HC595. More...
 
-
- - - - diff --git a/docs/Doxygen/d8/d93/ShiftRegisterOutBase_8hpp_source.html b/docs/Doxygen/d8/d93/ShiftRegisterOutBase_8hpp_source.html deleted file mode 100644 index c858eeac7..000000000 --- a/docs/Doxygen/d8/d93/ShiftRegisterOutBase_8hpp_source.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - - -Arduino Helpers: ShiftRegisterOutBase.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ShiftRegisterOutBase.hpp
-
-
-Go to the documentation of this file.
1 /* ✔ */
-
2 
-
3 #pragma once
-
4 
- -
6 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
7 
-
8 #include "StaticSizeExtendedIOElement.hpp"
- -
10 
- -
12 
-
24 template <uint8_t N>
- -
26  public:
-
27 #if defined(__SAM3X8E__) || defined(__SAMD21G18A__)
-
28  using BitOrder_t = BitOrder;
-
29 #else
-
30  using BitOrder_t = uint8_t;
-
31 #endif
-
32 
-
33  protected:
- -
46 
-
47  public:
-
52  void pinMode(pin_t pin, uint8_t mode) override __attribute__((deprecated)) {
-
53  (void)pin;
-
54  (void)mode;
-
55  }
-
56 
-
66  void digitalWrite(pin_t pin, uint8_t val) override;
-
67 
-
78  int digitalRead(pin_t pin) override;
-
79 
-
90  analog_t analogRead(pin_t pin) override __attribute__((deprecated)) {
-
91  return 1023 * digitalRead(pin);
-
92  }
-
93 
-
104  void analogWrite(pin_t pin, analog_t val) override
-
105  __attribute__((deprecated)) {
-
106  digitalWrite(pin, val >= 0x80);
-
107  }
-
108 
-
115  pin_t red(pin_t id);
-
116 
-
120  Array<pin_t, N / 3> redPins();
-
121 
-
128  pin_t green(pin_t id);
-
129 
-
133  Array<pin_t, N / 3> greenPins();
-
134 
-
141  pin_t blue(pin_t id);
-
142 
-
146  Array<pin_t, N / 3> bluePins();
-
147 
-
148  protected:
- - -
151 
- -
153  bool dirty = true;
-
154 };
-
155 
- -
157 
-
158 #include "ShiftRegisterOutBase.ipp"
-
159 
- -
-
void pinMode(pin_t pin, uint8_t mode) override __attribute__((deprecated))
The pinMode function is not implemented because the mode is OUTPUT by definition.
- -
#define BEGIN_AH_NAMESPACE
- -
int digitalRead(pin_t pin) override
Get the current state of a given output pin.
-
pin_t green(pin_t id)
Get the green output pin of the given LED.
-
Array< pin_t, N/3 > bluePins()
Get an array containing all pins with blue LEDs.
- -
analog_t analogRead(pin_t pin) override __attribute__((deprecated))
The analogRead function is deprecated because a shift is always digital.
-
pin_t blue(pin_t id)
Get the blue output pin of the given LED.
-
uint16_t analog_t
The type returned from analogRead and similar functions.
-
void analogWrite(pin_t pin, analog_t val) override __attribute__((deprecated))
The analogWrite function is not deprecated because a shift is always digital.
-
Array< pin_t, N/3 > greenPins()
Get an array containing all pins with green LEDs.
-
pin_t pin(pin_t pin) const
Get the extended IO pin number of a given physical pin of this extended IO element.
-
A class for ExtendedIOElements with a fixed size.
- -
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
An array wrapper for easy copying, comparing, and iterating.
Definition: Array.hpp:36
-
A class for serial-in/parallel-out shift registers, like the 74HC595.
- -
void digitalWrite(pin_t pin, uint8_t val) override
Set the state of a given output pin.
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
-
#define END_AH_NAMESPACE
-
ShiftRegisterOutBase(pin_t latchPin, BitOrder_t bitOrder)
Create a new ShiftRegisterOutBase object with a given bit order, and a given number of outputs.
- - -
pin_t red(pin_t id)
Get the red output pin of the given LED.
-
Array< pin_t, N/3 > redPins()
Get an array containing all pins with red LEDs.
-
A class for arrays of bits.
Definition: BitArray.hpp:25
- - - - - diff --git a/docs/Doxygen/d8/dac/SPIShiftRegisterOut_8ipp__incl.map b/docs/Doxygen/d8/dac/SPIShiftRegisterOut_8ipp__incl.map deleted file mode 100644 index dd20deae0..000000000 --- a/docs/Doxygen/d8/dac/SPIShiftRegisterOut_8ipp__incl.map +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/d8/dac/SPIShiftRegisterOut_8ipp__incl.md5 b/docs/Doxygen/d8/dac/SPIShiftRegisterOut_8ipp__incl.md5 deleted file mode 100644 index 6933f1dfa..000000000 --- a/docs/Doxygen/d8/dac/SPIShiftRegisterOut_8ipp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -1381b10732f7b70d91aaca22c5c3d537 \ No newline at end of file diff --git a/docs/Doxygen/d8/dac/SPIShiftRegisterOut_8ipp__incl.svg b/docs/Doxygen/d8/dac/SPIShiftRegisterOut_8ipp__incl.svg deleted file mode 100644 index 3524c825f..000000000 --- a/docs/Doxygen/d8/dac/SPIShiftRegisterOut_8ipp__incl.svg +++ /dev/null @@ -1,682 +0,0 @@ - - - - - - -SPIShiftRegisterOut.ipp - - -Node1 - - -SPIShiftRegisterOut.ipp - - - - -Node2 - - -ExtendedInputOutput.hpp - - - - -Node1->Node2 - - - - -Node28 - - -SPIShiftRegisterOut.hpp - - - - -Node1->Node28 - - - - -Node36 - - -SPI.h - - - - -Node1->Node36 - - - - -Node3 - - -AH/Settings/Warnings.hpp - - - - -Node2->Node3 - - - - -Node4 - - -Arduino.h - - - - -Node2->Node4 - - - - -Node5 - - -ExtendedIOElement.hpp - - - - -Node2->Node5 - - - - -Node5->Node3 - - - - -Node6 - - -AH/Hardware/Hardware --Types.hpp - - - - -Node5->Node6 - - - - -Node23 - - -AH/Containers/LinkedList.hpp - - - - -Node5->Node23 - - - - -Node6->Node3 - - - - -Node7 - - -AH/Containers/Array.hpp - - - - -Node6->Node7 - - - - -Node12 - - -NamespaceSettings.hpp - - - - -Node6->Node12 - - - - -Node18 - - -stdint.h - - - - -Node6->Node18 - - - - -Node7->Node3 - - - - -Node8 - - -AH/Error/Error.hpp - - - - -Node7->Node8 - - - - -Node17 - - -stddef.h - - - - -Node7->Node17 - - - - -Node21 - - -AH/STL/iterator - - - - -Node7->Node21 - - - - -Node22 - - -AH/STL/type_traits - - - - -Node7->Node22 - - - - -Node8->Node3 - - - - -Node9 - - -AH/Debug/Debug.hpp - - - - -Node8->Node9 - - - - -Node9->Node3 - - - - -Node10 - - -AH/PrintStream/PrintStream.hpp - - - - -Node9->Node10 - - - - -Node11 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node9->Node11 - - - - -Node20 - - -DebugVal.hpp - - - - -Node9->Node20 - - - - -Node10->Node3 - - - - -Node10->Node4 - - - - -Node11->Node3 - - - - -Node11->Node9 - - - - -Node11->Node12 - - - - -Node13 - - -Settings.hpp - - - - -Node11->Node13 - - - - -Node19 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node11->Node19 - - - - -Node14 - - -AH/Types/Frequency.hpp - - - - -Node13->Node14 - - - - -Node15 - - -AH/Hardware/ADCConfig.hpp - - - - -Node13->Node15 - - - - -Node16 - - -limits.h - - - - -Node13->Node16 - - - - -Node13->Node17 - - - - -Node13->Node18 - - - - -Node14->Node3 - - - - -Node14->Node12 - - - - -Node15->Node3 - - - - -Node15->Node4 - - - - -Node23->Node3 - - - - -Node23->Node9 - - - - -Node24 - - -AH/Math/MinMaxFix.hpp - - - - -Node23->Node24 - - - - -Node26 - - -stdlib.h - - - - -Node23->Node26 - - - - -Node27 - - -iterator - - - - -Node23->Node27 - - - - -Node24->Node3 - - - - -Node24->Node12 - - - - -Node25 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node24->Node25 - - - - -Node25->Node3 - - - - -Node25->Node4 - - - - -Node28->Node1 - - - - -Node28->Node3 - - - - -Node28->Node4 - - - - -Node29 - - -ShiftRegisterOutBase.hpp - - - - -Node28->Node29 - - - - -Node33 - - -AH/Containers/BitArray.hpp - - - - -Node28->Node33 - - - - -Node29->Node3 - - - - -Node30 - - -StaticSizeExtendedIOElement.hpp - - - - -Node29->Node30 - - - - -Node29->Node33 - - - - -Node34 - - -ShiftRegisterOutBase.ipp - - - - -Node29->Node34 - - - - -Node30->Node3 - - - - -Node30->Node5 - - - - -Node31 - - -AH/Containers/ArrayHelpers.hpp - - - - -Node30->Node31 - - - - -Node31->Node3 - - - - -Node31->Node7 - - - - -Node31->Node10 - - - - -Node32 - - -AH/STL/algorithm - - - - -Node31->Node32 - - - - -Node33->Node3 - - - - -Node33->Node8 - - - - -Node33->Node12 - - - - -Node33->Node18 - - - - -Node34->Node2 - - - - -Node34->Node29 - - - - -Node35 - - -ShiftRegisterOutRGB.hpp - - - - -Node34->Node35 - - - - -Node35->Node3 - - - - -Node35->Node11 - - - - -Node35->Node18 - - - - - diff --git a/docs/Doxygen/d8/db4/classShiftRegisterOutBase.html b/docs/Doxygen/d8/db4/classShiftRegisterOutBase.html deleted file mode 100644 index 195045d1e..000000000 --- a/docs/Doxygen/d8/db4/classShiftRegisterOutBase.html +++ /dev/null @@ -1,1261 +0,0 @@ - - - - - - - -Arduino Helpers: ShiftRegisterOutBase< N > Class Template Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

A class for serial-in/parallel-out shift registers, like the 74HC595. - More...

- -

#include <ShiftRegisterOutBase.hpp>

-
-Inheritance diagram for ShiftRegisterOutBase< N >:
-
-
-
-
-Collaboration diagram for ShiftRegisterOutBase< N >:
-
-
-
- - - - -

-Public Types

using BitOrder_t = uint8_t
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

void pinMode (pin_t pin, uint8_t mode) override __attribute__((deprecated))
 The pinMode function is not implemented because the mode is OUTPUT by definition. More...
 
void digitalWrite (pin_t pin, uint8_t val) override
 Set the state of a given output pin. More...
 
int digitalRead (pin_t pin) override
 Get the current state of a given output pin. More...
 
analog_t analogRead (pin_t pin) override __attribute__((deprecated))
 The analogRead function is deprecated because a shift is always digital. More...
 
void analogWrite (pin_t pin, analog_t val) override __attribute__((deprecated))
 The analogWrite function is not deprecated because a shift is always digital. More...
 
pin_t red (pin_t id)
 Get the red output pin of the given LED. More...
 
Array< pin_t, N/3 > redPins ()
 Get an array containing all pins with red LEDs. More...
 
pin_t green (pin_t id)
 Get the green output pin of the given LED. More...
 
Array< pin_t, N/3 > greenPins ()
 Get an array containing all pins with green LEDs. More...
 
pin_t blue (pin_t id)
 Get the blue output pin of the given LED. More...
 
Array< pin_t, N/3 > bluePins ()
 Get an array containing all pins with blue LEDs. More...
 
Array< pin_t, N > pins () const
 Get an array containing all pins of the element. More...
 
virtual void begin ()=0
 Initialize the extended IO element. More...
 
virtual void update ()=0
 Update the extended IO element: write the internal state to the physical outputs, or read the physical state into the input buffers. More...
 
pin_t pin (pin_t pin) const
 Get the extended IO pin number of a given physical pin of this extended IO element. More...
 
pin_t operator[] (pin_t pin) const
 Get the extended IO pin number of a given physical pin of this extended IO element. More...
 
pin_t getLength () const
 Get the number of pins this IO element has. More...
 
pin_t getEnd () const
 Get the largest global extended IO pin number that belongs to this extended IO element. More...
 
pin_t getStart () const
 Get the smallest global extended IO pin number that belongs to this extended IO element. More...
 
- - - - - - - - - -

-Static Public Member Functions

static constexpr uint16_t length ()
 
static void beginAll ()
 Initialize all extended IO elements. More...
 
static DoublyLinkedList< ExtendedIOElement > & getAll ()
 Get the list of all Extended IO elements. More...
 
- - - - -

-Protected Member Functions

 ShiftRegisterOutBase (pin_t latchPin, BitOrder_t bitOrder)
 Create a new ShiftRegisterOutBase object with a given bit order, and a given number of outputs. More...
 
- - - - - - - - - - - - - -

-Protected Attributes

const pin_t latchPin
 
const BitOrder_t bitOrder
 
BitArray< N > buffer
 
bool dirty = true
 
ExtendedIOElementnext
 
ExtendedIOElementprevious
 
- - - - - -

-Private Attributes

const pin_t start
 
const pin_t end
 
- - - - - -

-Static Private Attributes

static pin_t offset = NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS
 
static DoublyLinkedList< ExtendedIOElementelements
 
-

Detailed Description

-

template<uint8_t N>
-class ShiftRegisterOutBase< N >

- -

A class for serial-in/parallel-out shift registers, like the 74HC595.

-
Template Parameters
- - -
NThe number of bits in total. Usually, shift registers (e.g. the 74HC595) have eight bits per chip, so length = 8 * k where k is the number of cascaded chips.
-
-
- -

Definition at line 25 of file ShiftRegisterOutBase.hpp.

-

Member Typedef Documentation

- -

◆ BitOrder_t

- -
-
- - - - -
using BitOrder_t = uint8_t
-
- -

Definition at line 30 of file ShiftRegisterOutBase.hpp.

- -
-
-

Constructor & Destructor Documentation

- -

◆ ShiftRegisterOutBase()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
ShiftRegisterOutBase (pin_t latchPin,
BitOrder_t bitOrder 
)
-
-protected
-
- -

Create a new ShiftRegisterOutBase object with a given bit order, and a given number of outputs.

-
Parameters
- - - -
latchPinThe digital output pin connected to the latch pin (ST_CP or RCLK) of the shift register.
bitOrderEither MSBFIRST (most significant bit first) or LSBFIRST (least significant bit first).
-
-
- -

Definition at line 8 of file ShiftRegisterOutBase.ipp.

- -
-
-

Member Function Documentation

- -

◆ pinMode()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void pinMode (pin_t pin,
uint8_t mode 
)
-
-inlineoverridevirtual
-
- -

The pinMode function is not implemented because the mode is OUTPUT by definition.

- -

Implements ExtendedIOElement.

- -

Definition at line 52 of file ShiftRegisterOutBase.hpp.

- -
-
- -

◆ digitalWrite()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void digitalWrite (pin_t pin,
uint8_t val 
)
-
-overridevirtual
-
- -

Set the state of a given output pin.

-
Parameters
- - - -
pinThe shift register pin to set.
valThe value to set the pin to. (Either HIGH (1) or LOW (0))
-
-
- -

Implements ExtendedIOElement.

- -

Definition at line 13 of file ShiftRegisterOutBase.ipp.

- -
-
- -

◆ digitalRead()

- -
-
- - - - - -
- - - - - - - - -
int digitalRead (pin_t pin)
-
-overridevirtual
-
- -

Get the current state of a given output pin.

-
Parameters
- - -
pinThe shift register pin to read from.
-
-
-
Return values
- - - -
0The state of the pin is LOW.
1The state of the pin is HIGH.
-
-
- -

Implements ExtendedIOElement.

- -

Definition at line 20 of file ShiftRegisterOutBase.ipp.

- -
-
- -

◆ analogRead()

- -
-
- - - - - -
- - - - - - - - -
analog_t analogRead (pin_t pin)
-
-inlineoverridevirtual
-
- -

The analogRead function is deprecated because a shift is always digital.

-
Parameters
- - -
pinThe shift register pin to read from.
-
-
-
Return values
- - - -
0The state of the pin is LOW.
1023The state of the pin is HIGH.
-
-
- -

Implements ExtendedIOElement.

- -

Definition at line 90 of file ShiftRegisterOutBase.hpp.

- -
-
- -

◆ analogWrite()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void analogWrite (pin_t pin,
analog_t val 
)
-
-inlineoverridevirtual
-
- -

The analogWrite function is not deprecated because a shift is always digital.

-
Parameters
- - - -
pinThe shift register pin to set.
valThe value to set the pin to. A value greater or equal to 0x80 will set the pin to a HIGH state, a value less than 0x80 will set the pin to a LOW state.
-
-
- -

Implements ExtendedIOElement.

- -

Definition at line 104 of file ShiftRegisterOutBase.hpp.

- -
-
- -

◆ red()

- -
-
- - - - - - - - -
pin_t red (pin_t id)
-
- -

Get the red output pin of the given LED.

-
Parameters
- - -
idThe zero-based LED number.
-
-
- -

Definition at line 36 of file ShiftRegisterOutBase.ipp.

- -
-
- -

◆ redPins()

- -
-
- - - - - - - -
Array< pin_t, N/3 > redPins ()
-
- -

Get an array containing all pins with red LEDs.

- -

Definition at line 41 of file ShiftRegisterOutBase.ipp.

- -
-
- -

◆ green()

- -
-
- - - - - - - - -
pin_t green (pin_t id)
-
- -

Get the green output pin of the given LED.

-
Parameters
- - -
idThe zero-based LED number.
-
-
- -

Definition at line 25 of file ShiftRegisterOutBase.ipp.

- -
-
- -

◆ greenPins()

- -
-
- - - - - - - -
Array< pin_t, N/3 > greenPins ()
-
- -

Get an array containing all pins with green LEDs.

- -

Definition at line 30 of file ShiftRegisterOutBase.ipp.

- -
-
- -

◆ blue()

- -
-
- - - - - - - - -
pin_t blue (pin_t id)
-
- -

Get the blue output pin of the given LED.

-
Parameters
- - -
idThe zero-based LED number.
-
-
- -

Definition at line 47 of file ShiftRegisterOutBase.ipp.

- -
-
- -

◆ bluePins()

- -
-
- - - - - - - -
Array< pin_t, N/3 > bluePins ()
-
- -

Get an array containing all pins with blue LEDs.

- -

Definition at line 52 of file ShiftRegisterOutBase.ipp.

- -
-
- -

◆ pins()

- -
-
- - - - - -
- - - - - - - -
Array<pin_t, N> pins () const
-
-inlineinherited
-
- -

Get an array containing all pins of the element.

- -

Definition at line 27 of file StaticSizeExtendedIOElement.hpp.

- -
-
- -

◆ length()

- -
-
- - - - - -
- - - - - - - -
static constexpr uint16_t length ()
-
-inlinestaticconstexprinherited
-
- -

Definition at line 31 of file StaticSizeExtendedIOElement.hpp.

- -
-
- -

◆ begin()

- -
-
- - - - - -
- - - - - - - -
virtual void begin ()
-
-pure virtualinherited
-
- -

Initialize the extended IO element.

- -

Implemented in AnalogMultiplex< N >, ShiftRegisterOut< N >, SPIShiftRegisterOut< N >, and MAX7219.

- -
-
- -

◆ beginAll()

- -
-
- - - - - -
- - - - - - - -
void beginAll ()
-
-staticinherited
-
- -

Initialize all extended IO elements.

- -

Definition at line 23 of file ExtendedIOElement.cpp.

- -
-
- -

◆ update()

- -
-
- - - - - -
- - - - - - - -
virtual void update ()
-
-pure virtualinherited
-
- -

Update the extended IO element: write the internal state to the physical outputs, or read the physical state into the input buffers.

- -

Implemented in MAX7219, AnalogMultiplex< N >, ShiftRegisterOut< N >, and SPIShiftRegisterOut< N >.

- -
-
- -

◆ pin()

- -
-
- - - - - -
- - - - - - - - -
pin_t pin (pin_t pin) const
-
-inherited
-
- -

Get the extended IO pin number of a given physical pin of this extended IO element.

-
Parameters
- - -
pinThe zero-based physical pin number of this IO element.
-
-
-
Returns
The global, unique extended IO pin number for the given pin.
-
Examples
Toggle-LEDs.ino.
-
- -

Definition at line 28 of file ExtendedIOElement.cpp.

- -
-
- -

◆ operator[]()

- -
-
- - - - - -
- - - - - - - - -
pin_t operator[] (pin_t pin) const
-
-inherited
-
- -

Get the extended IO pin number of a given physical pin of this extended IO element.

-


- It is alias for ExtendedIOElement::pin.

Parameters
- - -
pinThe zero-based physical pin number of this IO element.
-
-
-
Returns
The global, unique extended IO pin number for the given pin.
- -

Definition at line 43 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getLength()

- -
-
- - - - - -
- - - - - - - -
pin_t getLength () const
-
-inherited
-
- -

Get the number of pins this IO element has.

-
Returns
The number of pins this IO element has.
-
Examples
1.AnalogReadSerial.ino, and 2.DigitalReadSerial.ino.
-
- -

Definition at line 45 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getEnd()

- -
-
- - - - - -
- - - - - - - -
pin_t getEnd () const
-
-inherited
-
- -

Get the largest global extended IO pin number that belongs to this extended IO element.

- -

Definition at line 47 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getStart()

- -
-
- - - - - -
- - - - - - - -
pin_t getStart () const
-
-inherited
-
- -

Get the smallest global extended IO pin number that belongs to this extended IO element.

- -

Definition at line 49 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getAll()

- -
-
- - - - - -
- - - - - - - -
DoublyLinkedList< ExtendedIOElement > & getAll ()
-
-staticinherited
-
- -

Get the list of all Extended IO elements.

- -

Definition at line 51 of file ExtendedIOElement.cpp.

- -
-
-

Member Data Documentation

- -

◆ latchPin

- -
-
- - - - - -
- - - - -
const pin_t latchPin
-
-protected
-
- -

Definition at line 149 of file ShiftRegisterOutBase.hpp.

- -
-
- -

◆ bitOrder

- -
-
- - - - - -
- - - - -
const BitOrder_t bitOrder
-
-protected
-
- -

Definition at line 150 of file ShiftRegisterOutBase.hpp.

- -
-
- -

◆ buffer

- -
-
- - - - - -
- - - - -
BitArray<N> buffer
-
-protected
-
- -

Definition at line 152 of file ShiftRegisterOutBase.hpp.

- -
-
- -

◆ dirty

- -
-
- - - - - -
- - - - -
bool dirty = true
-
-protected
-
- -

Definition at line 153 of file ShiftRegisterOutBase.hpp.

- -
-
- -

◆ start

- -
-
- - - - - -
- - - - -
const pin_t start
-
-privateinherited
-
- -

Definition at line 193 of file ExtendedIOElement.hpp.

- -
-
- -

◆ end

- -
-
- - - - - -
- - - - -
const pin_t end
-
-privateinherited
-
- -

Definition at line 194 of file ExtendedIOElement.hpp.

- -
-
- -

◆ offset

- -
-
- - - - - -
- - - - -
pin_t offset = NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS
-
-staticprivateinherited
-
- -

Definition at line 195 of file ExtendedIOElement.hpp.

- -
-
- -

◆ elements

- -
-
- - - - - -
- - - - -
DoublyLinkedList< ExtendedIOElement > elements
-
-staticprivateinherited
-
- -

Definition at line 197 of file ExtendedIOElement.hpp.

- -
-
- -

◆ next

- -
-
- - - - - -
- - - - -
ExtendedIOElement * next
-
-protectedinherited
-
- -

Definition at line 305 of file LinkedList.hpp.

- -
-
- -

◆ previous

- -
-
- - - - - -
- - - - -
ExtendedIOElement * previous
-
-protectedinherited
-
- -

Definition at line 306 of file LinkedList.hpp.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/docs/Doxygen/d8/dc4/structSetbase-members.html b/docs/Doxygen/d8/dc4/structSetbase-members.html deleted file mode 100644 index 4aca3e129..000000000 --- a/docs/Doxygen/d8/dc4/structSetbase-members.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Setbase Member List
-
-
- -

This is the complete list of members for Setbase, including all inherited members.

- - -
M_baseSetbase
- - - - diff --git a/docs/Doxygen/d8/dce/MinMaxFix_8hpp__incl.map b/docs/Doxygen/d8/dce/MinMaxFix_8hpp__incl.map deleted file mode 100644 index ee5533021..000000000 --- a/docs/Doxygen/d8/dce/MinMaxFix_8hpp__incl.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/Doxygen/d8/dce/MinMaxFix_8hpp__incl.md5 b/docs/Doxygen/d8/dce/MinMaxFix_8hpp__incl.md5 deleted file mode 100644 index 972307d0f..000000000 --- a/docs/Doxygen/d8/dce/MinMaxFix_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -f459767984e128ebcd175a3477781b47 \ No newline at end of file diff --git a/docs/Doxygen/d8/dce/MinMaxFix_8hpp__incl.svg b/docs/Doxygen/d8/dce/MinMaxFix_8hpp__incl.svg deleted file mode 100644 index 7c49ece71..000000000 --- a/docs/Doxygen/d8/dce/MinMaxFix_8hpp__incl.svg +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - -MinMaxFix.hpp - - -Node1 - - -MinMaxFix.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node1->Node3 - - - - -Node5 - - -AH/Settings/NamespaceSettings.hpp - - - - -Node1->Node5 - - - - -Node3->Node2 - - - - -Node4 - - -Arduino.h - - - - -Node3->Node4 - - - - - diff --git a/docs/Doxygen/d8/dd7/Timing_8dox.html b/docs/Doxygen/d8/dd7/Timing_8dox.html deleted file mode 100644 index 742bd7f69..000000000 --- a/docs/Doxygen/d8/dd7/Timing_8dox.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Timing.dox File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Timing.dox File Reference
-
-
-
- - - - diff --git a/docs/Doxygen/d8/df3/FilteredAnalog_8hpp.html b/docs/Doxygen/d8/df3/FilteredAnalog_8hpp.html deleted file mode 100644 index 26904f784..000000000 --- a/docs/Doxygen/d8/df3/FilteredAnalog_8hpp.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Arduino Helpers: FilteredAnalog.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
FilteredAnalog.hpp File Reference
-
-
-
-Include dependency graph for FilteredAnalog.hpp:
-
-
-
-
-

Go to the source code of this file.

- - - - - -

-Classes

class  FilteredAnalog< Precision, FilterShiftFactor, FilterType, AnalogType, IncRes >
 A class that reads and filters an analog input. More...
 
-
- - - - diff --git a/docs/Doxygen/d8/df3/FilteredAnalog_8hpp_source.html b/docs/Doxygen/d8/df3/FilteredAnalog_8hpp_source.html deleted file mode 100644 index 987c044c3..000000000 --- a/docs/Doxygen/d8/df3/FilteredAnalog_8hpp_source.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - - -Arduino Helpers: FilteredAnalog.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
FilteredAnalog.hpp
-
-
-Go to the documentation of this file.
1 #pragma once
-
2 
- -
4 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
5 
-
6 #include <AH/Filters/EMA.hpp>
- - - - -
11 #include <AH/Math/MinMaxFix.hpp>
- -
13 
- -
15 
-
49 template <uint8_t Precision = 10,
-
50  uint8_t FilterShiftFactor = ANALOG_FILTER_SHIFT_FACTOR,
-
51  class FilterType = ANALOG_FILTER_TYPE, class AnalogType = analog_t,
-
52  uint8_t IncRes =
-
53  min(sizeof(FilterType) * CHAR_BIT - ADC_BITS - FilterShiftFactor,
-
54  sizeof(AnalogType) * CHAR_BIT - ADC_BITS)>
- -
56  public:
- -
64 
-
67  using MappingFunction = AnalogType (*)(AnalogType);
-
68 
-
86  void map(MappingFunction fn) { mapFn = fn; }
-
87 
-
95  void invert() {
-
96  constexpr AnalogType maxval = (1UL << (ADC_BITS + IncRes)) - 1;
-
97  map([](AnalogType val) -> AnalogType { return maxval - val; });
-
98  }
-
99 
-
109  bool update() {
-
110  AnalogType input = getRawValue(); // read the raw analog input value
-
111  input = filter.filter(input); // apply a low-pass EMA filter
-
112  if (mapFn) // If a mapping function is specified,
-
113  input = mapFn(input); // apply it
-
114  return hysteresis.update(input); // apply hysteresis, and return true
-
115  // if the value changed since last time
-
116  }
-
117 
-
128  AnalogType getValue() const { return hysteresis.getValue(); }
-
129 
-
137  float getFloatValue() const {
-
138  return getValue() * (1.0f / (ldexpf(1.0f, Precision) - 1.0f));
-
139  }
-
140 
-
145  AnalogType getRawValue() const {
-
146  return increaseBitDepth<ADC_BITS + IncRes, ADC_BITS, AnalogType,
-
147  AnalogType>(ExtIO::analogRead(analogPin));
-
148  }
-
149 
-
157  static void setupADC() {
-
158 #if HAS_ANALOG_READ_RESOLUTION
-
159  analogReadResolution(ADC_BITS);
-
160 #endif
-
161  }
-
162 
-
163  private:
- -
165 
- -
167 
-
168  static_assert(
-
169  ADC_BITS + IncRes + FilterShiftFactor <= sizeof(FilterType) * CHAR_BIT,
-
170  "Error: FilterType is not wide enough to hold the maximum value");
-
171  static_assert(
-
172  ADC_BITS + IncRes <= sizeof(AnalogType) * CHAR_BIT,
-
173  "Error: AnalogType is not wide enough to hold the maximum value");
-
174  static_assert(
-
175  Precision <= ADC_BITS + IncRes,
-
176  "Error: Precision is larger than the increased ADC precision");
-
177 
- -
179  Hysteresis<ADC_BITS + IncRes - Precision, AnalogType, AnalogType>
- -
181 };
-
182 
- -
184 
- -
-
void invert()
Invert the analog value.
-
AnalogType getValue() const
Get the filtered value of the analog input (with the mapping function applied).
-
uint_t filter(uint_t input)
Filter the input: Given , calculate .
Definition: EMA.hpp:51
-
#define BEGIN_AH_NAMESPACE
-
uint16_t ANALOG_FILTER_TYPE
The unsigned integer type to use for analog inputs during filtering.
Definition: Settings.hpp:71
-
AnalogType getRawValue() const
Read the raw value of the analog input any filtering or mapping applied, but with its bit depth incre...
-
constexpr uint8_t ADC_BITS
The bit depth to use for the ADC (Analog to Digital Converter).
Definition: Settings.hpp:53
- - -
const pin_t analogPin
-
A class that reads and filters an analog input.
-
uint16_t analog_t
The type returned from analogRead and similar functions.
- - -
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
Hysteresis< ADC_BITS+IncRes - Precision, AnalogType, AnalogType > hysteresis
-
T_out getValue() const
Get the current output level.
Definition: Hysteresis.hpp:64
-
AnalogType(*)(AnalogType) MappingFunction
A function pointer to a mapping function to map analog values.
-
FilteredAnalog(pin_t analogPin)
Construct a new FilteredAnalog object.
-
T_out increaseBitDepth(T_in in)
Increase the bit depth of the given value from Bits_in bits wide to Bits_out bits wide,...
-
static void setupADC()
Select the configured ADC resolution.
- -
analog_t analogRead(pin_t pin)
An ExtIO version of the Arduino function.
-
A class for applying hysteresis to a given input.
Definition: Hysteresis.hpp:36
-
MappingFunction mapFn
-
bool update()
Read the analog input value, apply the mapping function, and update the average.
-
constexpr uint8_t ANALOG_FILTER_SHIFT_FACTOR
The factor for the analog filter: Difference equation: where .
Definition: Settings.hpp:64
-
float getFloatValue() const
Get the filtered value of the analog input with the mapping function applied as a floating point numb...
-
EMA< FilterShiftFactor, FilterType > filter
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
void map(MappingFunction fn)
Specify a mapping function that is applied to the raw analog value before filtering.
-
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
-
bool update(T_in inputLevel)
Update the hysteresis output with a new input value.
Definition: Hysteresis.hpp:48
-
#define END_AH_NAMESPACE
- - - -
constexpr auto min(const T &a, const U &b) -> decltype(b< a ? b :a)
Return the smaller of two numbers/objects.
Definition: MinMaxFix.hpp:15
- - - - diff --git a/docs/Doxygen/d9/d07/structShiftRegisterOutRGB__coll__graph.map b/docs/Doxygen/d9/d07/structShiftRegisterOutRGB__coll__graph.map deleted file mode 100644 index 29154d1a1..000000000 --- a/docs/Doxygen/d9/d07/structShiftRegisterOutRGB__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/d9/d07/structShiftRegisterOutRGB__coll__graph.md5 b/docs/Doxygen/d9/d07/structShiftRegisterOutRGB__coll__graph.md5 deleted file mode 100644 index 01273aa94..000000000 --- a/docs/Doxygen/d9/d07/structShiftRegisterOutRGB__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -dffea009151d3e85e91619049740a9be \ No newline at end of file diff --git a/docs/Doxygen/d9/d07/structShiftRegisterOutRGB__coll__graph.svg b/docs/Doxygen/d9/d07/structShiftRegisterOutRGB__coll__graph.svg deleted file mode 100644 index 69b9618d7..000000000 --- a/docs/Doxygen/d9/d07/structShiftRegisterOutRGB__coll__graph.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - -ShiftRegisterOutRGB - - -Node1 - - -ShiftRegisterOutRGB - -+ redBit -+ greenBit -+ blueBit - - - - - - - diff --git a/docs/Doxygen/d9/d0a/EMA_8cpp.html b/docs/Doxygen/d9/d0a/EMA_8cpp.html deleted file mode 100644 index 80f726326..000000000 --- a/docs/Doxygen/d9/d0a/EMA_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: EMA.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
EMA.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/d9/d0a/EMA_8cpp_source.html b/docs/Doxygen/d9/d0a/EMA_8cpp_source.html deleted file mode 100644 index 59ad2a572..000000000 --- a/docs/Doxygen/d9/d0a/EMA_8cpp_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Arduino Helpers: EMA.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
EMA.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
-
2 #include "EMA.hpp"
-
3 #endif
-
- - - - - diff --git a/docs/Doxygen/d9/d1a/classArraySlice_1_1Iterator.html b/docs/Doxygen/d9/d1a/classArraySlice_1_1Iterator.html deleted file mode 100644 index ccf8d6628..000000000 --- a/docs/Doxygen/d9/d1a/classArraySlice_1_1Iterator.html +++ /dev/null @@ -1,537 +0,0 @@ - - - - - - - -Arduino Helpers: ArraySlice< T, N, Reverse, Const >::Iterator Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ArraySlice< T, N, Reverse, Const >::Iterator Class Reference
-
-
- -

#include <Array.hpp>

-
-Collaboration diagram for ArraySlice< T, N, Reverse, Const >::Iterator:
-
-
-
- - - - - - - - - - - - -

-Public Types

using difference_type = std::ptrdiff_t
 
using value_type = T
 
using pointer = ElementPtrType
 
using reference = ElementRefType
 
using iterator_category = std::random_access_iterator_tag
 
- - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 Iterator (ElementPtrType ptr)
 
bool operator!= (Iterator rhs) const
 
bool operator== (Iterator rhs) const
 
reference operator* () const
 
Iteratoroperator++ ()
 
Iteratoroperator-- ()
 
difference_type operator- (Iterator rhs) const
 
Iterator operator+ (difference_type rhs) const
 
Iterator operator- (difference_type rhs) const
 
bool operator< (Iterator rhs) const
 
- - - -

-Private Attributes

ElementPtrType ptr
 
-

Detailed Description

-

template<class T, size_t N, bool Reverse = false, bool Const = true>
-class ArraySlice< T, N, Reverse, Const >::Iterator

- - -

Definition at line 188 of file Array.hpp.

-

Member Typedef Documentation

- -

◆ difference_type

- -
-
- - - - -
using difference_type = std::ptrdiff_t
-
- -

Definition at line 192 of file Array.hpp.

- -
-
- -

◆ value_type

- -
-
- - - - -
using value_type = T
-
- -

Definition at line 193 of file Array.hpp.

- -
-
- -

◆ pointer

- -
-
- - - - -
using pointer = ElementPtrType
-
- -

Definition at line 194 of file Array.hpp.

- -
-
- -

◆ reference

- -
-
- - - - -
using reference = ElementRefType
-
- -

Definition at line 195 of file Array.hpp.

- -
-
- -

◆ iterator_category

- -
-
- - - - -
using iterator_category = std::random_access_iterator_tag
-
- -

Definition at line 196 of file Array.hpp.

- -
-
-

Constructor & Destructor Documentation

- -

◆ Iterator()

- -
-
- - - - - -
- - - - - - - - -
Iterator (ElementPtrType ptr)
-
-inline
-
- -

Definition at line 190 of file Array.hpp.

- -
-
-

Member Function Documentation

- -

◆ operator!=()

- -
-
- - - - - -
- - - - - - - - -
bool operator!= (Iterator rhs) const
-
-inline
-
- -

Definition at line 198 of file Array.hpp.

- -
-
- -

◆ operator==()

- -
-
- - - - - -
- - - - - - - - -
bool operator== (Iterator rhs) const
-
-inline
-
- -

Definition at line 199 of file Array.hpp.

- -
-
- -

◆ operator*()

- -
-
- - - - - -
- - - - - - - -
reference operator* () const
-
-inline
-
- -

Definition at line 201 of file Array.hpp.

- -
-
- -

◆ operator++()

- -
-
- - - - - -
- - - - - - - -
Iterator& operator++ ()
-
-inline
-
- -

Definition at line 203 of file Array.hpp.

- -
-
- -

◆ operator--()

- -
-
- - - - - -
- - - - - - - -
Iterator& operator-- ()
-
-inline
-
- -

Definition at line 208 of file Array.hpp.

- -
-
- -

◆ operator-() [1/2]

- -
-
- - - - - -
- - - - - - - - -
difference_type operator- (Iterator rhs) const
-
-inline
-
- -

Definition at line 213 of file Array.hpp.

- -
-
- -

◆ operator+()

- -
-
- - - - - -
- - - - - - - - -
Iterator operator+ (difference_type rhs) const
-
-inline
-
- -

Definition at line 217 of file Array.hpp.

- -
-
- -

◆ operator-() [2/2]

- -
-
- - - - - -
- - - - - - - - -
Iterator operator- (difference_type rhs) const
-
-inline
-
- -

Definition at line 221 of file Array.hpp.

- -
-
- -

◆ operator<()

- -
-
- - - - - -
- - - - - - - - -
bool operator< (Iterator rhs) const
-
-inline
-
- -

Definition at line 225 of file Array.hpp.

- -
-
-

Member Data Documentation

- -

◆ ptr

- -
-
- - - - - -
- - - - -
ElementPtrType ptr
-
-private
-
- -

Definition at line 230 of file Array.hpp.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/Doxygen/d9/d35/ShiftRegisterOut_8cpp.html b/docs/Doxygen/d9/d35/ShiftRegisterOut_8cpp.html deleted file mode 100644 index 6df9f2471..000000000 --- a/docs/Doxygen/d9/d35/ShiftRegisterOut_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: ShiftRegisterOut.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ShiftRegisterOut.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/d9/d35/ShiftRegisterOut_8cpp_source.html b/docs/Doxygen/d9/d35/ShiftRegisterOut_8cpp_source.html deleted file mode 100644 index 25ab9d22b..000000000 --- a/docs/Doxygen/d9/d35/ShiftRegisterOut_8cpp_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Arduino Helpers: ShiftRegisterOut.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ShiftRegisterOut.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
-
2 #include "ShiftRegisterOut.hpp"
-
3 #endif
-
- - - - - diff --git a/docs/Doxygen/d9/d42/2_8DigitalReadSerial_8ino-example.html b/docs/Doxygen/d9/d42/2_8DigitalReadSerial_8ino-example.html deleted file mode 100644 index 65dadc503..000000000 --- a/docs/Doxygen/d9/d42/2_8DigitalReadSerial_8ino-example.html +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - - -Arduino Helpers: 2.DigitalReadSerial.ino - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
2.DigitalReadSerial.ino
-
-
-

-2.DigitalReadSerial

-

This is an example of the AnalogMultiplex class. It prints the states of all 16 switches connected to a multiplexers to the serial monitor.

-
Boards:
AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32
-

-Connections

-
    -
  • 2: CD74HC4067 signal pin ("common input/output")
  • -
  • 3: CD74HC4067 address pin S0
  • -
  • 4: CD74HC4067 address pin S1
  • -
  • 5: CD74HC4067 address pin S2
  • -
  • 6: CD74HC4067 address pin S3
  • -
-

Optionally you can connect the enable pin as well, this is useful if you want to use multiple multiplexers with the same address lines and the same analog input. Otherwise, just connect the enable pin to ground.

-

If you are using a 3-bit multiplexer, like the CD74HC4051, you can uncomment the code specific to this multiplexer, and use only three address pins.

-

Connect a switch or push button between each input pin of the multiplexer and ground. A pull-up resistor is not necessary, because we'll use the internal one.

-

-Behavior

-

Open the serial monitor (CTRL+SHIFT+M) or the serial plotter (CTRL+SHIFT+L), and press some buttons, you should see all 16 signals printed or plotted.

-

Written by Pieter P, 2019-08-08
- https://github.com/tttapa/Arduino-Helpers

-
-
#include <Arduino_Helpers.h> // Include the Arduino Helpers library
- -
-
// Instantiate a multiplexer
-
CD74HC4067 mux = {
-
2, // input pin
-
{3, 4, 5, 6}, // Address pins S0, S1, S2, S3
-
// 7, // Optionally, specify the enable pin
-
};
-
-
// Alternatively, if you have a 3-bit mux:
-
// CD74HC4051 mux = {
-
// 2,
-
// {3, 4, 5},
-
// // 7, // Optional
-
// };
-
-
void setup() {
-
Serial.begin(115200);
-
mux.begin(); // Initialize multiplexer
-
mux.pinMode(0, INPUT_PULLUP); // Set the pin mode (setting it for one pin of
-
// the multiplexers sets it for all of them)
-
}
-
-
void loop() {
-
for (pin_t pin = 0; pin < mux.getLength(); ++pin) {
-
Serial.print(mux.digitalRead(pin));
-
Serial.print('\t');
-
}
-
Serial.println();
-
}
-
-
// Or if you're a cool kid, use a range-based for loop
-
void loop2() {
-
for (pin_t pin : mux.pins()) {
-
Serial.print(digitalRead(pin));
-
Serial.print('\t');
-
}
-
Serial.println();
-
}
-
// Okay, it's a bit slower, because it has to look up what ExtIO device the pin
-
// belongs to, but hey, it's nice to have it anyway
-
-
const uint8_t INPUT_PULLUP
-
int digitalRead(pin_t pin)
An ExtIO version of the Arduino function.
-
void begin() override
Initialize the multiplexer: set the pin mode of the address pins and the enable pin to output mode.
- -
A class for reading multiplexed analog inputs.
-
Dummy header file for Arduino builder. You have to add this file first, so the other headers are in t...
-
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
-
Array< pin_t, N > pins() const
Get an array containing all pins of the element.
-
void pinMode(pin_t pin, uint8_t mode) override
Set the pin mode of the analog input pin.
-
pin_t getLength() const
Get the number of pins this IO element has.
-
int digitalRead(pin_t pin) override
Read the digital state of the given input.
- - - - diff --git a/docs/Doxygen/d9/d4a/classLEDs__inherit__graph.map b/docs/Doxygen/d9/d4a/classLEDs__inherit__graph.map deleted file mode 100644 index 3053cb3bb..000000000 --- a/docs/Doxygen/d9/d4a/classLEDs__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/d9/d4a/classLEDs__inherit__graph.md5 b/docs/Doxygen/d9/d4a/classLEDs__inherit__graph.md5 deleted file mode 100644 index 98b66e578..000000000 --- a/docs/Doxygen/d9/d4a/classLEDs__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -8ac42ef5a6378723ff4f122efe820778 \ No newline at end of file diff --git a/docs/Doxygen/d9/d4a/classLEDs__inherit__graph.svg b/docs/Doxygen/d9/d4a/classLEDs__inherit__graph.svg deleted file mode 100644 index 432156cb5..000000000 --- a/docs/Doxygen/d9/d4a/classLEDs__inherit__graph.svg +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - -LEDs< N > - - -Node1 - - -LEDs< N > - -- ledPins - -+ LEDs() -+ begin() -+ displayRange() -+ set() -+ clear() -+ displayDot() -+ clear() - - - - -Node2 - - -DotBarDisplayLEDs< N > - -- mode - -+ DotBarDisplayLEDs() -+ display() -+ display() -+ getMode() -+ setMode() -+ dotMode() -+ barMode() -+ toggleMode() - - - - -Node1->Node2 - - - - - diff --git a/docs/Doxygen/d9/d4b/ButtonMatrix_8hpp.html b/docs/Doxygen/d9/d4b/ButtonMatrix_8hpp.html deleted file mode 100644 index 285f1afa8..000000000 --- a/docs/Doxygen/d9/d4b/ButtonMatrix_8hpp.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Arduino Helpers: ButtonMatrix.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ButtonMatrix.hpp File Reference
-
-
-
-Include dependency graph for ButtonMatrix.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - -

-Classes

class  ButtonMatrix< nb_rows, nb_cols >
 A class that reads the states of a button matrix. More...
 
-
- - - - diff --git a/docs/Doxygen/d9/d4b/ButtonMatrix_8hpp_source.html b/docs/Doxygen/d9/d4b/ButtonMatrix_8hpp_source.html deleted file mode 100644 index 80603c254..000000000 --- a/docs/Doxygen/d9/d4b/ButtonMatrix_8hpp_source.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - -Arduino Helpers: ButtonMatrix.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ButtonMatrix.hpp
-
-
-Go to the documentation of this file.
1 /* ✔ */
-
2 
-
3 #pragma once
-
4 
- -
6 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
7 
-
8 #include <AH/Hardware/Hardware-Types.hpp>
-
9 
- -
11 
-
22 template <uint8_t nb_rows, uint8_t nb_cols>
-
23 class ButtonMatrix {
-
24  public:
- -
39  const PinList<nb_cols> &colPins);
-
43  virtual ~ButtonMatrix() = default;
-
44 
-
48  void begin();
-
49 
-
54  void update();
-
55 
-
61  bool getPrevState(uint8_t col, uint8_t row);
-
62 
-
63  private:
-
75  virtual void onButtonChanged(uint8_t row, uint8_t col, bool state) = 0;
-
76 
-
77  static inline uint8_t positionToBits(uint8_t col, uint8_t row);
-
78  static inline uint8_t bitsToIndex(uint8_t bits);
-
79  static inline uint8_t bitsToBitmask(uint8_t bits);
-
80  void setPrevState(uint8_t col, uint8_t row, bool state);
-
81 
-
82  unsigned long prevRefresh = 0;
-
83  uint8_t prevStates[(nb_cols * nb_rows + 7) / 8];
-
84 
- - -
87 };
-
88 
- -
90 
-
91 #include "ButtonMatrix.ipp" // Template implementations
-
92 
- -
-
#define BEGIN_AH_NAMESPACE
-
static uint8_t bitsToBitmask(uint8_t bits)
- -
virtual void onButtonChanged(uint8_t row, uint8_t col, bool state)=0
The callback function that is called whenever a button changes state.
-
unsigned long prevRefresh
-
void setPrevState(uint8_t col, uint8_t row, bool state)
-
static uint8_t positionToBits(uint8_t col, uint8_t row)
-
uint8_t prevStates[(nb_cols *nb_rows+7)/8]
-
ButtonMatrix(const PinList< nb_rows > &rowPins, const PinList< nb_cols > &colPins)
Construct a new ButtonMatrix object.
-
virtual ~ButtonMatrix()=default
Destructor.
-
void begin()
Initialize (enable internal pull-up resistors on column pins).
-
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
- -
static uint8_t bitsToIndex(uint8_t bits)
-
const PinList< nb_cols > colPins
-
void update()
Scan the matrix, read all button states, and call the onButtonChanged callback.
-
const PinList< nb_rows > rowPins
-
bool getPrevState(uint8_t col, uint8_t row)
Get the state of the button in the given column and row.
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
- -
#define END_AH_NAMESPACE
-
A class that reads the states of a button matrix.
- - - - diff --git a/docs/Doxygen/d9/d4f/LEDs_8hpp.html b/docs/Doxygen/d9/d4f/LEDs_8hpp.html deleted file mode 100644 index 8a22bc996..000000000 --- a/docs/Doxygen/d9/d4f/LEDs_8hpp.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -Arduino Helpers: LEDs.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
LEDs.hpp File Reference
-
-
-
-Include dependency graph for LEDs.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - -

-Classes

class  LEDs< N >
 A class for collections of LEDs that can display ranges. More...
 
-
- - - - diff --git a/docs/Doxygen/d9/d4f/LEDs_8hpp_source.html b/docs/Doxygen/d9/d4f/LEDs_8hpp_source.html deleted file mode 100644 index 0b66765d3..000000000 --- a/docs/Doxygen/d9/d4f/LEDs_8hpp_source.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - -Arduino Helpers: LEDs.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
LEDs.hpp
-
-
-Go to the documentation of this file.
1 /* ✔ */
-
2 
-
3 #pragma once
-
4 
- -
6 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
7 
-
8 #include <AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.hpp>
-
9 
- -
11 
-
20 template <uint8_t N>
-
21 class LEDs {
-
22  public:
- -
30 
-
34  void begin() const {
-
35  for (const pin_t &pin : ledPins)
-
36  ExtIO::pinMode(pin, OUTPUT);
-
37  }
-
38 
-
48  void displayRange(uint8_t startOn, uint8_t startOff) const {
-
49  for (uint8_t pin = 0; pin < startOn; pin++)
-
50  clear(pin);
-
51  for (uint8_t pin = startOn; pin < startOff; pin++)
-
52  set(pin);
-
53  for (uint8_t pin = startOff; pin < N; pin++)
-
54  clear(pin);
-
55  }
-
56 
-
58  void set(uint8_t index) const {
-
59  // TODO: bounds check?
- -
61  }
-
62 
-
64  void clear(uint8_t index) const {
-
65  // TODO: bounds check?
- -
67  }
-
68 
-
75  void displayDot(uint8_t led) const { displayRange(led, led + 1); }
-
76 
-
80  void clear() const {
-
81  for (pin_t pin : ledPins)
- -
83  }
-
84 
-
85  private:
- -
87 };
-
88 
- -
90 
- -
-
#define BEGIN_AH_NAMESPACE
- -
void set(uint8_t index) const
Turn on the given LED.
Definition: LEDs.hpp:58
-
void digitalWrite(pin_t pin, uint8_t val)
An ExtIO version of the Arduino function.
-
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
- -
const uint8_t HIGH
-
void begin() const
Initialize (set LED pins as outputs).
Definition: LEDs.hpp:34
-
void clear() const
Turn off all LEDs.
Definition: LEDs.hpp:80
-
LEDs(const PinList< N > &ledPins)
Create a LEDs object.
Definition: LEDs.hpp:29
-
const uint8_t LOW
-
A class for collections of LEDs that can display ranges.
Definition: LEDs.hpp:21
-
void pinMode(pin_t pin, uint8_t mode)
An ExtIO version of the Arduino function.
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
void displayRange(uint8_t startOn, uint8_t startOff) const
Turn on a range of the LEDs.
Definition: LEDs.hpp:48
-
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
-
const PinList< N > ledPins
Definition: LEDs.hpp:86
-
#define END_AH_NAMESPACE
-
void displayDot(uint8_t led) const
Turn on a single LED, and turn off all others.
Definition: LEDs.hpp:75
-
const uint8_t OUTPUT
-
void clear(uint8_t index) const
Turn off the given LED.
Definition: LEDs.hpp:64
- - - - diff --git a/docs/Doxygen/d9/d54/classMAX7219__inherit__graph.map b/docs/Doxygen/d9/d54/classMAX7219__inherit__graph.map deleted file mode 100644 index 1885b5337..000000000 --- a/docs/Doxygen/d9/d54/classMAX7219__inherit__graph.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/Doxygen/d9/d54/classMAX7219__inherit__graph.md5 b/docs/Doxygen/d9/d54/classMAX7219__inherit__graph.md5 deleted file mode 100644 index b325ed295..000000000 --- a/docs/Doxygen/d9/d54/classMAX7219__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -1aedfca42e508eab7aee8d13460308a9 \ No newline at end of file diff --git a/docs/Doxygen/d9/d54/classMAX7219__inherit__graph.svg b/docs/Doxygen/d9/d54/classMAX7219__inherit__graph.svg deleted file mode 100644 index 049d75be9..000000000 --- a/docs/Doxygen/d9/d54/classMAX7219__inherit__graph.svg +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - -MAX7219 - - -Node1 - - -MAX7219 - -- buffer - -+ MAX7219() -+ begin() -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogRead() -+ analogWrite() -+ update() - - - - -Node2 - - -MAX7219_Base - -+ DECODEMODE -+ INTENSITY -+ SCANLIMIT -+ SHUTDOWN -+ DISPLAYTEST -- loadPin -- settings - -+ MAX7219_Base() -+ init() -+ clear() -+ send() -+ sendRaw() -+ setIntensity() - - - - -Node2->Node1 - - - - -Node3 - - -StaticSizeExtendedIOElement -< 8 *8 > - - - -+ pins() -+ length() -# StaticSizeExtendedIOElement() - - - - -Node3->Node1 - - - - -Node4 - - -ExtendedIOElement - -- length -- start -- end -- offset -- elements - -+ ~ExtendedIOElement() -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogWrite() -+ analogRead() -+ begin() -+ update() -+ pin() -+ operator[]() -+ getLength() -+ getEnd() -+ getStart() -+ beginAll() -+ getAll() -# ExtendedIOElement() - - - - -Node4->Node3 - - - - -Node5 - - -DoublyLinkable< Extended -IOElement > - -# next -# previous - -# ~DoublyLinkable() - - - - -Node5->Node4 - - - - - diff --git a/docs/Doxygen/d9/d5f/1_8SPI-Blink_8ino-example.html b/docs/Doxygen/d9/d5f/1_8SPI-Blink_8ino-example.html deleted file mode 100644 index e869b0a5e..000000000 --- a/docs/Doxygen/d9/d5f/1_8SPI-Blink_8ino-example.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - - -Arduino Helpers: 1.SPI-Blink.ino - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
1.SPI-Blink.ino
-
-
-

-1.SPI-Blink

-

This example demonstrates the use of shift registers as if they were just normal IO pins. The SPI interface is used because it's easy and fast.

-
Boards:
AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32
-

-Connections

-
    -
  • SS: 74HC595 ST_CP
  • -
  • MOSI: 74HC595 DS
  • -
  • SCK: 74HC595 SH_CP
  • -
-

Connect an LED (and series resistor) between the first output of the shift register and ground.

-

Remember to connect the enable pin of the shift register to ground and the master reset pin to Vcc in order to enable it.
-

-

-Behavior

-

This sketch will blink the LED once a second.

-

Written by PieterP, 2018-09-01 https://github.com/tttapa/Arduino-Helpers

-
-
#include <Arduino_Helpers.h> // Include the Arduino Helpers library.
- -
-
using namespace ExtIO; // Bring the ExtIO pin functions into your sketch
-
-
// Instantiate a shift register with the SPI slave select pin as latch pin, most
-
// significant bit first, and a total of 8 outputs.
-
SPIShiftRegisterOut<8> sreg = {SS, MSBFIRST};
-
-
const pin_t ledPin = sreg.pin(0); // first pin of the shift register
-
-
void setup() {
-
sreg.begin(); // Initialize the shift registers
-
pinMode(ledPin, OUTPUT); // You don't even need this line, since
-
// shift registers are always outputs
-
}
-
-
void loop() {
-
// Toggle the state of the LED every 1/2 second
-
digitalWrite(ledPin, HIGH);
-
delay(500);
-
digitalWrite(ledPin, LOW);
-
delay(500);
-
}
-
-
void begin() override
Initialize the shift register.
-
void digitalWrite(pin_t pin, uint8_t val)
An ExtIO version of the Arduino function.
-
A class for serial-in/parallel-out shift registers, like the 74HC595 that are connected to the SPI bu...
-
pin_t pin(pin_t pin) const
Get the extended IO pin number of a given physical pin of this extended IO element.
- -
const uint8_t HIGH
-
const uint8_t LOW
-
A namespace with alternatives to the standard Arduino IO functions that can be used with extended IO ...
-
void pinMode(pin_t pin, uint8_t mode)
An ExtIO version of the Arduino function.
-
Dummy header file for Arduino builder. You have to add this file first, so the other headers are in t...
-
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
-
const uint8_t OUTPUT
- - - - diff --git a/docs/Doxygen/d9/d7b/structSetbase__coll__graph.map b/docs/Doxygen/d9/d7b/structSetbase__coll__graph.map deleted file mode 100644 index 817290e36..000000000 --- a/docs/Doxygen/d9/d7b/structSetbase__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/d9/d7b/structSetbase__coll__graph.md5 b/docs/Doxygen/d9/d7b/structSetbase__coll__graph.md5 deleted file mode 100644 index c47cc41cd..000000000 --- a/docs/Doxygen/d9/d7b/structSetbase__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -5f551799c76add77b143d030b902d058 \ No newline at end of file diff --git a/docs/Doxygen/d9/d7b/structSetbase__coll__graph.svg b/docs/Doxygen/d9/d7b/structSetbase__coll__graph.svg deleted file mode 100644 index 0ceea8731..000000000 --- a/docs/Doxygen/d9/d7b/structSetbase__coll__graph.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - -Setbase - - -Node1 - - -Setbase - -+ M_base - - - - - - - diff --git a/docs/Doxygen/d9/d7c/structArray-members.html b/docs/Doxygen/d9/d7c/structArray-members.html deleted file mode 100644 index 399f723c7..000000000 --- a/docs/Doxygen/d9/d7c/structArray-members.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Array< T, N > Member List
-
-
- -

This is the complete list of members for Array< T, N >, including all inherited members.

- - - - - - - - - - - - - - - -
begin()Array< T, N >inline
begin() constArray< T, N >inline
cslice() constArray< T, N >inline
dataArray< T, N >
end()Array< T, N >inline
end() constArray< T, N >inline
lengthArray< T, N >static
operator!=(const Array< T, N > &rhs) constArray< T, N >inline
operator==(const Array< T, N > &rhs) constArray< T, N >inline
operator[](size_t index)Array< T, N >inline
operator[](size_t index) constArray< T, N >inline
slice()Array< T, N >
slice() constArray< T, N >
type typedefArray< T, N >
- - - - diff --git a/docs/Doxygen/d9/d93/examples_8dox.html b/docs/Doxygen/d9/d93/examples_8dox.html deleted file mode 100644 index 725393e98..000000000 --- a/docs/Doxygen/d9/d93/examples_8dox.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: examples.dox File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
examples.dox File Reference
-
-
-
- - - - diff --git a/docs/Doxygen/d9/d98/TeensyUSBTypes_8hpp.html b/docs/Doxygen/d9/d98/TeensyUSBTypes_8hpp.html deleted file mode 100644 index 746432310..000000000 --- a/docs/Doxygen/d9/d98/TeensyUSBTypes_8hpp.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - -Arduino Helpers: TeensyUSBTypes.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
TeensyUSBTypes.hpp File Reference
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

-
- - - - diff --git a/docs/Doxygen/d9/d98/TeensyUSBTypes_8hpp_source.html b/docs/Doxygen/d9/d98/TeensyUSBTypes_8hpp_source.html deleted file mode 100644 index f94d37673..000000000 --- a/docs/Doxygen/d9/d98/TeensyUSBTypes_8hpp_source.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Arduino Helpers: TeensyUSBTypes.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
TeensyUSBTypes.hpp
-
-
-Go to the documentation of this file.
1 #pragma once
-
2 
-
3 #ifdef TEENSYDUINO
-
4 
-
5 #if defined(USB_MIDI_SERIAL) || defined(USB_MIDI4_SERIAL) || \
-
6  defined(USB_MIDI16_SERIAL) || defined(USB_MIDI_AUDIO_SERIAL) || \
-
7  defined(USB_MIDI16_AUDIO_SERIAL) || defined(USB_MIDI) || \
-
8  defined(USB_MIDI4) || defined(USB_MIDI16) || defined(USB_EVERYTHING)
-
9 #define TEENSY_MIDIUSB_ENABLED
-
10 #endif
-
11 
-
12 #if defined(USB_MIDI_SERIAL) || defined(USB_MIDI4_SERIAL) || \
-
13  defined(USB_MIDI16_SERIAL) || defined(USB_MIDI_AUDIO_SERIAL) || \
-
14  defined(USB_MIDI16_AUDIO_SERIAL) || defined(USB_SERIAL_HID) || \
-
15  defined(USB_EVERYTHING) || defined(USB_SERIAL)
-
16 #define TEENSY_SERIALUSB_ENABLED
-
17 #endif
-
18 
-
19 #if defined(USB_MIDI_AUDIO_SERIAL) || defined(USB_MIDI16_AUDIO_SERIAL) || \
-
20  defined(USB_AUDIO) || defined(USB_EVERYTHING)
-
21 #define TEENSY_AUDIOUSB_ENABLED
-
22 #endif
-
23 
-
24 #endif
-
- - - - diff --git a/docs/Doxygen/d9/d9d/classButtonMatrix__coll__graph.map b/docs/Doxygen/d9/d9d/classButtonMatrix__coll__graph.map deleted file mode 100644 index 20db47e0f..000000000 --- a/docs/Doxygen/d9/d9d/classButtonMatrix__coll__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/Doxygen/d9/d9d/classButtonMatrix__coll__graph.md5 b/docs/Doxygen/d9/d9d/classButtonMatrix__coll__graph.md5 deleted file mode 100644 index 9f0840688..000000000 --- a/docs/Doxygen/d9/d9d/classButtonMatrix__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -5a2e3c96586f0ac7e3fac6462d19511c \ No newline at end of file diff --git a/docs/Doxygen/d9/d9d/classButtonMatrix__coll__graph.svg b/docs/Doxygen/d9/d9d/classButtonMatrix__coll__graph.svg deleted file mode 100644 index 725dc2ce8..000000000 --- a/docs/Doxygen/d9/d9d/classButtonMatrix__coll__graph.svg +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - -ButtonMatrix< nb_rows, nb_cols > - - -Node1 - - -ButtonMatrix< nb_rows, - nb_cols > - -- prevRefresh -- prevStates - -+ ButtonMatrix() -+ ~ButtonMatrix() -+ begin() -+ update() -+ getPrevState() -- onButtonChanged() -- setPrevState() -- positionToBits() -- bitsToIndex() -- bitsToBitmask() - - - - -Node2 - - -Array< nb_rows > - -+ data -+ length - -+ operator[]() -+ operator[]() -+ begin() -+ begin() -+ end() -+ end() -+ operator==() -+ operator!=() -+ slice() -+ slice() -+ cslice() - - - - -Node2->Node1 - - - -rowPins - - -Node3 - - -Array< nb_cols > - -+ data -+ length - -+ operator[]() -+ operator[]() -+ begin() -+ begin() -+ end() -+ end() -+ operator==() -+ operator!=() -+ slice() -+ slice() -+ cslice() - - - - -Node3->Node1 - - - -colPins - - - diff --git a/docs/Doxygen/d9/db3/ButtonMatrix_8cpp.html b/docs/Doxygen/d9/db3/ButtonMatrix_8cpp.html deleted file mode 100644 index 6a7b49c79..000000000 --- a/docs/Doxygen/d9/db3/ButtonMatrix_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: ButtonMatrix.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ButtonMatrix.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/d9/db3/ButtonMatrix_8cpp_source.html b/docs/Doxygen/d9/db3/ButtonMatrix_8cpp_source.html deleted file mode 100644 index ccab0e018..000000000 --- a/docs/Doxygen/d9/db3/ButtonMatrix_8cpp_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Arduino Helpers: ButtonMatrix.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ButtonMatrix.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
-
2 #include "ButtonMatrix.hpp"
-
3 #endif
-
- - - - - diff --git a/docs/Doxygen/d9/dc5/ButtonMatrix_8hpp__dep__incl.map b/docs/Doxygen/d9/dc5/ButtonMatrix_8hpp__dep__incl.map deleted file mode 100644 index 43268dcad..000000000 --- a/docs/Doxygen/d9/dc5/ButtonMatrix_8hpp__dep__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/d9/dc5/ButtonMatrix_8hpp__dep__incl.md5 b/docs/Doxygen/d9/dc5/ButtonMatrix_8hpp__dep__incl.md5 deleted file mode 100644 index 24c1801ce..000000000 --- a/docs/Doxygen/d9/dc5/ButtonMatrix_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -b57a2990859363f6d94ccd591c6dc87e \ No newline at end of file diff --git a/docs/Doxygen/d9/dc5/ButtonMatrix_8hpp__dep__incl.svg b/docs/Doxygen/d9/dc5/ButtonMatrix_8hpp__dep__incl.svg deleted file mode 100644 index 6a8dff546..000000000 --- a/docs/Doxygen/d9/dc5/ButtonMatrix_8hpp__dep__incl.svg +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - -ButtonMatrix.hpp - - -Node1 - - -ButtonMatrix.hpp - - - - -Node2 - - -ButtonMatrix.ipp - - - - -Node1->Node2 - - - - -Node2->Node1 - - - - - diff --git a/docs/Doxygen/d9/dc8/ExtIO_8dox.html b/docs/Doxygen/d9/dc8/ExtIO_8dox.html deleted file mode 100644 index 9095ffdfc..000000000 --- a/docs/Doxygen/d9/dc8/ExtIO_8dox.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: ExtIO.dox File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
ExtIO.dox File Reference
-
-
-
- - - - diff --git a/docs/Doxygen/d9/dcf/SettingsWrapper_8cpp.html b/docs/Doxygen/d9/dcf/SettingsWrapper_8cpp.html deleted file mode 100644 index cafecd027..000000000 --- a/docs/Doxygen/d9/dcf/SettingsWrapper_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: SettingsWrapper.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
SettingsWrapper.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/d9/dcf/SettingsWrapper_8cpp_source.html b/docs/Doxygen/d9/dcf/SettingsWrapper_8cpp_source.html deleted file mode 100644 index 224d3532e..000000000 --- a/docs/Doxygen/d9/dcf/SettingsWrapper_8cpp_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Arduino Helpers: SettingsWrapper.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
SettingsWrapper.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
-
2 #include "SettingsWrapper.hpp"
-
3 #endif
-
- - - - - diff --git a/docs/Doxygen/d9/dd6/classShiftRegisterOut-members.html b/docs/Doxygen/d9/dd6/classShiftRegisterOut-members.html deleted file mode 100644 index ca2567892..000000000 --- a/docs/Doxygen/d9/dd6/classShiftRegisterOut-members.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
ShiftRegisterOut< N > Member List
-
-
- -

This is the complete list of members for ShiftRegisterOut< N >, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
analogRead(pin_t pin) override __attribute__((deprecated))ShiftRegisterOutBase< N >inlinevirtual
analogWrite(pin_t pin, analog_t val) override __attribute__((deprecated))ShiftRegisterOutBase< N >inlinevirtual
begin() overrideShiftRegisterOut< N >virtual
beginAll()ExtendedIOElementstatic
bitOrderShiftRegisterOutBase< N >protected
BitOrder_t typedefShiftRegisterOut< N >
blue(pin_t id)ShiftRegisterOutBase< N >
bluePins()ShiftRegisterOutBase< N >
bufferShiftRegisterOutBase< N >protected
clockPinShiftRegisterOut< N >private
dataPinShiftRegisterOut< N >private
digitalRead(pin_t pin) overrideShiftRegisterOutBase< N >virtual
digitalWrite(pin_t pin, uint8_t val) overrideShiftRegisterOutBase< N >virtual
dirtyShiftRegisterOutBase< N >protected
elementsExtendedIOElementprivatestatic
endExtendedIOElementprivate
ExtendedIOElement(pin_t length)ExtendedIOElementprotected
getAll()ExtendedIOElementstatic
getEnd() constExtendedIOElement
getLength() constExtendedIOElement
getStart() constExtendedIOElement
green(pin_t id)ShiftRegisterOutBase< N >
greenPins()ShiftRegisterOutBase< N >
latchPinShiftRegisterOutBase< N >protected
length()StaticSizeExtendedIOElement< N >inlinestatic
nextDoublyLinkable< ExtendedIOElement >protected
offsetExtendedIOElementprivatestatic
operator[](pin_t pin) constExtendedIOElement
pin(pin_t pin) constExtendedIOElement
pinMode(pin_t pin, uint8_t mode) override __attribute__((deprecated))ShiftRegisterOutBase< N >inlinevirtual
pins() constStaticSizeExtendedIOElement< N >inline
previousDoublyLinkable< ExtendedIOElement >protected
red(pin_t id)ShiftRegisterOutBase< N >
redPins()ShiftRegisterOutBase< N >
ShiftRegisterOut(pin_t dataPin, pin_t clockPin, pin_t latchPin, BitOrder_t bitOrder=MSBFIRST)ShiftRegisterOut< N >
ShiftRegisterOutBase(pin_t latchPin, BitOrder_t bitOrder)ShiftRegisterOutBase< N >protected
startExtendedIOElementprivate
StaticSizeExtendedIOElement()StaticSizeExtendedIOElement< N >inlineprotected
update() overrideShiftRegisterOut< N >virtual
~DoublyLinkable()=defaultDoublyLinkable< ExtendedIOElement >protectedvirtual
~ExtendedIOElement()ExtendedIOElementvirtual
- - - - diff --git a/docs/Doxygen/d9/de7/classSPIShiftRegisterOut__inherit__graph.map b/docs/Doxygen/d9/de7/classSPIShiftRegisterOut__inherit__graph.map deleted file mode 100644 index 7b632ab34..000000000 --- a/docs/Doxygen/d9/de7/classSPIShiftRegisterOut__inherit__graph.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/Doxygen/d9/de7/classSPIShiftRegisterOut__inherit__graph.md5 b/docs/Doxygen/d9/de7/classSPIShiftRegisterOut__inherit__graph.md5 deleted file mode 100644 index 410834d07..000000000 --- a/docs/Doxygen/d9/de7/classSPIShiftRegisterOut__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -86f1b5711d97e17149771f86e7aebbaf \ No newline at end of file diff --git a/docs/Doxygen/d9/de7/classSPIShiftRegisterOut__inherit__graph.svg b/docs/Doxygen/d9/de7/classSPIShiftRegisterOut__inherit__graph.svg deleted file mode 100644 index dbacc8072..000000000 --- a/docs/Doxygen/d9/de7/classSPIShiftRegisterOut__inherit__graph.svg +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - -SPIShiftRegisterOut< N > - - -Node1 - - -SPIShiftRegisterOut< N > - - - -+ SPIShiftRegisterOut() -+ begin() -+ update() - - - - -Node2 - - -ShiftRegisterOutBase< N > - -# latchPin -# bitOrder -# buffer -# dirty - -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogRead() -+ analogWrite() -+ red() -+ redPins() -+ green() -+ greenPins() -+ blue() -+ bluePins() -# ShiftRegisterOutBase() - - - - -Node2->Node1 - - - - -Node3 - - -StaticSizeExtendedIOElement< N > - - - -+ pins() -+ length() -# StaticSizeExtendedIOElement() - - - - -Node3->Node2 - - - - -Node4 - - -ExtendedIOElement - -- length -- start -- end -- offset -- elements - -+ ~ExtendedIOElement() -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogWrite() -+ analogRead() -+ begin() -+ update() -+ pin() -+ operator[]() -+ getLength() -+ getEnd() -+ getStart() -+ beginAll() -+ getAll() -# ExtendedIOElement() - - - - -Node4->Node3 - - - - -Node5 - - -DoublyLinkable< Extended -IOElement > - -# next -# previous - -# ~DoublyLinkable() - - - - -Node5->Node4 - - - - - diff --git a/docs/Doxygen/d9/de7/classShiftRegisterOut__inherit__graph.map b/docs/Doxygen/d9/de7/classShiftRegisterOut__inherit__graph.map deleted file mode 100644 index 737975380..000000000 --- a/docs/Doxygen/d9/de7/classShiftRegisterOut__inherit__graph.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/Doxygen/d9/de7/classShiftRegisterOut__inherit__graph.md5 b/docs/Doxygen/d9/de7/classShiftRegisterOut__inherit__graph.md5 deleted file mode 100644 index 1fbfa3d08..000000000 --- a/docs/Doxygen/d9/de7/classShiftRegisterOut__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -b2ba500c7130bc4e8f740974ef2c02d8 \ No newline at end of file diff --git a/docs/Doxygen/d9/de7/classShiftRegisterOut__inherit__graph.svg b/docs/Doxygen/d9/de7/classShiftRegisterOut__inherit__graph.svg deleted file mode 100644 index 8dae84a6a..000000000 --- a/docs/Doxygen/d9/de7/classShiftRegisterOut__inherit__graph.svg +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - -ShiftRegisterOut< N > - - -Node1 - - -ShiftRegisterOut< N > - -- dataPin -- clockPin - -+ ShiftRegisterOut() -+ begin() -+ update() - - - - -Node2 - - -ShiftRegisterOutBase< N > - -# latchPin -# bitOrder -# buffer -# dirty - -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogRead() -+ analogWrite() -+ red() -+ redPins() -+ green() -+ greenPins() -+ blue() -+ bluePins() -# ShiftRegisterOutBase() - - - - -Node2->Node1 - - - - -Node3 - - -StaticSizeExtendedIOElement< N > - - - -+ pins() -+ length() -# StaticSizeExtendedIOElement() - - - - -Node3->Node2 - - - - -Node4 - - -ExtendedIOElement - -- length -- start -- end -- offset -- elements - -+ ~ExtendedIOElement() -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogWrite() -+ analogRead() -+ begin() -+ update() -+ pin() -+ operator[]() -+ getLength() -+ getEnd() -+ getStart() -+ beginAll() -+ getAll() -# ExtendedIOElement() - - - - -Node4->Node3 - - - - -Node5 - - -DoublyLinkable< Extended -IOElement > - -# next -# previous - -# ~DoublyLinkable() - - - - -Node5->Node4 - - - - - diff --git a/docs/Doxygen/d9/df7/Arduino__Helpers_8dox.html b/docs/Doxygen/d9/df7/Arduino__Helpers_8dox.html deleted file mode 100644 index e141f075b..000000000 --- a/docs/Doxygen/d9/df7/Arduino__Helpers_8dox.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Arduino_Helpers.dox File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Arduino_Helpers.dox File Reference
-
-
-
- - - - diff --git a/docs/Doxygen/da/d00/classDotBarDisplayLEDs-members.html b/docs/Doxygen/da/d00/classDotBarDisplayLEDs-members.html deleted file mode 100644 index c04b6d9e0..000000000 --- a/docs/Doxygen/da/d00/classDotBarDisplayLEDs-members.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
DotBarDisplayLEDs< N > Member List
-
-
- -

This is the complete list of members for DotBarDisplayLEDs< N >, including all inherited members.

- - - - - - - - - - - - - - - - - - -
barMode()DotBarDisplayLEDs< N >inline
begin() constLEDs< N >inline
clear(uint8_t index) constLEDs< N >inline
clear() constLEDs< N >inline
display(uint8_t value) constDotBarDisplayLEDs< N >inline
display(float value) constDotBarDisplayLEDs< N >inline
displayDot(uint8_t led) constLEDs< N >inline
displayRange(uint8_t startOn, uint8_t startOff) constLEDs< N >inline
DotBarDisplayLEDs(const PinList< N > &ledPins)DotBarDisplayLEDs< N >inline
dotMode()DotBarDisplayLEDs< N >inline
getMode() constDotBarDisplayLEDs< N >inline
ledPinsLEDs< N >private
LEDs(const PinList< N > &ledPins)LEDs< N >inline
modeDotBarDisplayLEDs< N >private
set(uint8_t index) constLEDs< N >inline
setMode(DotBarMode mode)DotBarDisplayLEDs< N >inline
toggleMode()DotBarDisplayLEDs< N >inline
- - - - diff --git a/docs/Doxygen/da/d06/Error_8cpp.html b/docs/Doxygen/da/d06/Error_8cpp.html deleted file mode 100644 index c2d505aa2..000000000 --- a/docs/Doxygen/da/d06/Error_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: Error.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Error.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/da/d06/Error_8cpp_source.html b/docs/Doxygen/da/d06/Error_8cpp_source.html deleted file mode 100644 index df8ea6098..000000000 --- a/docs/Doxygen/da/d06/Error_8cpp_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Arduino Helpers: Error.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Error.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
-
2 #include "Error.hpp"
-
3 #endif
-
- - - - - diff --git a/docs/Doxygen/da/d1f/ExtendedIOElement_8cpp.html b/docs/Doxygen/da/d1f/ExtendedIOElement_8cpp.html deleted file mode 100644 index e1e432c04..000000000 --- a/docs/Doxygen/da/d1f/ExtendedIOElement_8cpp.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - -Arduino Helpers: ExtendedIOElement.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ExtendedIOElement.cpp File Reference
-
-
-
#include <AH/Settings/Warnings.hpp>
-#include "ExtendedIOElement.hpp"
-#include <AH/Error/Error.hpp>
-#include <AH/STL/type_traits>
-
-Include dependency graph for ExtendedIOElement.cpp:
-
-
-
-
-

Go to the source code of this file.

-
- - - - diff --git a/docs/Doxygen/da/d1f/ExtendedIOElement_8cpp_source.html b/docs/Doxygen/da/d1f/ExtendedIOElement_8cpp_source.html deleted file mode 100644 index 0d95a1bf1..000000000 --- a/docs/Doxygen/da/d1f/ExtendedIOElement_8cpp_source.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - - -Arduino Helpers: ExtendedIOElement.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ExtendedIOElement.cpp
-
-
-Go to the documentation of this file.
-
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 
- -
9 
- -
11  : length(length), start(offset), end(offset + length) {
-
12  if (end < start)
-
13  FATAL_ERROR(F("ExtIO ran out of pin numbers. "
-
14  "Dynamically creating new ExtendedIOElements is not "
-
15  "recommended."),
-
16  0x00FF);
-
17  offset = end;
-
18  elements.append(this);
-
19 }
-
20 
- -
22 
- -
24  for (ExtendedIOElement &e : elements)
-
25  e.begin();
-
26 }
-
27 
- -
29  if (p >= length) {
-
30  static_assert(std::is_unsigned<pin_t>::value,
-
31  "Error: pin_t should be an unsigned integer type");
-
32  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  return p + start;
-
41 }
-
42 
- -
44 
- -
46 
-
47 pin_t ExtendedIOElement::getEnd() const { return end; }
-
48 
- -
50 
- -
52  return elements;
-
53 }
-
54 
- -
56 
-
57 pin_t ExtendedIOElement::offset = NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS;
-
58 
- -
60 
- -
-
#define BEGIN_AH_NAMESPACE
-
static void beginAll()
Initialize all extended IO elements.
- - -
pin_t getEnd() const
Get the largest global extended IO pin number that belongs to this extended IO element.
-
pin_t pin(pin_t pin) const
Get the extended IO pin number of a given physical pin of this extended IO element.
-
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
ExtendedIOElement(pin_t length)
Create an ExtendedIOElement with the given number of pins.
-
#define FATAL_ERROR(msg, errc)
Print the error message and error code, and stop the execution.
Definition: Error.hpp:60
-
void append(Node *node)
Append a node to a linked list.
Definition: LinkedList.hpp:117
-
#define ERROR(msg, errc)
Print the error message and error code, and stop the execution if FATAL_ERRORS are enabled.
Definition: Error.hpp:42
-
pin_t getStart() const
Get the smallest global extended IO pin number that belongs to this extended IO element.
- -
void remove(Node *node)
Remove a node from the linked list.
Definition: LinkedList.hpp:200
- -
An abstract base class for Extended Input/Output elements.
-
static DoublyLinkedList< ExtendedIOElement > elements
-
static DoublyLinkedList< ExtendedIOElement > & getAll()
Get the list of all Extended IO elements.
- - - - -
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
-
#define END_AH_NAMESPACE
-
pin_t operator[](pin_t pin) const
Get the extended IO pin number of a given physical pin of this extended IO element.
-
pin_t getLength() const
Get the number of pins this IO element has.
- - - - diff --git a/docs/Doxygen/da/d45/SPIShiftRegisterOut_8ipp.html b/docs/Doxygen/da/d45/SPIShiftRegisterOut_8ipp.html deleted file mode 100644 index 3f656c45a..000000000 --- a/docs/Doxygen/da/d45/SPIShiftRegisterOut_8ipp.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - -Arduino Helpers: SPIShiftRegisterOut.ipp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
SPIShiftRegisterOut.ipp File Reference
-
-
-
#include "ExtendedInputOutput.hpp"
-#include "SPIShiftRegisterOut.hpp"
-#include <SPI.h>
-
-Include dependency graph for SPIShiftRegisterOut.ipp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

-
- - - - diff --git a/docs/Doxygen/da/d45/SPIShiftRegisterOut_8ipp_source.html b/docs/Doxygen/da/d45/SPIShiftRegisterOut_8ipp_source.html deleted file mode 100644 index 67231b42c..000000000 --- a/docs/Doxygen/da/d45/SPIShiftRegisterOut_8ipp_source.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - - -Arduino Helpers: SPIShiftRegisterOut.ipp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
SPIShiftRegisterOut.ipp
-
-
-Go to the documentation of this file.
1 #ifdef ARDUINO // I'm too lazy to mock the SPI library
-
2 
- - -
5 
- -
7 #include <SPI.h>
- -
9 
- -
11 
-
12 template <uint8_t N>
- -
14  : ShiftRegisterOutBase<N>(latchPin, bitOrder) {}
-
15 
-
16 template <uint8_t N>
- -
18  ExtIO::pinMode(this->latchPin, OUTPUT);
-
19  SPI.begin();
-
20  update();
-
21 }
-
22 
-
23 template <uint8_t N>
- -
25  if (!this->dirty)
-
26  return;
-
27  SPISettings settings = {SPI_MAX_SPEED, this->bitOrder, SPI_MODE0};
-
28  SPI.beginTransaction(settings);
-
29  ExtIO::digitalWrite(this->latchPin, LOW);
-
30  const uint8_t bufferLength = this->buffer.getBufferLength();
-
31  if (this->bitOrder == LSBFIRST)
-
32  for (uint8_t i = 0; i < bufferLength; i++)
-
33  SPI.transfer(this->buffer.getByte(i));
-
34  else
-
35  for (int8_t i = bufferLength - 1; i >= 0; i--)
-
36  SPI.transfer(this->buffer.getByte(i));
-
37  ExtIO::digitalWrite(this->latchPin, HIGH);
-
38  SPI.endTransaction();
-
39  this->dirty = false;
-
40 }
-
41 
- -
43 
-
44 #endif
-
-
#define BEGIN_AH_NAMESPACE
-
void begin() override
Initialize the shift register.
-
void digitalWrite(pin_t pin, uint8_t val)
An ExtIO version of the Arduino function.
-
A class for serial-in/parallel-out shift registers, like the 74HC595 that are connected to the SPI bu...
- - -
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
const uint8_t HIGH
-
A class for serial-in/parallel-out shift registers, like the 74HC595.
-
void update() override
Write the state buffer to the physical outputs.
-
const uint8_t LOW
-
#define AH_DIAGNOSTIC_EXTERNAL_HEADER()
Definition: Warnings.hpp:18
-
constexpr static Frequency SPI_MAX_SPEED
Definition: Settings.hpp:85
-
void pinMode(pin_t pin, uint8_t mode)
An ExtIO version of the Arduino function.
-
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
-
#define END_AH_NAMESPACE
-
const uint8_t OUTPUT
- - - - - diff --git a/docs/Doxygen/da/d66/IncrementDecrementButtons_8cpp.html b/docs/Doxygen/da/d66/IncrementDecrementButtons_8cpp.html deleted file mode 100644 index fa21264e9..000000000 --- a/docs/Doxygen/da/d66/IncrementDecrementButtons_8cpp.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - -Arduino Helpers: IncrementDecrementButtons.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
IncrementDecrementButtons.cpp File Reference
-
-
-
-Include dependency graph for IncrementDecrementButtons.cpp:
-
-
-
-
-

Go to the source code of this file.

-
- - - - diff --git a/docs/Doxygen/da/d66/IncrementDecrementButtons_8cpp_source.html b/docs/Doxygen/da/d66/IncrementDecrementButtons_8cpp_source.html deleted file mode 100644 index 7c6d7c3f6..000000000 --- a/docs/Doxygen/da/d66/IncrementDecrementButtons_8cpp_source.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - - -Arduino Helpers: IncrementDecrementButtons.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
IncrementDecrementButtons.cpp
-
-
-Go to the documentation of this file.
-
2 
-
3 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
4 
- -
6 
- -
8 IncrementDecrementButtons::updateImplementation() {
-
9  Button::State incrState = incrementButton.update();
-
10  Button::State decrState = decrementButton.update();
-
11 
-
12  if (decrState == Button::Released && incrState == Button::Released) {
-
13  // Both released
-
14  } else if ((decrState == Button::Rising && incrState == Button::Released) ||
-
15  (incrState == Button::Rising && decrState == Button::Released) ||
-
16  (incrState == Button::Rising && decrState == Button::Rising)) {
-
17  // One released, the other rising → nothing
-
18  // now both released, so go to initial state
-
19  longPressState = Initial;
-
20  } else if (incrState == Button::Falling && decrState == Button::Falling) {
-
21  // Both falling → reset
-
22  // (rather unlikely, but just in case)
-
23  longPressState = AfterReset;
-
24  return Reset;
-
25  } else if (incrState == Button::Falling) {
-
26  if (decrState == Button::Pressed) {
-
27  // One pressed, the other falling → reset
-
28  longPressState = AfterReset;
-
29  return Reset;
-
30  } else {
-
31  // Increment falling, the other released → increment
-
32  return Increment;
-
33  }
-
34  } else if (decrState == Button::Falling) {
-
35  if (incrState == Button::Pressed) {
-
36  // One pressed, the other falling → reset
-
37  longPressState = AfterReset;
-
38  return Reset;
-
39  } else {
-
40  // Decrement falling, the other released → decrement
-
41  return Decrement;
-
42  }
-
43  } else if (incrState == Button::Pressed && decrState == Button::Pressed) {
-
44  // Both pressed → nothing
-
45  } else if (longPressState != AfterReset && incrState == Button::Pressed) {
-
46  // Not reset and increment pressed → long press?
-
47  auto now = millis();
-
48  if (longPressState == LongPress) {
-
49  if (now - longPressRepeat >= LONG_PRESS_REPEAT_DELAY) {
-
50  longPressRepeat += LONG_PRESS_REPEAT_DELAY;
-
51  return Increment;
-
52  }
-
53  } else if (incrementButton.stableTime() >= LONG_PRESS_DELAY) {
-
54  longPressState = LongPress;
-
55  longPressRepeat = now;
-
56  return Increment;
-
57  }
-
58  } else if (longPressState != AfterReset && decrState == Button::Pressed) {
-
59  // Not reset and decrement pressed → long press?
-
60  auto now = millis();
-
61  if (longPressState == LongPress) {
-
62  if (now - longPressRepeat >= LONG_PRESS_REPEAT_DELAY) {
-
63  longPressRepeat += LONG_PRESS_REPEAT_DELAY;
-
64  return Decrement;
-
65  }
-
66  } else if (decrementButton.stableTime() >= LONG_PRESS_DELAY) {
-
67  longPressState = LongPress;
-
68  longPressRepeat = now;
-
69  return Decrement;
-
70  }
-
71  }
-
72  return Nothing;
-
73 }
-
74 
- -
76 
- -
-
#define BEGIN_AH_NAMESPACE
-
Input went from high to low (1,0)
Definition: Button.hpp:56
-
State update()
Update and return the state of the increment/decrement button.
-
Input went from low to low (0,0)
Definition: Button.hpp:54
-
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
constexpr unsigned long LONG_PRESS_REPEAT_DELAY
The time between increments/decremnets during a long press.
Definition: Settings.hpp:80
-
A class for buttons that increment and decrement some counter or setting.
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
#define END_AH_NAMESPACE
-
constexpr unsigned long LONG_PRESS_DELAY
The time in milliseconds before a press is registered as a long press.
Definition: Settings.hpp:77
-
State
An enumeration of the different states a button can be in.
Definition: Button.hpp:53
- -
Input went from low to high (0,1)
Definition: Button.hpp:57
-
Input went from high to high (1,1)
Definition: Button.hpp:55
- - - - diff --git a/docs/Doxygen/da/d69/PrintStream_8cpp.html b/docs/Doxygen/da/d69/PrintStream_8cpp.html deleted file mode 100644 index 73e14f37c..000000000 --- a/docs/Doxygen/da/d69/PrintStream_8cpp.html +++ /dev/null @@ -1,457 +0,0 @@ - - - - - - - -Arduino Helpers: PrintStream.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
PrintStream.cpp File Reference
-
-
-
#include "PrintStream.hpp"
-
-Include dependency graph for PrintStream.cpp:
-
-
-
-
-

Go to the source code of this file.

- - - - -

-Enumerations

enum  : char { LOWERCASE = 0x7F, -UPPERCASE = 0x5F - }
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<class T >
Print & printIntegral (Print &printer, T i)
 
Print & endl (Print &printer)
 
Print & uppercase (Print &printer)
 
Print & nouppercase (Print &printer)
 
Print & showbase (Print &printer)
 
Print & noshowbase (Print &printer)
 
Print & flush (Print &printer)
 
Print & hex (Print &printer)
 
Print & bin (Print &printer)
 
Print & dec (Print &printer)
 
Print & boolalpha (Print &printer)
 
Print & noboolalpha (Print &printer)
 
Print & leadingzeros (Print &printer)
 
Print & noleadingzeros (Print &printer)
 
Print & operator<< (Print &printer, const __FlashStringHelper *s)
 
Print & operator<< (Print &printer, const String &s)
 
Print & operator<< (Print &printer, const char s[])
 
Print & operator<< (Print &printer, char c)
 
Print & operator<< (Print &printer, unsigned char i)
 
Print & operator<< (Print &printer, int i)
 
Print & operator<< (Print &printer, unsigned int i)
 
Print & operator<< (Print &printer, int8_t i)
 
Print & operator<< (Print &printer, long i)
 
Print & operator<< (Print &printer, unsigned long i)
 
Print & operator<< (Print &printer, double d)
 
Print & operator<< (Print &printer, const Printable &p)
 
Print & operator<< (Print &printer, bool b)
 
Print & operator<< (Print &printer, manipulator pf)
 
Setbase setbase (uint8_t base)
 
Print & operator<< (Print &printer, Setbase f)
 
Setbytesep setbytesep (char bytesep)
 
Print & operator<< (Print &printer, Setbytesep f)
 
Setprecision setprecision (int n)
 
Print & operator<< (Print &printer, Setprecision f)
 
static char nibble_to_hex (uint8_t nibble)
 
template<class T >
void printHex (Print &printer, T val)
 
template<class T >
void printBin (Print &printer, T val)
 
- - - - - - - - - - - - - - - -

-Variables

uint8_t formatPrintStream = DEC
 
bool boolalphaPrintStream = false
 
bool leadingZerosPrintStream = false
 
uint8_t precisionPrintStream = 2
 
char byteSeparatorPrintStream = '\0'
 
enum { ... }  casePrintStream = LOWERCASE
 
bool showbasePrintStream = false
 
-

Enumeration Type Documentation

- -

◆ anonymous enum

- -
-
- - - - -
anonymous enum : char
-
- - - -
Enumerator
LOWERCASE 
UPPERCASE 
- -

Definition at line 18 of file PrintStream.cpp.

- -
-
-

Function Documentation

- -

◆ printIntegral()

- -
-
- - - - - - - - - - - - - - - - - - -
Print & printIntegral (Print & printer,
i 
)
-
- -

Definition at line 152 of file PrintStream.cpp.

- -
-
- -

◆ nibble_to_hex()

- -
-
- - - - - -
- - - - - - - - -
static char nibble_to_hex (uint8_t nibble)
-
-static
-
- -

Definition at line 201 of file PrintStream.cpp.

- -
-
- -

◆ printHex()

- -
-
- - - - - - - - - - - - - - - - - - -
void printHex (Print & printer,
val 
)
-
- -

Definition at line 211 of file PrintStream.cpp.

- -
-
- -

◆ printBin()

- -
-
- - - - - - - - - - - - - - - - - - -
void printBin (Print & printer,
val 
)
-
- -

Definition at line 231 of file PrintStream.cpp.

- -
-
-

Variable Documentation

- -

◆ formatPrintStream

- -
-
- - - - -
uint8_t formatPrintStream = DEC
-
- -

Definition at line 13 of file PrintStream.cpp.

- -
-
- -

◆ boolalphaPrintStream

- -
-
- - - - -
bool boolalphaPrintStream = false
-
- -

Definition at line 14 of file PrintStream.cpp.

- -
-
- -

◆ leadingZerosPrintStream

- -
-
- - - - -
bool leadingZerosPrintStream = false
-
- -

Definition at line 15 of file PrintStream.cpp.

- -
-
- -

◆ precisionPrintStream

- -
-
- - - - -
uint8_t precisionPrintStream = 2
-
- -

Definition at line 16 of file PrintStream.cpp.

- -
-
- -

◆ byteSeparatorPrintStream

- -
-
- - - - -
char byteSeparatorPrintStream = '\0'
-
- -

Definition at line 17 of file PrintStream.cpp.

- -
-
- -

◆ casePrintStream

- -
-
- - - - -
enum { ... } casePrintStream
-
- -
-
- -

◆ showbasePrintStream

- -
-
- - - - -
bool showbasePrintStream = false
-
- -

Definition at line 22 of file PrintStream.cpp.

- -
-
-
- - - - diff --git a/docs/Doxygen/da/d69/PrintStream_8cpp_source.html b/docs/Doxygen/da/d69/PrintStream_8cpp_source.html deleted file mode 100644 index 8899982c0..000000000 --- a/docs/Doxygen/da/d69/PrintStream_8cpp_source.html +++ /dev/null @@ -1,387 +0,0 @@ - - - - - - - -Arduino Helpers: PrintStream.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
PrintStream.cpp
-
-
-Go to the documentation of this file.
1 // https://github.com/tttapa/Arduino-PrintStream/blob/6a9e0d365be0b3d84187daa2a8a7bda8d541472e/src/PrintStream.cpp
-
2 
-
3 #include "PrintStream.hpp"
-
4 
-
5 // LCOV_EXCL_START
-
6 
-
7 #if not defined(ARDUINO_ARCH_ESP32) && not defined(ARDUINO_ARCH_SAM)
-
8 #define FLUSH
-
9 #endif
-
10 
-
11  /* #define OCT 8 */
-
12 
-
13 uint8_t formatPrintStream = DEC;
-
14 bool boolalphaPrintStream = false;
- - - -
18 enum : char{
-
19  LOWERCASE = 0x7F,
-
20  UPPERCASE = 0x5F
- -
22 bool showbasePrintStream = false;
-
23 
-
24 template <class T>
-
25 Print &printIntegral(Print &printer, T i);
-
26 
-
27 Print &endl(Print &printer) {
-
28  printer.println();
-
29 #ifdef FLUSH
-
30  printer.flush();
-
31 #endif
-
32  return printer;
-
33 }
-
34 
-
35 Print &uppercase(Print &printer) {
- -
37  return printer;
-
38 }
-
39 
-
40 Print &nouppercase(Print &printer) {
- -
42  return printer;
-
43 }
-
44 
-
45 Print &showbase(Print &printer) {
-
46  showbasePrintStream = true;
-
47  return printer;
-
48 }
-
49 
-
50 Print &noshowbase(Print &printer) {
-
51  showbasePrintStream = false;
-
52  return printer;
-
53 }
-
54 
-
55 Print &flush(Print &printer) {
-
56 #ifdef FLUSH
-
57  printer.flush();
-
58 #endif
-
59  return printer;
-
60 }
-
61 
-
62 Print &hex(Print &printer) {
-
63  formatPrintStream = HEX;
-
64  return printer;
-
65 }
-
66 
-
67 /* Print &oct(Print &printer) {
-
68  formatPrintStream = OCT;
-
69  return printer;
-
70 } */
-
71 
-
72 Print &bin(Print &printer) {
-
73  formatPrintStream = BIN;
-
74  return printer;
-
75 }
-
76 
-
77 Print &dec(Print &printer) {
-
78  formatPrintStream = DEC;
-
79  return printer;
-
80 }
-
81 
-
82 Print &boolalpha(Print &printer) {
-
83  boolalphaPrintStream = true;
-
84  return printer;
-
85 }
-
86 Print &noboolalpha(Print &printer) {
-
87  boolalphaPrintStream = false;
-
88  return printer;
-
89 }
-
90 
-
91 Print &leadingzeros(Print &printer) {
- -
93  return printer;
-
94 }
-
95 Print &noleadingzeros(Print &printer) {
- -
97  return printer;
-
98 }
-
99 Print &operator<<(Print &printer, const __FlashStringHelper *s) {
-
100  printer.print(s);
-
101  return printer;
-
102 }
-
103 #ifdef ARDUINO
-
104 Print &operator<<(Print &printer, const String &s) {
-
105  printer.print(s);
-
106  return printer;
-
107 }
-
108 #endif
-
109 Print &operator<<(Print &printer, const char s[]) {
-
110  printer.print(s);
-
111  return printer;
-
112 }
-
113 Print &operator<<(Print &printer, char c) {
-
114  printer.print(c);
-
115  return printer;
-
116 }
-
117 Print &operator<<(Print &printer, unsigned char i) {
-
118  return printIntegral(printer, i);
-
119 }
-
120 Print &operator<<(Print &printer, int i) {
-
121  return printIntegral(printer, i);
-
122 }
-
123 Print &operator<<(Print &printer, unsigned int i) {
-
124  return printIntegral(printer, i);
-
125 }
-
126 Print &operator<<(Print &printer, int8_t i) {
-
127  return printIntegral(printer, i);
-
128 }
-
129 Print &operator<<(Print &printer, long i) {
-
130  return printIntegral(printer, i);
-
131 }
-
132 Print &operator<<(Print &printer, unsigned long i) {
-
133  return printIntegral(printer, i);
-
134 }
-
135 Print &operator<<(Print &printer, double d) {
-
136  printer.print(d, precisionPrintStream);
-
137  return printer;
-
138 }
-
139 Print &operator<<(Print &printer, const Printable& p) {
-
140  printer.print(p);
-
141  return printer;
-
142 }
-
143 Print &operator<<(Print &printer, bool b) {
- -
145  printer.print(b ? F("true") : F("false"));
-
146  else
-
147  printer.print(b);
-
148  return printer;
-
149 }
-
150 
-
151 template <class T>
-
152 Print &printIntegral(Print &printer, T i) {
-
153  switch (formatPrintStream)
-
154  {
-
155  case DEC:
-
156  printer.print(i);
-
157  break;
-
158  case HEX:
-
159  printHex(printer, i);
-
160  break;
-
161  case BIN:
-
162  printBin(printer, i);
-
163  break;
-
164  /* case OCT:
-
165  printOct(printer, i);
-
166  break; */
-
167  default:
-
168  break;
-
169  }
-
170  return printer;
-
171 }
-
172 
-
173 Print &operator<<(Print &printer, manipulator pf) {
-
174  return pf(printer);
-
175 }
-
176 
-
177 Setbase setbase(uint8_t base) {
-
178  return { base };
-
179 }
-
180 Print &operator<<(Print &printer, Setbase f) {
- -
182  return printer;
-
183 }
-
184 
-
185 Setbytesep setbytesep(char bytesep) {
-
186  return { bytesep };
-
187 }
-
188 Print &operator<<(Print &printer, Setbytesep f) {
- -
190  return printer;
-
191 }
-
192 
- -
194  return { n };
-
195 }
-
196 Print &operator<<(Print &printer, Setprecision f) {
- -
198  return printer;
-
199 }
-
200 
-
201 static char nibble_to_hex(uint8_t nibble) { // convert a 4-bit nibble to a hexadecimal character
-
202  nibble &= 0xF;
-
203  return nibble > 9 ? nibble - 10 + ('a' & casePrintStream) : nibble + '0';
-
204 }
-
205 
-
206 #if __BYTE_ORDER != __LITTLE_ENDIAN
-
207 #error "Byte order not supported"
-
208 #endif
-
209 
-
210 template <class T>
-
211 void printHex(Print &printer, T val)
-
212 {
- -
214  printer.print("0x");
-
215  bool nonZero = false;
-
216  for (int i = sizeof(val) - 1; i >= 0; i--)
-
217  {
-
218  uint8_t currByte = ((uint8_t *)&val)[i];
-
219  if (currByte != 0 || i == 0)
-
220  nonZero = true;
-
221  if (leadingZerosPrintStream || nonZero) {
-
222  printer.print(nibble_to_hex(currByte >> 4));
-
223  printer.print(nibble_to_hex(currByte));
-
224  if (byteSeparatorPrintStream && i)
-
225  printer.print(byteSeparatorPrintStream);
-
226  }
-
227  }
-
228 }
-
229 
-
230 template <class T>
-
231 void printBin(Print &printer, T val)
-
232 {
- -
234  printer.print("0b");
-
235  bool nonZero = false;
-
236  for (int i = sizeof(val) - 1; i >= 0; i--)
-
237  {
-
238  uint8_t currByte = ((uint8_t *)&val)[i];
-
239  for (int j = 7; j >= 0; j--)
-
240  {
-
241  uint8_t currBit = currByte & 0x80;
-
242  if (currBit != 0 || (i == 0 && j == 0))
-
243  nonZero = true;
-
244  if (leadingZerosPrintStream || nonZero)
-
245  printer.print(currBit ? '1' : '0');
-
246  currByte <<= 1;
-
247  }
-
248  if (byteSeparatorPrintStream && i && (leadingZerosPrintStream || nonZero))
-
249  printer.print(byteSeparatorPrintStream);
-
250  }
-
251 }
-
252 
-
253 
-
254 /* template <class T>
-
255 void printOct(Print &printer, T val)
-
256 {
-
257  ; // TODO
-
258 } */
-
259 
-
260 // LCOV_EXCL_STOP
-
-
Print & showbase(Print &printer)
Definition: PrintStream.cpp:45
-
uint8_t M_base
Definition: PrintStream.hpp:54
-
void printHex(Print &printer, T val)
-
Setprecision setprecision(int n)
-
Print & leadingzeros(Print &printer)
Definition: PrintStream.cpp:91
-
bool showbasePrintStream
Definition: PrintStream.cpp:22
-
static char nibble_to_hex(uint8_t nibble)
-
Print & bin(Print &printer)
Definition: PrintStream.cpp:72
-
Setbase setbase(uint8_t base)
-
char M_bytesep
Definition: PrintStream.hpp:66
-
bool boolalphaPrintStream
Definition: PrintStream.cpp:14
- -
uint8_t formatPrintStream
Definition: PrintStream.cpp:13
-
Setbytesep setbytesep(char bytesep)
-
Print & noshowbase(Print &printer)
Definition: PrintStream.cpp:50
-
char byteSeparatorPrintStream
Definition: PrintStream.cpp:17
- -
Print & nouppercase(Print &printer)
Definition: PrintStream.cpp:40
-
void printBin(Print &printer, T val)
-
Print & manipulator(Print &)
Definition: PrintStream.hpp:18
-
Print & noboolalpha(Print &printer)
Definition: PrintStream.cpp:86
- - -
Print & boolalpha(Print &printer)
Definition: PrintStream.cpp:82
-
Print & operator<<(Print &printer, const __FlashStringHelper *s)
Definition: PrintStream.cpp:99
-
Print & flush(Print &printer)
Definition: PrintStream.cpp:55
-
Print & printIntegral(Print &printer, T i)
-
Print & noleadingzeros(Print &printer)
Definition: PrintStream.cpp:95
-
Print & uppercase(Print &printer)
Definition: PrintStream.cpp:35
-
Print & hex(Print &printer)
Definition: PrintStream.cpp:62
-
uint8_t precisionPrintStream
Definition: PrintStream.cpp:16
-
Print & endl(Print &printer)
Definition: PrintStream.cpp:27
- -
enum @2 casePrintStream
-
Print & dec(Print &printer)
Definition: PrintStream.cpp:77
- -
bool leadingZerosPrintStream
Definition: PrintStream.cpp:15
- - - - - diff --git a/docs/Doxygen/da/d71/Exit_8cpp__incl.map b/docs/Doxygen/da/d71/Exit_8cpp__incl.map deleted file mode 100644 index 11465327b..000000000 --- a/docs/Doxygen/da/d71/Exit_8cpp__incl.map +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/da/d71/Exit_8cpp__incl.md5 b/docs/Doxygen/da/d71/Exit_8cpp__incl.md5 deleted file mode 100644 index b75bba76a..000000000 --- a/docs/Doxygen/da/d71/Exit_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -1361626b9c157b5a967b051ab2f71d11 \ No newline at end of file diff --git a/docs/Doxygen/da/d71/Exit_8cpp__incl.svg b/docs/Doxygen/da/d71/Exit_8cpp__incl.svg deleted file mode 100644 index fd69cf440..000000000 --- a/docs/Doxygen/da/d71/Exit_8cpp__incl.svg +++ /dev/null @@ -1,261 +0,0 @@ - - - - - - -Exit.cpp - - -Node1 - - -Exit.cpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -Error.hpp - - - - -Node1->Node3 - - - - -Node3->Node2 - - - - -Node4 - - -AH/Debug/Debug.hpp - - - - -Node3->Node4 - - - - -Node4->Node2 - - - - -Node5 - - -AH/PrintStream/PrintStream.hpp - - - - -Node4->Node5 - - - - -Node7 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node4->Node7 - - - - -Node16 - - -DebugVal.hpp - - - - -Node4->Node16 - - - - -Node5->Node2 - - - - -Node6 - - -Arduino.h - - - - -Node5->Node6 - - - - -Node7->Node2 - - - - -Node7->Node4 - - - - -Node8 - - -NamespaceSettings.hpp - - - - -Node7->Node8 - - - - -Node9 - - -Settings.hpp - - - - -Node7->Node9 - - - - -Node15 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node7->Node15 - - - - -Node10 - - -AH/Types/Frequency.hpp - - - - -Node9->Node10 - - - - -Node11 - - -AH/Hardware/ADCConfig.hpp - - - - -Node9->Node11 - - - - -Node12 - - -limits.h - - - - -Node9->Node12 - - - - -Node13 - - -stddef.h - - - - -Node9->Node13 - - - - -Node14 - - -stdint.h - - - - -Node9->Node14 - - - - -Node10->Node2 - - - - -Node10->Node8 - - - - -Node11->Node2 - - - - -Node11->Node6 - - - - - diff --git a/docs/Doxygen/da/d78/Toggle-LEDs_8ino-example.html b/docs/Doxygen/da/d78/Toggle-LEDs_8ino-example.html deleted file mode 100644 index f3b1a8dca..000000000 --- a/docs/Doxygen/da/d78/Toggle-LEDs_8ino-example.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - - -Arduino Helpers: Toggle-LEDs.ino - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
Toggle-LEDs.ino
-
-
-

-Toggle-LEDs

-

This example demonstrates the use of push buttons and LEDs and how to use shift registers and analog multiplexers to save pins.

-
Boards:
AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32
-

-Connections

-
    -
  • SS: 74HC595 ST_CP
  • -
  • MOSI: 74HC595 DS
  • -
  • SCK: 74HC595 SH_CP
  • -
  • 2: 74HC4067 A (COM OUT/IN)
  • -
  • 3: 74HC4067 S0
  • -
  • 4: 74HC4067 S1
  • -
  • 5: 74HC4067 S2
  • -
  • 6: 74HC4067 S3
  • -
-

Connect 16 momentary push buttons between the input pins of the multiplexer and ground.
- The internal pull-up resistor for the buttons will be enabled automatically, so no external resistors are necessary.

-

Connect 16 LEDs (and series resistors) between the eight outputs of the two shift registers and ground.

-

Remember to connect the enable pins of both the multiplexer and the shift registers to ground in order to enable them. Also connect the master reset pin of the shift registers to Vcc.
- Connect the serial data output of the first shift register (QH' or Q7S) to the serial input of the second shift register.

-

-Behavior

-

Pressing the first button will turn on the first LED. Pressing it again will turn it off again. Pressing the second button will turn on the second LED. Pressing it again will turn it off again, and so on.

-

Written by PieterP, 2018-08-28
- https://github.com/tttapa/Arduino-Helpers

-
-
#include <Arduino_Helpers.h> // Include the Arduino Helpers library.
- - - - -
-
// Instantiate a multiplexer
-
CD74HC4067 mux = {
-
2, // input pin
-
{3, 4, 5, 6}, // Address pins S0, S1, S2, S3
-
// 7, // Optionally, specify the enable pin
-
};
-
-
// Alternatively, if you have a 3-bit mux:
-
// CD74HC4051 mux = {
-
// 2,
-
// {3, 4, 5},
-
// // 7, // Optional
-
// };
-
-
// Instantiate a shift register with the SPI slave select pin as latch pin, most
-
// significant bit first, and a total of 16 outputs.
-
SPIShiftRegisterOut<mux.length()> sreg = {SS, MSBFIRST};
-
-
// Instantiate an array of momentary push buttons.
-
// It generates an array of Buttons on pins:
-
// { mux.pin(0), mux.pin(1) ... mux.pin(15) }
-
// For each button it creates, it increments the pin number by 1,
-
// and it starts counting from mux.pin(0)
-
auto buttons = generateIncrementalArray<Button, mux.length()>(mux.pin(0));
-
-
void setup() { // Initialize everything
-
mux.begin();
-
sreg.begin();
-
for (Button &button : buttons)
-
button.begin();
-
}
-
-
void loop() { // Check if a button is pressed, if so toggle the LED
-
for (uint8_t i = 0; i < mux.length(); ++i)
-
if (buttons[i].update() == Button::Falling)
-
sreg.digitalWrite(i, !sreg.digitalRead(i));
-
}
-
-
Input went from high to low (1,0)
Definition: Button.hpp:56
- -
A class for serial-in/parallel-out shift registers, like the 74HC595 that are connected to the SPI bu...
-
A class for reading and debouncing buttons and switches.
Definition: Button.hpp:18
-
pin_t pin(pin_t pin) const
Get the extended IO pin number of a given physical pin of this extended IO element.
- -
void begin() override
Initialize the multiplexer: set the pin mode of the address pins and the enable pin to output mode.
- -
Array< T, N > generateIncrementalArray(U start=0, V increment=V(1))
Generate an array where the first value is given, and the subsequent values are calculated as the pre...
-
A class for reading multiplexed analog inputs.
- -
Dummy header file for Arduino builder. You have to add this file first, so the other headers are in t...
-
static constexpr uint16_t length()
- - - - diff --git a/docs/Doxygen/da/d90/ExtendedInputOutput_8hpp__incl.map b/docs/Doxygen/da/d90/ExtendedInputOutput_8hpp__incl.map deleted file mode 100644 index 0383552a1..000000000 --- a/docs/Doxygen/da/d90/ExtendedInputOutput_8hpp__incl.map +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/da/d90/ExtendedInputOutput_8hpp__incl.md5 b/docs/Doxygen/da/d90/ExtendedInputOutput_8hpp__incl.md5 deleted file mode 100644 index f2e450cff..000000000 --- a/docs/Doxygen/da/d90/ExtendedInputOutput_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -85f1e07f8ea9298400935cc1d128f64a \ No newline at end of file diff --git a/docs/Doxygen/da/d90/ExtendedInputOutput_8hpp__incl.svg b/docs/Doxygen/da/d90/ExtendedInputOutput_8hpp__incl.svg deleted file mode 100644 index 2fad596e0..000000000 --- a/docs/Doxygen/da/d90/ExtendedInputOutput_8hpp__incl.svg +++ /dev/null @@ -1,457 +0,0 @@ - - - - - - -ExtendedInputOutput.hpp - - -Node1 - - -ExtendedInputOutput.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -Arduino.h - - - - -Node1->Node3 - - - - -Node4 - - -ExtendedIOElement.hpp - - - - -Node1->Node4 - - - - -Node4->Node2 - - - - -Node5 - - -AH/Hardware/Hardware --Types.hpp - - - - -Node4->Node5 - - - - -Node22 - - -AH/Containers/LinkedList.hpp - - - - -Node4->Node22 - - - - -Node5->Node2 - - - - -Node6 - - -AH/Containers/Array.hpp - - - - -Node5->Node6 - - - - -Node11 - - -NamespaceSettings.hpp - - - - -Node5->Node11 - - - - -Node17 - - -stdint.h - - - - -Node5->Node17 - - - - -Node6->Node2 - - - - -Node7 - - -AH/Error/Error.hpp - - - - -Node6->Node7 - - - - -Node16 - - -stddef.h - - - - -Node6->Node16 - - - - -Node20 - - -AH/STL/iterator - - - - -Node6->Node20 - - - - -Node21 - - -AH/STL/type_traits - - - - -Node6->Node21 - - - - -Node7->Node2 - - - - -Node8 - - -AH/Debug/Debug.hpp - - - - -Node7->Node8 - - - - -Node8->Node2 - - - - -Node9 - - -AH/PrintStream/PrintStream.hpp - - - - -Node8->Node9 - - - - -Node10 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node8->Node10 - - - - -Node19 - - -DebugVal.hpp - - - - -Node8->Node19 - - - - -Node9->Node2 - - - - -Node9->Node3 - - - - -Node10->Node2 - - - - -Node10->Node8 - - - - -Node10->Node11 - - - - -Node12 - - -Settings.hpp - - - - -Node10->Node12 - - - - -Node18 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node10->Node18 - - - - -Node13 - - -AH/Types/Frequency.hpp - - - - -Node12->Node13 - - - - -Node14 - - -AH/Hardware/ADCConfig.hpp - - - - -Node12->Node14 - - - - -Node15 - - -limits.h - - - - -Node12->Node15 - - - - -Node12->Node16 - - - - -Node12->Node17 - - - - -Node13->Node2 - - - - -Node13->Node11 - - - - -Node14->Node2 - - - - -Node14->Node3 - - - - -Node22->Node2 - - - - -Node22->Node8 - - - - -Node23 - - -AH/Math/MinMaxFix.hpp - - - - -Node22->Node23 - - - - -Node25 - - -stdlib.h - - - - -Node22->Node25 - - - - -Node26 - - -iterator - - - - -Node22->Node26 - - - - -Node23->Node2 - - - - -Node23->Node11 - - - - -Node24 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node23->Node24 - - - - -Node24->Node2 - - - - -Node24->Node3 - - - - - diff --git a/docs/Doxygen/da/da7/classFilteredAnalog.html b/docs/Doxygen/da/da7/classFilteredAnalog.html deleted file mode 100644 index 985b28ebb..000000000 --- a/docs/Doxygen/da/da7/classFilteredAnalog.html +++ /dev/null @@ -1,562 +0,0 @@ - - - - - - - -Arduino Helpers: FilteredAnalog< Precision, FilterShiftFactor, FilterType, AnalogType, IncRes > Class Template Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
- -
-
FilteredAnalog< Precision, FilterShiftFactor, FilterType, AnalogType, IncRes > Class Template Reference
-
-
- -

A class that reads and filters an analog input. - More...

- -

#include <FilteredAnalog.hpp>

-
-Collaboration diagram for FilteredAnalog< Precision, FilterShiftFactor, FilterType, AnalogType, IncRes >:
-
-
-
- - - - - -

-Public Types

using MappingFunction = AnalogType(*)(AnalogType)
 A function pointer to a mapping function to map analog values. More...
 
- - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 FilteredAnalog (pin_t analogPin)
 Construct a new FilteredAnalog object. More...
 
void map (MappingFunction fn)
 Specify a mapping function that is applied to the raw analog value before filtering. More...
 
void invert ()
 Invert the analog value. More...
 
bool update ()
 Read the analog input value, apply the mapping function, and update the average. More...
 
AnalogType getValue () const
 Get the filtered value of the analog input (with the mapping function applied). More...
 
float getFloatValue () const
 Get the filtered value of the analog input with the mapping function applied as a floating point number from 0.0 to 1.0. More...
 
AnalogType getRawValue () const
 Read the raw value of the analog input any filtering or mapping applied, but with its bit depth increased by IncRes. More...
 
- - - - -

-Static Public Member Functions

static void setupADC ()
 Select the configured ADC resolution. More...
 
- - - - - - - - - -

-Private Attributes

const pin_t analogPin
 
MappingFunction mapFn = nullptr
 
EMA< FilterShiftFactor, FilterType > filter
 
Hysteresis< ADC_BITS+IncRes - Precision, AnalogType, AnalogType > hysteresis
 
-

Detailed Description

-

template<uint8_t Precision = 10, uint8_t FilterShiftFactor = ANALOG_FILTER_SHIFT_FACTOR, class FilterType = ANALOG_FILTER_TYPE, class AnalogType = analog_t, uint8_t IncRes = min(sizeof(FilterType) * CHAR_BIT - ADC_BITS - FilterShiftFactor, sizeof(AnalogType) * CHAR_BIT - ADC_BITS)>
-class FilteredAnalog< Precision, FilterShiftFactor, FilterType, AnalogType, IncRes >

- -

A class that reads and filters an analog input.

-

A map function can be applied to the analog value (e.g. to compensate for logarithmic taper potentiometers or to calibrate the range). The analog input value is filtered using an exponential moving average filter. The default settings for this filter can be changed in Settings.hpp.
- After filtering, hysteresis is applied to prevent flipping back and forth between two values when the input is not changing.

-
Template Parameters
- - - - - - -
PrecisionThe number of bits of precision the output should have.
FilterShiftFactorThe number of bits used for the EMA filter. The pole location is \( 1 - \left(\frac{1}{2}\right)^{\text{FilterShiftFactor}} \).
- A lower shift factor means less filtering ( \(0\) is no filtering), and a higher shift factor means more filtering (and more latency).
FilterTypeThe type to use for the intermediate types of the filter.
- Should be at least \( \text{ADC_BITS} + \text{IncRes} + \text{FilterShiftFactor} \) bits wide.
AnalogTypeThe type to use for the analog values.
- Should be at least \( \text{ADC_BITS} + \text{IncRes} \) bits wide.
IncResThe number of bits to increase the resolution of the analog reading by.
-
-
-
Examples
1.FilteredAnalog.ino.
-
- -

Definition at line 55 of file FilteredAnalog.hpp.

-

Member Typedef Documentation

- -

◆ MappingFunction

- -
-
- - - - -
using MappingFunction = AnalogType (*)(AnalogType)
-
- -

A function pointer to a mapping function to map analog values.

-
See also
map()
- -

Definition at line 67 of file FilteredAnalog.hpp.

- -
-
-

Constructor & Destructor Documentation

- -

◆ FilteredAnalog()

- -
-
- - - - - -
- - - - - - - - -
FilteredAnalog (pin_t analogPin)
-
-inline
-
- -

Construct a new FilteredAnalog object.

-
Parameters
- - -
analogPinThe analog pin to read from.
-
-
- -

Definition at line 63 of file FilteredAnalog.hpp.

- -
-
-

Member Function Documentation

- -

◆ map()

- -
-
- - - - - -
- - - - - - - - -
void map (MappingFunction fn)
-
-inline
-
- -

Specify a mapping function that is applied to the raw analog value before filtering.

-
Parameters
- - -
fnA function pointer to the mapping function. This function should take the filtered value (of ADC_BITS + IncRes bits wide) as a parameter, and should return a value of ADC_BITS + IncRes bits wide.
-
-
-
Note
Applying the mapping function before filtering could result in the noise being amplified to such an extent that filtering it afterwards would be ineffective.
- Applying it after hysteresis would result in a lower resolution.
- That's why the mapping function is applied after filtering and before hysteresis.
- -

Definition at line 86 of file FilteredAnalog.hpp.

- -
-
- -

◆ invert()

- -
-
- - - - - -
- - - - - - - -
void invert ()
-
-inline
-
- -

Invert the analog value.

-

For example, if the precision is 10 bits, when the analog input measures 1023, the output will be 0, and when the analog input measures 0, the output will be 1023.

-
Note
This overrides the mapping function set by the map method.
- -

Definition at line 95 of file FilteredAnalog.hpp.

- -
-
- -

◆ update()

- -
-
- - - - - -
- - - - - - - -
bool update ()
-
-inline
-
- -

Read the analog input value, apply the mapping function, and update the average.

-
Return values
- - - -
trueThe value changed since last time it was updated.
falseThe value is still the same.
-
-
- -

Definition at line 109 of file FilteredAnalog.hpp.

- -
-
- -

◆ getValue()

- -
-
- - - - - -
- - - - - - - -
AnalogType getValue () const
-
-inline
-
- -

Get the filtered value of the analog input (with the mapping function applied).

-
Note
This function just returns the value from the last call to update, it doesn't read the analog input again.
-
Returns
The filtered value of the analog input, as a number of Precision bits wide.
- -

Definition at line 128 of file FilteredAnalog.hpp.

- -
-
- -

◆ getFloatValue()

- -
-
- - - - - -
- - - - - - - -
float getFloatValue () const
-
-inline
-
- -

Get the filtered value of the analog input with the mapping function applied as a floating point number from 0.0 to 1.0.

-
Returns
The filtered value of the analog input, as a number from 0.0 to 1.0.
- -

Definition at line 137 of file FilteredAnalog.hpp.

- -
-
- -

◆ getRawValue()

- -
-
- - - - - -
- - - - - - - -
AnalogType getRawValue () const
-
-inline
-
- -

Read the raw value of the analog input any filtering or mapping applied, but with its bit depth increased by IncRes.

- -

Definition at line 145 of file FilteredAnalog.hpp.

- -
-
- -

◆ setupADC()

- -
-
- - - - - -
- - - - - - - -
static void setupADC ()
-
-inlinestatic
-
- -

Select the configured ADC resolution.

-

By default, it is set to the maximum resolution supported by the hardware.

-
See also
ADC_BITS
-
-ADCConfig.hpp
-
Examples
1.FilteredAnalog.ino.
-
- -

Definition at line 157 of file FilteredAnalog.hpp.

- -
-
-

Member Data Documentation

- -

◆ analogPin

- -
-
- - - - - -
- - - - -
const pin_t analogPin
-
-private
-
- -

Definition at line 164 of file FilteredAnalog.hpp.

- -
-
- -

◆ mapFn

- -
-
- - - - - -
- - - - -
MappingFunction mapFn = nullptr
-
-private
-
- -

Definition at line 166 of file FilteredAnalog.hpp.

- -
-
- -

◆ filter

- -
-
- - - - - -
- - - - -
EMA<FilterShiftFactor, FilterType> filter
-
-private
-
- -

Definition at line 170 of file FilteredAnalog.hpp.

- -
-
- -

◆ hysteresis

- -
-
- - - - - -
- - - - -
Hysteresis<ADC_BITS + IncRes - Precision, AnalogType, AnalogType> hysteresis
-
-private
-
- -

Definition at line 180 of file FilteredAnalog.hpp.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/Doxygen/da/dbc/IncrementButton_8hpp__dep__incl.map b/docs/Doxygen/da/dbc/IncrementButton_8hpp__dep__incl.map deleted file mode 100644 index c78070768..000000000 --- a/docs/Doxygen/da/dbc/IncrementButton_8hpp__dep__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/da/dbc/IncrementButton_8hpp__dep__incl.md5 b/docs/Doxygen/da/dbc/IncrementButton_8hpp__dep__incl.md5 deleted file mode 100644 index 01e7fd40b..000000000 --- a/docs/Doxygen/da/dbc/IncrementButton_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -540adada084dfba52f555b7f88222494 \ No newline at end of file diff --git a/docs/Doxygen/da/dbc/IncrementButton_8hpp__dep__incl.svg b/docs/Doxygen/da/dbc/IncrementButton_8hpp__dep__incl.svg deleted file mode 100644 index 9b11d19ed..000000000 --- a/docs/Doxygen/da/dbc/IncrementButton_8hpp__dep__incl.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - -IncrementButton.hpp - - -Node1 - - -IncrementButton.hpp - - - - -Node2 - - -IncrementButton.cpp - - - - -Node1->Node2 - - - - - diff --git a/docs/Doxygen/da/dc8/classStaticSizeExtendedIOElement__inherit__graph.map b/docs/Doxygen/da/dc8/classStaticSizeExtendedIOElement__inherit__graph.map deleted file mode 100644 index 186475224..000000000 --- a/docs/Doxygen/da/dc8/classStaticSizeExtendedIOElement__inherit__graph.map +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/Doxygen/da/dc8/classStaticSizeExtendedIOElement__inherit__graph.md5 b/docs/Doxygen/da/dc8/classStaticSizeExtendedIOElement__inherit__graph.md5 deleted file mode 100644 index 877649b6c..000000000 --- a/docs/Doxygen/da/dc8/classStaticSizeExtendedIOElement__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -a46e3a52003f2e92aca6edd71d5b0cea \ No newline at end of file diff --git a/docs/Doxygen/da/dc8/classStaticSizeExtendedIOElement__inherit__graph.svg b/docs/Doxygen/da/dc8/classStaticSizeExtendedIOElement__inherit__graph.svg deleted file mode 100644 index 3421a2dfd..000000000 --- a/docs/Doxygen/da/dc8/classStaticSizeExtendedIOElement__inherit__graph.svg +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - -StaticSizeExtendedIOElement< N > - - -Node1 - - -StaticSizeExtendedIOElement< N > - - - -+ pins() -+ length() -# StaticSizeExtendedIOElement() - - - - -Node4 - - -ShiftRegisterOutBase< N > - -# latchPin -# bitOrder -# buffer -# dirty - -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogRead() -+ analogWrite() -+ red() -+ redPins() -+ green() -+ greenPins() -+ blue() -+ bluePins() -# ShiftRegisterOutBase() - - - - -Node1->Node4 - - - - -Node2 - - -ExtendedIOElement - -- length -- start -- end -- offset -- elements - -+ ~ExtendedIOElement() -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogWrite() -+ analogRead() -+ begin() -+ update() -+ pin() -+ operator[]() -+ getLength() -+ getEnd() -+ getStart() -+ beginAll() -+ getAll() -# ExtendedIOElement() - - - - -Node2->Node1 - - - - -Node3 - - -DoublyLinkable< Extended -IOElement > - -# next -# previous - -# ~DoublyLinkable() - - - - -Node3->Node2 - - - - -Node5 - - -ShiftRegisterOut< N > - -- dataPin -- clockPin - -+ ShiftRegisterOut() -+ begin() -+ update() - - - - -Node4->Node5 - - - - -Node6 - - -SPIShiftRegisterOut< N > - - - -+ SPIShiftRegisterOut() -+ begin() -+ update() - - - - -Node4->Node6 - - - - - diff --git a/docs/Doxygen/da/dd0/classMAX7219__Base.html b/docs/Doxygen/da/dd0/classMAX7219__Base.html deleted file mode 100644 index 3d3ea1ab3..000000000 --- a/docs/Doxygen/da/dd0/classMAX7219__Base.html +++ /dev/null @@ -1,552 +0,0 @@ - - - - - - - -Arduino Helpers: MAX7219_Base Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

A base class for classes that control MAX7219 LED drivers. - More...

- -

#include <MAX7219_Base.hpp>

-
-Inheritance diagram for MAX7219_Base:
-
-
-
-
-Collaboration diagram for MAX7219_Base:
-
-
-
- - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 MAX7219_Base (pin_t loadPin)
 Create a MAX7219_Base object. More...
 
void init ()
 Initialize the Arduino pins, SPI, and the MAX7219. More...
 
void clear ()
 Turn off all LEDs. More...
 
void send (uint8_t digit, uint8_t value)
 Send the value to the given digit. More...
 
void sendRaw (uint8_t opcode, uint8_t value)
 Send a raw opcode and value to the MAX7219. More...
 
void setIntensity (uint8_t intensity)
 Set the intensity of the LEDs. More...
 
- - - - - - - - - - - -

-Static Public Attributes

static constexpr uint8_t DECODEMODE = 9
 
static constexpr uint8_t INTENSITY = 10
 
static constexpr uint8_t SCANLIMIT = 11
 
static constexpr uint8_t SHUTDOWN = 12
 
static constexpr uint8_t DISPLAYTEST = 15
 
- - - - - -

-Private Attributes

pin_t loadPin
 
SPISettings settings = {SPI_MAX_SPEED, MSBFIRST, SPI_MODE0}
 
-

Detailed Description

-

A base class for classes that control MAX7219 LED drivers.

-

The SPI interface is used.

-
Todo:
Wiring diagram for SPI connection.
- -

Definition at line 23 of file MAX7219_Base.hpp.

-

Constructor & Destructor Documentation

- -

◆ MAX7219_Base()

- -
-
- - - - - -
- - - - - - - - -
MAX7219_Base (pin_t loadPin)
-
-inline
-
- -

Create a MAX7219_Base object.

-
Parameters
- - -
loadPinThe pin connected to the load pin (C̄S̄) of the MAX7219.
-
-
- -

Definition at line 31 of file MAX7219_Base.hpp.

- -
-
-

Member Function Documentation

- -

◆ init()

- -
-
- - - - - -
- - - - - - - -
void init ()
-
-inline
-
- -

Initialize the Arduino pins, SPI, and the MAX7219.

-
Todo:
Rename to begin.
- -

Definition at line 43 of file MAX7219_Base.hpp.

- -
-
- -

◆ clear()

- -
-
- - - - - -
- - - - - - - -
void clear ()
-
-inline
-
- -

Turn off all LEDs.

- -

Definition at line 58 of file MAX7219_Base.hpp.

- -
-
- -

◆ send()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void send (uint8_t digit,
uint8_t value 
)
-
-inline
-
- -

Send the value to the given digit.

-
Parameters
- - - -
digitThe digit or row to set [0, 7].
valueThe value to set the row to.
-
-
- -

Definition at line 71 of file MAX7219_Base.hpp.

- -
-
- -

◆ sendRaw()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void sendRaw (uint8_t opcode,
uint8_t value 
)
-
-inline
-
- -

Send a raw opcode and value to the MAX7219.

-
Parameters
- - - -
opcodeThe opcode to send.
valueThe value to send.
-
-
- -

Definition at line 83 of file MAX7219_Base.hpp.

- -
-
- -

◆ setIntensity()

- -
-
- - - - - -
- - - - - - - - -
void setIntensity (uint8_t intensity)
-
-inline
-
- -

Set the intensity of the LEDs.

-
Parameters
- - -
intensityThe intensity [0, 15].
-
-
- -

Definition at line 98 of file MAX7219_Base.hpp.

- -
-
-

Member Data Documentation

- -

◆ DECODEMODE

- -
-
- - - - - -
- - - - -
constexpr uint8_t DECODEMODE = 9
-
-staticconstexpr
-
- -

Definition at line 33 of file MAX7219_Base.hpp.

- -
-
- -

◆ INTENSITY

- -
-
- - - - - -
- - - - -
constexpr uint8_t INTENSITY = 10
-
-staticconstexpr
-
- -

Definition at line 34 of file MAX7219_Base.hpp.

- -
-
- -

◆ SCANLIMIT

- -
-
- - - - - -
- - - - -
constexpr uint8_t SCANLIMIT = 11
-
-staticconstexpr
-
- -

Definition at line 35 of file MAX7219_Base.hpp.

- -
-
- -

◆ SHUTDOWN

- -
-
- - - - - -
- - - - -
constexpr uint8_t SHUTDOWN = 12
-
-staticconstexpr
-
- -

Definition at line 36 of file MAX7219_Base.hpp.

- -
-
- -

◆ DISPLAYTEST

- -
-
- - - - - -
- - - - -
constexpr uint8_t DISPLAYTEST = 15
-
-staticconstexpr
-
- -

Definition at line 37 of file MAX7219_Base.hpp.

- -
-
- -

◆ loadPin

- -
-
- - - - - -
- - - - -
pin_t loadPin
-
-private
-
- -

Definition at line 103 of file MAX7219_Base.hpp.

- -
-
- -

◆ settings

- -
-
- - - - - -
- - - - -
SPISettings settings = {SPI_MAX_SPEED, MSBFIRST, SPI_MODE0}
-
-private
-
- -

Definition at line 104 of file MAX7219_Base.hpp.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/Doxygen/da/dd6/classFrequency-members.html b/docs/Doxygen/da/dd6/classFrequency-members.html deleted file mode 100644 index 7fae7fa25..000000000 --- a/docs/Doxygen/da/dd6/classFrequency-members.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Frequency Member List
-
-
- -

This is the complete list of members for Frequency, including all inherited members.

- - - - -
Frequency(unsigned long hertz)Frequencyinlineexplicit
hertzFrequencyprivate
operator unsigned long() constFrequencyinline
- - - - diff --git a/docs/Doxygen/da/ddd/README_8md.html b/docs/Doxygen/da/ddd/README_8md.html deleted file mode 100644 index 2ed2886ae..000000000 --- a/docs/Doxygen/da/ddd/README_8md.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: README.md File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
README.md File Reference
-
-
-
- - - - diff --git a/docs/Doxygen/da/de4/ShiftRegisterOut_8ipp__incl.map b/docs/Doxygen/da/de4/ShiftRegisterOut_8ipp__incl.map deleted file mode 100644 index d6a54ee32..000000000 --- a/docs/Doxygen/da/de4/ShiftRegisterOut_8ipp__incl.map +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/da/de4/ShiftRegisterOut_8ipp__incl.md5 b/docs/Doxygen/da/de4/ShiftRegisterOut_8ipp__incl.md5 deleted file mode 100644 index cc25b2ee2..000000000 --- a/docs/Doxygen/da/de4/ShiftRegisterOut_8ipp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -6ae5e62d78287615812b292281fa3b8c \ No newline at end of file diff --git a/docs/Doxygen/da/de4/ShiftRegisterOut_8ipp__incl.svg b/docs/Doxygen/da/de4/ShiftRegisterOut_8ipp__incl.svg deleted file mode 100644 index d5832c365..000000000 --- a/docs/Doxygen/da/de4/ShiftRegisterOut_8ipp__incl.svg +++ /dev/null @@ -1,664 +0,0 @@ - - - - - - -ShiftRegisterOut.ipp - - -Node1 - - -ShiftRegisterOut.ipp - - - - -Node2 - - -ExtendedInputOutput.hpp - - - - -Node1->Node2 - - - - -Node28 - - -ShiftRegisterOut.hpp - - - - -Node1->Node28 - - - - -Node3 - - -AH/Settings/Warnings.hpp - - - - -Node2->Node3 - - - - -Node4 - - -Arduino.h - - - - -Node2->Node4 - - - - -Node5 - - -ExtendedIOElement.hpp - - - - -Node2->Node5 - - - - -Node5->Node3 - - - - -Node6 - - -AH/Hardware/Hardware --Types.hpp - - - - -Node5->Node6 - - - - -Node23 - - -AH/Containers/LinkedList.hpp - - - - -Node5->Node23 - - - - -Node6->Node3 - - - - -Node7 - - -AH/Containers/Array.hpp - - - - -Node6->Node7 - - - - -Node12 - - -NamespaceSettings.hpp - - - - -Node6->Node12 - - - - -Node18 - - -stdint.h - - - - -Node6->Node18 - - - - -Node7->Node3 - - - - -Node8 - - -AH/Error/Error.hpp - - - - -Node7->Node8 - - - - -Node17 - - -stddef.h - - - - -Node7->Node17 - - - - -Node21 - - -AH/STL/iterator - - - - -Node7->Node21 - - - - -Node22 - - -AH/STL/type_traits - - - - -Node7->Node22 - - - - -Node8->Node3 - - - - -Node9 - - -AH/Debug/Debug.hpp - - - - -Node8->Node9 - - - - -Node9->Node3 - - - - -Node10 - - -AH/PrintStream/PrintStream.hpp - - - - -Node9->Node10 - - - - -Node11 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node9->Node11 - - - - -Node20 - - -DebugVal.hpp - - - - -Node9->Node20 - - - - -Node10->Node3 - - - - -Node10->Node4 - - - - -Node11->Node3 - - - - -Node11->Node9 - - - - -Node11->Node12 - - - - -Node13 - - -Settings.hpp - - - - -Node11->Node13 - - - - -Node19 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node11->Node19 - - - - -Node14 - - -AH/Types/Frequency.hpp - - - - -Node13->Node14 - - - - -Node15 - - -AH/Hardware/ADCConfig.hpp - - - - -Node13->Node15 - - - - -Node16 - - -limits.h - - - - -Node13->Node16 - - - - -Node13->Node17 - - - - -Node13->Node18 - - - - -Node14->Node3 - - - - -Node14->Node12 - - - - -Node15->Node3 - - - - -Node15->Node4 - - - - -Node23->Node3 - - - - -Node23->Node9 - - - - -Node24 - - -AH/Math/MinMaxFix.hpp - - - - -Node23->Node24 - - - - -Node26 - - -stdlib.h - - - - -Node23->Node26 - - - - -Node27 - - -iterator - - - - -Node23->Node27 - - - - -Node24->Node3 - - - - -Node24->Node12 - - - - -Node25 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node24->Node25 - - - - -Node25->Node3 - - - - -Node25->Node4 - - - - -Node28->Node1 - - - - -Node28->Node3 - - - - -Node28->Node4 - - - - -Node29 - - -ShiftRegisterOutBase.hpp - - - - -Node28->Node29 - - - - -Node29->Node3 - - - - -Node30 - - -StaticSizeExtendedIOElement.hpp - - - - -Node29->Node30 - - - - -Node33 - - -AH/Containers/BitArray.hpp - - - - -Node29->Node33 - - - - -Node34 - - -ShiftRegisterOutBase.ipp - - - - -Node29->Node34 - - - - -Node30->Node3 - - - - -Node30->Node5 - - - - -Node31 - - -AH/Containers/ArrayHelpers.hpp - - - - -Node30->Node31 - - - - -Node31->Node3 - - - - -Node31->Node7 - - - - -Node31->Node10 - - - - -Node32 - - -AH/STL/algorithm - - - - -Node31->Node32 - - - - -Node33->Node3 - - - - -Node33->Node8 - - - - -Node33->Node12 - - - - -Node33->Node18 - - - - -Node34->Node2 - - - - -Node34->Node29 - - - - -Node35 - - -ShiftRegisterOutRGB.hpp - - - - -Node34->Node35 - - - - -Node35->Node3 - - - - -Node35->Node11 - - - - -Node35->Node18 - - - - - diff --git a/docs/Doxygen/da/de8/group__AH__Containers.html b/docs/Doxygen/da/de8/group__AH__Containers.html deleted file mode 100644 index 4bf22e1e5..000000000 --- a/docs/Doxygen/da/de8/group__AH__Containers.html +++ /dev/null @@ -1,1516 +0,0 @@ - - - - - - - -Arduino Helpers: Containers - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
- -
-
Containers
-
-
- -

Containers like Array, BitArray, DoublyLinkedList and UniquePtr. -More...

- - - - - - - - - - - - - - - - - - - - -

-Classes

class  ArraySlice< T, N, Reverse, Const >
 Class for a view on a slice of an array. More...
 
struct  Array< T, N >
 An array wrapper for easy copying, comparing, and iterating. More...
 
class  BitArray< N >
 A class for arrays of bits. More...
 
class  DoublyLinkedList< Node >
 A class for doubly linked lists. More...
 
class  DoublyLinkable< Node >
 A class that can be inherited from to allow inserting into a DoublyLinkedList. More...
 
class  UniquePtr< T >
 Very basic smart pointer. More...
 
- - - - - -

-Typedefs

template<class T , size_t nb_rows, size_t nb_cols>
using Array2D = Array< Array< T, nb_cols >, nb_rows >
 An easy alias for two-dimensional Arrays. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<class T1 , class T2 , size_t N1, size_t N2, bool Reverse1, bool Reverse2, bool Const1, bool Const2>
bool operator== (ArraySlice< T1, N1, Reverse1, Const1 > a, ArraySlice< T2, N2, Reverse2, Const2 > b)
 Slice == Slice. More...
 
template<class T1 , class T2 , size_t N1, size_t N2, bool Reverse2, bool Const2>
bool operator== (const Array< T1, N1 > &a, ArraySlice< T2, N2, Reverse2, Const2 > b)
 Array == Slice. More...
 
template<class T1 , class T2 , size_t N1, size_t N2, bool Reverse1, bool Const1>
bool operator== (ArraySlice< T1, N1, Reverse1, Const1 > a, const Array< T2, N2 > &b)
 Slice == Array. More...
 
template<class T1 , class T2 , size_t N1, size_t N2, bool Reverse1, bool Reverse2, bool Const1, bool Const2>
bool operator!= (ArraySlice< T1, N1, Reverse1, Const1 > a, ArraySlice< T2, N2, Reverse2, Const2 > b)
 Slice != Slice. More...
 
template<class T1 , class T2 , size_t N1, size_t N2, bool Reverse2, bool Const2>
bool operator!= (const Array< T1, N1 > &a, ArraySlice< T2, N2, Reverse2, Const2 > b)
 Array != Slice. More...
 
template<class T1 , class T2 , size_t N1, size_t N2, bool Reverse1, bool Const1>
bool operator!= (ArraySlice< T1, N1, Reverse1, Const1 > a, const Array< T2, N2 > &b)
 Slice != Array. More...
 
template<class T1 , class T2 , size_t N1, size_t N2, bool Reverse1, bool Reverse2, bool Const1, bool Const2>
Array< decltype(T1{}+T2{}), N1 > operator+ (ArraySlice< T1, N1, Reverse1, Const1 > a, ArraySlice< T2, N2, Reverse2, Const2 > b)
 Slice + Slice. More...
 
template<class T1 , class T2 , size_t N1, size_t N2>
Array< decltype(T1{}+T2{}), N1 > operator+ (const Array< T1, N1 > &a, const Array< T2, N2 > &b)
 Array + Array. More...
 
template<class T1 , class T2 , size_t N1, size_t N2, bool Reverse1, bool Reverse2, bool Const1, bool Const2>
const ArraySlice< T1, N1, Reverse1, Const1 > & operator+= (const ArraySlice< T1, N1, Reverse1, Const1 > &a, const ArraySlice< T2, N2, Reverse2, Const2 > &b)
 Slice += Slice. More...
 
template<class T1 , class T2 , size_t N1, size_t N2>
Array< T1, N1 > & operator+= (Array< T1, N1 > &a, const Array< T2, N2 > &b)
 Array += Array. More...
 
template<class T1 , class T2 , size_t N1, size_t N2, bool Reverse1, bool Reverse2, bool Const1, bool Const2>
Array< decltype(T1{} - T2{}), N1 > operator- (ArraySlice< T1, N1, Reverse1, Const1 > a, ArraySlice< T2, N2, Reverse2, Const2 > b)
 Slice - Slice. More...
 
template<class T1 , class T2 , size_t N1, size_t N2>
Array< decltype(T1{} - T2{}), N1 > operator- (const Array< T1, N1 > &a, const Array< T2, N2 > &b)
 Array - Array. More...
 
template<class T1 , class T2 , size_t N1, size_t N2, bool Reverse1, bool Reverse2, bool Const1, bool Const2>
const ArraySlice< T1, N1, Reverse1, Const1 > & operator-= (const ArraySlice< T1, N1, Reverse1, Const1 > &a, const ArraySlice< T2, N2, Reverse2, Const2 > &b)
 Slice -= Slice. More...
 
template<class T1 , class T2 , size_t N1, size_t N2>
Array< T1, N1 > & operator-= (Array< T1, N1 > &a, const Array< T2, N2 > &b)
 Array -= Array. More...
 
template<class T1 , class T2 , size_t N1, bool Reverse1, bool Const1>
Array< decltype(T1{} *T2{}), N1 > operator* (ArraySlice< T1, N1, Reverse1, Const1 > a, T2 b)
 Slice * Scalar. More...
 
template<class T1 , class T2 , size_t N1>
Array< decltype(T1{} *T2{}), N1 > operator* (const Array< T1, N1 > &a, T2 b)
 Array * Scalar. More...
 
template<class T1 , class T2 , size_t N2, bool Reverse2, bool Const2>
Array< decltype(T1{} *T2{}), N2 > operator* (T1 a, ArraySlice< T2, N2, Reverse2, Const2 > b)
 Scalar * Slice. More...
 
template<class T1 , class T2 , size_t N2>
Array< decltype(T1{} *T2{}), N2 > operator* (T1 a, const Array< T2, N2 > &b)
 Scalar * Array. More...
 
template<class T1 , class T2 , size_t N1, bool Reverse1, bool Const1>
const ArraySlice< T1, N1, Reverse1, Const1 > & operator*= (const ArraySlice< T1, N1, Reverse1, Const1 > &a, T2 b)
 Slice *= Scalar. More...
 
template<class T1 , class T2 , size_t N1>
Array< T1, N1 > & operator*= (Array< T1, N1 > &a, T2 b)
 Array *= Scalar. More...
 
template<class T1 , class T2 , size_t N1, bool Reverse1, bool Const1>
Array< decltype(T1{}/T2{}), N1 > operator/ (ArraySlice< T1, N1, Reverse1, Const1 > a, T2 b)
 Slice / Scalar. More...
 
template<class T1 , class T2 , size_t N1>
Array< decltype(T1{}/T2{}), N1 > operator/ (const Array< T1, N1 > &a, T2 b)
 Array / Scalar. More...
 
template<class T1 , class T2 , size_t N1, bool Reverse1, bool Const1>
const ArraySlice< T1, N1, Reverse1, Const1 > & operator/= (const ArraySlice< T1, N1, Reverse1, Const1 > &a, T2 b)
 Slice /= Scalar. More...
 
template<class T1 , class T2 , size_t N1>
Array< T1, N1 > & operator/= (Array< T1, N1 > &a, T2 b)
 Array /= Scalar. More...
 
template<class T , size_t N, bool Reverse, bool Const>
Array< decltype(-T{}), N > operator- (ArraySlice< T, N, Reverse, Const > a)
 -Slice More...
 
template<class T , size_t N>
Array< decltype(-T{}), N > operator- (const Array< T, N > &a)
 -Array More...
 
template<class T , size_t N, class G >
Array< T, N > generateArray (G generator)
 Generate an array using the given generator. More...
 
template<size_t N, class G >
auto generateArray (G generator) -> Array< decltype(generator()), N >
 Generate an array using the given generator. More...
 
template<class T , size_t N, class U >
Array< T, N > copyAs (const Array< U, N > &src)
 Copy an Array to an Array of a different type. More...
 
template<class F , class U , size_t N>
Array< decltype(F{}(U{})), N > apply (const Array< U, N > &src, F f)
 Apply a function to all elements of the array and return a copy. More...
 
template<class T , size_t N, class... Args>
Array< T, N > fillArray (Args... args)
 Fill the array with the same value for each element. More...
 
template<class T , size_t N, class U , class V = U>
Array< T, N > generateIncrementalArray (U start=0, V increment=V(1))
 Generate an array where the first value is given, and the subsequent values are calculated as the previous value incremented with a given value:
- \( x[0] = \mathrm{start} \)
- \( x[k+1] = x[k] + \mathrm{increment} \) . More...
 
template<class T , size_t M, size_t N>
Array< T, M+N > cat (const Array< T, M > &a, const Array< T, N > &b)
 Concatenate two arrays. More...
 
template<class T1 , class T2 , size_t N1, size_t N2, bool Reverse1, bool Reverse2, bool Const1, bool Const2>
Array< decltype(T1() *T2()), N1+N2 - 1 > distribute (const ArraySlice< T1, N1, Reverse1, Const1 > &a, const ArraySlice< T2, N2, Reverse2, Const2 > &b)
 
template<class T1 , class T2 , size_t N1, size_t N2, bool Reverse1, bool Const1>
Array< decltype(T1() *T2()), N1+N2 - 1 > distribute (const ArraySlice< T1, N1, Reverse1, Const1 > &a, const Array< T2, N2 > &b)
 
template<class T1 , class T2 , size_t N1, size_t N2, bool Reverse2, bool Const2>
Array< decltype(T1() *T2()), N1+N2 - 1 > distribute (const Array< T1, N1 > &a, const ArraySlice< T2, N2, Reverse2, Const2 > &b)
 
template<class T1 , class T2 , size_t N1, size_t N2>
Array< decltype(T1() *T2()), N1+N2 - 1 > distribute (const Array< T1, N1 > &a, const Array< T2, N2 > &b)
 
template<typename T , typename... Args>
UniquePtr< T > MakeUnique (Args &&... args)
 
-

Detailed Description

-

Containers like Array, BitArray, DoublyLinkedList and UniquePtr.

-

Typedef Documentation

- -

◆ Array2D

- -
-
- - - - -
using Array2D = Array<Array<T, nb_cols>, nb_rows>
-
- -

An easy alias for two-dimensional Arrays.

- -

Definition at line 541 of file Array.hpp.

- -
-
-

Function Documentation

- -

◆ operator==() [1/3]

- -
-
- - - - - - - - - - - - - - - - - - -
bool operator== (ArraySlice< T1, N1, Reverse1, Const1 > a,
ArraySlice< T2, N2, Reverse2, Const2 > b 
)
-
- -

Slice == Slice.

- -

Definition at line 307 of file Array.hpp.

- -
-
- -

◆ operator==() [2/3]

- -
-
- - - - - - - - - - - - - - - - - - -
bool operator== (const Array< T1, N1 > & a,
ArraySlice< T2, N2, Reverse2, Const2 > b 
)
-
- -

Array == Slice.

- -

Definition at line 318 of file Array.hpp.

- -
-
- -

◆ operator==() [3/3]

- -
-
- - - - - - - - - - - - - - - - - - -
bool operator== (ArraySlice< T1, N1, Reverse1, Const1 > a,
const Array< T2, N2 > & b 
)
-
- -

Slice == Array.

- -

Definition at line 325 of file Array.hpp.

- -
-
- -

◆ operator!=() [1/3]

- -
-
- - - - - - - - - - - - - - - - - - -
bool operator!= (ArraySlice< T1, N1, Reverse1, Const1 > a,
ArraySlice< T2, N2, Reverse2, Const2 > b 
)
-
- -

Slice != Slice.

- -

Definition at line 335 of file Array.hpp.

- -
-
- -

◆ operator!=() [2/3]

- -
-
- - - - - - - - - - - - - - - - - - -
bool operator!= (const Array< T1, N1 > & a,
ArraySlice< T2, N2, Reverse2, Const2 > b 
)
-
- -

Array != Slice.

- -

Definition at line 342 of file Array.hpp.

- -
-
- -

◆ operator!=() [3/3]

- -
-
- - - - - - - - - - - - - - - - - - -
bool operator!= (ArraySlice< T1, N1, Reverse1, Const1 > a,
const Array< T2, N2 > & b 
)
-
- -

Slice != Array.

- -

Definition at line 349 of file Array.hpp.

- -
-
- -

◆ operator+() [1/2]

- -
-
- - - - - - - - - - - - - - - - - - -
Array<decltype(T1{} + T2{}), N1> operator+ (ArraySlice< T1, N1, Reverse1, Const1 > a,
ArraySlice< T2, N2, Reverse2, Const2 > b 
)
-
- -

Slice + Slice.

- -

Definition at line 360 of file Array.hpp.

- -
-
- -

◆ operator+() [2/2]

- -
-
- - - - - - - - - - - - - - - - - - -
Array<decltype(T1{} + T2{}), N1> operator+ (const Array< T1, N1 > & a,
const Array< T2, N2 > & b 
)
-
- -

Array + Array.

- -

Definition at line 371 of file Array.hpp.

- -
-
- -

◆ operator+=() [1/2]

- -
-
- - - - - - - - - - - - - - - - - - -
const ArraySlice<T1, N1, Reverse1, Const1>& operator+= (const ArraySlice< T1, N1, Reverse1, Const1 > & a,
const ArraySlice< T2, N2, Reverse2, Const2 > & b 
)
-
- -

Slice += Slice.

- -

Definition at line 380 of file Array.hpp.

- -
-
- -

◆ operator+=() [2/2]

- -
-
- - - - - - - - - - - - - - - - - - -
Array<T1, N1>& operator+= (Array< T1, N1 > & a,
const Array< T2, N2 > & b 
)
-
- -

Array += Array.

- -

Definition at line 390 of file Array.hpp.

- -
-
- -

◆ operator-() [1/4]

- -
-
- - - - - - - - - - - - - - - - - - -
Array<decltype(T1{} - T2{}), N1> operator- (ArraySlice< T1, N1, Reverse1, Const1 > a,
ArraySlice< T2, N2, Reverse2, Const2 > b 
)
-
- -

Slice - Slice.

- -

Definition at line 401 of file Array.hpp.

- -
-
- -

◆ operator-() [2/4]

- -
-
- - - - - - - - - - - - - - - - - - -
Array<decltype(T1{} - T2{}), N1> operator- (const Array< T1, N1 > & a,
const Array< T2, N2 > & b 
)
-
- -

Array - Array.

- -

Definition at line 412 of file Array.hpp.

- -
-
- -

◆ operator-=() [1/2]

- -
-
- - - - - - - - - - - - - - - - - - -
const ArraySlice<T1, N1, Reverse1, Const1>& operator-= (const ArraySlice< T1, N1, Reverse1, Const1 > & a,
const ArraySlice< T2, N2, Reverse2, Const2 > & b 
)
-
- -

Slice -= Slice.

- -

Definition at line 421 of file Array.hpp.

- -
-
- -

◆ operator-=() [2/2]

- -
-
- - - - - - - - - - - - - - - - - - -
Array<T1, N1>& operator-= (Array< T1, N1 > & a,
const Array< T2, N2 > & b 
)
-
- -

Array -= Array.

- -

Definition at line 431 of file Array.hpp.

- -
-
- -

◆ operator*() [1/4]

- -
-
- - - - - - - - - - - - - - - - - - -
Array<decltype(T1{} * T2{}), N1> operator* (ArraySlice< T1, N1, Reverse1, Const1 > a,
T2 b 
)
-
- -

Slice * Scalar.

- -

Definition at line 441 of file Array.hpp.

- -
-
- -

◆ operator*() [2/4]

- -
-
- - - - - - - - - - - - - - - - - - -
Array<decltype(T1{} * T2{}), N1> operator* (const Array< T1, N1 > & a,
T2 b 
)
-
- -

Array * Scalar.

- -

Definition at line 450 of file Array.hpp.

- -
-
- -

◆ operator*() [3/4]

- -
-
- - - - - - - - - - - - - - - - - - -
Array<decltype(T1{} * T2{}), N2> operator* (T1 a,
ArraySlice< T2, N2, Reverse2, Const2 > b 
)
-
- -

Scalar * Slice.

- -

Definition at line 457 of file Array.hpp.

- -
-
- -

◆ operator*() [4/4]

- -
-
- - - - - - - - - - - - - - - - - - -
Array<decltype(T1{} * T2{}), N2> operator* (T1 a,
const Array< T2, N2 > & b 
)
-
- -

Scalar * Array.

- -

Definition at line 466 of file Array.hpp.

- -
-
- -

◆ operator*=() [1/2]

- -
-
- - - - - - - - - - - - - - - - - - -
const ArraySlice<T1, N1, Reverse1, Const1>& operator*= (const ArraySlice< T1, N1, Reverse1, Const1 > & a,
T2 b 
)
-
- -

Slice *= Scalar.

- -

Definition at line 473 of file Array.hpp.

- -
-
- -

◆ operator*=() [2/2]

- -
-
- - - - - - - - - - - - - - - - - - -
Array<T1, N1>& operator*= (Array< T1, N1 > & a,
T2 b 
)
-
- -

Array *= Scalar.

- -

Definition at line 481 of file Array.hpp.

- -
-
- -

◆ operator/() [1/2]

- -
-
- - - - - - - - - - - - - - - - - - -
Array<decltype(T1{} / T2{}), N1> operator/ (ArraySlice< T1, N1, Reverse1, Const1 > a,
T2 b 
)
-
- -

Slice / Scalar.

- -

Definition at line 491 of file Array.hpp.

- -
-
- -

◆ operator/() [2/2]

- -
-
- - - - - - - - - - - - - - - - - - -
Array<decltype(T1{} / T2{}), N1> operator/ (const Array< T1, N1 > & a,
T2 b 
)
-
- -

Array / Scalar.

- -

Definition at line 500 of file Array.hpp.

- -
-
- -

◆ operator/=() [1/2]

- -
-
- - - - - - - - - - - - - - - - - - -
const ArraySlice<T1, N1, Reverse1, Const1>& operator/= (const ArraySlice< T1, N1, Reverse1, Const1 > & a,
T2 b 
)
-
- -

Slice /= Scalar.

- -

Definition at line 507 of file Array.hpp.

- -
-
- -

◆ operator/=() [2/2]

- -
-
- - - - - - - - - - - - - - - - - - -
Array<T1, N1>& operator/= (Array< T1, N1 > & a,
T2 b 
)
-
- -

Array /= Scalar.

- -

Definition at line 515 of file Array.hpp.

- -
-
- -

◆ operator-() [3/4]

- -
-
- - - - - - - - -
Array<decltype(-T{}), N> operator- (ArraySlice< T, N, Reverse, Const > a)
-
- -

-Slice

- -

Definition at line 524 of file Array.hpp.

- -
-
- -

◆ operator-() [4/4]

- -
-
- - - - - - - - -
Array<decltype(-T{}), N> operator- (const Array< T, N > & a)
-
- -

-Array

- -

Definition at line 533 of file Array.hpp.

- -
-
- -

◆ generateArray() [1/2]

- -
-
- - - - - - - - -
Array<T, N> generateArray (generator)
-
- -

Generate an array using the given generator.

-
Template Parameters
- - - - -
TThe type of the elements in the array.
NThe number of elements in the array.
GThe generator functor type.
-
-
-
Parameters
- - -
generatorA functor that will be called to create each element.
-
-
-
Returns
The generated array.
- -

Definition at line 71 of file ArrayHelpers.hpp.

- -
-
- -

◆ generateArray() [2/2]

- -
-
- - - - - - - - -
auto generateArray (generator) -> Array<decltype(generator()), N>
-
- -

Generate an array using the given generator.

-
Template Parameters
- - - -
NThe number of elements in the array.
GThe generator functor type.
-
-
-
Parameters
- - -
generatorA functor that will be called to create each element.
-
-
-
Returns
The generated array.
- -

Definition at line 91 of file ArrayHelpers.hpp.

- -
-
- -

◆ copyAs()

- -
-
- - - - - - - - -
Array<T, N> copyAs (const Array< U, N > & src)
-
- -

Copy an Array to an Array of a different type.

-
Template Parameters
- - - - -
TThe type of the new array.
NThe number of elements in the arrays.
UThe type of the source array.
-
-
-
Parameters
- - -
srcThe source array to be copied.
-
-
- -

Definition at line 112 of file ArrayHelpers.hpp.

- -
-
- -

◆ apply()

- -
-
- - - - - - - - - - - - - - - - - - -
Array<decltype(F{}(U{})), N> apply (const Array< U, N > & src,
f 
)
-
- -

Apply a function to all elements of the array and return a copy.

- -

Definition at line 124 of file ArrayHelpers.hpp.

- -
-
- -

◆ fillArray()

- -
-
- - - - - - - - -
Array<T, N> fillArray (Args... args)
-
- -

Fill the array with the same value for each element.

- -

Definition at line 136 of file ArrayHelpers.hpp.

- -
-
- -

◆ generateIncrementalArray()

- -
-
- - - - - - - - - - - - - - - - - - -
Array<T, N> generateIncrementalArray (start = 0,
increment = V(1) 
)
-
- -

Generate an array where the first value is given, and the subsequent values are calculated as the previous value incremented with a given value:
- \( x[0] = \mathrm{start} \)
- \( x[k+1] = x[k] + \mathrm{increment} \) .

-

For example:
-

auto x = generateIncrementalArray<unsigned int, 4>(2, 3);
-

is equivalent to
-

Array<unsigned int, 4> x = {2, 5, 8, 11};
-
Template Parameters
- - - - - -
TThe type of the elements in the array.
NThe number of elements in the array.
UThe type of the initial value.
VThe type of the value that will be added to each subsequent element.
-
-
-
Parameters
- - - -
startThe first value in the array.
incrementThe value to add to each subsequent element of the array.
-
-
-
Returns
The generated array.
-
Examples
Toggle-LEDs.ino.
-
- -

Definition at line 183 of file ArrayHelpers.hpp.

- -
-
- -

◆ cat()

- -
-
- - - - - - - - - - - - - - - - - - -
Array<T, M + N> cat (const Array< T, M > & a,
const Array< T, N > & b 
)
-
- -

Concatenate two arrays.

-
Template Parameters
- - - - -
TThe type of the elements in the array.
MThe number of elements in the first array.
NThe number of elements in the second array.
-
-
-
Parameters
- - - -
aThe first array.
bThe second array.
-
-
-
Returns
A new array containing the elements of both input arrays (in order).
- -

Definition at line 204 of file ArrayHelpers.hpp.

- -
-
- -

◆ distribute() [1/4]

- -
-
- - - - - - - - - - - - - - - - - - -
Array<decltype(T1() * T2()), N1 + N2 - 1> distribute (const ArraySlice< T1, N1, Reverse1, Const1 > & a,
const ArraySlice< T2, N2, Reverse2, Const2 > & b 
)
-
- -

Definition at line 218 of file ArrayHelpers.hpp.

- -
-
- -

◆ distribute() [2/4]

- -
-
- - - - - - - - - - - - - - - - - - -
Array<decltype(T1() * T2()), N1 + N2 - 1> distribute (const ArraySlice< T1, N1, Reverse1, Const1 > & a,
const Array< T2, N2 > & b 
)
-
- -

Definition at line 229 of file ArrayHelpers.hpp.

- -
-
- -

◆ distribute() [3/4]

- -
-
- - - - - - - - - - - - - - - - - - -
Array<decltype(T1() * T2()), N1 + N2 - 1> distribute (const Array< T1, N1 > & a,
const ArraySlice< T2, N2, Reverse2, Const2 > & b 
)
-
- -

Definition at line 236 of file ArrayHelpers.hpp.

- -
-
- -

◆ distribute() [4/4]

- -
-
- - - - - - - - - - - - - - - - - - -
Array<decltype(T1() * T2()), N1 + N2 - 1> distribute (const Array< T1, N1 > & a,
const Array< T2, N2 > & b 
)
-
- -

Definition at line 243 of file ArrayHelpers.hpp.

- -
-
- -

◆ MakeUnique()

- -
-
- - - - - - - - -
UniquePtr<T> MakeUnique (Args &&... args)
-
- -

Definition at line 66 of file UniquePtr.hpp.

- -
-
-
-
An array wrapper for easy copying, comparing, and iterating.
Definition: Array.hpp:36
- - - - diff --git a/docs/Doxygen/da/df6/MillisMicrosTimer_8hpp__incl.map b/docs/Doxygen/da/df6/MillisMicrosTimer_8hpp__incl.map deleted file mode 100644 index 9d068f467..000000000 --- a/docs/Doxygen/da/df6/MillisMicrosTimer_8hpp__incl.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/Doxygen/da/df6/MillisMicrosTimer_8hpp__incl.md5 b/docs/Doxygen/da/df6/MillisMicrosTimer_8hpp__incl.md5 deleted file mode 100644 index e3ecb2ce6..000000000 --- a/docs/Doxygen/da/df6/MillisMicrosTimer_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -6b221a329f1cca5a5ad998ff1f59b47f \ No newline at end of file diff --git a/docs/Doxygen/da/df6/MillisMicrosTimer_8hpp__incl.svg b/docs/Doxygen/da/df6/MillisMicrosTimer_8hpp__incl.svg deleted file mode 100644 index 095153ac4..000000000 --- a/docs/Doxygen/da/df6/MillisMicrosTimer_8hpp__incl.svg +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - -MillisMicrosTimer.hpp - - -Node1 - - -MillisMicrosTimer.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -Arduino.h - - - - -Node1->Node3 - - - - -Node4 - - -AH/Settings/NamespaceSettings.hpp - - - - -Node1->Node4 - - - - - diff --git a/docs/Doxygen/db/d02/Settings_8hpp.html b/docs/Doxygen/db/d02/Settings_8hpp.html deleted file mode 100644 index 3473c4c59..000000000 --- a/docs/Doxygen/db/d02/Settings_8hpp.html +++ /dev/null @@ -1,455 +0,0 @@ - - - - - - - -Arduino Helpers: Settings.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
Settings.hpp File Reference
-
-
- -

All user settings and debugging options can be changed here. -More...

-
#include <AH/Types/Frequency.hpp>
-#include <AH/Hardware/ADCConfig.hpp>
-#include <limits.h>
-#include <stddef.h>
-#include <stdint.h>
-
-Include dependency graph for Settings.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - - - - - - - -

-Macros

#define DEBUG_OUT
 The debug output. More...
 
#define FATAL_ERRORS
 Exit when encountering an error, instead of trying to recover (recommended). More...
 
#define AH_INDIVIDUAL_BUTTON_INVERT
 Make it possible to invert individual push buttons. More...
 
- - - - -

-Typedefs

using ANALOG_FILTER_TYPE = uint16_t
 The unsigned integer type to use for analog inputs during filtering. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

constexpr unsigned long defaultBaudRate = 115200
 The default baud rate for debug output. More...
 
constexpr uint8_t ADC_BITS = ADC_RESOLUTION
 The bit depth to use for the ADC (Analog to Digital Converter). More...
 
constexpr uint8_t ANALOG_FILTER_SHIFT_FACTOR = 2
 The factor for the analog filter:
- Difference equation: \( y[n] = \alpha\cdot x[n] + (1-\alpha)\cdot y[n-1] \) where \( \alpha = \left(\frac{1}{2}\right)^{ANALOG\_FILTER\_SHIFT\_FACTOR} \). More...
 
constexpr unsigned long BUTTON_DEBOUNCE_TIME = 25
 The debounce time for momentary push buttons in milliseconds. More...
 
constexpr unsigned long LONG_PRESS_DELAY = 450
 The time in milliseconds before a press is registered as a long press. More...
 
constexpr unsigned long LONG_PRESS_REPEAT_DELAY = 200
 The time between increments/decremnets during a long press. More...
 
constexpr unsigned long FILTERED_INPUT_UPDATE_INTERVAL = 1000
 The interval between updating filtered analog inputs, in microseconds. More...
 
constexpr static Frequency SPI_MAX_SPEED = 8_MHz
 
-

Detailed Description

-

All user settings and debugging options can be changed here.

- -

Definition in file Settings.hpp.

-

Macro Definition Documentation

- -

◆ DEBUG_OUT

- -
-
- - - - -
#define DEBUG_OUT
-
- -

The debug output.

-


- Use #define DEBUG_OUT Serial to print debugging information to the serial monitor.
-

Note
Printing debug information can slow down the program dramatically.
- -

Definition at line 26 of file Settings.hpp.

- -
-
- -

◆ FATAL_ERRORS

- -
-
- - - - -
#define FATAL_ERRORS
-
- -

Exit when encountering an error, instead of trying to recover (recommended).

- -

Definition at line 30 of file Settings.hpp.

- -
-
- -

◆ AH_INDIVIDUAL_BUTTON_INVERT

- -
-
- - - - -
#define AH_INDIVIDUAL_BUTTON_INVERT
-
- -

Make it possible to invert individual push buttons.

-

Enabling this will increase memory usage.

- -

Definition at line 89 of file Settings.hpp.

- -
-
-

Typedef Documentation

- -

◆ ANALOG_FILTER_TYPE

- -
-
- - - - -
using ANALOG_FILTER_TYPE = uint16_t
-
- -

The unsigned integer type to use for analog inputs during filtering.

-
See also
FilteredAnalog
- -

Definition at line 71 of file Settings.hpp.

- -
-
-

Variable Documentation

- -

◆ defaultBaudRate

- -
-
- - - - - -
- - - - -
constexpr unsigned long defaultBaudRate = 115200
-
-constexpr
-
- -

The default baud rate for debug output.

- -

Definition at line 36 of file Settings.hpp.

- -
-
- -

◆ ADC_BITS

- -
-
- - - - - -
- - - - -
constexpr uint8_t ADC_BITS = ADC_RESOLUTION
-
-constexpr
-
- -

The bit depth to use for the ADC (Analog to Digital Converter).

-

By default, the maximum supported resolution is used, but if you need it for compatibility with other code that expects the default 10-bit resolution, you can use

-
constexpr uint8_t ADC_BITS = 10;
-

If the library doesn't know your specific hardware, it defaults to 10 bits. This might not be the optimal resolution, so it's best to add the actual resolution to Hardware/ADCConfig.hpp.

- -

Definition at line 53 of file Settings.hpp.

- -
-
- -

◆ ANALOG_FILTER_SHIFT_FACTOR

- -
-
- - - - - -
- - - - -
constexpr uint8_t ANALOG_FILTER_SHIFT_FACTOR = 2
-
-constexpr
-
- -

The factor for the analog filter:
- Difference equation: \( y[n] = \alpha\cdot x[n] + (1-\alpha)\cdot y[n-1] \) where \( \alpha = \left(\frac{1}{2}\right)^{ANALOG\_FILTER\_SHIFT\_FACTOR} \).

-
See also
FilteredAnalog
- -

Definition at line 64 of file Settings.hpp.

- -
-
- -

◆ BUTTON_DEBOUNCE_TIME

- -
-
- - - - - -
- - - - -
constexpr unsigned long BUTTON_DEBOUNCE_TIME = 25
-
-constexpr
-
- -

The debounce time for momentary push buttons in milliseconds.

- -

Definition at line 74 of file Settings.hpp.

- -
-
- -

◆ LONG_PRESS_DELAY

- -
-
- - - - - -
- - - - -
constexpr unsigned long LONG_PRESS_DELAY = 450
-
-constexpr
-
- -

The time in milliseconds before a press is registered as a long press.

- -

Definition at line 77 of file Settings.hpp.

- -
-
- -

◆ LONG_PRESS_REPEAT_DELAY

- -
-
- - - - - -
- - - - -
constexpr unsigned long LONG_PRESS_REPEAT_DELAY = 200
-
-constexpr
-
- -

The time between increments/decremnets during a long press.

- -

Definition at line 80 of file Settings.hpp.

- -
-
- -

◆ FILTERED_INPUT_UPDATE_INTERVAL

- -
-
- - - - - -
- - - - -
constexpr unsigned long FILTERED_INPUT_UPDATE_INTERVAL = 1000
-
-constexpr
-
- -

The interval between updating filtered analog inputs, in microseconds.

- -

Definition at line 83 of file Settings.hpp.

- -
-
- -

◆ SPI_MAX_SPEED

- -
-
- - - - - -
- - - - -
constexpr static Frequency SPI_MAX_SPEED = 8_MHz
-
-staticconstexpr
-
- -

Definition at line 85 of file Settings.hpp.

- -
-
-
-
constexpr uint8_t ADC_BITS
The bit depth to use for the ADC (Analog to Digital Converter).
Definition: Settings.hpp:53
- - - - diff --git a/docs/Doxygen/db/d02/Settings_8hpp_source.html b/docs/Doxygen/db/d02/Settings_8hpp_source.html deleted file mode 100644 index 353d71b17..000000000 --- a/docs/Doxygen/db/d02/Settings_8hpp_source.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - -Arduino Helpers: Settings.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Settings.hpp
-
-
-Go to the documentation of this file.
1 #ifndef AH_SETTINGSWRAPPER_HPP
-
2 #error "Do not include this file directly, use the wrapper!"
-
3 #endif
-
4 
-
11 #include <AH/Types/Frequency.hpp>
- -
13 #include <limits.h> // CHAR_BIT
-
14 #include <stddef.h>
-
15 #include <stdint.h>
-
16 
- -
18 
-
19 // ----------------------------- Debug Settings ----------------------------- //
-
20 // ========================================================================== //
-
21 
-
26 #define DEBUG_OUT
-
27 // #define DEBUG_OUT Serial
-
28 
-
30 #define FATAL_ERRORS
-
31 
-
32 // ----------------------------- User Settings ------------------------------ //
-
33 // ========================================================================== //
-
34 
-
36 constexpr unsigned long defaultBaudRate = 115200;
-
37 
-
53 constexpr uint8_t ADC_BITS = ADC_RESOLUTION;
-
54 
-
64 constexpr uint8_t ANALOG_FILTER_SHIFT_FACTOR = 2;
-
65 
-
71 using ANALOG_FILTER_TYPE = uint16_t;
-
72 
-
74 constexpr unsigned long BUTTON_DEBOUNCE_TIME = 25; // milliseconds
-
75 
-
77 constexpr unsigned long LONG_PRESS_DELAY = 450; // milliseconds
-
78 
-
80 constexpr unsigned long LONG_PRESS_REPEAT_DELAY = 200; // milliseconds
-
81 
-
83 constexpr unsigned long FILTERED_INPUT_UPDATE_INTERVAL = 1000; // microseconds
-
84 
-
85 constexpr static Frequency SPI_MAX_SPEED = 8_MHz;
-
86 
-
89 #define AH_INDIVIDUAL_BUTTON_INVERT
-
90 
-
91 // ========================================================================== //
-
92 
- -
-
#define BEGIN_AH_NAMESPACE
-
uint16_t ANALOG_FILTER_TYPE
The unsigned integer type to use for analog inputs during filtering.
Definition: Settings.hpp:71
-
constexpr uint8_t ADC_BITS
The bit depth to use for the ADC (Analog to Digital Converter).
Definition: Settings.hpp:53
-
constexpr unsigned long FILTERED_INPUT_UPDATE_INTERVAL
The interval between updating filtered analog inputs, in microseconds.
Definition: Settings.hpp:83
-
#define ADC_RESOLUTION
The actual maximum resolution of the built-in ADC.
Definition: ADCConfig.hpp:69
-
constexpr unsigned long BUTTON_DEBOUNCE_TIME
The debounce time for momentary push buttons in milliseconds.
Definition: Settings.hpp:74
- -
constexpr unsigned long defaultBaudRate
The default baud rate for debug output.
Definition: Settings.hpp:36
-
constexpr unsigned long LONG_PRESS_REPEAT_DELAY
The time between increments/decremnets during a long press.
Definition: Settings.hpp:80
-
constexpr uint8_t ANALOG_FILTER_SHIFT_FACTOR
The factor for the analog filter: Difference equation: where .
Definition: Settings.hpp:64
-
constexpr static Frequency SPI_MAX_SPEED
Definition: Settings.hpp:85
-
Type-safe class for frequency values.
Definition: Frequency.hpp:11
-
#define END_AH_NAMESPACE
-
constexpr unsigned long LONG_PRESS_DELAY
The time in milliseconds before a press is registered as a long press.
Definition: Settings.hpp:77
-
This file contains the platform-specific ADC resolutions. By default, the library automatically selec...
- - - - diff --git a/docs/Doxygen/db/d02/TeensyUSBTypes_8hpp__dep__incl.map b/docs/Doxygen/db/d02/TeensyUSBTypes_8hpp__dep__incl.map deleted file mode 100644 index 8712a4755..000000000 --- a/docs/Doxygen/db/d02/TeensyUSBTypes_8hpp__dep__incl.map +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/db/d02/TeensyUSBTypes_8hpp__dep__incl.md5 b/docs/Doxygen/db/d02/TeensyUSBTypes_8hpp__dep__incl.md5 deleted file mode 100644 index 667275234..000000000 --- a/docs/Doxygen/db/d02/TeensyUSBTypes_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -d81ae8907044614a8403e7008f5f0540 \ No newline at end of file diff --git a/docs/Doxygen/db/d02/TeensyUSBTypes_8hpp__dep__incl.svg b/docs/Doxygen/db/d02/TeensyUSBTypes_8hpp__dep__incl.svg deleted file mode 100644 index 28a0457d7..000000000 --- a/docs/Doxygen/db/d02/TeensyUSBTypes_8hpp__dep__incl.svg +++ /dev/null @@ -1,658 +0,0 @@ - - - - - - -TeensyUSBTypes.hpp - - -Node1 - - -TeensyUSBTypes.hpp - - - - -Node2 - - -SettingsWrapper.hpp - - - - -Node1->Node2 - - - - -Node3 - - -Updatable.hpp - - - - -Node2->Node3 - - - - -Node4 - - -Debug.hpp - - - - -Node2->Node4 - - - - -Node8 - - -Button.hpp - - - - -Node2->Node8 - - - - -Node24 - - -FilteredAnalog.hpp - - - - -Node2->Node24 - - - - -Node39 - - -ShiftRegisterOutRGB.hpp - - - - -Node2->Node39 - - - - -Node4->Node2 - - - - -Node5 - - -LinkedList.hpp - - - - -Node4->Node5 - - - - -Node32 - - -Debug.cpp - - - - -Node4->Node32 - - - - -Node33 - - -Error.hpp - - - - -Node4->Node33 - - - - -Node5->Node3 - - - - -Node6 - - -ExtendedIOElement.hpp - - - - -Node5->Node6 - - - - -Node7 - - -ExtendedInputOutput.hpp - - - - -Node6->Node7 - - - - -Node17 - - -ExtendedInputOutput.cpp - - - - -Node6->Node17 - - - - -Node30 - - -StaticSizeExtendedIOElement.hpp - - - - -Node6->Node30 - - - - -Node31 - - -ExtendedIOElement.cpp - - - - -Node6->Node31 - - - - -Node7->Node8 - - - - -Node14 - - -ButtonMatrix.ipp - - - - -Node7->Node14 - - - - -Node16 - - -AnalogMultiplex.hpp - - - - -Node7->Node16 - - - - -Node7->Node17 - - - - -Node18 - - -ShiftRegisterOutBase.ipp - - - - -Node7->Node18 - - - - -Node21 - - -ShiftRegisterOut.ipp - - - - -Node7->Node21 - - - - -Node23 - - -SPIShiftRegisterOut.ipp - - - - -Node7->Node23 - - - - -Node7->Node24 - - - - -Node25 - - -LEDs.hpp - - - - -Node7->Node25 - - - - -Node27 - - -MAX7219_Base.hpp - - - - -Node7->Node27 - - - - -Node9 - - -Button.cpp - - - - -Node8->Node9 - - - - -Node10 - - -IncrementButton.hpp - - - - -Node8->Node10 - - - - -Node12 - - -IncrementDecrementButtons.hpp - - - - -Node8->Node12 - - - - -Node11 - - -IncrementButton.cpp - - - - -Node10->Node11 - - - - -Node13 - - -IncrementDecrementButtons.cpp - - - - -Node12->Node13 - - - - -Node15 - - -ButtonMatrix.hpp - - - - -Node14->Node15 - - - - -Node15->Node14 - - - - -Node19 - - -ShiftRegisterOutBase.hpp - - - - -Node18->Node19 - - - - -Node19->Node18 - - - - -Node20 - - -ShiftRegisterOut.hpp - - - - -Node19->Node20 - - - - -Node22 - - -SPIShiftRegisterOut.hpp - - - - -Node19->Node22 - - - - -Node20->Node21 - - - - -Node21->Node20 - - - - -Node22->Node23 - - - - -Node23->Node22 - - - - -Node26 - - -DotBarDisplayLEDs.hpp - - - - -Node25->Node26 - - - - -Node28 - - -MAX7219.hpp - - - - -Node27->Node28 - - - - -Node29 - - -MAX7219SevenSegmentDisplay.hpp - - - - -Node27->Node29 - - - - -Node30->Node16 - - - - -Node30->Node19 - - - - -Node30->Node28 - - - - -Node33->Node3 - - - - -Node33->Node17 - - - - -Node33->Node31 - - - - -Node34 - - -Array.hpp - - - - -Node33->Node34 - - - - -Node37 - - -BitArray.hpp - - - - -Node33->Node37 - - - - -Node38 - - -Exit.cpp - - - - -Node33->Node38 - - - - -Node34->Node16 - - - - -Node35 - - -ArrayHelpers.hpp - - - - -Node34->Node35 - - - - -Node36 - - -Hardware-Types.hpp - - - - -Node34->Node36 - - - - -Node35->Node30 - - - - -Node36->Node6 - - - - -Node36->Node15 - - - - -Node36->Node24 - - - - -Node37->Node19 - - - - -Node37->Node22 - - - - -Node37->Node28 - - - - -Node39->Node18 - - - - -Node40 - - -ShiftRegisterOutRGB.cpp - - - - -Node39->Node40 - - - - - diff --git a/docs/Doxygen/db/d0b/ShiftRegisterOutRGB_8cpp.html b/docs/Doxygen/db/d0b/ShiftRegisterOutRGB_8cpp.html deleted file mode 100644 index 0b517571a..000000000 --- a/docs/Doxygen/db/d0b/ShiftRegisterOutRGB_8cpp.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - -Arduino Helpers: ShiftRegisterOutRGB.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ShiftRegisterOutRGB.cpp File Reference
-
-
-
-Include dependency graph for ShiftRegisterOutRGB.cpp:
-
-
-
-
-

Go to the source code of this file.

-
- - - - diff --git a/docs/Doxygen/db/d0b/ShiftRegisterOutRGB_8cpp_source.html b/docs/Doxygen/db/d0b/ShiftRegisterOutRGB_8cpp_source.html deleted file mode 100644 index 9cb67f3bf..000000000 --- a/docs/Doxygen/db/d0b/ShiftRegisterOutRGB_8cpp_source.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - -Arduino Helpers: ShiftRegisterOutRGB.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ShiftRegisterOutRGB.cpp
-
-
-Go to the documentation of this file.
-
2 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
3 
- -
5 
-
6 const uint8_t ShiftRegisterOutRGB::redBit __attribute__((weak)) = 0;
-
7 const uint8_t ShiftRegisterOutRGB::greenBit __attribute__((weak)) = 1;
-
8 const uint8_t ShiftRegisterOutRGB::blueBit __attribute__((weak)) = 2;
-
9 
- -
11 
- -
-
#define BEGIN_AH_NAMESPACE
- -
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
A struct for setting the RGB mode for RGB shift registers.
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
#define END_AH_NAMESPACE
- - - - diff --git a/docs/Doxygen/db/d32/classMAX7219SevenSegmentDisplay-members.html b/docs/Doxygen/db/d32/classMAX7219SevenSegmentDisplay-members.html deleted file mode 100644 index dbe899892..000000000 --- a/docs/Doxygen/db/d32/classMAX7219SevenSegmentDisplay-members.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
MAX7219SevenSegmentDisplay Member List
-
-
- -

This is the complete list of members for MAX7219SevenSegmentDisplay, including all inherited members.

- - - - - - - - - - - - - - - - - - - - -
begin()MAX7219SevenSegmentDisplayinline
clear()MAX7219_Baseinline
DECODEMODEMAX7219_Basestatic
display(long number, uint8_t startDigit=0, uint8_t endDigit=7)MAX7219SevenSegmentDisplayinline
display(const char *text, uint8_t startPos=0)MAX7219SevenSegmentDisplayinline
display(const uint8_t(&characters)[N], uint8_t startPos=0)MAX7219SevenSegmentDisplayinline
DISPLAYTESTMAX7219_Basestatic
init()MAX7219_Baseinline
INTENSITYMAX7219_Basestatic
loadPinMAX7219_Baseprivate
MAX7219_Base(pin_t loadPin)MAX7219_Baseinline
MAX7219SevenSegmentDisplay(pin_t loadPin)MAX7219SevenSegmentDisplayinline
printHex(uint8_t digit, uint8_t value)MAX7219SevenSegmentDisplayinline
SCANLIMITMAX7219_Basestatic
send(uint8_t digit, uint8_t value)MAX7219_Baseinline
sendRaw(uint8_t opcode, uint8_t value)MAX7219_Baseinline
setIntensity(uint8_t intensity)MAX7219_Baseinline
settingsMAX7219_Baseprivate
SHUTDOWNMAX7219_Basestatic
- - - - diff --git a/docs/Doxygen/db/d39/classShiftRegisterOut__coll__graph.map b/docs/Doxygen/db/d39/classShiftRegisterOut__coll__graph.map deleted file mode 100644 index d24fc771a..000000000 --- a/docs/Doxygen/db/d39/classShiftRegisterOut__coll__graph.map +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/Doxygen/db/d39/classShiftRegisterOut__coll__graph.md5 b/docs/Doxygen/db/d39/classShiftRegisterOut__coll__graph.md5 deleted file mode 100644 index 1404a422f..000000000 --- a/docs/Doxygen/db/d39/classShiftRegisterOut__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -cbfcd7fc1dad3e87a9423ec998421ee1 \ No newline at end of file diff --git a/docs/Doxygen/db/d39/classShiftRegisterOut__coll__graph.svg b/docs/Doxygen/db/d39/classShiftRegisterOut__coll__graph.svg deleted file mode 100644 index 72c03be77..000000000 --- a/docs/Doxygen/db/d39/classShiftRegisterOut__coll__graph.svg +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - -ShiftRegisterOut< N > - - -Node1 - - -ShiftRegisterOut< N > - -- dataPin -- clockPin - -+ ShiftRegisterOut() -+ begin() -+ update() - - - - -Node2 - - -ShiftRegisterOutBase< N > - -# latchPin -# bitOrder -# buffer -# dirty - -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogRead() -+ analogWrite() -+ red() -+ redPins() -+ green() -+ greenPins() -+ blue() -+ bluePins() -# ShiftRegisterOutBase() - - - - -Node2->Node1 - - - - -Node3 - - -StaticSizeExtendedIOElement< N > - - - -+ pins() -+ length() -# StaticSizeExtendedIOElement() - - - - -Node3->Node2 - - - - -Node4 - - -ExtendedIOElement - -- length -- start -- end -- offset - -+ ~ExtendedIOElement() -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogWrite() -+ analogRead() -+ begin() -+ update() -+ pin() -+ operator[]() -+ getLength() -+ getEnd() -+ getStart() -+ beginAll() -+ getAll() -# ExtendedIOElement() - - - - -Node4->Node3 - - - - -Node5 - - -DoublyLinkable< Extended -IOElement > - - - -# ~DoublyLinkable() - - - - -Node4->Node5 - - - #next -#previous - - -Node6 - - -DoublyLinkedList< Extended -IOElement > - - - -+ append() -+ append() -+ insertBefore() -+ insertBefore() -+ insertSorted() -+ insertSorted() -+ remove() -+ remove() -+ moveDown() -+ couldContain() -+ begin() -+ begin() -+ end() -+ end() -+ rbegin() -+ rbegin() -+ rend() -+ rend() -+ getFirst() -+ getLast() - - - - -Node4->Node6 - - - -last --first - - -Node5->Node4 - - - - -Node6->Node4 - - - -elements - - - diff --git a/docs/Doxygen/db/d52/classDoublyLinkedList_1_1node__iterator__base.html b/docs/Doxygen/db/d52/classDoublyLinkedList_1_1node__iterator__base.html deleted file mode 100644 index b4d8a0461..000000000 --- a/docs/Doxygen/db/d52/classDoublyLinkedList_1_1node__iterator__base.html +++ /dev/null @@ -1,244 +0,0 @@ - - - - - - - -Arduino Helpers: DoublyLinkedList< Node >::node_iterator_base< INode > Class Template Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
DoublyLinkedList< Node >::node_iterator_base< INode > Class Template Reference
-
-
- -

Base class for doubly linked list iterators. - More...

- -

#include <LinkedList.hpp>

-
-Inheritance diagram for DoublyLinkedList< Node >::node_iterator_base< INode >:
-
-
-
-
-Collaboration diagram for DoublyLinkedList< Node >::node_iterator_base< INode >:
-
-
-
- - - - - - - - -

-Public Member Functions

 node_iterator_base (INode *node)
 
bool operator!= (const node_iterator_base &rhs) const
 
INode & operator* () const
 
- - - -

-Protected Attributes

INode * node
 
-

Detailed Description

-

template<class Node>
-template<class INode>
-class DoublyLinkedList< Node >::node_iterator_base< INode >

- -

Base class for doubly linked list iterators.

- -

Definition at line 31 of file LinkedList.hpp.

-

Constructor & Destructor Documentation

- -

◆ node_iterator_base()

- -
-
- - - - - -
- - - - - - - - -
node_iterator_base (INode * node)
-
-inline
-
- -

Definition at line 33 of file LinkedList.hpp.

- -
-
-

Member Function Documentation

- -

◆ operator!=()

- -
-
- - - - - -
- - - - - - - - -
bool operator!= (const node_iterator_base< INode > & rhs) const
-
-inline
-
- -

Definition at line 35 of file LinkedList.hpp.

- -
-
- -

◆ operator*()

- -
-
- - - - - -
- - - - - - - -
INode& operator* () const
-
-inline
-
- -

Definition at line 39 of file LinkedList.hpp.

- -
-
-

Member Data Documentation

- -

◆ node

- -
-
- - - - - -
- - - - -
INode* node
-
-protected
-
- -

Definition at line 45 of file LinkedList.hpp.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/Doxygen/db/d6f/classEMA__f.html b/docs/Doxygen/db/d6f/classEMA__f.html deleted file mode 100644 index 8f4828896..000000000 --- a/docs/Doxygen/db/d6f/classEMA__f.html +++ /dev/null @@ -1,292 +0,0 @@ - - - - - - - -Arduino Helpers: EMA_f Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

A class for single-pole infinite impulse response filters or exponential moving average filters. - More...

- -

#include <EMA.hpp>

-
-Collaboration diagram for EMA_f:
-
-
-
- - - - - - - - - - - -

-Public Member Functions

 EMA_f (float pole)
 Create an exponential moving average filter with a pole at the given location. More...
 
float filter (float value)
 Filter the input: Given \( x[n] \), calculate \( y[n] \). More...
 
float operator() (float value)
 Filter the input: Given \( x[n] \), calculate \( y[n] \). More...
 
- - - - - -

-Private Attributes

float alpha
 
float filtered = 0
 
-

Detailed Description

-

A class for single-pole infinite impulse response filters or exponential moving average filters.

-

This version uses floating point maths.

-

Difference equation: \( y[n] = \alpha·x[n]+(1-\alpha)·y[n-1] \) \( x \) is the input sequence, and \( y \) is the output sequence.

-

An in-depth explanation of the EMA filter

- -

Definition at line 93 of file EMA.hpp.

-

Constructor & Destructor Documentation

- -

◆ EMA_f()

- -
-
- - - - - -
- - - - - - - - -
EMA_f (float pole)
-
-inline
-
- -

Create an exponential moving average filter with a pole at the given location.

-
Parameters
- - -
poleThe pole of the filter ( \(1-\alpha\)).
- Should be a value in the range \( \left[0,1\right) \).
- Zero means no filtering, and closer to one means more filtering.
-
-
- -

Definition at line 105 of file EMA.hpp.

- -
-
-

Member Function Documentation

- -

◆ filter()

- -
-
- - - - - -
- - - - - - - - -
float filter (float value)
-
-inline
-
- -

Filter the input: Given \( x[n] \), calculate \( y[n] \).

-
Parameters
- - -
valueThe new raw input value.
-
-
-
Returns
The new filtered output value.
- -

Definition at line 114 of file EMA.hpp.

- -
-
- -

◆ operator()()

- -
-
- - - - - -
- - - - - - - - -
float operator() (float value)
-
-inline
-
- -

Filter the input: Given \( x[n] \), calculate \( y[n] \).

-
Parameters
- - -
valueThe new raw input value.
-
-
-
Returns
The new filtered output value.
- -

Definition at line 126 of file EMA.hpp.

- -
-
-

Member Data Documentation

- -

◆ alpha

- -
-
- - - - - -
- - - - -
float alpha
-
-private
-
- -

Definition at line 129 of file EMA.hpp.

- -
-
- -

◆ filtered

- -
-
- - - - - -
- - - - -
float filtered = 0
-
-private
-
- -

Definition at line 130 of file EMA.hpp.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/Doxygen/db/d93/ArrayHelpers_8cpp.html b/docs/Doxygen/db/d93/ArrayHelpers_8cpp.html deleted file mode 100644 index 60dfd3f14..000000000 --- a/docs/Doxygen/db/d93/ArrayHelpers_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: ArrayHelpers.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ArrayHelpers.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/db/d93/ArrayHelpers_8cpp_source.html b/docs/Doxygen/db/d93/ArrayHelpers_8cpp_source.html deleted file mode 100644 index 0f9aea820..000000000 --- a/docs/Doxygen/db/d93/ArrayHelpers_8cpp_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Arduino Helpers: ArrayHelpers.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ArrayHelpers.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
-
2 #include "ArrayHelpers.hpp"
-
3 #endif
-
- - - - - diff --git a/docs/Doxygen/db/d99/ExtendedInputOutput_8hpp__dep__incl.map b/docs/Doxygen/db/d99/ExtendedInputOutput_8hpp__dep__incl.map deleted file mode 100644 index 3ebc25a4e..000000000 --- a/docs/Doxygen/db/d99/ExtendedInputOutput_8hpp__dep__incl.map +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/db/d99/ExtendedInputOutput_8hpp__dep__incl.md5 b/docs/Doxygen/db/d99/ExtendedInputOutput_8hpp__dep__incl.md5 deleted file mode 100644 index af8bc6316..000000000 --- a/docs/Doxygen/db/d99/ExtendedInputOutput_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -b49df2bdd3aa1769225e2cc34c7f9596 \ No newline at end of file diff --git a/docs/Doxygen/db/d99/ExtendedInputOutput_8hpp__dep__incl.svg b/docs/Doxygen/db/d99/ExtendedInputOutput_8hpp__dep__incl.svg deleted file mode 100644 index 19cc29fda..000000000 --- a/docs/Doxygen/db/d99/ExtendedInputOutput_8hpp__dep__incl.svg +++ /dev/null @@ -1,337 +0,0 @@ - - - - - - -ExtendedInputOutput.hpp - - -Node1 - - -ExtendedInputOutput.hpp - - - - -Node2 - - -Button.hpp - - - - -Node1->Node2 - - - - -Node8 - - -ButtonMatrix.ipp - - - - -Node1->Node8 - - - - -Node10 - - -AnalogMultiplex.hpp - - - - -Node1->Node10 - - - - -Node11 - - -ExtendedInputOutput.cpp - - - - -Node1->Node11 - - - - -Node12 - - -ShiftRegisterOutBase.ipp - - - - -Node1->Node12 - - - - -Node15 - - -ShiftRegisterOut.ipp - - - - -Node1->Node15 - - - - -Node17 - - -SPIShiftRegisterOut.ipp - - - - -Node1->Node17 - - - - -Node18 - - -FilteredAnalog.hpp - - - - -Node1->Node18 - - - - -Node19 - - -LEDs.hpp - - - - -Node1->Node19 - - - - -Node21 - - -MAX7219_Base.hpp - - - - -Node1->Node21 - - - - -Node3 - - -Button.cpp - - - - -Node2->Node3 - - - - -Node4 - - -IncrementButton.hpp - - - - -Node2->Node4 - - - - -Node6 - - -IncrementDecrementButtons.hpp - - - - -Node2->Node6 - - - - -Node5 - - -IncrementButton.cpp - - - - -Node4->Node5 - - - - -Node7 - - -IncrementDecrementButtons.cpp - - - - -Node6->Node7 - - - - -Node9 - - -ButtonMatrix.hpp - - - - -Node8->Node9 - - - - -Node9->Node8 - - - - -Node13 - - -ShiftRegisterOutBase.hpp - - - - -Node12->Node13 - - - - -Node13->Node12 - - - - -Node14 - - -ShiftRegisterOut.hpp - - - - -Node13->Node14 - - - - -Node16 - - -SPIShiftRegisterOut.hpp - - - - -Node13->Node16 - - - - -Node14->Node15 - - - - -Node15->Node14 - - - - -Node16->Node17 - - - - -Node17->Node16 - - - - -Node20 - - -DotBarDisplayLEDs.hpp - - - - -Node19->Node20 - - - - -Node22 - - -MAX7219.hpp - - - - -Node21->Node22 - - - - -Node23 - - -MAX7219SevenSegmentDisplay.hpp - - - - -Node21->Node23 - - - - - diff --git a/docs/Doxygen/db/d9b/classIncrementButton__coll__graph.map b/docs/Doxygen/db/d9b/classIncrementButton__coll__graph.map deleted file mode 100644 index 10b596687..000000000 --- a/docs/Doxygen/db/d9b/classIncrementButton__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/db/d9b/classIncrementButton__coll__graph.md5 b/docs/Doxygen/db/d9b/classIncrementButton__coll__graph.md5 deleted file mode 100644 index 9c1ec69b8..000000000 --- a/docs/Doxygen/db/d9b/classIncrementButton__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -c10b6263d413c4d93c0c920a06d3e9e8 \ No newline at end of file diff --git a/docs/Doxygen/db/d9b/classIncrementButton__coll__graph.svg b/docs/Doxygen/db/d9b/classIncrementButton__coll__graph.svg deleted file mode 100644 index 57d3a2437..000000000 --- a/docs/Doxygen/db/d9b/classIncrementButton__coll__graph.svg +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - -IncrementButton - - -Node1 - - -IncrementButton - -- longPressState -- longPressRepeat -- state - -+ IncrementButton() -+ begin() -+ update() -+ getState() -# updateImplementation() - - - - -Node2 - - -Button - -- pin -- prevInput -- debouncedState -- prevBounceTime -- invertState -- debounceTime - -+ Button() -+ Button() -+ begin() -+ invert() -+ update() -+ getState() -+ previousBounceTime() -+ stableTime() -+ stableTime() -+ getName() -+ setDebounceTime() -+ getDebounceTime() - - - - -Node2->Node1 - - - -button - - - diff --git a/docs/Doxygen/db/d9d/IncrementButton_8cpp.html b/docs/Doxygen/db/d9d/IncrementButton_8cpp.html deleted file mode 100644 index 23bdebba7..000000000 --- a/docs/Doxygen/db/d9d/IncrementButton_8cpp.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - -Arduino Helpers: IncrementButton.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
IncrementButton.cpp File Reference
-
-
-
#include "IncrementButton.hpp"
-
-Include dependency graph for IncrementButton.cpp:
-
-
-
-
-

Go to the source code of this file.

-
- - - - diff --git a/docs/Doxygen/db/d9d/IncrementButton_8cpp_source.html b/docs/Doxygen/db/d9d/IncrementButton_8cpp_source.html deleted file mode 100644 index 0293b3d5b..000000000 --- a/docs/Doxygen/db/d9d/IncrementButton_8cpp_source.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - -Arduino Helpers: IncrementButton.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
IncrementButton.cpp
-
-
-Go to the documentation of this file.
1 #include "IncrementButton.hpp"
-
2 
-
3 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
4 
- -
6 
-
7 IncrementButton::State IncrementButton::updateImplementation() {
-
8  Button::State incrState = button.update();
-
9 
-
10  if (incrState == Button::Released) {
-
11  // Button released, don't do anything
-
12  // This one is first to minimize overhead
-
13  // because most of the time, the button will
-
14  // be released
-
15  } else if (incrState == Button::Rising) {
-
16  longPressState = Initial;
-
17  } else if (incrState == Button::Falling) {
-
18  return Increment;
-
19  } else { // if (incrState == Button::Pressed)
-
20  auto now = millis();
-
21  if (longPressState == LongPress) {
-
22  // still long pressed
-
23  if (now - longPressRepeat >= LONG_PRESS_REPEAT_DELAY) {
-
24  longPressRepeat += LONG_PRESS_REPEAT_DELAY;
-
25  return Increment;
-
26  }
-
27  } else if (button.stableTime(now) >= LONG_PRESS_DELAY) {
-
28  // long press starts
-
29  longPressState = LongPress;
-
30  longPressRepeat = now;
-
31  return Increment;
-
32  }
-
33  }
-
34  return Nothing;
-
35 }
-
36 
- -
38 
- -
-
#define BEGIN_AH_NAMESPACE
-
Input went from high to low (1,0)
Definition: Button.hpp:56
-
State
An enumeration of the different actions to be performed by the counter.
-
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
A class for buttons that increment some counter or setting.
-
constexpr unsigned long LONG_PRESS_REPEAT_DELAY
The time between increments/decremnets during a long press.
Definition: Settings.hpp:80
- -
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
#define END_AH_NAMESPACE
-
constexpr unsigned long LONG_PRESS_DELAY
The time in milliseconds before a press is registered as a long press.
Definition: Settings.hpp:77
-
State
An enumeration of the different states a button can be in.
Definition: Button.hpp:53
-
Input went from low to high (0,1)
Definition: Button.hpp:57
-
Input went from high to high (1,1)
Definition: Button.hpp:55
-
State update()
Update and return the state of the increment button.
- - - - diff --git a/docs/Doxygen/db/dae/IncrementButton_8cpp__incl.map b/docs/Doxygen/db/dae/IncrementButton_8cpp__incl.map deleted file mode 100644 index b1b7bd450..000000000 --- a/docs/Doxygen/db/dae/IncrementButton_8cpp__incl.map +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/db/dae/IncrementButton_8cpp__incl.md5 b/docs/Doxygen/db/dae/IncrementButton_8cpp__incl.md5 deleted file mode 100644 index 21d518dce..000000000 --- a/docs/Doxygen/db/dae/IncrementButton_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -e43a5e043e46385edffe7f7eb15a8566 \ No newline at end of file diff --git a/docs/Doxygen/db/dae/IncrementButton_8cpp__incl.svg b/docs/Doxygen/db/dae/IncrementButton_8cpp__incl.svg deleted file mode 100644 index b66042ad9..000000000 --- a/docs/Doxygen/db/dae/IncrementButton_8cpp__incl.svg +++ /dev/null @@ -1,512 +0,0 @@ - - - - - - -IncrementButton.cpp - - -Node1 - - -IncrementButton.cpp - - - - -Node2 - - -IncrementButton.hpp - - - - -Node1->Node2 - - - - -Node3 - - -AH/Settings/Warnings.hpp - - - - -Node2->Node3 - - - - -Node4 - - -Button.hpp - - - - -Node2->Node4 - - - - -Node4->Node3 - - - - -Node5 - - -AH/Hardware/ExtendedInput -Output/ExtendedInputOutput.hpp - - - - -Node4->Node5 - - - - -Node13 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node4->Node13 - - - - -Node5->Node3 - - - - -Node6 - - -Arduino.h - - - - -Node5->Node6 - - - - -Node7 - - -ExtendedIOElement.hpp - - - - -Node5->Node7 - - - - -Node7->Node3 - - - - -Node8 - - -AH/Hardware/Hardware --Types.hpp - - - - -Node7->Node8 - - - - -Node25 - - -AH/Containers/LinkedList.hpp - - - - -Node7->Node25 - - - - -Node8->Node3 - - - - -Node9 - - -AH/Containers/Array.hpp - - - - -Node8->Node9 - - - - -Node14 - - -NamespaceSettings.hpp - - - - -Node8->Node14 - - - - -Node20 - - -stdint.h - - - - -Node8->Node20 - - - - -Node9->Node3 - - - - -Node10 - - -AH/Error/Error.hpp - - - - -Node9->Node10 - - - - -Node19 - - -stddef.h - - - - -Node9->Node19 - - - - -Node23 - - -AH/STL/iterator - - - - -Node9->Node23 - - - - -Node24 - - -AH/STL/type_traits - - - - -Node9->Node24 - - - - -Node10->Node3 - - - - -Node11 - - -AH/Debug/Debug.hpp - - - - -Node10->Node11 - - - - -Node11->Node3 - - - - -Node12 - - -AH/PrintStream/PrintStream.hpp - - - - -Node11->Node12 - - - - -Node11->Node13 - - - - -Node22 - - -DebugVal.hpp - - - - -Node11->Node22 - - - - -Node12->Node3 - - - - -Node12->Node6 - - - - -Node13->Node3 - - - - -Node13->Node11 - - - - -Node13->Node14 - - - - -Node15 - - -Settings.hpp - - - - -Node13->Node15 - - - - -Node21 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node13->Node21 - - - - -Node16 - - -AH/Types/Frequency.hpp - - - - -Node15->Node16 - - - - -Node17 - - -AH/Hardware/ADCConfig.hpp - - - - -Node15->Node17 - - - - -Node18 - - -limits.h - - - - -Node15->Node18 - - - - -Node15->Node19 - - - - -Node15->Node20 - - - - -Node16->Node3 - - - - -Node16->Node14 - - - - -Node17->Node3 - - - - -Node17->Node6 - - - - -Node25->Node3 - - - - -Node25->Node11 - - - - -Node26 - - -AH/Math/MinMaxFix.hpp - - - - -Node25->Node26 - - - - -Node28 - - -stdlib.h - - - - -Node25->Node28 - - - - -Node29 - - -iterator - - - - -Node25->Node29 - - - - -Node26->Node3 - - - - -Node26->Node14 - - - - -Node27 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node26->Node27 - - - - -Node27->Node3 - - - - -Node27->Node6 - - - - - diff --git a/docs/Doxygen/db/daf/classMAX7219__Base__coll__graph.map b/docs/Doxygen/db/daf/classMAX7219__Base__coll__graph.map deleted file mode 100644 index 1bc534d3e..000000000 --- a/docs/Doxygen/db/daf/classMAX7219__Base__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/db/daf/classMAX7219__Base__coll__graph.md5 b/docs/Doxygen/db/daf/classMAX7219__Base__coll__graph.md5 deleted file mode 100644 index 67d64bda8..000000000 --- a/docs/Doxygen/db/daf/classMAX7219__Base__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -ff15e61b79b207caa171a2403455c65c \ No newline at end of file diff --git a/docs/Doxygen/db/daf/classMAX7219__Base__coll__graph.svg b/docs/Doxygen/db/daf/classMAX7219__Base__coll__graph.svg deleted file mode 100644 index 9abf0b277..000000000 --- a/docs/Doxygen/db/daf/classMAX7219__Base__coll__graph.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - -MAX7219_Base - - -Node1 - - -MAX7219_Base - -+ DECODEMODE -+ INTENSITY -+ SCANLIMIT -+ SHUTDOWN -+ DISPLAYTEST -- loadPin -- settings - -+ MAX7219_Base() -+ init() -+ clear() -+ send() -+ sendRaw() -+ setIntensity() - - - - - diff --git a/docs/Doxygen/db/dbc/ShiftRegisterOut_8ipp__dep__incl.map b/docs/Doxygen/db/dbc/ShiftRegisterOut_8ipp__dep__incl.map deleted file mode 100644 index c718a1853..000000000 --- a/docs/Doxygen/db/dbc/ShiftRegisterOut_8ipp__dep__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/db/dbc/ShiftRegisterOut_8ipp__dep__incl.md5 b/docs/Doxygen/db/dbc/ShiftRegisterOut_8ipp__dep__incl.md5 deleted file mode 100644 index d9d612ad3..000000000 --- a/docs/Doxygen/db/dbc/ShiftRegisterOut_8ipp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -04f5d2979cd23842db91faefa7ae1456 \ No newline at end of file diff --git a/docs/Doxygen/db/dbc/ShiftRegisterOut_8ipp__dep__incl.svg b/docs/Doxygen/db/dbc/ShiftRegisterOut_8ipp__dep__incl.svg deleted file mode 100644 index 4643de5cb..000000000 --- a/docs/Doxygen/db/dbc/ShiftRegisterOut_8ipp__dep__incl.svg +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - -ShiftRegisterOut.ipp - - -Node1 - - -ShiftRegisterOut.ipp - - - - -Node2 - - -ShiftRegisterOut.hpp - - - - -Node1->Node2 - - - - -Node2->Node1 - - - - - diff --git a/docs/Doxygen/db/dbe/PrintStream_8hpp__incl.map b/docs/Doxygen/db/dbe/PrintStream_8hpp__incl.map deleted file mode 100644 index ec10105cc..000000000 --- a/docs/Doxygen/db/dbe/PrintStream_8hpp__incl.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/Doxygen/db/dbe/PrintStream_8hpp__incl.md5 b/docs/Doxygen/db/dbe/PrintStream_8hpp__incl.md5 deleted file mode 100644 index 50c778a56..000000000 --- a/docs/Doxygen/db/dbe/PrintStream_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -4d4443e4140fab7ddbec634a058e7f22 \ No newline at end of file diff --git a/docs/Doxygen/db/dbe/PrintStream_8hpp__incl.svg b/docs/Doxygen/db/dbe/PrintStream_8hpp__incl.svg deleted file mode 100644 index deda9799d..000000000 --- a/docs/Doxygen/db/dbe/PrintStream_8hpp__incl.svg +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - -PrintStream.hpp - - -Node1 - - -PrintStream.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -Arduino.h - - - - -Node1->Node3 - - - - - diff --git a/docs/Doxygen/db/dd3/group__AH__ExtIO.html b/docs/Doxygen/db/dd3/group__AH__ExtIO.html deleted file mode 100644 index 23e01deb5..000000000 --- a/docs/Doxygen/db/dd3/group__AH__ExtIO.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - -Arduino Helpers: Extended Input/Output - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
- -
-
Extended Input/Output
-
-
- -

All Elements that extend the number of IO pins of the Arduino: Currently only shift registers and multiplexers. -More...

- - - - - - - - - - - - - - -

-Classes

class  AnalogMultiplex< N >
 A class for reading multiplexed analog inputs. More...
 
class  ShiftRegisterOut< N >
 A class for serial-in/parallel-out shift registers, like the 74HC595. More...
 
class  ShiftRegisterOutBase< N >
 A class for serial-in/parallel-out shift registers, like the 74HC595. More...
 
class  SPIShiftRegisterOut< N >
 A class for serial-in/parallel-out shift registers, like the 74HC595 that are connected to the SPI bus. More...
 
- - - - - - - -

-Typedefs

using CD74HC4067 = AnalogMultiplex< 4 >
 An alias for AnalogMultiplex<4> to use with CD74HC4067 analog multiplexers. More...
 
using CD74HC4051 = AnalogMultiplex< 3 >
 An alias for AnalogMultiplex<3> to use with CD74HC4051 analog multiplexers. More...
 
-

Detailed Description

-

All Elements that extend the number of IO pins of the Arduino: Currently only shift registers and multiplexers.

-

Typedef Documentation

- -

◆ CD74HC4067

- -
-
- - - - -
using CD74HC4067 = AnalogMultiplex<4>
-
- -

An alias for AnalogMultiplex<4> to use with CD74HC4067 analog multiplexers.

- -

Definition at line 146 of file AnalogMultiplex.hpp.

- -
-
- -

◆ CD74HC4051

- -
-
- - - - -
using CD74HC4051 = AnalogMultiplex<3>
-
- -

An alias for AnalogMultiplex<3> to use with CD74HC4051 analog multiplexers.

- -

Definition at line 154 of file AnalogMultiplex.hpp.

- -
-
-
- - - - diff --git a/docs/Doxygen/db/dd8/Settings_8cpp.html b/docs/Doxygen/db/dd8/Settings_8cpp.html deleted file mode 100644 index 54c646652..000000000 --- a/docs/Doxygen/db/dd8/Settings_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: Settings.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Settings.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/db/dd8/Settings_8cpp_source.html b/docs/Doxygen/db/dd8/Settings_8cpp_source.html deleted file mode 100644 index 8952ed4e9..000000000 --- a/docs/Doxygen/db/dd8/Settings_8cpp_source.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - -Arduino Helpers: Settings.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Settings.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
-
2 // #include "Settings.hpp"
-
3 #endif
-
- - - - diff --git a/docs/Doxygen/db/de9/classBitArray.html b/docs/Doxygen/db/de9/classBitArray.html deleted file mode 100644 index 867d465d7..000000000 --- a/docs/Doxygen/db/de9/classBitArray.html +++ /dev/null @@ -1,553 +0,0 @@ - - - - - - - -Arduino Helpers: BitArray< N > Class Template Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

A class for arrays of bits. - More...

- -

#include <BitArray.hpp>

-
-Collaboration diagram for BitArray< N >:
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

bool get (uint8_t bitIndex) const
 Get the value of the given bit. More...
 
void set (uint8_t bitIndex)
 Set the value of the given bit to 1. More...
 
void clear (uint8_t bitIndex)
 Clear the value of the given bit to 0. More...
 
void set (uint8_t bitIndex, bool state)
 Set the value of the given bit to the given state. More...
 
uint8_t safeIndex (uint8_t byteIndex) const
 Check the given byte index, and return it if it is within the bounds of the array, otherwise, throw an error, and return the last valid index. More...
 
uint8_t getByte (uint8_t byteIndex) const
 Get the byte at the given index. More...
 
uint8_t getBufferLength () const
 Get the buffer length in bytes. More...
 
- - - - - - - -

-Private Member Functions

uint8_t getBufferIndex (uint8_t bitIndex) const
 
uint8_t getBufferBit (uint8_t bitIndex) const
 
uint8_t getBufferMask (uint8_t bitIndex) const
 
- - - -

-Private Attributes

uint8_t buffer [bufferLength] = {}
 
- - - -

-Static Private Attributes

constexpr static uint8_t bufferLength = (uint8_t)((N + 7) / 8)
 
-

Detailed Description

-

template<uint8_t N>
-class BitArray< N >

- -

A class for arrays of bits.

-
Template Parameters
- - -
NThe number of bits.
-
-
- -

Definition at line 25 of file BitArray.hpp.

-

Member Function Documentation

- -

◆ get()

- -
-
- - - - - -
- - - - - - - - -
bool get (uint8_t bitIndex) const
-
-inline
-
- -

Get the value of the given bit.

-
Parameters
- - -
bitIndexThe (zero-based) index of the bit to read.
-
-
- -

Definition at line 33 of file BitArray.hpp.

- -
-
- -

◆ set() [1/2]

- -
-
- - - - - -
- - - - - - - - -
void set (uint8_t bitIndex)
-
-inline
-
- -

Set the value of the given bit to 1.

-
Parameters
- - -
bitIndexThe (zero-based) index of the bit to set.
-
-
- -

Definition at line 43 of file BitArray.hpp.

- -
-
- -

◆ clear()

- -
-
- - - - - -
- - - - - - - - -
void clear (uint8_t bitIndex)
-
-inline
-
- -

Clear the value of the given bit to 0.

-
Parameters
- - -
bitIndexThe (zero-based) index of the bit to clear.
-
-
- -

Definition at line 53 of file BitArray.hpp.

- -
-
- -

◆ set() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void set (uint8_t bitIndex,
bool state 
)
-
-inline
-
- -

Set the value of the given bit to the given state.

-
Parameters
- - - -
bitIndexThe (zero-based) index of the bit to set.
stateThe value to set the bit to.
-
-
- -

Definition at line 65 of file BitArray.hpp.

- -
-
- -

◆ safeIndex()

- -
-
- - - - - -
- - - - - - - - -
uint8_t safeIndex (uint8_t byteIndex) const
-
-inline
-
- -

Check the given byte index, and return it if it is within the bounds of the array, otherwise, throw an error, and return the last valid index.

-
Parameters
- - -
byteIndexThe index to check.
-
-
- -

Definition at line 77 of file BitArray.hpp.

- -
-
- -

◆ getByte()

- -
-
- - - - - -
- - - - - - - - -
uint8_t getByte (uint8_t byteIndex) const
-
-inline
-
- -

Get the byte at the given index.

-

This function can be used to quickly access all of the bits, to send them out to a shift register, for example.

-
Note
No bounds checking is performed.
-
Parameters
- - -
byteIndexThe index of the byte within the array.
-
-
- -

Definition at line 99 of file BitArray.hpp.

- -
-
- -

◆ getBufferLength()

- -
-
- - - - - -
- - - - - - - -
uint8_t getBufferLength () const
-
-inline
-
- -

Get the buffer length in bytes.

- -

Definition at line 107 of file BitArray.hpp.

- -
-
- -

◆ getBufferIndex()

- -
-
- - - - - -
- - - - - - - - -
uint8_t getBufferIndex (uint8_t bitIndex) const
-
-inlineprivate
-
- -

Definition at line 110 of file BitArray.hpp.

- -
-
- -

◆ getBufferBit()

- -
-
- - - - - -
- - - - - - - - -
uint8_t getBufferBit (uint8_t bitIndex) const
-
-inlineprivate
-
- -

Definition at line 113 of file BitArray.hpp.

- -
-
- -

◆ getBufferMask()

- -
-
- - - - - -
- - - - - - - - -
uint8_t getBufferMask (uint8_t bitIndex) const
-
-inlineprivate
-
- -

Definition at line 114 of file BitArray.hpp.

- -
-
-

Member Data Documentation

- -

◆ bufferLength

- -
-
- - - - - -
- - - - -
constexpr static uint8_t bufferLength = (uint8_t)((N + 7) / 8)
-
-staticconstexprprivate
-
- -

Definition at line 118 of file BitArray.hpp.

- -
-
- -

◆ buffer

- -
-
- - - - - -
- - - - -
uint8_t buffer[bufferLength] = {}
-
-private
-
- -

Definition at line 119 of file BitArray.hpp.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/Doxygen/db/df0/AnalogMultiplex_8hpp__incl.map b/docs/Doxygen/db/df0/AnalogMultiplex_8hpp__incl.map deleted file mode 100644 index cb35af291..000000000 --- a/docs/Doxygen/db/df0/AnalogMultiplex_8hpp__incl.map +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/db/df0/AnalogMultiplex_8hpp__incl.md5 b/docs/Doxygen/db/df0/AnalogMultiplex_8hpp__incl.md5 deleted file mode 100644 index 65898f5ec..000000000 --- a/docs/Doxygen/db/df0/AnalogMultiplex_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -4302a54fb48b97f3f48eff7961a7daa9 \ No newline at end of file diff --git a/docs/Doxygen/db/df0/AnalogMultiplex_8hpp__incl.svg b/docs/Doxygen/db/df0/AnalogMultiplex_8hpp__incl.svg deleted file mode 100644 index bd5359aa1..000000000 --- a/docs/Doxygen/db/df0/AnalogMultiplex_8hpp__incl.svg +++ /dev/null @@ -1,549 +0,0 @@ - - - - - - -AnalogMultiplex.hpp - - -Node1 - - -AnalogMultiplex.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -ExtendedInputOutput.hpp - - - - -Node1->Node3 - - - - -Node7 - - -AH/Containers/Array.hpp - - - - -Node1->Node7 - - - - -Node26 - - -stdlib.h - - - - -Node1->Node26 - - - - -Node28 - - -StaticSizeExtendedIOElement.hpp - - - - -Node1->Node28 - - - - -Node3->Node2 - - - - -Node4 - - -Arduino.h - - - - -Node3->Node4 - - - - -Node5 - - -ExtendedIOElement.hpp - - - - -Node3->Node5 - - - - -Node5->Node2 - - - - -Node6 - - -AH/Hardware/Hardware --Types.hpp - - - - -Node5->Node6 - - - - -Node23 - - -AH/Containers/LinkedList.hpp - - - - -Node5->Node23 - - - - -Node6->Node2 - - - - -Node6->Node7 - - - - -Node12 - - -NamespaceSettings.hpp - - - - -Node6->Node12 - - - - -Node18 - - -stdint.h - - - - -Node6->Node18 - - - - -Node7->Node2 - - - - -Node8 - - -AH/Error/Error.hpp - - - - -Node7->Node8 - - - - -Node17 - - -stddef.h - - - - -Node7->Node17 - - - - -Node21 - - -AH/STL/iterator - - - - -Node7->Node21 - - - - -Node22 - - -AH/STL/type_traits - - - - -Node7->Node22 - - - - -Node8->Node2 - - - - -Node9 - - -AH/Debug/Debug.hpp - - - - -Node8->Node9 - - - - -Node9->Node2 - - - - -Node10 - - -AH/PrintStream/PrintStream.hpp - - - - -Node9->Node10 - - - - -Node11 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node9->Node11 - - - - -Node20 - - -DebugVal.hpp - - - - -Node9->Node20 - - - - -Node10->Node2 - - - - -Node10->Node4 - - - - -Node11->Node2 - - - - -Node11->Node9 - - - - -Node11->Node12 - - - - -Node13 - - -Settings.hpp - - - - -Node11->Node13 - - - - -Node19 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node11->Node19 - - - - -Node14 - - -AH/Types/Frequency.hpp - - - - -Node13->Node14 - - - - -Node15 - - -AH/Hardware/ADCConfig.hpp - - - - -Node13->Node15 - - - - -Node16 - - -limits.h - - - - -Node13->Node16 - - - - -Node13->Node17 - - - - -Node13->Node18 - - - - -Node14->Node2 - - - - -Node14->Node12 - - - - -Node15->Node2 - - - - -Node15->Node4 - - - - -Node23->Node2 - - - - -Node23->Node9 - - - - -Node24 - - -AH/Math/MinMaxFix.hpp - - - - -Node23->Node24 - - - - -Node23->Node26 - - - - -Node27 - - -iterator - - - - -Node23->Node27 - - - - -Node24->Node2 - - - - -Node24->Node12 - - - - -Node25 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node24->Node25 - - - - -Node25->Node2 - - - - -Node25->Node4 - - - - -Node28->Node2 - - - - -Node28->Node5 - - - - -Node29 - - -AH/Containers/ArrayHelpers.hpp - - - - -Node28->Node29 - - - - -Node29->Node2 - - - - -Node29->Node7 - - - - -Node29->Node10 - - - - -Node30 - - -AH/STL/algorithm - - - - -Node29->Node30 - - - - - diff --git a/docs/Doxygen/db/df8/Blink-Frequency-Buttons_8ino-example.html b/docs/Doxygen/db/df8/Blink-Frequency-Buttons_8ino-example.html deleted file mode 100644 index ef5cfa035..000000000 --- a/docs/Doxygen/db/df8/Blink-Frequency-Buttons_8ino-example.html +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - - -Arduino Helpers: Blink-Frequency-Buttons.ino - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
Blink-Frequency-Buttons.ino
-
-
-

-Blink-Frequency-Buttons

-

This examples shows how to use two push buttons to set the frequency at which an LED blinks.

-
Boards:
AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32
-

-Connections

-
    -
  • 2: Momentary push button (other pin to ground)
  • -
  • 3: Momentary push button (other pin to ground)
  • -
-

The internal pull-up resistors will be enabled.

-

-Behavior

-
    -
  • If you press the first push button, the LED blinks faster.
  • -
  • If you press the second push button, the LED blinks slower.
  • -
  • You can press and hold one of the push buttons to change the frequency by multiple steps.
  • -
  • If you press both buttons at the same time, the frequency is reset to the initial default frequency.
  • -
-

Written by PieterP, 2019-12-10
- https://github.com/tttapa/Arduino-Helpers

-
- -
- - -
-
const unsigned long maxInterval = 2000; // ms
-
const unsigned long minInterval = 100; // ms
-
const unsigned long defaultInterval = 500; // ms
-
const int intervalDelta = 100; // ms
-
-
IncrementDecrementButtons buttons = {2, 3};
-
Timer<millis> timer = defaultInterval;
-
-
void setup() {
-
pinMode(LED_BUILTIN, OUTPUT);
-
buttons.begin();
-
Serial.begin(115200);
-
}
-
-
void loop() {
-
// toggle the LED when the given number of milliseconds have passed
-
if (timer)
-
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
-
-
// read the buttons, and change interval accordingly
-
switch (buttons.update()) {
- -
timer.setInterval(max(timer.getInterval() - intervalDelta, minInterval));
-
break;
- -
timer.setInterval(min(timer.getInterval() + intervalDelta, maxInterval));
-
break;
- -
timer.setInterval(defaultInterval);
-
break;
-
default: break;
-
}
-
-
// print the new interval if a button was pushed
- -
Serial.println(timer.getInterval());
-
}
-
-
State update()
Update and return the state of the increment/decrement button.
- -
void digitalWrite(pin_t pin, uint8_t val)
An ExtIO version of the Arduino function.
-
int digitalRead(pin_t pin)
An ExtIO version of the Arduino function.
-
A class for easily managing timed events.
-
The counter should be reset to the initial value.
-
unsigned long getInterval() const
Get the interval of the timer.
-
void setInterval(unsigned long interval)
Set the interval of the timer.
-
void pinMode(pin_t pin, uint8_t mode)
An ExtIO version of the Arduino function.
-
A class for buttons that increment and decrement some counter or setting.
-
Dummy header file for Arduino builder. You have to add this file first, so the other headers are in t...
- -
constexpr auto max(const T &a, const U &b) -> decltype(a< b ? b :a)
Return the larger of two numbers/objects.
Definition: MinMaxFix.hpp:22
-
const uint8_t OUTPUT
-
The counter should not be incremented.
-
State getState() const
Return the state of the increment/decrement button without updating it.
-
The counter should be incremented.
-
The counter should be decremented.
-
constexpr auto min(const T &a, const U &b) -> decltype(b< a ? b :a)
Return the smaller of two numbers/objects.
Definition: MinMaxFix.hpp:15
- - - - - diff --git a/docs/Doxygen/dc/d05/classSPIShiftRegisterOut-members.html b/docs/Doxygen/dc/d05/classSPIShiftRegisterOut-members.html deleted file mode 100644 index 5412efc12..000000000 --- a/docs/Doxygen/dc/d05/classSPIShiftRegisterOut-members.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
SPIShiftRegisterOut< N > Member List
-
-
- -

This is the complete list of members for SPIShiftRegisterOut< N >, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
analogRead(pin_t pin) override __attribute__((deprecated))ShiftRegisterOutBase< N >inlinevirtual
analogWrite(pin_t pin, analog_t val) override __attribute__((deprecated))ShiftRegisterOutBase< N >inlinevirtual
begin() overrideSPIShiftRegisterOut< N >virtual
beginAll()ExtendedIOElementstatic
bitOrderShiftRegisterOutBase< N >protected
BitOrder_t typedefSPIShiftRegisterOut< N >
blue(pin_t id)ShiftRegisterOutBase< N >
bluePins()ShiftRegisterOutBase< N >
bufferShiftRegisterOutBase< N >protected
digitalRead(pin_t pin) overrideShiftRegisterOutBase< N >virtual
digitalWrite(pin_t pin, uint8_t val) overrideShiftRegisterOutBase< N >virtual
dirtyShiftRegisterOutBase< N >protected
elementsExtendedIOElementprivatestatic
endExtendedIOElementprivate
ExtendedIOElement(pin_t length)ExtendedIOElementprotected
getAll()ExtendedIOElementstatic
getEnd() constExtendedIOElement
getLength() constExtendedIOElement
getStart() constExtendedIOElement
green(pin_t id)ShiftRegisterOutBase< N >
greenPins()ShiftRegisterOutBase< N >
latchPinShiftRegisterOutBase< N >protected
length()StaticSizeExtendedIOElement< N >inlinestatic
nextDoublyLinkable< ExtendedIOElement >protected
offsetExtendedIOElementprivatestatic
operator[](pin_t pin) constExtendedIOElement
pin(pin_t pin) constExtendedIOElement
pinMode(pin_t pin, uint8_t mode) override __attribute__((deprecated))ShiftRegisterOutBase< N >inlinevirtual
pins() constStaticSizeExtendedIOElement< N >inline
previousDoublyLinkable< ExtendedIOElement >protected
red(pin_t id)ShiftRegisterOutBase< N >
redPins()ShiftRegisterOutBase< N >
ShiftRegisterOutBase(pin_t latchPin, BitOrder_t bitOrder)ShiftRegisterOutBase< N >protected
SPIShiftRegisterOut(pin_t latchPin=SS, BitOrder_t bitOrder=MSBFIRST)SPIShiftRegisterOut< N >
startExtendedIOElementprivate
StaticSizeExtendedIOElement()StaticSizeExtendedIOElement< N >inlineprotected
update() overrideSPIShiftRegisterOut< N >virtual
~DoublyLinkable()=defaultDoublyLinkable< ExtendedIOElement >protectedvirtual
~ExtendedIOElement()ExtendedIOElementvirtual
- - - - diff --git a/docs/Doxygen/dc/d09/classShiftRegisterOutBase__coll__graph.map b/docs/Doxygen/dc/d09/classShiftRegisterOutBase__coll__graph.map deleted file mode 100644 index 43d95ed5c..000000000 --- a/docs/Doxygen/dc/d09/classShiftRegisterOutBase__coll__graph.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/Doxygen/dc/d09/classShiftRegisterOutBase__coll__graph.md5 b/docs/Doxygen/dc/d09/classShiftRegisterOutBase__coll__graph.md5 deleted file mode 100644 index 42ba0b1e8..000000000 --- a/docs/Doxygen/dc/d09/classShiftRegisterOutBase__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -8912ee86926b08d02703b657511c0ee6 \ No newline at end of file diff --git a/docs/Doxygen/dc/d09/classShiftRegisterOutBase__coll__graph.svg b/docs/Doxygen/dc/d09/classShiftRegisterOutBase__coll__graph.svg deleted file mode 100644 index 799a292bb..000000000 --- a/docs/Doxygen/dc/d09/classShiftRegisterOutBase__coll__graph.svg +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - -ShiftRegisterOutBase< N > - - -Node1 - - -ShiftRegisterOutBase< N > - -# latchPin -# bitOrder -# buffer -# dirty - -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogRead() -+ analogWrite() -+ red() -+ redPins() -+ green() -+ greenPins() -+ blue() -+ bluePins() -# ShiftRegisterOutBase() - - - - -Node2 - - -StaticSizeExtendedIOElement< N > - - - -+ pins() -+ length() -# StaticSizeExtendedIOElement() - - - - -Node2->Node1 - - - - -Node3 - - -ExtendedIOElement - -- length -- start -- end -- offset - -+ ~ExtendedIOElement() -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogWrite() -+ analogRead() -+ begin() -+ update() -+ pin() -+ operator[]() -+ getLength() -+ getEnd() -+ getStart() -+ beginAll() -+ getAll() -# ExtendedIOElement() - - - - -Node3->Node2 - - - - -Node4 - - -DoublyLinkable< Extended -IOElement > - - - -# ~DoublyLinkable() - - - - -Node3->Node4 - - - #next -#previous - - -Node5 - - -DoublyLinkedList< Extended -IOElement > - - - -+ append() -+ append() -+ insertBefore() -+ insertBefore() -+ insertSorted() -+ insertSorted() -+ remove() -+ remove() -+ moveDown() -+ couldContain() -+ begin() -+ begin() -+ end() -+ end() -+ rbegin() -+ rbegin() -+ rend() -+ rend() -+ getFirst() -+ getLast() - - - - -Node3->Node5 - - - -last --first - - -Node4->Node3 - - - - -Node5->Node3 - - - -elements - - - diff --git a/docs/Doxygen/dc/d19/classMAX7219.html b/docs/Doxygen/dc/d19/classMAX7219.html deleted file mode 100644 index 866189819..000000000 --- a/docs/Doxygen/dc/d19/classMAX7219.html +++ /dev/null @@ -1,1369 +0,0 @@ - - - - - - - -Arduino Helpers: MAX7219 Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

A class for LED outputs using the MAX7219 LED display driver. - More...

- -

#include <MAX7219.hpp>

-
-Inheritance diagram for MAX7219:
-
-
-
-
-Collaboration diagram for MAX7219:
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 MAX7219 (pin_t loadPin)
 Create a MAX7219 ExtendedIOElement. More...
 
void begin () override
 Initialize. More...
 
void pinMode (pin_t pin, uint8_t mode) override __attribute__((deprecated))
 The pinMode function is not implemented because the mode is OUTPUT by definition. More...
 
void digitalWrite (pin_t pin, uint8_t val) override
 Set the state of a given output pin. More...
 
int digitalRead (pin_t pin) override
 Get the current state of a given output. More...
 
analog_t analogRead (pin_t pin) override __attribute__((deprecated))
 The analogRead function is deprecated because a MAX7219 is always digital. More...
 
void analogWrite (pin_t pin, analog_t val) override __attribute__((deprecated))
 The analogWrite function is deprecated because a MAX7219 is always digital. More...
 
void update () override
 Write the buffer to the display. More...
 
void init ()
 Initialize the Arduino pins, SPI, and the MAX7219. More...
 
void clear ()
 Turn off all LEDs. More...
 
void send (uint8_t digit, uint8_t value)
 Send the value to the given digit. More...
 
void sendRaw (uint8_t opcode, uint8_t value)
 Send a raw opcode and value to the MAX7219. More...
 
void setIntensity (uint8_t intensity)
 Set the intensity of the LEDs. More...
 
Array< pin_t, N > pins () const
 Get an array containing all pins of the element. More...
 
pin_t pin (pin_t pin) const
 Get the extended IO pin number of a given physical pin of this extended IO element. More...
 
pin_t operator[] (pin_t pin) const
 Get the extended IO pin number of a given physical pin of this extended IO element. More...
 
pin_t getLength () const
 Get the number of pins this IO element has. More...
 
pin_t getEnd () const
 Get the largest global extended IO pin number that belongs to this extended IO element. More...
 
pin_t getStart () const
 Get the smallest global extended IO pin number that belongs to this extended IO element. More...
 
- - - - - - - - - -

-Static Public Member Functions

static constexpr uint16_t length ()
 
static void beginAll ()
 Initialize all extended IO elements. More...
 
static DoublyLinkedList< ExtendedIOElement > & getAll ()
 Get the list of all Extended IO elements. More...
 
- - - - - - - - - - - -

-Static Public Attributes

static constexpr uint8_t DECODEMODE = 9
 
static constexpr uint8_t INTENSITY = 10
 
static constexpr uint8_t SCANLIMIT = 11
 
static constexpr uint8_t SHUTDOWN = 12
 
static constexpr uint8_t DISPLAYTEST = 15
 
- - - - - -

-Protected Attributes

ExtendedIOElementnext
 
ExtendedIOElementprevious
 
- - - - - - - - - - - -

-Private Attributes

BitArray< 8 *8 > buffer
 
pin_t loadPin
 
SPISettings settings = {SPI_MAX_SPEED, MSBFIRST, SPI_MODE0}
 
const pin_t start
 
const pin_t end
 
- - - - - -

-Static Private Attributes

static pin_t offset = NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS
 
static DoublyLinkedList< ExtendedIOElementelements
 
-

Detailed Description

-

A class for LED outputs using the MAX7219 LED display driver.

-

The SPI interface is used.

-
Todo:
Wiring diagram for SPI connection.
- -

Definition at line 21 of file MAX7219.hpp.

-

Constructor & Destructor Documentation

- -

◆ MAX7219()

- -
-
- - - - - -
- - - - - - - - -
MAX7219 (pin_t loadPin)
-
-inline
-
- -

Create a MAX7219 ExtendedIOElement.

-
Parameters
- - -
loadPinThe pin connected to the load pin (C̄S̄) of the MAX7219.
-
-
- -

Definition at line 29 of file MAX7219.hpp.

- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - -
- - - - - - - -
void begin ()
-
-inlineoverridevirtual
-
- -

Initialize.

-
See also
MAX7219::init
- -

Implements ExtendedIOElement.

- -

Definition at line 33 of file MAX7219.hpp.

- -
-
- -

◆ pinMode()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void pinMode (pin_t pin,
uint8_t mode 
)
-
-inlineoverridevirtual
-
- -

The pinMode function is not implemented because the mode is OUTPUT by definition.

- -

Implements ExtendedIOElement.

- -

Definition at line 39 of file MAX7219.hpp.

- -
-
- -

◆ digitalWrite()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void digitalWrite (pin_t pin,
uint8_t val 
)
-
-inlineoverridevirtual
-
- -

Set the state of a given output pin.

-
Parameters
- - - -
pinThe output pin to set.
valThe value to set the output to. (Either HIGH (1) or LOW (0))
-
-
- -

Implements ExtendedIOElement.

- -

Definition at line 53 of file MAX7219.hpp.

- -
-
- -

◆ digitalRead()

- -
-
- - - - - -
- - - - - - - - -
int digitalRead (pin_t pin)
-
-inlineoverridevirtual
-
- -

Get the current state of a given output.

-
Parameters
- - -
pinThe output to read the state from.
-
-
-
Return values
- - - -
0The state of the output is LOW.
1The state of the output is HIGH.
-
-
- -

Implements ExtendedIOElement.

- -

Definition at line 68 of file MAX7219.hpp.

- -
-
- -

◆ analogRead()

- -
-
- - - - - -
- - - - - - - - -
analog_t analogRead (pin_t pin)
-
-inlineoverridevirtual
-
- -

The analogRead function is deprecated because a MAX7219 is always digital.

-
Parameters
- - -
pinThe output to read the state from.
-
-
-
Return values
- - - -
0The state of the output is LOW.
1023The state of the output is HIGH.
-
-
- -

Implements ExtendedIOElement.

- -

Definition at line 80 of file MAX7219.hpp.

- -
-
- -

◆ analogWrite()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void analogWrite (pin_t pin,
analog_t val 
)
-
-inlineoverridevirtual
-
- -

The analogWrite function is deprecated because a MAX7219 is always digital.

-
Parameters
- - - -
pinThe output to set.
valThe value to set the output to. A value greater or equal to 0x80 will set the output to a HIGH state, a value less than 0x80 will set the output to a LOW state.
-
-
-
Note
This function is just implemented for compatibility. Don't use it in new code.
- -

Implements ExtendedIOElement.

- -

Definition at line 97 of file MAX7219.hpp.

- -
-
- -

◆ update()

- -
-
- - - - - -
- - - - - - - -
void update ()
-
-inlineoverridevirtual
-
- -

Write the buffer to the display.

-
Todo:
Does this really have to happen on each update?
- -

Implements ExtendedIOElement.

- -

Definition at line 107 of file MAX7219.hpp.

- -
-
- -

◆ init()

- -
-
- - - - - -
- - - - - - - -
void init ()
-
-inlineinherited
-
- -

Initialize the Arduino pins, SPI, and the MAX7219.

-
Todo:
Rename to begin.
- -

Definition at line 43 of file MAX7219_Base.hpp.

- -
-
- -

◆ clear()

- -
-
- - - - - -
- - - - - - - -
void clear ()
-
-inlineinherited
-
- -

Turn off all LEDs.

- -

Definition at line 58 of file MAX7219_Base.hpp.

- -
-
- -

◆ send()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void send (uint8_t digit,
uint8_t value 
)
-
-inlineinherited
-
- -

Send the value to the given digit.

-
Parameters
- - - -
digitThe digit or row to set [0, 7].
valueThe value to set the row to.
-
-
- -

Definition at line 71 of file MAX7219_Base.hpp.

- -
-
- -

◆ sendRaw()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void sendRaw (uint8_t opcode,
uint8_t value 
)
-
-inlineinherited
-
- -

Send a raw opcode and value to the MAX7219.

-
Parameters
- - - -
opcodeThe opcode to send.
valueThe value to send.
-
-
- -

Definition at line 83 of file MAX7219_Base.hpp.

- -
-
- -

◆ setIntensity()

- -
-
- - - - - -
- - - - - - - - -
void setIntensity (uint8_t intensity)
-
-inlineinherited
-
- -

Set the intensity of the LEDs.

-
Parameters
- - -
intensityThe intensity [0, 15].
-
-
- -

Definition at line 98 of file MAX7219_Base.hpp.

- -
-
- -

◆ pins()

- -
-
- - - - - -
- - - - - - - -
Array<pin_t, N> pins () const
-
-inlineinherited
-
- -

Get an array containing all pins of the element.

- -

Definition at line 27 of file StaticSizeExtendedIOElement.hpp.

- -
-
- -

◆ length()

- -
-
- - - - - -
- - - - - - - -
static constexpr uint16_t length ()
-
-inlinestaticconstexprinherited
-
- -

Definition at line 31 of file StaticSizeExtendedIOElement.hpp.

- -
-
- -

◆ beginAll()

- -
-
- - - - - -
- - - - - - - -
void beginAll ()
-
-staticinherited
-
- -

Initialize all extended IO elements.

- -

Definition at line 23 of file ExtendedIOElement.cpp.

- -
-
- -

◆ pin()

- -
-
- - - - - -
- - - - - - - - -
pin_t pin (pin_t pin) const
-
-inherited
-
- -

Get the extended IO pin number of a given physical pin of this extended IO element.

-
Parameters
- - -
pinThe zero-based physical pin number of this IO element.
-
-
-
Returns
The global, unique extended IO pin number for the given pin.
-
Examples
Toggle-LEDs.ino.
-
- -

Definition at line 28 of file ExtendedIOElement.cpp.

- -
-
- -

◆ operator[]()

- -
-
- - - - - -
- - - - - - - - -
pin_t operator[] (pin_t pin) const
-
-inherited
-
- -

Get the extended IO pin number of a given physical pin of this extended IO element.

-


- It is alias for ExtendedIOElement::pin.

Parameters
- - -
pinThe zero-based physical pin number of this IO element.
-
-
-
Returns
The global, unique extended IO pin number for the given pin.
- -

Definition at line 43 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getLength()

- -
-
- - - - - -
- - - - - - - -
pin_t getLength () const
-
-inherited
-
- -

Get the number of pins this IO element has.

-
Returns
The number of pins this IO element has.
-
Examples
1.AnalogReadSerial.ino, and 2.DigitalReadSerial.ino.
-
- -

Definition at line 45 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getEnd()

- -
-
- - - - - -
- - - - - - - -
pin_t getEnd () const
-
-inherited
-
- -

Get the largest global extended IO pin number that belongs to this extended IO element.

- -

Definition at line 47 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getStart()

- -
-
- - - - - -
- - - - - - - -
pin_t getStart () const
-
-inherited
-
- -

Get the smallest global extended IO pin number that belongs to this extended IO element.

- -

Definition at line 49 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getAll()

- -
-
- - - - - -
- - - - - - - -
DoublyLinkedList< ExtendedIOElement > & getAll ()
-
-staticinherited
-
- -

Get the list of all Extended IO elements.

- -

Definition at line 51 of file ExtendedIOElement.cpp.

- -
-
-

Member Data Documentation

- -

◆ buffer

- -
-
- - - - - -
- - - - -
BitArray<8 * 8> buffer
-
-private
-
- -

Definition at line 113 of file MAX7219.hpp.

- -
-
- -

◆ DECODEMODE

- -
-
- - - - - -
- - - - -
constexpr uint8_t DECODEMODE = 9
-
-staticconstexprinherited
-
- -

Definition at line 33 of file MAX7219_Base.hpp.

- -
-
- -

◆ INTENSITY

- -
-
- - - - - -
- - - - -
constexpr uint8_t INTENSITY = 10
-
-staticconstexprinherited
-
- -

Definition at line 34 of file MAX7219_Base.hpp.

- -
-
- -

◆ SCANLIMIT

- -
-
- - - - - -
- - - - -
constexpr uint8_t SCANLIMIT = 11
-
-staticconstexprinherited
-
- -

Definition at line 35 of file MAX7219_Base.hpp.

- -
-
- -

◆ SHUTDOWN

- -
-
- - - - - -
- - - - -
constexpr uint8_t SHUTDOWN = 12
-
-staticconstexprinherited
-
- -

Definition at line 36 of file MAX7219_Base.hpp.

- -
-
- -

◆ DISPLAYTEST

- -
-
- - - - - -
- - - - -
constexpr uint8_t DISPLAYTEST = 15
-
-staticconstexprinherited
-
- -

Definition at line 37 of file MAX7219_Base.hpp.

- -
-
- -

◆ loadPin

- -
-
- - - - - -
- - - - -
pin_t loadPin
-
-privateinherited
-
- -

Definition at line 103 of file MAX7219_Base.hpp.

- -
-
- -

◆ settings

- -
-
- - - - - -
- - - - -
SPISettings settings = {SPI_MAX_SPEED, MSBFIRST, SPI_MODE0}
-
-privateinherited
-
- -

Definition at line 104 of file MAX7219_Base.hpp.

- -
-
- -

◆ start

- -
-
- - - - - -
- - - - -
const pin_t start
-
-privateinherited
-
- -

Definition at line 193 of file ExtendedIOElement.hpp.

- -
-
- -

◆ end

- -
-
- - - - - -
- - - - -
const pin_t end
-
-privateinherited
-
- -

Definition at line 194 of file ExtendedIOElement.hpp.

- -
-
- -

◆ offset

- -
-
- - - - - -
- - - - -
pin_t offset = NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS
-
-staticprivateinherited
-
- -

Definition at line 195 of file ExtendedIOElement.hpp.

- -
-
- -

◆ elements

- -
-
- - - - - -
- - - - -
DoublyLinkedList< ExtendedIOElement > elements
-
-staticprivateinherited
-
- -

Definition at line 197 of file ExtendedIOElement.hpp.

- -
-
- -

◆ next

- -
-
- - - - - -
- - - - -
ExtendedIOElement * next
-
-protectedinherited
-
- -

Definition at line 305 of file LinkedList.hpp.

- -
-
- -

◆ previous

- -
-
- - - - - -
- - - - -
ExtendedIOElement * previous
-
-protectedinherited
-
- -

Definition at line 306 of file LinkedList.hpp.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/Doxygen/dc/d1b/1_8AnalogReadSerial_8ino-example.html b/docs/Doxygen/dc/d1b/1_8AnalogReadSerial_8ino-example.html deleted file mode 100644 index f89d8d464..000000000 --- a/docs/Doxygen/dc/d1b/1_8AnalogReadSerial_8ino-example.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - -Arduino Helpers: 1.AnalogReadSerial.ino - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
1.AnalogReadSerial.ino
-
-
-

-1.AnalogReadSerial

-

This is an example of the AnalogMultiplex class. It prints the values of all 16 inputs of a multiplexers to the serial monitor.

-
Boards:
AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32
-

-Connections

-
    -
  • A0: CD74HC4067 signal pin ("common input/output")
  • -
  • 3: CD74HC4067 address pin S0
  • -
  • 4: CD74HC4067 address pin S1
  • -
  • 5: CD74HC4067 address pin S2
  • -
  • 6: CD74HC4067 address pin S3
  • -
-

Optionally you can connect the enable pin as well, this is useful if you want to use multiple multiplexers with the same address lines and the same analog input. Otherwise, just connect the enable pin to ground.

-

If you are using a 3-bit multiplexer, like the CD74HC4051, you can uncomment the code specific to this multiplexer, and use only three address pins.

-

-Behavior

-

Connect some potentiometers or other analog sensors to the 16 inputs of the multiplexer, and open the serial monitor (CTRL+SHIFT+M) or the serial plotter (CTRL+SHIFT+L). You should see all 16 signals printed or plotted.

-

Written by Pieter P, 31-01-2019
- https://github.com/tttapa/Arduino-Helpers

-
-
#include <Arduino_Helpers.h> // Include the Arduino Helpers library
- -
-
// Instantiate a multiplexer
-
CD74HC4067 mux = {
-
A0, // analog pin
-
{3, 4, 5, 6}, // Address pins S0, S1, S2, S3
-
// 7, // Optionally, specify the enable pin
-
};
-
-
// Alternatively, if you have a 3-bit mux:
-
// CD74HC4051 mux = {
-
// A0,
-
// {3, 4, 5},
-
// // 7, // Optional
-
// };
-
-
void setup() {
-
Serial.begin(115200);
-
mux.begin(); // Initialize multiplexer
-
}
-
-
void loop() {
-
for (pin_t pin = 0; pin < mux.getLength(); ++pin) {
-
Serial.print(mux.analogRead(pin));
-
Serial.print('\t');
-
}
-
Serial.println();
-
}
-
-
// Or if you're a cool kid, use a range-based for loop
-
void loop2() {
-
for (pin_t pin : mux.pins()) {
-
Serial.print(analogRead(pin));
-
Serial.print('\t');
-
}
-
Serial.println();
-
}
-
// Okay, it's a bit slower, because it has to look up what ExtIO device the pin
-
// belongs to, but hey, it's nice to have it anyway
-
-
void begin() override
Initialize the multiplexer: set the pin mode of the address pins and the enable pin to output mode.
- -
analog_t analogRead(pin_t pin) override
Read the analog value of the given input.
-
analog_t analogRead(pin_t pin)
An ExtIO version of the Arduino function.
-
A class for reading multiplexed analog inputs.
-
Dummy header file for Arduino builder. You have to add this file first, so the other headers are in t...
-
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
-
Array< pin_t, N > pins() const
Get an array containing all pins of the element.
-
pin_t getLength() const
Get the number of pins this IO element has.
- - - - diff --git a/docs/Doxygen/dc/d1f/Debug_8hpp__incl.map b/docs/Doxygen/dc/d1f/Debug_8hpp__incl.map deleted file mode 100644 index 0fec0f98c..000000000 --- a/docs/Doxygen/dc/d1f/Debug_8hpp__incl.map +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/dc/d1f/Debug_8hpp__incl.md5 b/docs/Doxygen/dc/d1f/Debug_8hpp__incl.md5 deleted file mode 100644 index cc33bdb60..000000000 --- a/docs/Doxygen/dc/d1f/Debug_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -ccce0eab76f613ca744831b003ca2b2f \ No newline at end of file diff --git a/docs/Doxygen/dc/d1f/Debug_8hpp__incl.svg b/docs/Doxygen/dc/d1f/Debug_8hpp__incl.svg deleted file mode 100644 index d50296603..000000000 --- a/docs/Doxygen/dc/d1f/Debug_8hpp__incl.svg +++ /dev/null @@ -1,225 +0,0 @@ - - - - - - -Debug.hpp - - -Node1 - - -Debug.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -AH/PrintStream/PrintStream.hpp - - - - -Node1->Node3 - - - - -Node5 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node1->Node5 - - - - -Node14 - - -DebugVal.hpp - - - - -Node1->Node14 - - - - -Node3->Node2 - - - - -Node4 - - -Arduino.h - - - - -Node3->Node4 - - - - -Node5->Node1 - - - - -Node5->Node2 - - - - -Node6 - - -NamespaceSettings.hpp - - - - -Node5->Node6 - - - - -Node7 - - -Settings.hpp - - - - -Node5->Node7 - - - - -Node13 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node5->Node13 - - - - -Node8 - - -AH/Types/Frequency.hpp - - - - -Node7->Node8 - - - - -Node9 - - -AH/Hardware/ADCConfig.hpp - - - - -Node7->Node9 - - - - -Node10 - - -limits.h - - - - -Node7->Node10 - - - - -Node11 - - -stddef.h - - - - -Node7->Node11 - - - - -Node12 - - -stdint.h - - - - -Node7->Node12 - - - - -Node8->Node2 - - - - -Node8->Node6 - - - - -Node9->Node2 - - - - -Node9->Node4 - - - - - diff --git a/docs/Doxygen/dc/d20/Array_8hpp__incl.map b/docs/Doxygen/dc/d20/Array_8hpp__incl.map deleted file mode 100644 index f6bb068e1..000000000 --- a/docs/Doxygen/dc/d20/Array_8hpp__incl.map +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/dc/d20/Array_8hpp__incl.md5 b/docs/Doxygen/dc/d20/Array_8hpp__incl.md5 deleted file mode 100644 index bbbee2583..000000000 --- a/docs/Doxygen/dc/d20/Array_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -09f166e5e2c1118b57a1774b319298bc \ No newline at end of file diff --git a/docs/Doxygen/dc/d20/Array_8hpp__incl.svg b/docs/Doxygen/dc/d20/Array_8hpp__incl.svg deleted file mode 100644 index 0bb8c2de0..000000000 --- a/docs/Doxygen/dc/d20/Array_8hpp__incl.svg +++ /dev/null @@ -1,292 +0,0 @@ - - - - - - -Array.hpp - - -Node1 - - -Array.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -AH/Error/Error.hpp - - - - -Node1->Node3 - - - - -Node13 - - -stddef.h - - - - -Node1->Node13 - - - - -Node17 - - -AH/STL/iterator - - - - -Node1->Node17 - - - - -Node18 - - -AH/STL/type_traits - - - - -Node1->Node18 - - - - -Node3->Node2 - - - - -Node4 - - -AH/Debug/Debug.hpp - - - - -Node3->Node4 - - - - -Node4->Node2 - - - - -Node5 - - -AH/PrintStream/PrintStream.hpp - - - - -Node4->Node5 - - - - -Node7 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node4->Node7 - - - - -Node16 - - -DebugVal.hpp - - - - -Node4->Node16 - - - - -Node5->Node2 - - - - -Node6 - - -Arduino.h - - - - -Node5->Node6 - - - - -Node7->Node2 - - - - -Node7->Node4 - - - - -Node8 - - -NamespaceSettings.hpp - - - - -Node7->Node8 - - - - -Node9 - - -Settings.hpp - - - - -Node7->Node9 - - - - -Node15 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node7->Node15 - - - - -Node10 - - -AH/Types/Frequency.hpp - - - - -Node9->Node10 - - - - -Node11 - - -AH/Hardware/ADCConfig.hpp - - - - -Node9->Node11 - - - - -Node12 - - -limits.h - - - - -Node9->Node12 - - - - -Node9->Node13 - - - - -Node14 - - -stdint.h - - - - -Node9->Node14 - - - - -Node10->Node2 - - - - -Node10->Node8 - - - - -Node11->Node2 - - - - -Node11->Node6 - - - - - diff --git a/docs/Doxygen/dc/d40/NamespaceSettings_8hpp__dep__incl.map b/docs/Doxygen/dc/d40/NamespaceSettings_8hpp__dep__incl.map deleted file mode 100644 index 6e4ce1f53..000000000 --- a/docs/Doxygen/dc/d40/NamespaceSettings_8hpp__dep__incl.map +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/dc/d40/NamespaceSettings_8hpp__dep__incl.md5 b/docs/Doxygen/dc/d40/NamespaceSettings_8hpp__dep__incl.md5 deleted file mode 100644 index dca450937..000000000 --- a/docs/Doxygen/dc/d40/NamespaceSettings_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -f6a490717879fceaaa8385e8c913b3d1 \ No newline at end of file diff --git a/docs/Doxygen/dc/d40/NamespaceSettings_8hpp__dep__incl.svg b/docs/Doxygen/dc/d40/NamespaceSettings_8hpp__dep__incl.svg deleted file mode 100644 index d4fe60467..000000000 --- a/docs/Doxygen/dc/d40/NamespaceSettings_8hpp__dep__incl.svg +++ /dev/null @@ -1,748 +0,0 @@ - - - - - - -NamespaceSettings.hpp - - -Node1 - - -NamespaceSettings.hpp - - - - -Node2 - - -BitArray.hpp - - - - -Node1->Node2 - - - - -Node10 - - -Hardware-Types.hpp - - - - -Node1->Node10 - - - - -Node30 - - -MinMaxFix.hpp - - - - -Node1->Node30 - - - - -Node33 - - -SettingsWrapper.hpp - - - - -Node1->Node33 - - - - -Node42 - - -MillisMicrosTimer.hpp - - - - -Node1->Node42 - - - - -Node43 - - -Frequency.hpp - - - - -Node1->Node43 - - - - -Node45 - - -Arduino_Helpers.h - - - - -Node1->Node45 - - - - -Node3 - - -MAX7219.hpp - - - - -Node2->Node3 - - - - -Node4 - - -ShiftRegisterOutBase.hpp - - - - -Node2->Node4 - - - - -Node8 - - -SPIShiftRegisterOut.hpp - - - - -Node2->Node8 - - - - -Node5 - - -ShiftRegisterOut.hpp - - - - -Node4->Node5 - - - - -Node7 - - -ShiftRegisterOutBase.ipp - - - - -Node4->Node7 - - - - -Node4->Node8 - - - - -Node6 - - -ShiftRegisterOut.ipp - - - - -Node5->Node6 - - - - -Node6->Node5 - - - - -Node7->Node4 - - - - -Node9 - - -SPIShiftRegisterOut.ipp - - - - -Node8->Node9 - - - - -Node9->Node8 - - - - -Node11 - - -ButtonMatrix.hpp - - - - -Node10->Node11 - - - - -Node13 - - -ExtendedIOElement.hpp - - - - -Node10->Node13 - - - - -Node23 - - -FilteredAnalog.hpp - - - - -Node10->Node23 - - - - -Node12 - - -ButtonMatrix.ipp - - - - -Node11->Node12 - - - - -Node12->Node11 - - - - -Node14 - - -ExtendedInputOutput.hpp - - - - -Node13->Node14 - - - - -Node22 - - -ExtendedInputOutput.cpp - - - - -Node13->Node22 - - - - -Node28 - - -StaticSizeExtendedIOElement.hpp - - - - -Node13->Node28 - - - - -Node29 - - -ExtendedIOElement.cpp - - - - -Node13->Node29 - - - - -Node14->Node6 - - - - -Node14->Node7 - - - - -Node14->Node9 - - - - -Node14->Node12 - - - - -Node15 - - -Button.hpp - - - - -Node14->Node15 - - - - -Node21 - - -AnalogMultiplex.hpp - - - - -Node14->Node21 - - - - -Node14->Node22 - - - - -Node14->Node23 - - - - -Node24 - - -LEDs.hpp - - - - -Node14->Node24 - - - - -Node26 - - -MAX7219_Base.hpp - - - - -Node14->Node26 - - - - -Node16 - - -Button.cpp - - - - -Node15->Node16 - - - - -Node17 - - -IncrementButton.hpp - - - - -Node15->Node17 - - - - -Node19 - - -IncrementDecrementButtons.hpp - - - - -Node15->Node19 - - - - -Node18 - - -IncrementButton.cpp - - - - -Node17->Node18 - - - - -Node20 - - -IncrementDecrementButtons.cpp - - - - -Node19->Node20 - - - - -Node25 - - -DotBarDisplayLEDs.hpp - - - - -Node24->Node25 - - - - -Node26->Node3 - - - - -Node27 - - -MAX7219SevenSegmentDisplay.hpp - - - - -Node26->Node27 - - - - -Node28->Node3 - - - - -Node28->Node4 - - - - -Node28->Node21 - - - - -Node30->Node23 - - - - -Node31 - - -LinkedList.hpp - - - - -Node30->Node31 - - - - -Node31->Node13 - - - - -Node32 - - -Updatable.hpp - - - - -Node31->Node32 - - - - -Node33->Node15 - - - - -Node33->Node23 - - - - -Node33->Node32 - - - - -Node34 - - -Debug.hpp - - - - -Node33->Node34 - - - - -Node40 - - -ShiftRegisterOutRGB.hpp - - - - -Node33->Node40 - - - - -Node34->Node31 - - - - -Node34->Node33 - - - - -Node35 - - -Debug.cpp - - - - -Node34->Node35 - - - - -Node36 - - -Error.hpp - - - - -Node34->Node36 - - - - -Node36->Node2 - - - - -Node36->Node22 - - - - -Node36->Node29 - - - - -Node36->Node32 - - - - -Node37 - - -Array.hpp - - - - -Node36->Node37 - - - - -Node39 - - -Exit.cpp - - - - -Node36->Node39 - - - - -Node37->Node10 - - - - -Node37->Node21 - - - - -Node38 - - -ArrayHelpers.hpp - - - - -Node37->Node38 - - - - -Node38->Node28 - - - - -Node40->Node7 - - - - -Node41 - - -ShiftRegisterOutRGB.cpp - - - - -Node40->Node41 - - - - -Node44 - - -Settings.hpp - - - - -Node43->Node44 - - - - -Node44->Node33 - - - - - diff --git a/docs/Doxygen/dc/d50/Frequency_8hpp.html b/docs/Doxygen/dc/d50/Frequency_8hpp.html deleted file mode 100644 index b06ecbf7d..000000000 --- a/docs/Doxygen/dc/d50/Frequency_8hpp.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -Arduino Helpers: Frequency.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
Frequency.hpp File Reference
-
-
-
-Include dependency graph for Frequency.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - -

-Classes

class  Frequency
 Type-safe class for frequency values. More...
 
-
- - - - diff --git a/docs/Doxygen/dc/d50/Frequency_8hpp_source.html b/docs/Doxygen/dc/d50/Frequency_8hpp_source.html deleted file mode 100644 index bc3c9daa4..000000000 --- a/docs/Doxygen/dc/d50/Frequency_8hpp_source.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - -Arduino Helpers: Frequency.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Frequency.hpp
-
-
-Go to the documentation of this file.
1 #pragma once
-
2 
- -
4 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
5 
-
6 #include <AH/Settings/NamespaceSettings.hpp>
-
7 
- -
9 
-
11 class Frequency {
-
12  public:
-
13  explicit constexpr Frequency(unsigned long hertz) : hertz(hertz) {}
-
14  constexpr operator unsigned long() const { return hertz; }
-
15 
-
16  private:
-
17  unsigned long hertz;
-
18 };
-
19 constexpr Frequency operator"" _Hz(unsigned long long hz) {
-
20  return Frequency{(unsigned long)hz};
-
21 }
-
22 constexpr Frequency operator"" _kHz(long double khz) {
-
23  return Frequency{(unsigned long)(khz * 1E3)};
-
24 }
-
25 constexpr Frequency operator"" _kHz(unsigned long long khz) {
-
26  return Frequency{(unsigned long)(khz * 1E3)};
-
27 }
-
28 constexpr Frequency operator"" _MHz(long double mhz) {
-
29  return Frequency{(unsigned long)(mhz * 1E6)};
-
30 }
-
31 constexpr Frequency operator"" _MHz(unsigned long long mhz) {
-
32  return Frequency{(unsigned long)(mhz * 1E6)};
-
33 }
-
34 
- -
36 
- -
-
#define BEGIN_AH_NAMESPACE
- -
constexpr Frequency(unsigned long hertz)
Definition: Frequency.hpp:13
-
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
Type-safe class for frequency values.
Definition: Frequency.hpp:11
-
unsigned long hertz
Definition: Frequency.hpp:17
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
#define END_AH_NAMESPACE
- - - - diff --git a/docs/Doxygen/dc/d56/MAX7219SevenSegmentDisplay_8cpp.html b/docs/Doxygen/dc/d56/MAX7219SevenSegmentDisplay_8cpp.html deleted file mode 100644 index 32c4ca9f6..000000000 --- a/docs/Doxygen/dc/d56/MAX7219SevenSegmentDisplay_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: MAX7219SevenSegmentDisplay.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
MAX7219SevenSegmentDisplay.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/dc/d56/MAX7219SevenSegmentDisplay_8cpp_source.html b/docs/Doxygen/dc/d56/MAX7219SevenSegmentDisplay_8cpp_source.html deleted file mode 100644 index d73db0249..000000000 --- a/docs/Doxygen/dc/d56/MAX7219SevenSegmentDisplay_8cpp_source.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - -Arduino Helpers: MAX7219SevenSegmentDisplay.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
MAX7219SevenSegmentDisplay.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
-
2 // #include "MAX7219SevenSegmentDisplay.hpp" // TODO
-
3 #endif
-
- - - - diff --git a/docs/Doxygen/dc/d5e/classDoublyLinkedList-members.html b/docs/Doxygen/dc/d5e/classDoublyLinkedList-members.html deleted file mode 100644 index 6c4c07ac0..000000000 --- a/docs/Doxygen/dc/d5e/classDoublyLinkedList-members.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
DoublyLinkedList< Node > Member List
-
- - - - - diff --git a/docs/Doxygen/dc/d8c/classDoublyLinkedList_1_1node__iterator__inherit__graph.map b/docs/Doxygen/dc/d8c/classDoublyLinkedList_1_1node__iterator__inherit__graph.map deleted file mode 100644 index 1a6a9ab48..000000000 --- a/docs/Doxygen/dc/d8c/classDoublyLinkedList_1_1node__iterator__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/dc/d8c/classDoublyLinkedList_1_1node__iterator__inherit__graph.md5 b/docs/Doxygen/dc/d8c/classDoublyLinkedList_1_1node__iterator__inherit__graph.md5 deleted file mode 100644 index 04b488e9d..000000000 --- a/docs/Doxygen/dc/d8c/classDoublyLinkedList_1_1node__iterator__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -4433f93b3aed5dd245853516d4583617 \ No newline at end of file diff --git a/docs/Doxygen/dc/d8c/classDoublyLinkedList_1_1node__iterator__inherit__graph.svg b/docs/Doxygen/dc/d8c/classDoublyLinkedList_1_1node__iterator__inherit__graph.svg deleted file mode 100644 index ad046d4f3..000000000 --- a/docs/Doxygen/dc/d8c/classDoublyLinkedList_1_1node__iterator__inherit__graph.svg +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - -DoublyLinkedList< Node >::node_iterator< INode > - - -Node1 - - -DoublyLinkedList< Node - >::node_iterator< INode > - - - -+ node_iterator() -+ operator++() -+ operator--() - - - - -Node2 - - -node_iterator_base - -# node - -+ node_iterator_base() -+ operator!=() -+ operator*() - - - - -Node2->Node1 - - - - - diff --git a/docs/Doxygen/dc/db4/BlinkWithoutDelay-Timer_8ino-example.html b/docs/Doxygen/dc/db4/BlinkWithoutDelay-Timer_8ino-example.html deleted file mode 100644 index 24636742d..000000000 --- a/docs/Doxygen/dc/db4/BlinkWithoutDelay-Timer_8ino-example.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - -Arduino Helpers: BlinkWithoutDelay-Timer.ino - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
BlinkWithoutDelay-Timer.ino
-
-
-

-BlinkWithoutDelay-Timer

-

This examples shows how use the Timer class to blink an LED every second, in a non-blocking fashion (without using delay).

-
Boards:
AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32
-

-Behavior

-

Blinks the built-in LED every second.

-

Written by PieterP, 2019-12-06
- https://github.com/tttapa/Arduino-Helpers

-
- - -
-
Timer<millis> timer = 500; // milliseconds
-
-
void setup() {
-
pinMode(LED_BUILTIN, OUTPUT);
-
}
-
-
void loop() {
-
if (timer) {
-
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
-
}
-
}
-
- -
void digitalWrite(pin_t pin, uint8_t val)
An ExtIO version of the Arduino function.
-
int digitalRead(pin_t pin)
An ExtIO version of the Arduino function.
-
A class for easily managing timed events.
-
void pinMode(pin_t pin, uint8_t mode)
An ExtIO version of the Arduino function.
-
Dummy header file for Arduino builder. You have to add this file first, so the other headers are in t...
-
const uint8_t OUTPUT
- - - - diff --git a/docs/Doxygen/dc/dc7/NamespaceSettings_8hpp.html b/docs/Doxygen/dc/dc7/NamespaceSettings_8hpp.html deleted file mode 100644 index 156577c71..000000000 --- a/docs/Doxygen/dc/dc7/NamespaceSettings_8hpp.html +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - -Arduino Helpers: NamespaceSettings.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
NamespaceSettings.hpp File Reference
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - - - - - - - - -

-Macros

#define USE_AH_NAMESPACE
 
#define AH_NAMESPACE_NAME   AH
 
#define BEGIN_AH_NAMESPACE   namespace AH_NAMESPACE_NAME {
 
#define END_AH_NAMESPACE   }
 
#define USING_AH_NAMESPACE   using namespace AH_NAMESPACE_NAME
 
-

Macro Definition Documentation

- -

◆ USE_AH_NAMESPACE

- -
-
- - - - -
#define USE_AH_NAMESPACE
-
- -

Definition at line 3 of file NamespaceSettings.hpp.

- -
-
- -

◆ AH_NAMESPACE_NAME

- -
-
- - - - -
#define AH_NAMESPACE_NAME   AH
-
- -

Definition at line 4 of file NamespaceSettings.hpp.

- -
-
- -

◆ BEGIN_AH_NAMESPACE

- -
-
- - - - -
#define BEGIN_AH_NAMESPACE   namespace AH_NAMESPACE_NAME {
-
- -

Definition at line 9 of file NamespaceSettings.hpp.

- -
-
- -

◆ END_AH_NAMESPACE

- -
-
- - - - -
#define END_AH_NAMESPACE   }
-
- -

Definition at line 10 of file NamespaceSettings.hpp.

- -
-
- -

◆ USING_AH_NAMESPACE

- -
-
- - - - -
#define USING_AH_NAMESPACE   using namespace AH_NAMESPACE_NAME
-
- -

Definition at line 11 of file NamespaceSettings.hpp.

- -
-
-
- - - - diff --git a/docs/Doxygen/dc/dc7/NamespaceSettings_8hpp_source.html b/docs/Doxygen/dc/dc7/NamespaceSettings_8hpp_source.html deleted file mode 100644 index a39e0a461..000000000 --- a/docs/Doxygen/dc/dc7/NamespaceSettings_8hpp_source.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -Arduino Helpers: NamespaceSettings.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
NamespaceSettings.hpp
-
-
-Go to the documentation of this file.
1 #pragma once
-
2 
-
3 #define USE_AH_NAMESPACE
-
4 #define AH_NAMESPACE_NAME AH
-
5 
-
6 // ========================================================================== //
-
7 
-
8 #ifdef USE_AH_NAMESPACE
-
9 #define BEGIN_AH_NAMESPACE namespace AH_NAMESPACE_NAME {
-
10 #define END_AH_NAMESPACE }
-
11 #define USING_AH_NAMESPACE using namespace AH_NAMESPACE_NAME
-
12 #else
-
13 #define BEGIN_AH_NAMESPACE
-
14 #define END_AH_NAMESPACE
-
15 #define USING_AH_NAMESPACE
-
16 #endif
-
- - - - diff --git a/docs/Doxygen/dc/dd6/NamespaceSettings_8cpp.html b/docs/Doxygen/dc/dd6/NamespaceSettings_8cpp.html deleted file mode 100644 index bd039b094..000000000 --- a/docs/Doxygen/dc/dd6/NamespaceSettings_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: NamespaceSettings.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
NamespaceSettings.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/dc/dd6/NamespaceSettings_8cpp_source.html b/docs/Doxygen/dc/dd6/NamespaceSettings_8cpp_source.html deleted file mode 100644 index 533bd94fd..000000000 --- a/docs/Doxygen/dc/dd6/NamespaceSettings_8cpp_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Arduino Helpers: NamespaceSettings.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
NamespaceSettings.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
-
2 #include "NamespaceSettings.hpp"
-
3 #endif
-
- - - - - diff --git a/docs/Doxygen/dc/ddf/Filters_8dox.html b/docs/Doxygen/dc/ddf/Filters_8dox.html deleted file mode 100644 index 18671feff..000000000 --- a/docs/Doxygen/dc/ddf/Filters_8dox.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Filters.dox File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Filters.dox File Reference
-
-
-
- - - - diff --git a/docs/Doxygen/dc/de3/classdetail_1_1Incrementor-members.html b/docs/Doxygen/dc/de3/classdetail_1_1Incrementor-members.html deleted file mode 100644 index ee24e137e..000000000 --- a/docs/Doxygen/dc/de3/classdetail_1_1Incrementor-members.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Incrementor< T, V > Member List
-
-
- -

This is the complete list of members for Incrementor< T, V >, including all inherited members.

- - - - - -
incrementIncrementor< T, V >private
Incrementor(T start=0, V increment=1)Incrementor< T, V >inline
operator()()Incrementor< T, V >inline
valueIncrementor< T, V >private
- - - - diff --git a/docs/Doxygen/dc/de6/Arduino__Helpers_8h.html b/docs/Doxygen/dc/de6/Arduino__Helpers_8h.html deleted file mode 100644 index 7168dbf26..000000000 --- a/docs/Doxygen/dc/de6/Arduino__Helpers_8h.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - -Arduino Helpers: Arduino_Helpers.h File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Arduino_Helpers.h File Reference
-
-
- -

Dummy header file for Arduino builder. You have to add this file first, so the other headers are in the include path. -More...

-
#include <Arduino.h>
-#include <AH/Settings/NamespaceSettings.hpp>
-
-Include dependency graph for Arduino_Helpers.h:
-
-
-
-
-

Go to the source code of this file.

-

Detailed Description

-

Dummy header file for Arduino builder. You have to add this file first, so the other headers are in the include path.

-
Author
Pieter Pas
-
Date
2019-11-07
- -

Definition in file Arduino_Helpers.h.

-
- - - - diff --git a/docs/Doxygen/dc/de6/Arduino__Helpers_8h_source.html b/docs/Doxygen/dc/de6/Arduino__Helpers_8h_source.html deleted file mode 100644 index 74005f704..000000000 --- a/docs/Doxygen/dc/de6/Arduino__Helpers_8h_source.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -Arduino Helpers: Arduino_Helpers.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Arduino_Helpers.h
-
-
-Go to the documentation of this file.
1 
-
11 #pragma once
-
12 
-
13 #include <Arduino.h> // For VSCode errors in examples
- -
15 
- - -
18 
-
19 #ifndef NO_USING_NAMESPACE_AH
- -
21 #endif
-
-
#define BEGIN_AH_NAMESPACE
- -
#define END_AH_NAMESPACE
-
#define USING_AH_NAMESPACE
- - - - diff --git a/docs/Doxygen/dc/dea/classTimer.html b/docs/Doxygen/dc/dea/classTimer.html deleted file mode 100644 index 644e93f98..000000000 --- a/docs/Doxygen/dc/dea/classTimer.html +++ /dev/null @@ -1,349 +0,0 @@ - - - - - - - -Arduino Helpers: Timer< time > Class Template Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
- -
-
Timer< time > Class Template Reference
-
-
- -

A class for easily managing timed events. - More...

- -

#include <MillisMicrosTimer.hpp>

-
-Collaboration diagram for Timer< time >:
-
-
-
- - - - - - - - - - - - - - - - - -

-Public Member Functions

 Timer (unsigned long interval)
 Constructor. More...
 
void begin ()
 Initialize the timer. More...
 
 operator bool ()
 Update the timer and return true if the event should fire. More...
 
unsigned long getInterval () const
 Get the interval of the timer. More...
 
void setInterval (unsigned long interval)
 Set the interval of the timer. More...
 
- - - - - -

-Private Attributes

unsigned long interval
 
unsigned long previous = 0
 
-

Detailed Description

-

template<timefunction time = micros>
-class Timer< time >

- -

A class for easily managing timed events.

-

A wrapper for "Blink - Without Delay".

-
Template Parameters
- - -
timeThe time function to use.
-
-
-
Examples
1.FilteredAnalog.ino, Blink-Frequency-Buttons.ino, and BlinkWithoutDelay-Timer.ino.
-
- -

Definition at line 28 of file MillisMicrosTimer.hpp.

-

Constructor & Destructor Documentation

- -

◆ Timer()

- -
-
- - - - - -
- - - - - - - - -
Timer (unsigned long interval)
-
-inline
-
- -

Constructor.

-
Parameters
- - -
intervalThe interval between two events.
-
-
- -

Definition at line 35 of file MillisMicrosTimer.hpp.

- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - -
- - - - - - - -
void begin ()
-
-inline
-
- -

Initialize the timer.

- -

Definition at line 41 of file MillisMicrosTimer.hpp.

- -
-
- -

◆ operator bool()

- -
-
- - - - - -
- - - - - - - -
operator bool ()
-
-inlineexplicit
-
- -

Update the timer and return true if the event should fire.

- -

Definition at line 43 of file MillisMicrosTimer.hpp.

- -
-
- -

◆ getInterval()

- -
-
- - - - - -
- - - - - - - -
unsigned long getInterval () const
-
-inline
-
- -

Get the interval of the timer.

- -

Definition at line 53 of file MillisMicrosTimer.hpp.

- -
-
- -

◆ setInterval()

- -
-
- - - - - -
- - - - - - - - -
void setInterval (unsigned long interval)
-
-inline
-
- -

Set the interval of the timer.

- -

Definition at line 55 of file MillisMicrosTimer.hpp.

- -
-
-

Member Data Documentation

- -

◆ interval

- -
-
- - - - - -
- - - - -
unsigned long interval
-
-private
-
- -

Definition at line 58 of file MillisMicrosTimer.hpp.

- -
-
- -

◆ previous

- -
-
- - - - - -
- - - - -
unsigned long previous = 0
-
-private
-
- -

Definition at line 59 of file MillisMicrosTimer.hpp.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/Doxygen/dc/ded/ADCConfig_8hpp__incl.map b/docs/Doxygen/dc/ded/ADCConfig_8hpp__incl.map deleted file mode 100644 index 6a1fb8180..000000000 --- a/docs/Doxygen/dc/ded/ADCConfig_8hpp__incl.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/Doxygen/dc/ded/ADCConfig_8hpp__incl.md5 b/docs/Doxygen/dc/ded/ADCConfig_8hpp__incl.md5 deleted file mode 100644 index 353874b60..000000000 --- a/docs/Doxygen/dc/ded/ADCConfig_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -229b79b99f05a8d0ca4409d2bf07f5ff \ No newline at end of file diff --git a/docs/Doxygen/dc/ded/ADCConfig_8hpp__incl.svg b/docs/Doxygen/dc/ded/ADCConfig_8hpp__incl.svg deleted file mode 100644 index 5a467f491..000000000 --- a/docs/Doxygen/dc/ded/ADCConfig_8hpp__incl.svg +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - -ADCConfig.hpp - - -Node1 - - -ADCConfig.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -Arduino.h - - - - -Node1->Node3 - - - - - diff --git a/docs/Doxygen/dc/def/group__AH__Filters.html b/docs/Doxygen/dc/def/group__AH__Filters.html deleted file mode 100644 index af7ebd6a3..000000000 --- a/docs/Doxygen/dc/def/group__AH__Filters.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -Arduino Helpers: Filters - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
- -
-
Filters
-
-
- -

Classes for basic filtering and hysteresis. -More...

- - - - - - - - - - - -

-Classes

class  EMA< K, uint_t >
 A class for single-pole infinite impulse response filters or exponential moving average filters. More...
 
class  EMA_f
 A class for single-pole infinite impulse response filters or exponential moving average filters. More...
 
class  Hysteresis< BITS, T_in, T_out >
 A class for applying hysteresis to a given input. More...
 
-

Detailed Description

-

Classes for basic filtering and hysteresis.

-
- - - - diff --git a/docs/Doxygen/dd/d02/classDoublyLinkedList_1_1node__iterator.html b/docs/Doxygen/dd/d02/classDoublyLinkedList_1_1node__iterator.html deleted file mode 100644 index 24b27ce11..000000000 --- a/docs/Doxygen/dd/d02/classDoublyLinkedList_1_1node__iterator.html +++ /dev/null @@ -1,403 +0,0 @@ - - - - - - - -Arduino Helpers: DoublyLinkedList< Node >::node_iterator< INode > Class Template Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
DoublyLinkedList< Node >::node_iterator< INode > Class Template Reference
-
-
- -

Forward bidirectional doubly linked list iterator. - More...

- -

#include <LinkedList.hpp>

-
-Inheritance diagram for DoublyLinkedList< Node >::node_iterator< INode >:
-
-
-
-
-Collaboration diagram for DoublyLinkedList< Node >::node_iterator< INode >:
-
-
-
- - - - - - - - - - - - -

-Public Types

using difference_type = void
 
using value_type = INode
 
using pointer = INode *
 
using reference = INode &
 
using iterator_category = std::bidirectional_iterator_tag
 
- - - - - - - - - - - - - -

-Public Member Functions

 node_iterator (INode *node)
 
node_iteratoroperator++ ()
 Prefix increment operator. More...
 
node_iteratoroperator-- ()
 Prefix decrement operator. More...
 
bool operator!= (const node_iterator_base &rhs) const
 
INode & operator* () const
 
- - - -

-Protected Attributes

INode * node
 
-

Detailed Description

-

template<class Node>
-template<class INode>
-class DoublyLinkedList< Node >::node_iterator< INode >

- -

Forward bidirectional doubly linked list iterator.

- -

Definition at line 50 of file LinkedList.hpp.

-

Member Typedef Documentation

- -

◆ difference_type

- -
-
- - - - -
using difference_type = void
-
- -

Definition at line 55 of file LinkedList.hpp.

- -
-
- -

◆ value_type

- -
-
- - - - -
using value_type = INode
-
- -

Definition at line 56 of file LinkedList.hpp.

- -
-
- -

◆ pointer

- -
-
- - - - -
using pointer = INode *
-
- -

Definition at line 57 of file LinkedList.hpp.

- -
-
- -

◆ reference

- -
-
- - - - -
using reference = INode &
-
- -

Definition at line 58 of file LinkedList.hpp.

- -
-
- -

◆ iterator_category

- -
-
- - - - -
using iterator_category = std::bidirectional_iterator_tag
-
- -

Definition at line 59 of file LinkedList.hpp.

- -
-
-

Constructor & Destructor Documentation

- -

◆ node_iterator()

- -
-
- - - - - -
- - - - - - - - -
node_iterator (INode * node)
-
-inline
-
- -

Definition at line 52 of file LinkedList.hpp.

- -
-
-

Member Function Documentation

- -

◆ operator++()

- -
-
- - - - - -
- - - - - - - -
node_iterator& operator++ ()
-
-inline
-
- -

Prefix increment operator.

- -

Definition at line 63 of file LinkedList.hpp.

- -
-
- -

◆ operator--()

- -
-
- - - - - -
- - - - - - - -
node_iterator& operator-- ()
-
-inline
-
- -

Prefix decrement operator.

- -

Definition at line 70 of file LinkedList.hpp.

- -
-
- -

◆ operator!=()

- -
-
- - - - - -
- - - - - - - - -
bool operator!= (const node_iterator_base< INode > & rhs) const
-
-inlineinherited
-
- -

Definition at line 35 of file LinkedList.hpp.

- -
-
- -

◆ operator*()

- -
-
- - - - - -
- - - - - - - -
INode& operator* () const
-
-inlineinherited
-
- -

Definition at line 39 of file LinkedList.hpp.

- -
-
-

Member Data Documentation

- -

◆ node

- -
-
- - - - - -
- - - - -
INode* node
-
-protectedinherited
-
- -

Definition at line 45 of file LinkedList.hpp.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/Doxygen/dd/d06/classMAX7219__Base__inherit__graph.map b/docs/Doxygen/dd/d06/classMAX7219__Base__inherit__graph.map deleted file mode 100644 index faa8fd1f2..000000000 --- a/docs/Doxygen/dd/d06/classMAX7219__Base__inherit__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/Doxygen/dd/d06/classMAX7219__Base__inherit__graph.md5 b/docs/Doxygen/dd/d06/classMAX7219__Base__inherit__graph.md5 deleted file mode 100644 index db32a2519..000000000 --- a/docs/Doxygen/dd/d06/classMAX7219__Base__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -45ef7edc029a8169f7aae6a804b60596 \ No newline at end of file diff --git a/docs/Doxygen/dd/d06/classMAX7219__Base__inherit__graph.svg b/docs/Doxygen/dd/d06/classMAX7219__Base__inherit__graph.svg deleted file mode 100644 index d73e52d52..000000000 --- a/docs/Doxygen/dd/d06/classMAX7219__Base__inherit__graph.svg +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - -MAX7219_Base - - -Node1 - - -MAX7219_Base - -+ DECODEMODE -+ INTENSITY -+ SCANLIMIT -+ SHUTDOWN -+ DISPLAYTEST -- loadPin -- settings - -+ MAX7219_Base() -+ init() -+ clear() -+ send() -+ sendRaw() -+ setIntensity() - - - - -Node2 - - -MAX7219 - -- buffer - -+ MAX7219() -+ begin() -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogRead() -+ analogWrite() -+ update() - - - - -Node1->Node2 - - - - -Node3 - - -MAX7219SevenSegmentDisplay - - - -+ MAX7219SevenSegmentDisplay() -+ begin() -+ display() -+ display() -+ display() -+ printHex() - - - - -Node1->Node3 - - - - - diff --git a/docs/Doxygen/dd/d08/Settings_8hpp__incl.map b/docs/Doxygen/dd/d08/Settings_8hpp__incl.map deleted file mode 100644 index 139efab27..000000000 --- a/docs/Doxygen/dd/d08/Settings_8hpp__incl.map +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/docs/Doxygen/dd/d08/Settings_8hpp__incl.md5 b/docs/Doxygen/dd/d08/Settings_8hpp__incl.md5 deleted file mode 100644 index 7ad15108c..000000000 --- a/docs/Doxygen/dd/d08/Settings_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -dd6019ec3d8649e9f0fc09cf7bf23171 \ No newline at end of file diff --git a/docs/Doxygen/dd/d08/Settings_8hpp__incl.svg b/docs/Doxygen/dd/d08/Settings_8hpp__incl.svg deleted file mode 100644 index 642d09ce4..000000000 --- a/docs/Doxygen/dd/d08/Settings_8hpp__incl.svg +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - -Settings.hpp - - -Node1 - - -Settings.hpp - - - - -Node2 - - -AH/Types/Frequency.hpp - - - - -Node1->Node2 - - - - -Node5 - - -AH/Hardware/ADCConfig.hpp - - - - -Node1->Node5 - - - - -Node7 - - -limits.h - - - - -Node1->Node7 - - - - -Node8 - - -stddef.h - - - - -Node1->Node8 - - - - -Node9 - - -stdint.h - - - - -Node1->Node9 - - - - -Node3 - - -AH/Settings/Warnings.hpp - - - - -Node2->Node3 - - - - -Node4 - - -AH/Settings/NamespaceSettings.hpp - - - - -Node2->Node4 - - - - -Node5->Node3 - - - - -Node6 - - -Arduino.h - - - - -Node5->Node6 - - - - - diff --git a/docs/Doxygen/dd/d08/ShiftRegisterOutBase_8cpp.html b/docs/Doxygen/dd/d08/ShiftRegisterOutBase_8cpp.html deleted file mode 100644 index 8a79f5be0..000000000 --- a/docs/Doxygen/dd/d08/ShiftRegisterOutBase_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: ShiftRegisterOutBase.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ShiftRegisterOutBase.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/dd/d08/ShiftRegisterOutBase_8cpp_source.html b/docs/Doxygen/dd/d08/ShiftRegisterOutBase_8cpp_source.html deleted file mode 100644 index b8e0fdfbf..000000000 --- a/docs/Doxygen/dd/d08/ShiftRegisterOutBase_8cpp_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Arduino Helpers: ShiftRegisterOutBase.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ShiftRegisterOutBase.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
- -
3 #endif
-
- - - - - diff --git a/docs/Doxygen/dd/d0d/classHysteresis-members.html b/docs/Doxygen/dd/d0d/classHysteresis-members.html deleted file mode 100644 index 5a5170b65..000000000 --- a/docs/Doxygen/dd/d0d/classHysteresis-members.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Hysteresis< BITS, T_in, T_out > Member List
-
- - - - - diff --git a/docs/Doxygen/dd/d10/CountPressedButtons_8ino-example.html b/docs/Doxygen/dd/d10/CountPressedButtons_8ino-example.html deleted file mode 100644 index 42b2dac9e..000000000 --- a/docs/Doxygen/dd/d10/CountPressedButtons_8ino-example.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - -Arduino Helpers: CountPressedButtons.ino - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
CountPressedButtons.ino
-
-
-

-CountPressedButtons

-

Example of using the standard library algorithms and the Button class.

-
Boards:
AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32
-

This sketch reads a number of push buttons or switches, and uses the standard library algorithms to count how many of them are pressed.

-

The internal pull-up resistors are enabled and the switches are debounced.

-

Written by PieterP, 2019-11-24
- https://github.com/tttapa/Arduino-Helpers

-
- -
-
#include <AH/Hardware/Button.hpp> // Button
-
#include <AH/STL/numeric> // std::accumulate
-
-
// An array of debounced buttons connected to the given pins
-
Button buttons[] = {
-
2, 3, 4, 5, 6, 7, 8, 9,
-
};
-
-
void setup() {
-
for (auto &button : buttons) // for all buttons in the array
-
button.begin(); // initialize (enable internal pull-up resistor)
-
Serial.begin(115200);
-
}
-
-
void loop() {
-
// function that adds one to the counter if the given button is pressed
-
auto addOneIfPressed = [](unsigned count, const Button &button) {
-
return button.getState() == Button::Pressed ? count + 1 : count;
-
};
-
-
// read all buttons and debounce them
-
for (auto &button : buttons)
-
button.update();
-
-
// apply that function to all buttons and return the count
-
unsigned pressed =
-
std::accumulate(std::begin(buttons), // from the first button
-
std::end(buttons), // to the last
-
0u, // initial value of the counter
-
addOneIfPressed); // counter function to apply
-
-
Serial.println(pressed);
-
}
-
- -
A class for reading and debouncing buttons and switches.
Definition: Button.hpp:18
-
Input went from low to low (0,0)
Definition: Button.hpp:54
-
void begin()
Initialize (enable the internal pull-up resistor).
Definition: Button.cpp:11
-
Dummy header file for Arduino builder. You have to add this file first, so the other headers are in t...
- - - - diff --git a/docs/Doxygen/dd/d16/classDoublyLinkedList.html b/docs/Doxygen/dd/d16/classDoublyLinkedList.html deleted file mode 100644 index 683154f35..000000000 --- a/docs/Doxygen/dd/d16/classDoublyLinkedList.html +++ /dev/null @@ -1,987 +0,0 @@ - - - - - - - -Arduino Helpers: DoublyLinkedList< Node > Class Template Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
- -
-
DoublyLinkedList< Node > Class Template Reference
-
-
- -

A class for doubly linked lists. - More...

- -

#include <LinkedList.hpp>

-
-Collaboration diagram for DoublyLinkedList< Node >:
-
-
-
- - - - - - - - - - - -

-Classes

class  node_iterator
 Forward bidirectional doubly linked list iterator. More...
 
class  node_iterator_base
 Base class for doubly linked list iterators. More...
 
class  reverse_node_iterator
 Reverse bidirectional doubly linked list iterator. More...
 
- - - - - - - - - -

-Public Types

using iterator = node_iterator< Node >
 
using const_iterator = node_iterator< const Node >
 
using reverse_iterator = reverse_node_iterator< Node >
 
using const_reverse_iterator = reverse_node_iterator< const Node >
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

void append (Node *node)
 Append a node to a linked list. More...
 
void append (Node &node)
 Append a node to a linked list. More...
 
void insertBefore (Node *toBeInserted, Node *before)
 Insert a node before another node. More...
 
void insertBefore (Node &toBeInserted, Node &before)
 
template<class Compare >
void insertSorted (Node *node, Compare cmp)
 Insert a new node at the correct location into a sorted list. More...
 
void insertSorted (Node *node)
 Insert a new node at the correct location into a sorted list, using operator<. More...
 
void remove (Node *node)
 Remove a node from the linked list. More...
 
void remove (Node &node)
 Remove a node from the linked list. More...
 
void moveDown (Node *node)
 Move down the given node in the linked list. More...
 
bool couldContain (Node *node)
 Check if the linked list could contain the given node. More...
 
iterator begin ()
 
iterator end ()
 
const_iterator begin () const
 
const_iterator end () const
 
reverse_iterator rbegin ()
 
reverse_iterator rend ()
 
const_reverse_iterator rbegin () const
 
const_reverse_iterator rend () const
 
Node * getFirst () const
 Get a pointer to the first node. More...
 
Node * getLast () const
 Get a pointer to the last node. More...
 
- - - - - -

-Private Attributes

Node * first = nullptr
 
Node * last = nullptr
 
-

Detailed Description

-

template<class Node>
-class DoublyLinkedList< Node >

- -

A class for doubly linked lists.

-
Template Parameters
- - -
NodeThe type of the nodes of the list.
-
-
- -

Definition at line 27 of file LinkedList.hpp.

-

Member Typedef Documentation

- -

◆ iterator

- -
-
- - - - -
using iterator = node_iterator<Node>
-
- -

Definition at line 106 of file LinkedList.hpp.

- -
-
- -

◆ const_iterator

- -
-
- - - - -
using const_iterator = node_iterator<const Node>
-
- -

Definition at line 107 of file LinkedList.hpp.

- -
-
- -

◆ reverse_iterator

- -
-
- - - - -
using reverse_iterator = reverse_node_iterator<Node>
-
- -

Definition at line 108 of file LinkedList.hpp.

- -
-
- -

◆ const_reverse_iterator

- -
-
- - - - -
using const_reverse_iterator = reverse_node_iterator<const Node>
-
- -

Definition at line 109 of file LinkedList.hpp.

- -
-
-

Member Function Documentation

- -

◆ append() [1/2]

- -
-
- - - - - -
- - - - - - - - -
void append (Node * node)
-
-inline
-
- -

Append a node to a linked list.

-
Parameters
- - -
nodeA pointer to the node to be appended.
-
-
- -

Definition at line 117 of file LinkedList.hpp.

- -
-
- -

◆ append() [2/2]

- -
-
- - - - - -
- - - - - - - - -
void append (Node & node)
-
-inline
-
- -

Append a node to a linked list.

-
Parameters
- - -
nodeA reference to the node to be appended.
-
-
- -

Definition at line 133 of file LinkedList.hpp.

- -
-
- -

◆ insertBefore() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void insertBefore (Node * toBeInserted,
Node * before 
)
-
-inline
-
- -

Insert a node before another node.

-
Parameters
- - - -
toBeInsertedThe new node to be inserted.
beforeThe node to insert the new node before. It must be in the list already.
-
-
- -

Definition at line 144 of file LinkedList.hpp.

- -
-
- -

◆ insertBefore() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void insertBefore (Node & toBeInserted,
Node & before 
)
-
-inline
-
-
See also
insertBefore(Node *, Node *)
- -

Definition at line 155 of file LinkedList.hpp.

- -
-
- -

◆ insertSorted() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void insertSorted (Node * node,
Compare cmp 
)
-
-inline
-
- -

Insert a new node at the correct location into a sorted list.

-
Parameters
- - - -
nodeThe new node to be inserted.
cmpThe function to order the nodes.
-
-
-
Template Parameters
- - -
CompareA functor that compares two Nodes and returns a boolean.
-
-
- -

Definition at line 170 of file LinkedList.hpp.

- -
-
- -

◆ insertSorted() [2/2]

- -
-
- - - - - -
- - - - - - - - -
void insertSorted (Node * node)
-
-inline
-
- -

Insert a new node at the correct location into a sorted list, using operator<.

-
Parameters
- - -
nodeThe new node to be inserted.
-
-
- -

Definition at line 190 of file LinkedList.hpp.

- -
-
- -

◆ remove() [1/2]

- -
-
- - - - - -
- - - - - - - - -
void remove (Node * node)
-
-inline
-
- -

Remove a node from the linked list.

-
Parameters
- - -
nodeA pointer to the node to be removed.
-
-
- -

Definition at line 200 of file LinkedList.hpp.

- -
-
- -

◆ remove() [2/2]

- -
-
- - - - - -
- - - - - - - - -
void remove (Node & node)
-
-inline
-
- -

Remove a node from the linked list.

-
Parameters
- - -
nodeA reference to the node to be removed.
-
-
- -

Definition at line 219 of file LinkedList.hpp.

- -
-
- -

◆ moveDown()

- -
-
- - - - - -
- - - - - - - - -
void moveDown (Node * node)
-
-inline
-
- -

Move down the given node in the linked list.

-

For example: moving down node C:

Before: ... → A → B → C → D → ...
-
After: ... → A → C → B → D → ...
-
Parameters
- - -
nodeA pointer to the node to be moved down.
-
-
- -

Definition at line 232 of file LinkedList.hpp.

- -
-
- -

◆ couldContain()

- -
-
- - - - - -
- - - - - - - - -
bool couldContain (Node * node)
-
-inline
-
- -

Check if the linked list could contain the given node.

-
Return values
- - - -
trueThe given node is part of some linked list or it is the first node of the given linked list.
- It could be that the node is part of a different linked list if it was ever added to a different list. However, if this function returns true and the node was never added to another linked list, it means that this linked list contains the given node.
falseThe given node is not part of any linked list, or it is the only element of a different linked list.
-
-
- -

Definition at line 268 of file LinkedList.hpp.

- -
-
- -

◆ begin() [1/2]

- -
-
- - - - - -
- - - - - - - -
iterator begin ()
-
-inline
-
- -

Definition at line 273 of file LinkedList.hpp.

- -
-
- -

◆ end() [1/2]

- -
-
- - - - - -
- - - - - - - -
iterator end ()
-
-inline
-
- -

Definition at line 274 of file LinkedList.hpp.

- -
-
- -

◆ begin() [2/2]

- -
-
- - - - - -
- - - - - - - -
const_iterator begin () const
-
-inline
-
- -

Definition at line 276 of file LinkedList.hpp.

- -
-
- -

◆ end() [2/2]

- -
-
- - - - - -
- - - - - - - -
const_iterator end () const
-
-inline
-
- -

Definition at line 277 of file LinkedList.hpp.

- -
-
- -

◆ rbegin() [1/2]

- -
-
- - - - - -
- - - - - - - -
reverse_iterator rbegin ()
-
-inline
-
- -

Definition at line 279 of file LinkedList.hpp.

- -
-
- -

◆ rend() [1/2]

- -
-
- - - - - -
- - - - - - - -
reverse_iterator rend ()
-
-inline
-
- -

Definition at line 280 of file LinkedList.hpp.

- -
-
- -

◆ rbegin() [2/2]

- -
-
- - - - - -
- - - - - - - -
const_reverse_iterator rbegin () const
-
-inline
-
- -

Definition at line 282 of file LinkedList.hpp.

- -
-
- -

◆ rend() [2/2]

- -
-
- - - - - -
- - - - - - - -
const_reverse_iterator rend () const
-
-inline
-
- -

Definition at line 283 of file LinkedList.hpp.

- -
-
- -

◆ getFirst()

- -
-
- - - - - -
- - - - - - - -
Node* getFirst () const
-
-inline
-
- -

Get a pointer to the first node.

- -

Definition at line 286 of file LinkedList.hpp.

- -
-
- -

◆ getLast()

- -
-
- - - - - -
- - - - - - - -
Node* getLast () const
-
-inline
-
- -

Get a pointer to the last node.

- -

Definition at line 288 of file LinkedList.hpp.

- -
-
-

Member Data Documentation

- -

◆ first

- -
-
- - - - - -
- - - - -
Node* first = nullptr
-
-private
-
- -

Definition at line 291 of file LinkedList.hpp.

- -
-
- -

◆ last

- -
-
- - - - - -
- - - - -
Node* last = nullptr
-
-private
-
- -

Definition at line 292 of file LinkedList.hpp.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/Doxygen/dd/d20/StaticSizeExtendedIOElement_8hpp__dep__incl.map b/docs/Doxygen/dd/d20/StaticSizeExtendedIOElement_8hpp__dep__incl.map deleted file mode 100644 index b59a1317d..000000000 --- a/docs/Doxygen/dd/d20/StaticSizeExtendedIOElement_8hpp__dep__incl.map +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/docs/Doxygen/dd/d20/StaticSizeExtendedIOElement_8hpp__dep__incl.md5 b/docs/Doxygen/dd/d20/StaticSizeExtendedIOElement_8hpp__dep__incl.md5 deleted file mode 100644 index 8befed751..000000000 --- a/docs/Doxygen/dd/d20/StaticSizeExtendedIOElement_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -5f55e0bf43e0e65133482f773b5e34f4 \ No newline at end of file diff --git a/docs/Doxygen/dd/d20/StaticSizeExtendedIOElement_8hpp__dep__incl.svg b/docs/Doxygen/dd/d20/StaticSizeExtendedIOElement_8hpp__dep__incl.svg deleted file mode 100644 index 681ad91f2..000000000 --- a/docs/Doxygen/dd/d20/StaticSizeExtendedIOElement_8hpp__dep__incl.svg +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -StaticSizeExtendedIOElement.hpp - - -Node1 - - -StaticSizeExtendedIOElement.hpp - - - - -Node2 - - -AnalogMultiplex.hpp - - - - -Node1->Node2 - - - - -Node3 - - -MAX7219.hpp - - - - -Node1->Node3 - - - - -Node4 - - -ShiftRegisterOutBase.hpp - - - - -Node1->Node4 - - - - -Node5 - - -ShiftRegisterOut.hpp - - - - -Node4->Node5 - - - - -Node7 - - -ShiftRegisterOutBase.ipp - - - - -Node4->Node7 - - - - -Node8 - - -SPIShiftRegisterOut.hpp - - - - -Node4->Node8 - - - - -Node6 - - -ShiftRegisterOut.ipp - - - - -Node5->Node6 - - - - -Node6->Node5 - - - - -Node7->Node4 - - - - -Node9 - - -SPIShiftRegisterOut.ipp - - - - -Node8->Node9 - - - - -Node9->Node8 - - - - - diff --git a/docs/Doxygen/dd/d34/classUniquePtr-members.html b/docs/Doxygen/dd/d34/classUniquePtr-members.html deleted file mode 100644 index 1f599d810..000000000 --- a/docs/Doxygen/dd/d34/classUniquePtr-members.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
UniquePtr< T > Member List
-
-
- -

This is the complete list of members for UniquePtr< T >, including all inherited members.

- - - - - - - - - - - - - - - - - - -
get()UniquePtr< T >inline
get() constUniquePtr< T >inline
operator bool() constUniquePtr< T >inlineexplicit
operator*()UniquePtr< T >inline
operator*() constUniquePtr< T >inline
operator->()UniquePtr< T >inline
operator->() constUniquePtr< T >inline
operator=(const UniquePtr &)=deleteUniquePtr< T >
operator=(UniquePtr< T > &&r)UniquePtr< T >inline
pUniquePtr< T >private
release()UniquePtr< T >inline
reset(T *newP=nullptr)UniquePtr< T >inline
UniquePtr()=defaultUniquePtr< T >
UniquePtr(T *p)UniquePtr< T >inlineexplicit
UniquePtr(const UniquePtr &)=deleteUniquePtr< T >
UniquePtr(UniquePtr< U > &&r)UniquePtr< T >inline
~UniquePtr()UniquePtr< T >inline
- - - - diff --git a/docs/Doxygen/dd/d38/ExtendedIOElement_8cpp__incl.map b/docs/Doxygen/dd/d38/ExtendedIOElement_8cpp__incl.map deleted file mode 100644 index b188a902b..000000000 --- a/docs/Doxygen/dd/d38/ExtendedIOElement_8cpp__incl.map +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/dd/d38/ExtendedIOElement_8cpp__incl.md5 b/docs/Doxygen/dd/d38/ExtendedIOElement_8cpp__incl.md5 deleted file mode 100644 index 21918c6a6..000000000 --- a/docs/Doxygen/dd/d38/ExtendedIOElement_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -ac50191f1208a252be3ee4c89c9a7c47 \ No newline at end of file diff --git a/docs/Doxygen/dd/d38/ExtendedIOElement_8cpp__incl.svg b/docs/Doxygen/dd/d38/ExtendedIOElement_8cpp__incl.svg deleted file mode 100644 index 0d3c68fcb..000000000 --- a/docs/Doxygen/dd/d38/ExtendedIOElement_8cpp__incl.svg +++ /dev/null @@ -1,462 +0,0 @@ - - - - - - -ExtendedIOElement.cpp - - -Node1 - - -ExtendedIOElement.cpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -ExtendedIOElement.hpp - - - - -Node1->Node3 - - - - -Node6 - - -AH/Error/Error.hpp - - - - -Node1->Node6 - - - - -Node21 - - -AH/STL/type_traits - - - - -Node1->Node21 - - - - -Node3->Node2 - - - - -Node4 - - -AH/Hardware/Hardware --Types.hpp - - - - -Node3->Node4 - - - - -Node22 - - -AH/Containers/LinkedList.hpp - - - - -Node3->Node22 - - - - -Node4->Node2 - - - - -Node5 - - -AH/Containers/Array.hpp - - - - -Node4->Node5 - - - - -Node11 - - -NamespaceSettings.hpp - - - - -Node4->Node11 - - - - -Node17 - - -stdint.h - - - - -Node4->Node17 - - - - -Node5->Node2 - - - - -Node5->Node6 - - - - -Node16 - - -stddef.h - - - - -Node5->Node16 - - - - -Node20 - - -AH/STL/iterator - - - - -Node5->Node20 - - - - -Node5->Node21 - - - - -Node6->Node2 - - - - -Node7 - - -AH/Debug/Debug.hpp - - - - -Node6->Node7 - - - - -Node7->Node2 - - - - -Node8 - - -AH/PrintStream/PrintStream.hpp - - - - -Node7->Node8 - - - - -Node10 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node7->Node10 - - - - -Node19 - - -DebugVal.hpp - - - - -Node7->Node19 - - - - -Node8->Node2 - - - - -Node9 - - -Arduino.h - - - - -Node8->Node9 - - - - -Node10->Node2 - - - - -Node10->Node7 - - - - -Node10->Node11 - - - - -Node12 - - -Settings.hpp - - - - -Node10->Node12 - - - - -Node18 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node10->Node18 - - - - -Node13 - - -AH/Types/Frequency.hpp - - - - -Node12->Node13 - - - - -Node14 - - -AH/Hardware/ADCConfig.hpp - - - - -Node12->Node14 - - - - -Node15 - - -limits.h - - - - -Node12->Node15 - - - - -Node12->Node16 - - - - -Node12->Node17 - - - - -Node13->Node2 - - - - -Node13->Node11 - - - - -Node14->Node2 - - - - -Node14->Node9 - - - - -Node22->Node2 - - - - -Node22->Node7 - - - - -Node23 - - -AH/Math/MinMaxFix.hpp - - - - -Node22->Node23 - - - - -Node25 - - -stdlib.h - - - - -Node22->Node25 - - - - -Node26 - - -iterator - - - - -Node22->Node26 - - - - -Node23->Node2 - - - - -Node23->Node11 - - - - -Node24 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node23->Node24 - - - - -Node24->Node2 - - - - -Node24->Node9 - - - - - diff --git a/docs/Doxygen/dd/d39/namespacedetail.html b/docs/Doxygen/dd/d39/namespacedetail.html deleted file mode 100644 index 0f443fe75..000000000 --- a/docs/Doxygen/dd/d39/namespacedetail.html +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - - -Arduino Helpers: detail Namespace Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
- -
-
detail Namespace Reference
-
-
- - - - - -

-Classes

class  Incrementor
 Utility class that acts as a functor to return incremental values. More...
 
- - - - - - - - - - - -

-Variables

const static uint8_t tmp_HIGH = HIGH
 
const static uint8_t tmp_LOW = LOW
 
const static uint8_t tmp_INPUT = INPUT
 
const static uint8_t tmp_OUTPUT = OUTPUT
 
const static uint8_t tmp_INPUT_PULLUP = INPUT_PULLUP
 
-

Variable Documentation

- -

◆ tmp_HIGH

- -
-
- - - - - -
- - - - -
const static uint8_t tmp_HIGH = HIGH
-
-static
-
- -

Definition at line 19 of file ExtendedInputOutput.hpp.

- -
-
- -

◆ tmp_LOW

- -
-
- - - - - -
- - - - -
const static uint8_t tmp_LOW = LOW
-
-static
-
- -

Definition at line 20 of file ExtendedInputOutput.hpp.

- -
-
- -

◆ tmp_INPUT

- -
-
- - - - - -
- - - - -
const static uint8_t tmp_INPUT = INPUT
-
-static
-
- -

Definition at line 21 of file ExtendedInputOutput.hpp.

- -
-
- -

◆ tmp_OUTPUT

- -
-
- - - - - -
- - - - -
const static uint8_t tmp_OUTPUT = OUTPUT
-
-static
-
- -

Definition at line 22 of file ExtendedInputOutput.hpp.

- -
-
- -

◆ tmp_INPUT_PULLUP

- -
-
- - - - - -
- - - - -
const static uint8_t tmp_INPUT_PULLUP = INPUT_PULLUP
-
-static
-
- -

Definition at line 23 of file ExtendedInputOutput.hpp.

- -
-
-
- - - - diff --git a/docs/Doxygen/dd/d40/Hysteresis_8cpp.html b/docs/Doxygen/dd/d40/Hysteresis_8cpp.html deleted file mode 100644 index ac43d3f93..000000000 --- a/docs/Doxygen/dd/d40/Hysteresis_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: Hysteresis.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Hysteresis.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/dd/d40/Hysteresis_8cpp_source.html b/docs/Doxygen/dd/d40/Hysteresis_8cpp_source.html deleted file mode 100644 index b6705195a..000000000 --- a/docs/Doxygen/dd/d40/Hysteresis_8cpp_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Arduino Helpers: Hysteresis.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Hysteresis.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
-
2 #include "Hysteresis.hpp"
-
3 #endif
-
- - - - - diff --git a/docs/Doxygen/dd/d46/structSetprecision-members.html b/docs/Doxygen/dd/d46/structSetprecision-members.html deleted file mode 100644 index f7d6e2fdf..000000000 --- a/docs/Doxygen/dd/d46/structSetprecision-members.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Setprecision Member List
-
-
- -

This is the complete list of members for Setprecision, including all inherited members.

- - -
M_nSetprecision
- - - - diff --git a/docs/Doxygen/dd/d47/FilteredAnalog_8cpp.html b/docs/Doxygen/dd/d47/FilteredAnalog_8cpp.html deleted file mode 100644 index a8247834a..000000000 --- a/docs/Doxygen/dd/d47/FilteredAnalog_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: FilteredAnalog.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
FilteredAnalog.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/dd/d47/FilteredAnalog_8cpp_source.html b/docs/Doxygen/dd/d47/FilteredAnalog_8cpp_source.html deleted file mode 100644 index f57d6535d..000000000 --- a/docs/Doxygen/dd/d47/FilteredAnalog_8cpp_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Arduino Helpers: FilteredAnalog.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
FilteredAnalog.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
-
2 #include "FilteredAnalog.hpp"
-
3 #endif
-
- - - - - diff --git a/docs/Doxygen/dd/d49/classMAX7219SevenSegmentDisplay__coll__graph.map b/docs/Doxygen/dd/d49/classMAX7219SevenSegmentDisplay__coll__graph.map deleted file mode 100644 index 3f68ce71c..000000000 --- a/docs/Doxygen/dd/d49/classMAX7219SevenSegmentDisplay__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/dd/d49/classMAX7219SevenSegmentDisplay__coll__graph.md5 b/docs/Doxygen/dd/d49/classMAX7219SevenSegmentDisplay__coll__graph.md5 deleted file mode 100644 index 13cb6dbcb..000000000 --- a/docs/Doxygen/dd/d49/classMAX7219SevenSegmentDisplay__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -cd9f8926e9cd7eeb312cdf3dd77884e5 \ No newline at end of file diff --git a/docs/Doxygen/dd/d49/classMAX7219SevenSegmentDisplay__coll__graph.svg b/docs/Doxygen/dd/d49/classMAX7219SevenSegmentDisplay__coll__graph.svg deleted file mode 100644 index c078e8076..000000000 --- a/docs/Doxygen/dd/d49/classMAX7219SevenSegmentDisplay__coll__graph.svg +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - -MAX7219SevenSegmentDisplay - - -Node1 - - -MAX7219SevenSegmentDisplay - - - -+ MAX7219SevenSegmentDisplay() -+ begin() -+ display() -+ display() -+ display() -+ printHex() - - - - -Node2 - - -MAX7219_Base - -+ DECODEMODE -+ INTENSITY -+ SCANLIMIT -+ SHUTDOWN -+ DISPLAYTEST -- loadPin -- settings - -+ MAX7219_Base() -+ init() -+ clear() -+ send() -+ sendRaw() -+ setIntensity() - - - - -Node2->Node1 - - - - - diff --git a/docs/Doxygen/dd/d53/ADCConfig_8hpp__dep__incl.map b/docs/Doxygen/dd/d53/ADCConfig_8hpp__dep__incl.map deleted file mode 100644 index 77d3db267..000000000 --- a/docs/Doxygen/dd/d53/ADCConfig_8hpp__dep__incl.map +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/dd/d53/ADCConfig_8hpp__dep__incl.md5 b/docs/Doxygen/dd/d53/ADCConfig_8hpp__dep__incl.md5 deleted file mode 100644 index 7b0e076fd..000000000 --- a/docs/Doxygen/dd/d53/ADCConfig_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -ab9e94325d13767e93d65aedfb645c72 \ No newline at end of file diff --git a/docs/Doxygen/dd/d53/ADCConfig_8hpp__dep__incl.svg b/docs/Doxygen/dd/d53/ADCConfig_8hpp__dep__incl.svg deleted file mode 100644 index a348c61a1..000000000 --- a/docs/Doxygen/dd/d53/ADCConfig_8hpp__dep__incl.svg +++ /dev/null @@ -1,671 +0,0 @@ - - - - - - -ADCConfig.hpp - - -Node1 - - -ADCConfig.hpp - - - - -Node2 - - -Settings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -SettingsWrapper.hpp - - - - -Node2->Node3 - - - - -Node4 - - -Updatable.hpp - - - - -Node3->Node4 - - - - -Node5 - - -Debug.hpp - - - - -Node3->Node5 - - - - -Node9 - - -Button.hpp - - - - -Node3->Node9 - - - - -Node25 - - -FilteredAnalog.hpp - - - - -Node3->Node25 - - - - -Node40 - - -ShiftRegisterOutRGB.hpp - - - - -Node3->Node40 - - - - -Node5->Node3 - - - - -Node6 - - -LinkedList.hpp - - - - -Node5->Node6 - - - - -Node33 - - -Debug.cpp - - - - -Node5->Node33 - - - - -Node34 - - -Error.hpp - - - - -Node5->Node34 - - - - -Node6->Node4 - - - - -Node7 - - -ExtendedIOElement.hpp - - - - -Node6->Node7 - - - - -Node8 - - -ExtendedInputOutput.hpp - - - - -Node7->Node8 - - - - -Node18 - - -ExtendedInputOutput.cpp - - - - -Node7->Node18 - - - - -Node31 - - -StaticSizeExtendedIOElement.hpp - - - - -Node7->Node31 - - - - -Node32 - - -ExtendedIOElement.cpp - - - - -Node7->Node32 - - - - -Node8->Node9 - - - - -Node15 - - -ButtonMatrix.ipp - - - - -Node8->Node15 - - - - -Node17 - - -AnalogMultiplex.hpp - - - - -Node8->Node17 - - - - -Node8->Node18 - - - - -Node19 - - -ShiftRegisterOutBase.ipp - - - - -Node8->Node19 - - - - -Node22 - - -ShiftRegisterOut.ipp - - - - -Node8->Node22 - - - - -Node24 - - -SPIShiftRegisterOut.ipp - - - - -Node8->Node24 - - - - -Node8->Node25 - - - - -Node26 - - -LEDs.hpp - - - - -Node8->Node26 - - - - -Node28 - - -MAX7219_Base.hpp - - - - -Node8->Node28 - - - - -Node10 - - -Button.cpp - - - - -Node9->Node10 - - - - -Node11 - - -IncrementButton.hpp - - - - -Node9->Node11 - - - - -Node13 - - -IncrementDecrementButtons.hpp - - - - -Node9->Node13 - - - - -Node12 - - -IncrementButton.cpp - - - - -Node11->Node12 - - - - -Node14 - - -IncrementDecrementButtons.cpp - - - - -Node13->Node14 - - - - -Node16 - - -ButtonMatrix.hpp - - - - -Node15->Node16 - - - - -Node16->Node15 - - - - -Node20 - - -ShiftRegisterOutBase.hpp - - - - -Node19->Node20 - - - - -Node20->Node19 - - - - -Node21 - - -ShiftRegisterOut.hpp - - - - -Node20->Node21 - - - - -Node23 - - -SPIShiftRegisterOut.hpp - - - - -Node20->Node23 - - - - -Node21->Node22 - - - - -Node22->Node21 - - - - -Node23->Node24 - - - - -Node24->Node23 - - - - -Node27 - - -DotBarDisplayLEDs.hpp - - - - -Node26->Node27 - - - - -Node29 - - -MAX7219.hpp - - - - -Node28->Node29 - - - - -Node30 - - -MAX7219SevenSegmentDisplay.hpp - - - - -Node28->Node30 - - - - -Node31->Node17 - - - - -Node31->Node20 - - - - -Node31->Node29 - - - - -Node34->Node4 - - - - -Node34->Node18 - - - - -Node34->Node32 - - - - -Node35 - - -Array.hpp - - - - -Node34->Node35 - - - - -Node38 - - -BitArray.hpp - - - - -Node34->Node38 - - - - -Node39 - - -Exit.cpp - - - - -Node34->Node39 - - - - -Node35->Node17 - - - - -Node36 - - -ArrayHelpers.hpp - - - - -Node35->Node36 - - - - -Node37 - - -Hardware-Types.hpp - - - - -Node35->Node37 - - - - -Node36->Node31 - - - - -Node37->Node7 - - - - -Node37->Node16 - - - - -Node37->Node25 - - - - -Node38->Node20 - - - - -Node38->Node23 - - - - -Node38->Node29 - - - - -Node40->Node19 - - - - -Node41 - - -ShiftRegisterOutRGB.cpp - - - - -Node40->Node41 - - - - - diff --git a/docs/Doxygen/dd/d5e/group__AH__Math.html b/docs/Doxygen/dd/d5e/group__AH__Math.html deleted file mode 100644 index 95cf956da..000000000 --- a/docs/Doxygen/dd/d5e/group__AH__Math.html +++ /dev/null @@ -1,252 +0,0 @@ - - - - - - - -Arduino Helpers: Math Utilities - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
- -
-
Math Utilities
-
-
- -

Mathematics helper functions. Min/max functions, functions to uniformly increase the effective bid depth, etc. -More...

- - - - - - - - - - - - - - -

-Functions

template<size_t Bits_out, size_t Bits_in, class T_out , class T_in >
T_out increaseBitDepth (T_in in)
 Increase the bit depth of the given value from Bits_in bits wide to Bits_out bits wide, evenly distributing the error across the entire range, such that the error for each element is between -0.5 and +0.5. More...
 
template<class T , class U >
constexpr auto min (const T &a, const U &b) -> decltype(b< a ? b :a)
 Return the smaller of two numbers/objects. More...
 
template<class T , class U >
constexpr auto max (const T &a, const U &b) -> decltype(a< b ? b :a)
 Return the larger of two numbers/objects. More...
 
-

Detailed Description

-

Mathematics helper functions. Min/max functions, functions to uniformly increase the effective bid depth, etc.

-

Function Documentation

- -

◆ increaseBitDepth()

- -
-
- - - - - - - - -
T_out increaseBitDepth (T_in in)
-
- -

Increase the bit depth of the given value from Bits_in bits wide to Bits_out bits wide, evenly distributing the error across the entire range, such that the error for each element is between -0.5 and +0.5.

-

For example, converting 3-bit numbers to 7-bit numbers would result in the following:

- - - - - - - - - - - - - - - - - - - -
in (dec) in (bin) out (bin) out (dec) exact error
0 000 000'0000 0 0.00 +0.00
1 001 001'0010 18 18.14 +0.14
2 010 010'0100 36 36.29 +0.29
3 011 011'0110 54 54.43 +0.43
4 100 100'1001 73 72.57 -0.43
5 101 101'1011 91 90.71 -0.29
6 110 110'1101 109 108.86 -0.14
7 111 111'1111 127 127.00 +0.00
-
Template Parameters
- - - - - -
Bits_outThe number of bits of the output range.
Bits_inThe number of bits of the input range.
T_outThe type of the output (return type).
T_inThe type of the input.
-
-
-
Parameters
- - -
inThe value to scale up.
-
-
-
Returns
The scaled up value.
- -

Definition at line 68 of file IncreaseBitDepth.hpp.

- -
-
- -

◆ min()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
constexpr auto min (const T & a,
const U & b 
) -> decltype(b < a ? b : a)
-
-constexpr
-
- -

Return the smaller of two numbers/objects.

-
Examples
Blink-Frequency-Buttons.ino.
-
- -

Definition at line 15 of file MinMaxFix.hpp.

- -
-
- -

◆ max()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
constexpr auto max (const T & a,
const U & b 
) -> decltype(a < b ? b : a)
-
-constexpr
-
- -

Return the larger of two numbers/objects.

-
Examples
Blink-Frequency-Buttons.ino.
-
- -

Definition at line 22 of file MinMaxFix.hpp.

- -
-
-
- - - - diff --git a/docs/Doxygen/dd/d66/classDoublyLinkedList_1_1node__iterator__base__coll__graph.map b/docs/Doxygen/dd/d66/classDoublyLinkedList_1_1node__iterator__base__coll__graph.map deleted file mode 100644 index f26a16636..000000000 --- a/docs/Doxygen/dd/d66/classDoublyLinkedList_1_1node__iterator__base__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/dd/d66/classDoublyLinkedList_1_1node__iterator__base__coll__graph.md5 b/docs/Doxygen/dd/d66/classDoublyLinkedList_1_1node__iterator__base__coll__graph.md5 deleted file mode 100644 index 3bfad906d..000000000 --- a/docs/Doxygen/dd/d66/classDoublyLinkedList_1_1node__iterator__base__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -b999e33d497c993477db95e450d7eda4 \ No newline at end of file diff --git a/docs/Doxygen/dd/d66/classDoublyLinkedList_1_1node__iterator__base__coll__graph.svg b/docs/Doxygen/dd/d66/classDoublyLinkedList_1_1node__iterator__base__coll__graph.svg deleted file mode 100644 index b6fd7113f..000000000 --- a/docs/Doxygen/dd/d66/classDoublyLinkedList_1_1node__iterator__base__coll__graph.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - -DoublyLinkedList< Node >::node_iterator_base< INode > - - -Node1 - - -DoublyLinkedList< Node - >::node_iterator_base -< INode > - -# node - -+ node_iterator_base() -+ operator!=() -+ operator*() - - - - - diff --git a/docs/Doxygen/dd/d80/PrintStream_8hpp.html b/docs/Doxygen/dd/d80/PrintStream_8hpp.html deleted file mode 100644 index fffa4b0ca..000000000 --- a/docs/Doxygen/dd/d80/PrintStream_8hpp.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - - -Arduino Helpers: PrintStream.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
PrintStream.hpp File Reference
-
-
-
#include <AH/Settings/Warnings.hpp>
-#include <Arduino.h>
-
-Include dependency graph for PrintStream.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - - - - -

-Classes

struct  Setbase
 
struct  Setprecision
 
struct  Setbytesep
 
- - - -

-Typedefs

typedef Print & manipulator(Print &)
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

Print & endl (Print &printer)
 
Print & flush (Print &printer)
 
Print & hex (Print &printer)
 
Print & bin (Print &printer)
 
Print & dec (Print &printer)
 
Print & boolalpha (Print &printer)
 
Print & noboolalpha (Print &printer)
 
Print & leadingzeros (Print &printer)
 
Print & noleadingzeros (Print &printer)
 
Print & uppercase (Print &printer)
 
Print & nouppercase (Print &printer)
 
Print & showbase (Print &printer)
 
Print & noshowbase (Print &printer)
 
Print & operator<< (Print &printer, const __FlashStringHelper *s)
 
Print & operator<< (Print &printer, const String &s)
 
Print & operator<< (Print &printer, const char s[])
 
Print & operator<< (Print &printer, char c)
 
Print & operator<< (Print &printer, unsigned char c)
 
Print & operator<< (Print &printer, int i)
 
Print & operator<< (Print &printer, unsigned int i)
 
Print & operator<< (Print &printer, int8_t i)
 
Print & operator<< (Print &printer, long i)
 
Print & operator<< (Print &printer, unsigned long i)
 
Print & operator<< (Print &printer, double d)
 
Print & operator<< (Print &printer, const Printable &p)
 
Print & operator<< (Print &printer, bool b)
 
Print & operator<< (Print &printer, manipulator pf)
 
Setbase setbase (uint8_t base)
 
Print & operator<< (Print &printer, Setbase f)
 
Setprecision setprecision (int n)
 
Print & operator<< (Print &printer, Setprecision f)
 
Setbytesep setbytesep (char bytesep)
 
Print & operator<< (Print &printer, Setbytesep f)
 
-
- - - - diff --git a/docs/Doxygen/dd/d80/PrintStream_8hpp_source.html b/docs/Doxygen/dd/d80/PrintStream_8hpp_source.html deleted file mode 100644 index a906aba48..000000000 --- a/docs/Doxygen/dd/d80/PrintStream_8hpp_source.html +++ /dev/null @@ -1,218 +0,0 @@ - - - - - - - -Arduino Helpers: PrintStream.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
PrintStream.hpp
-
-
-Go to the documentation of this file.
1 
-
5 #ifndef PrintStream_h
-
6 #define PrintStream_h
-
7 
- -
9 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
10 
- -
12 #include <Arduino.h> // Print
- -
14 
-
15 
-
18 typedef Print &manipulator(Print &);
-
19 
-
20 Print &endl(Print &printer);
-
21 Print &flush(Print &printer);
-
22 Print &hex(Print &printer);
-
23 Print &bin(Print &printer);
-
24 Print &dec(Print &printer);
-
25 /* Print &oct(Print &printer); */
-
26 Print &boolalpha(Print &printer);
-
27 Print &noboolalpha(Print &printer);
-
28 Print &leadingzeros(Print &printer);
-
29 Print &noleadingzeros(Print &printer);
-
30 Print &uppercase(Print &printer);
-
31 Print &nouppercase(Print &printer);
-
32 Print &showbase(Print &printer);
-
33 Print &noshowbase(Print &printer);
-
34 
-
35 Print &operator<<(Print &printer, const __FlashStringHelper *s);
-
36 #ifdef ARDUINO
-
37 Print &operator<<(Print &printer, const String &s);
-
38 #endif
-
39 Print &operator<<(Print &printer, const char s[]);
-
40 Print &operator<<(Print &printer, char c);
-
41 Print &operator<<(Print &printer, unsigned char c);
-
42 Print &operator<<(Print &printer, int i);
-
43 Print &operator<<(Print &printer, unsigned int i);
-
44 Print &operator<<(Print &printer, int8_t i);
-
45 Print &operator<<(Print &printer, long i);
-
46 Print &operator<<(Print &printer, unsigned long i);
-
47 Print &operator<<(Print &printer, double d);
-
48 Print &operator<<(Print &printer, const Printable &p);
-
49 Print &operator<<(Print &printer, bool b);
-
50 
-
51 Print &operator<<(Print &printer, manipulator pf);
-
52 
-
53 struct Setbase {
-
54  uint8_t M_base;
-
55 };
-
56 Setbase setbase(uint8_t base);
-
57 Print &operator<<(Print &printer, Setbase f);
-
58 
-
59 struct Setprecision {
-
60  int M_n;
-
61 };
- -
63 Print &operator<<(Print &printer, Setprecision f);
-
64 
-
65 struct Setbytesep {
-
66  char M_bytesep;
-
67 };
-
68 Setbytesep setbytesep(char bytesep);
-
69 Print &operator<<(Print &printer, Setbytesep f);
-
70 
-
72 
-
73 #ifndef ARDUINO
-
74 
-
75 #include <iomanip>
-
76 #include <iostream>
-
77 
-
78 // TODO: check conflicts between Arduino version and C++ STL version
-
79 using std::endl;
-
80 // using std::setbase;
-
81 // using std::setprecision;
-
82 using std::boolalpha;
-
83 using std::dec;
-
84 using std::flush;
-
85 using std::hex;
-
86 using std::noboolalpha;
-
87 using std::noshowbase;
-
88 using std::nouppercase;
-
89 using std::showbase;
-
90 using std::uppercase;
-
91 
-
92 inline std::ostream &operator<<(std::ostream &os, uint8_t u) {
-
93  // I'm lazy, I should probably implement one for uint8_t to get the leading
-
94  // zeros right
-
95  return os << static_cast<unsigned short>(u);
-
96 }
-
97 
-
98 inline std::ostream &operator<<(std::ostream &os,
-
99  const __FlashStringHelper *s) {
-
100  return os << reinterpret_cast<const char *>(s);
-
101 }
-
102 
-
103 #endif
-
104 
- -
106 
-
107 #endif // PrintStream_h
-
-
Print & showbase(Print &printer)
Definition: PrintStream.cpp:45
-
uint8_t M_base
Definition: PrintStream.hpp:54
-
Setprecision setprecision(int n)
-
Print & leadingzeros(Print &printer)
Definition: PrintStream.cpp:91
- -
Print & bin(Print &printer)
Definition: PrintStream.cpp:72
-
Setbase setbase(uint8_t base)
-
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
char M_bytesep
Definition: PrintStream.hpp:66
-
Setbytesep setbytesep(char bytesep)
-
Print & noshowbase(Print &printer)
Definition: PrintStream.cpp:50
-
Print & nouppercase(Print &printer)
Definition: PrintStream.cpp:40
-
Print & manipulator(Print &)
Definition: PrintStream.hpp:18
-
Print & noboolalpha(Print &printer)
Definition: PrintStream.cpp:86
- - -
Print & boolalpha(Print &printer)
Definition: PrintStream.cpp:82
-
Print & operator<<(Print &printer, const __FlashStringHelper *s)
Definition: PrintStream.cpp:99
-
Print & flush(Print &printer)
Definition: PrintStream.cpp:55
-
#define AH_DIAGNOSTIC_EXTERNAL_HEADER()
Definition: Warnings.hpp:18
-
Print & noleadingzeros(Print &printer)
Definition: PrintStream.cpp:95
-
Print & uppercase(Print &printer)
Definition: PrintStream.cpp:35
-
Print & hex(Print &printer)
Definition: PrintStream.cpp:62
-
Print & endl(Print &printer)
Definition: PrintStream.cpp:27
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
Print & dec(Print &printer)
Definition: PrintStream.cpp:77
- - - - - - diff --git a/docs/Doxygen/dd/d81/classSPIShiftRegisterOut.html b/docs/Doxygen/dd/d81/classSPIShiftRegisterOut.html deleted file mode 100644 index e84c81c38..000000000 --- a/docs/Doxygen/dd/d81/classSPIShiftRegisterOut.html +++ /dev/null @@ -1,1313 +0,0 @@ - - - - - - - -Arduino Helpers: SPIShiftRegisterOut< N > Class Template Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

A class for serial-in/parallel-out shift registers, like the 74HC595 that are connected to the SPI bus. - More...

- -

#include <SPIShiftRegisterOut.hpp>

-
-Inheritance diagram for SPIShiftRegisterOut< N >:
-
-
-
-
-Collaboration diagram for SPIShiftRegisterOut< N >:
-
-
-
- - - - -

-Public Types

using BitOrder_t = typename ShiftRegisterOutBase< N >::BitOrder_t
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 SPIShiftRegisterOut (pin_t latchPin=SS, BitOrder_t bitOrder=MSBFIRST)
 Create a new SPIShiftRegisterOut object with a given bit order, and a given number of outputs. More...
 
void begin () override
 Initialize the shift register. More...
 
void update () override
 Write the state buffer to the physical outputs. More...
 
void pinMode (pin_t pin, uint8_t mode) override __attribute__((deprecated))
 The pinMode function is not implemented because the mode is OUTPUT by definition. More...
 
void digitalWrite (pin_t pin, uint8_t val) override
 Set the state of a given output pin. More...
 
int digitalRead (pin_t pin) override
 Get the current state of a given output pin. More...
 
analog_t analogRead (pin_t pin) override __attribute__((deprecated))
 The analogRead function is deprecated because a shift is always digital. More...
 
void analogWrite (pin_t pin, analog_t val) override __attribute__((deprecated))
 The analogWrite function is not deprecated because a shift is always digital. More...
 
pin_t red (pin_t id)
 Get the red output pin of the given LED. More...
 
Array< pin_t, N/3 > redPins ()
 Get an array containing all pins with red LEDs. More...
 
pin_t green (pin_t id)
 Get the green output pin of the given LED. More...
 
Array< pin_t, N/3 > greenPins ()
 Get an array containing all pins with green LEDs. More...
 
pin_t blue (pin_t id)
 Get the blue output pin of the given LED. More...
 
Array< pin_t, N/3 > bluePins ()
 Get an array containing all pins with blue LEDs. More...
 
Array< pin_t, N > pins () const
 Get an array containing all pins of the element. More...
 
pin_t pin (pin_t pin) const
 Get the extended IO pin number of a given physical pin of this extended IO element. More...
 
pin_t operator[] (pin_t pin) const
 Get the extended IO pin number of a given physical pin of this extended IO element. More...
 
pin_t getLength () const
 Get the number of pins this IO element has. More...
 
pin_t getEnd () const
 Get the largest global extended IO pin number that belongs to this extended IO element. More...
 
pin_t getStart () const
 Get the smallest global extended IO pin number that belongs to this extended IO element. More...
 
- - - - - - - - - -

-Static Public Member Functions

static constexpr uint16_t length ()
 
static void beginAll ()
 Initialize all extended IO elements. More...
 
static DoublyLinkedList< ExtendedIOElement > & getAll ()
 Get the list of all Extended IO elements. More...
 
- - - - - - - - - - - - - -

-Protected Attributes

const pin_t latchPin
 
const BitOrder_t bitOrder
 
BitArray< N > buffer
 
bool dirty = true
 
ExtendedIOElementnext
 
ExtendedIOElementprevious
 
- - - - - -

-Private Attributes

const pin_t start
 
const pin_t end
 
- - - - - -

-Static Private Attributes

static pin_t offset = NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS
 
static DoublyLinkedList< ExtendedIOElementelements
 
-

Detailed Description

-

template<uint8_t N>
-class SPIShiftRegisterOut< N >

- -

A class for serial-in/parallel-out shift registers, like the 74HC595 that are connected to the SPI bus.

-
Template Parameters
- - -
NThe number of bits in total. Usually, shift registers (e.g. the 74HC595) have eight bits per chip, so length = 8 * k where k is the number of cascaded chips.
-
-
-
Examples
1.SPI-Blink.ino, 2.RGB-LED-Chaser.ino, and Toggle-LEDs.ino.
-
- -

Definition at line 29 of file SPIShiftRegisterOut.hpp.

-

Member Typedef Documentation

- -

◆ BitOrder_t

- -
-
- - - - -
using BitOrder_t = typename ShiftRegisterOutBase<N>::BitOrder_t
-
- -

Definition at line 31 of file SPIShiftRegisterOut.hpp.

- -
-
-

Constructor & Destructor Documentation

- -

◆ SPIShiftRegisterOut()

- -
-
- - - - - - - - - - - - - - - - - - -
SPIShiftRegisterOut (pin_t latchPin = SS,
BitOrder_t bitOrder = MSBFIRST 
)
-
- -

Create a new SPIShiftRegisterOut object with a given bit order, and a given number of outputs.

-

Multiple shift registers can be cascaded by connecting the serial output of the first one to the input of the second one:

-
SCK >───────────┬──────────────────────┬───────── ⋯
-
┏━━━━━━━┷━━━━━━━┓ ┏━━━━━━━┷━━━━━━━┓
-
┃ SH_CP ┃ ┃ SH_CP ┃
-
MOSI >───┨ DS Q7S ┠──────┨ DS Q7S ┠─ ⋯
-
┃ ST_CP ┃ ┃ ST_CP ┃
-
┗━━━━━━━┯━━━━━━━┛ ┗━━━━━━━┯━━━━━━━┛
-
CS >───────────┴──────────────────────┴───────── ⋯
-
Parameters
- - - -
latchPinThe digital output pin connected to the latch pin (ST_CP or RCLK) of the shift register.
bitOrderEither MSBFIRST (most significant bit first) or LSBFIRST (least significant bit first).
-
-
- -

Definition at line 13 of file SPIShiftRegisterOut.ipp.

- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - -
- - - - - - - -
void begin ()
-
-overridevirtual
-
- -

Initialize the shift register.

-


- Setup the SPI interface, set the CS pin to output mode, and set all shift register outputs to LOW.

- -

Implements ExtendedIOElement.

- -

Definition at line 17 of file SPIShiftRegisterOut.ipp.

- -
-
- -

◆ update()

- -
-
- - - - - -
- - - - - - - -
void update ()
-
-overridevirtual
-
- -

Write the state buffer to the physical outputs.

- -

Implements ExtendedIOElement.

- -

Definition at line 24 of file SPIShiftRegisterOut.ipp.

- -
-
- -

◆ pinMode()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void pinMode (pin_t pin,
uint8_t mode 
)
-
-inlineoverridevirtualinherited
-
- -

The pinMode function is not implemented because the mode is OUTPUT by definition.

- -

Implements ExtendedIOElement.

- -

Definition at line 52 of file ShiftRegisterOutBase.hpp.

- -
-
- -

◆ digitalWrite()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void digitalWrite (pin_t pin,
uint8_t val 
)
-
-overridevirtualinherited
-
- -

Set the state of a given output pin.

-
Parameters
- - - -
pinThe shift register pin to set.
valThe value to set the pin to. (Either HIGH (1) or LOW (0))
-
-
- -

Implements ExtendedIOElement.

- -

Definition at line 13 of file ShiftRegisterOutBase.ipp.

- -
-
- -

◆ digitalRead()

- -
-
- - - - - -
- - - - - - - - -
int digitalRead (pin_t pin)
-
-overridevirtualinherited
-
- -

Get the current state of a given output pin.

-
Parameters
- - -
pinThe shift register pin to read from.
-
-
-
Return values
- - - -
0The state of the pin is LOW.
1The state of the pin is HIGH.
-
-
- -

Implements ExtendedIOElement.

- -

Definition at line 20 of file ShiftRegisterOutBase.ipp.

- -
-
- -

◆ analogRead()

- -
-
- - - - - -
- - - - - - - - -
analog_t analogRead (pin_t pin)
-
-inlineoverridevirtualinherited
-
- -

The analogRead function is deprecated because a shift is always digital.

-
Parameters
- - -
pinThe shift register pin to read from.
-
-
-
Return values
- - - -
0The state of the pin is LOW.
1023The state of the pin is HIGH.
-
-
- -

Implements ExtendedIOElement.

- -

Definition at line 90 of file ShiftRegisterOutBase.hpp.

- -
-
- -

◆ analogWrite()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void analogWrite (pin_t pin,
analog_t val 
)
-
-inlineoverridevirtualinherited
-
- -

The analogWrite function is not deprecated because a shift is always digital.

-
Parameters
- - - -
pinThe shift register pin to set.
valThe value to set the pin to. A value greater or equal to 0x80 will set the pin to a HIGH state, a value less than 0x80 will set the pin to a LOW state.
-
-
- -

Implements ExtendedIOElement.

- -

Definition at line 104 of file ShiftRegisterOutBase.hpp.

- -
-
- -

◆ red()

- -
-
- - - - - -
- - - - - - - - -
pin_t red (pin_t id)
-
-inherited
-
- -

Get the red output pin of the given LED.

-
Parameters
- - -
idThe zero-based LED number.
-
-
- -

Definition at line 36 of file ShiftRegisterOutBase.ipp.

- -
-
- -

◆ redPins()

- -
-
- - - - - -
- - - - - - - -
Array< pin_t, N/3 > redPins ()
-
-inherited
-
- -

Get an array containing all pins with red LEDs.

- -

Definition at line 41 of file ShiftRegisterOutBase.ipp.

- -
-
- -

◆ green()

- -
-
- - - - - -
- - - - - - - - -
pin_t green (pin_t id)
-
-inherited
-
- -

Get the green output pin of the given LED.

-
Parameters
- - -
idThe zero-based LED number.
-
-
- -

Definition at line 25 of file ShiftRegisterOutBase.ipp.

- -
-
- -

◆ greenPins()

- -
-
- - - - - -
- - - - - - - -
Array< pin_t, N/3 > greenPins ()
-
-inherited
-
- -

Get an array containing all pins with green LEDs.

- -

Definition at line 30 of file ShiftRegisterOutBase.ipp.

- -
-
- -

◆ blue()

- -
-
- - - - - -
- - - - - - - - -
pin_t blue (pin_t id)
-
-inherited
-
- -

Get the blue output pin of the given LED.

-
Parameters
- - -
idThe zero-based LED number.
-
-
- -

Definition at line 47 of file ShiftRegisterOutBase.ipp.

- -
-
- -

◆ bluePins()

- -
-
- - - - - -
- - - - - - - -
Array< pin_t, N/3 > bluePins ()
-
-inherited
-
- -

Get an array containing all pins with blue LEDs.

- -

Definition at line 52 of file ShiftRegisterOutBase.ipp.

- -
-
- -

◆ pins()

- -
-
- - - - - -
- - - - - - - -
Array<pin_t, N> pins () const
-
-inlineinherited
-
- -

Get an array containing all pins of the element.

- -

Definition at line 27 of file StaticSizeExtendedIOElement.hpp.

- -
-
- -

◆ length()

- -
-
- - - - - -
- - - - - - - -
static constexpr uint16_t length ()
-
-inlinestaticconstexprinherited
-
- -

Definition at line 31 of file StaticSizeExtendedIOElement.hpp.

- -
-
- -

◆ beginAll()

- -
-
- - - - - -
- - - - - - - -
void beginAll ()
-
-staticinherited
-
- -

Initialize all extended IO elements.

- -

Definition at line 23 of file ExtendedIOElement.cpp.

- -
-
- -

◆ pin()

- -
-
- - - - - -
- - - - - - - - -
pin_t pin (pin_t pin) const
-
-inherited
-
- -

Get the extended IO pin number of a given physical pin of this extended IO element.

-
Parameters
- - -
pinThe zero-based physical pin number of this IO element.
-
-
-
Returns
The global, unique extended IO pin number for the given pin.
-
Examples
Toggle-LEDs.ino.
-
- -

Definition at line 28 of file ExtendedIOElement.cpp.

- -
-
- -

◆ operator[]()

- -
-
- - - - - -
- - - - - - - - -
pin_t operator[] (pin_t pin) const
-
-inherited
-
- -

Get the extended IO pin number of a given physical pin of this extended IO element.

-


- It is alias for ExtendedIOElement::pin.

Parameters
- - -
pinThe zero-based physical pin number of this IO element.
-
-
-
Returns
The global, unique extended IO pin number for the given pin.
- -

Definition at line 43 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getLength()

- -
-
- - - - - -
- - - - - - - -
pin_t getLength () const
-
-inherited
-
- -

Get the number of pins this IO element has.

-
Returns
The number of pins this IO element has.
-
Examples
1.AnalogReadSerial.ino, and 2.DigitalReadSerial.ino.
-
- -

Definition at line 45 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getEnd()

- -
-
- - - - - -
- - - - - - - -
pin_t getEnd () const
-
-inherited
-
- -

Get the largest global extended IO pin number that belongs to this extended IO element.

- -

Definition at line 47 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getStart()

- -
-
- - - - - -
- - - - - - - -
pin_t getStart () const
-
-inherited
-
- -

Get the smallest global extended IO pin number that belongs to this extended IO element.

- -

Definition at line 49 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getAll()

- -
-
- - - - - -
- - - - - - - -
DoublyLinkedList< ExtendedIOElement > & getAll ()
-
-staticinherited
-
- -

Get the list of all Extended IO elements.

- -

Definition at line 51 of file ExtendedIOElement.cpp.

- -
-
-

Member Data Documentation

- -

◆ latchPin

- -
-
- - - - - -
- - - - -
const pin_t latchPin
-
-protectedinherited
-
- -

Definition at line 149 of file ShiftRegisterOutBase.hpp.

- -
-
- -

◆ bitOrder

- -
-
- - - - - -
- - - - -
const BitOrder_t bitOrder
-
-protectedinherited
-
- -

Definition at line 150 of file ShiftRegisterOutBase.hpp.

- -
-
- -

◆ buffer

- -
-
- - - - - -
- - - - -
BitArray<N> buffer
-
-protectedinherited
-
- -

Definition at line 152 of file ShiftRegisterOutBase.hpp.

- -
-
- -

◆ dirty

- -
-
- - - - - -
- - - - -
bool dirty = true
-
-protectedinherited
-
- -

Definition at line 153 of file ShiftRegisterOutBase.hpp.

- -
-
- -

◆ start

- -
-
- - - - - -
- - - - -
const pin_t start
-
-privateinherited
-
- -

Definition at line 193 of file ExtendedIOElement.hpp.

- -
-
- -

◆ end

- -
-
- - - - - -
- - - - -
const pin_t end
-
-privateinherited
-
- -

Definition at line 194 of file ExtendedIOElement.hpp.

- -
-
- -

◆ offset

- -
-
- - - - - -
- - - - -
pin_t offset = NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS
-
-staticprivateinherited
-
- -

Definition at line 195 of file ExtendedIOElement.hpp.

- -
-
- -

◆ elements

- -
-
- - - - - -
- - - - -
DoublyLinkedList< ExtendedIOElement > elements
-
-staticprivateinherited
-
- -

Definition at line 197 of file ExtendedIOElement.hpp.

- -
-
- -

◆ next

- -
-
- - - - - -
- - - - -
ExtendedIOElement * next
-
-protectedinherited
-
- -

Definition at line 305 of file LinkedList.hpp.

- -
-
- -

◆ previous

- -
-
- - - - - -
- - - - -
ExtendedIOElement * previous
-
-protectedinherited
-
- -

Definition at line 306 of file LinkedList.hpp.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/docs/Doxygen/dd/d88/Warnings_8hpp__dep__incl.map b/docs/Doxygen/dd/d88/Warnings_8hpp__dep__incl.map deleted file mode 100644 index e82e61872..000000000 --- a/docs/Doxygen/dd/d88/Warnings_8hpp__dep__incl.map +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/dd/d88/Warnings_8hpp__dep__incl.md5 b/docs/Doxygen/dd/d88/Warnings_8hpp__dep__incl.md5 deleted file mode 100644 index b40b7a9ac..000000000 --- a/docs/Doxygen/dd/d88/Warnings_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -a5dc57e394476b4ff48e37d874ed64cf \ No newline at end of file diff --git a/docs/Doxygen/dd/d88/Warnings_8hpp__dep__incl.svg b/docs/Doxygen/dd/d88/Warnings_8hpp__dep__incl.svg deleted file mode 100644 index d4408964b..000000000 --- a/docs/Doxygen/dd/d88/Warnings_8hpp__dep__incl.svg +++ /dev/null @@ -1,1009 +0,0 @@ - - - - - - -Warnings.hpp - - -Node1 - - -Warnings.hpp - - - - -Node2 - - -Array.hpp - - - - -Node1->Node2 - - - - -Node3 - - -ArrayHelpers.hpp - - - - -Node1->Node3 - - - - -Node4 - - -StaticSizeExtendedIOElement.hpp - - - - -Node1->Node4 - - - - -Node5 - - -AnalogMultiplex.hpp - - - - -Node1->Node5 - - - - -Node6 - - -MAX7219.hpp - - - - -Node1->Node6 - - - - -Node7 - - -ShiftRegisterOutBase.hpp - - - - -Node1->Node7 - - - - -Node8 - - -ShiftRegisterOut.hpp - - - - -Node1->Node8 - - - - -Node11 - - -SPIShiftRegisterOut.hpp - - - - -Node1->Node11 - - - - -Node13 - - -Hardware-Types.hpp - - - - -Node1->Node13 - - - - -Node14 - - -ButtonMatrix.hpp - - - - -Node1->Node14 - - - - -Node16 - - -ExtendedIOElement.hpp - - - - -Node1->Node16 - - - - -Node17 - - -ExtendedInputOutput.hpp - - - - -Node1->Node17 - - - - -Node18 - - -Button.hpp - - - - -Node1->Node18 - - - - -Node20 - - -IncrementButton.hpp - - - - -Node1->Node20 - - - - -Node22 - - -IncrementDecrementButtons.hpp - - - - -Node1->Node22 - - - - -Node24 - - -ExtendedInputOutput.cpp - - - - -Node1->Node24 - - - - -Node25 - - -FilteredAnalog.hpp - - - - -Node1->Node25 - - - - -Node26 - - -LEDs.hpp - - - - -Node1->Node26 - - - - -Node27 - - -DotBarDisplayLEDs.hpp - - - - -Node1->Node27 - - - - -Node28 - - -MAX7219_Base.hpp - - - - -Node1->Node28 - - - - -Node29 - - -MAX7219SevenSegmentDisplay.hpp - - - - -Node1->Node29 - - - - -Node30 - - -ExtendedIOElement.cpp - - - - -Node1->Node30 - - - - -Node31 - - -BitArray.hpp - - - - -Node1->Node31 - - - - -Node32 - - -LinkedList.hpp - - - - -Node1->Node32 - - - - -Node33 - - -Updatable.hpp - - - - -Node1->Node33 - - - - -Node34 - - -UniquePtr.hpp - - - - -Node1->Node34 - - - - -Node35 - - -Debug.hpp - - - - -Node1->Node35 - - - - -Node37 - - -Error.hpp - - - - -Node1->Node37 - - - - -Node38 - - -Exit.cpp - - - - -Node1->Node38 - - - - -Node39 - - -SettingsWrapper.hpp - - - - -Node1->Node39 - - - - -Node40 - - -ShiftRegisterOutRGB.hpp - - - - -Node1->Node40 - - - - -Node42 - - -EMA.hpp - - - - -Node1->Node42 - - - - -Node43 - - -Hysteresis.hpp - - - - -Node1->Node43 - - - - -Node44 - - -ADCConfig.hpp - - - - -Node1->Node44 - - - - -Node46 - - -FixArduinoMacros.hpp - - - - -Node1->Node46 - - - - -Node47 - - -MinMaxFix.hpp - - - - -Node1->Node47 - - - - -Node48 - - -IncreaseBitDepth.hpp - - - - -Node1->Node48 - - - - -Node49 - - -PrintStream.hpp - - - - -Node1->Node49 - - - - -Node51 - - -MillisMicrosTimer.hpp - - - - -Node1->Node51 - - - - -Node52 - - -Frequency.hpp - - - - -Node1->Node52 - - - - -Node2->Node3 - - - - -Node2->Node5 - - - - -Node2->Node13 - - - - -Node3->Node4 - - - - -Node4->Node5 - - - - -Node4->Node6 - - - - -Node4->Node7 - - - - -Node7->Node8 - - - - -Node10 - - -ShiftRegisterOutBase.ipp - - - - -Node7->Node10 - - - - -Node7->Node11 - - - - -Node9 - - -ShiftRegisterOut.ipp - - - - -Node8->Node9 - - - - -Node9->Node8 - - - - -Node10->Node7 - - - - -Node12 - - -SPIShiftRegisterOut.ipp - - - - -Node11->Node12 - - - - -Node12->Node11 - - - - -Node13->Node14 - - - - -Node13->Node16 - - - - -Node13->Node25 - - - - -Node15 - - -ButtonMatrix.ipp - - - - -Node14->Node15 - - - - -Node15->Node14 - - - - -Node16->Node4 - - - - -Node16->Node17 - - - - -Node16->Node24 - - - - -Node16->Node30 - - - - -Node17->Node5 - - - - -Node17->Node9 - - - - -Node17->Node10 - - - - -Node17->Node12 - - - - -Node17->Node15 - - - - -Node17->Node18 - - - - -Node17->Node24 - - - - -Node17->Node25 - - - - -Node17->Node26 - - - - -Node17->Node28 - - - - -Node19 - - -Button.cpp - - - - -Node18->Node19 - - - - -Node18->Node20 - - - - -Node18->Node22 - - - - -Node21 - - -IncrementButton.cpp - - - - -Node20->Node21 - - - - -Node23 - - -IncrementDecrementButtons.cpp - - - - -Node22->Node23 - - - - -Node26->Node27 - - - - -Node28->Node6 - - - - -Node28->Node29 - - - - -Node31->Node6 - - - - -Node31->Node7 - - - - -Node31->Node11 - - - - -Node32->Node16 - - - - -Node32->Node33 - - - - -Node35->Node32 - - - - -Node36 - - -Debug.cpp - - - - -Node35->Node36 - - - - -Node35->Node37 - - - - -Node35->Node39 - - - - -Node37->Node2 - - - - -Node37->Node24 - - - - -Node37->Node30 - - - - -Node37->Node31 - - - - -Node37->Node33 - - - - -Node37->Node38 - - - - -Node39->Node18 - - - - -Node39->Node25 - - - - -Node39->Node33 - - - - -Node39->Node35 - - - - -Node39->Node40 - - - - -Node40->Node10 - - - - -Node41 - - -ShiftRegisterOutRGB.cpp - - - - -Node40->Node41 - - - - -Node42->Node25 - - - - -Node43->Node25 - - - - -Node45 - - -Settings.hpp - - - - -Node44->Node45 - - - - -Node45->Node39 - - - - -Node46->Node47 - - - - -Node47->Node25 - - - - -Node47->Node32 - - - - -Node48->Node25 - - - - -Node49->Node3 - - - - -Node49->Node35 - - - - -Node50 - - -PrintStream.cpp - - - - -Node49->Node50 - - - - -Node52->Node45 - - - - - diff --git a/docs/Doxygen/dd/d8f/structSetprecision__coll__graph.map b/docs/Doxygen/dd/d8f/structSetprecision__coll__graph.map deleted file mode 100644 index 7c2bb332a..000000000 --- a/docs/Doxygen/dd/d8f/structSetprecision__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/dd/d8f/structSetprecision__coll__graph.md5 b/docs/Doxygen/dd/d8f/structSetprecision__coll__graph.md5 deleted file mode 100644 index ac7409e2d..000000000 --- a/docs/Doxygen/dd/d8f/structSetprecision__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -aa9ee7c8792df4e62a34407450604073 \ No newline at end of file diff --git a/docs/Doxygen/dd/d8f/structSetprecision__coll__graph.svg b/docs/Doxygen/dd/d8f/structSetprecision__coll__graph.svg deleted file mode 100644 index dab11aa08..000000000 --- a/docs/Doxygen/dd/d8f/structSetprecision__coll__graph.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - -Setprecision - - -Node1 - - -Setprecision - -+ M_n - - - - - - - diff --git a/docs/Doxygen/dd/da0/todo.html b/docs/Doxygen/dd/da0/todo.html deleted file mode 100644 index ef056d5a9..000000000 --- a/docs/Doxygen/dd/da0/todo.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - -Arduino Helpers: Todo List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Todo List
-
-
-
-
Member FLUSH_ON_EVERY_DEBUG_STATEMENT
-
I should probably use Streams instead of Prints, so Espressif boards can flush as well.
-
Member IncrementButton::State
-
Add states for initial press.
-
Member IncrementDecrementButtons::State
-
Add states for initial press.
-
Class MAX7219
-
Wiring diagram for SPI connection.
-
Member MAX7219::update () override
-
Does this really have to happen on each update?
-
Class MAX7219_Base
-
Wiring diagram for SPI connection.
-
Member MAX7219_Base::init ()
-
Rename to begin.
-
Member MAX7219SevenSegmentDisplay::display (const uint8_t(&characters)[N], uint8_t startPos=0)
-
Find out what this function does, and write documentation.
-
Member MAX7219SevenSegmentDisplay::printHex (uint8_t digit, uint8_t value)
-
Rename to printHexChar and create function that actually prints longer hexadecimal numbers.
-
-
-
- - - - diff --git a/docs/Doxygen/dd/daf/Error_8hpp__incl.map b/docs/Doxygen/dd/daf/Error_8hpp__incl.map deleted file mode 100644 index 61ac347a0..000000000 --- a/docs/Doxygen/dd/daf/Error_8hpp__incl.map +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/dd/daf/Error_8hpp__incl.md5 b/docs/Doxygen/dd/daf/Error_8hpp__incl.md5 deleted file mode 100644 index 4d41921b1..000000000 --- a/docs/Doxygen/dd/daf/Error_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -c27fd9b37a5b8388211d15b16ae3ae7f \ No newline at end of file diff --git a/docs/Doxygen/dd/daf/Error_8hpp__incl.svg b/docs/Doxygen/dd/daf/Error_8hpp__incl.svg deleted file mode 100644 index d0e7c55b6..000000000 --- a/docs/Doxygen/dd/daf/Error_8hpp__incl.svg +++ /dev/null @@ -1,243 +0,0 @@ - - - - - - -Error.hpp - - -Node1 - - -Error.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -AH/Debug/Debug.hpp - - - - -Node1->Node3 - - - - -Node3->Node2 - - - - -Node4 - - -AH/PrintStream/PrintStream.hpp - - - - -Node3->Node4 - - - - -Node6 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node3->Node6 - - - - -Node15 - - -DebugVal.hpp - - - - -Node3->Node15 - - - - -Node4->Node2 - - - - -Node5 - - -Arduino.h - - - - -Node4->Node5 - - - - -Node6->Node2 - - - - -Node6->Node3 - - - - -Node7 - - -NamespaceSettings.hpp - - - - -Node6->Node7 - - - - -Node8 - - -Settings.hpp - - - - -Node6->Node8 - - - - -Node14 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node6->Node14 - - - - -Node9 - - -AH/Types/Frequency.hpp - - - - -Node8->Node9 - - - - -Node10 - - -AH/Hardware/ADCConfig.hpp - - - - -Node8->Node10 - - - - -Node11 - - -limits.h - - - - -Node8->Node11 - - - - -Node12 - - -stddef.h - - - - -Node8->Node12 - - - - -Node13 - - -stdint.h - - - - -Node8->Node13 - - - - -Node9->Node2 - - - - -Node9->Node7 - - - - -Node10->Node2 - - - - -Node10->Node5 - - - - - diff --git a/docs/Doxygen/dd/dbf/IncreaseBitDepth_8hpp__dep__incl.map b/docs/Doxygen/dd/dbf/IncreaseBitDepth_8hpp__dep__incl.map deleted file mode 100644 index fa03c2283..000000000 --- a/docs/Doxygen/dd/dbf/IncreaseBitDepth_8hpp__dep__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/dd/dbf/IncreaseBitDepth_8hpp__dep__incl.md5 b/docs/Doxygen/dd/dbf/IncreaseBitDepth_8hpp__dep__incl.md5 deleted file mode 100644 index d08f559ee..000000000 --- a/docs/Doxygen/dd/dbf/IncreaseBitDepth_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -121087ad3c15d4818105397b53805149 \ No newline at end of file diff --git a/docs/Doxygen/dd/dbf/IncreaseBitDepth_8hpp__dep__incl.svg b/docs/Doxygen/dd/dbf/IncreaseBitDepth_8hpp__dep__incl.svg deleted file mode 100644 index cd92b7a75..000000000 --- a/docs/Doxygen/dd/dbf/IncreaseBitDepth_8hpp__dep__incl.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - -IncreaseBitDepth.hpp - - -Node1 - - -IncreaseBitDepth.hpp - - - - -Node2 - - -FilteredAnalog.hpp - - - - -Node1->Node2 - - - - - diff --git a/docs/Doxygen/dd/dd0/structNormalUpdatable__coll__graph.map b/docs/Doxygen/dd/dd0/structNormalUpdatable__coll__graph.map deleted file mode 100644 index 278f13d4a..000000000 --- a/docs/Doxygen/dd/dd0/structNormalUpdatable__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/dd/dd0/structNormalUpdatable__coll__graph.md5 b/docs/Doxygen/dd/dd0/structNormalUpdatable__coll__graph.md5 deleted file mode 100644 index 322e97d45..000000000 --- a/docs/Doxygen/dd/dd0/structNormalUpdatable__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -f82c642c12454bc42b6825748cfdf88e \ No newline at end of file diff --git a/docs/Doxygen/dd/dd0/structNormalUpdatable__coll__graph.svg b/docs/Doxygen/dd/dd0/structNormalUpdatable__coll__graph.svg deleted file mode 100644 index 7e7eeac05..000000000 --- a/docs/Doxygen/dd/dd0/structNormalUpdatable__coll__graph.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - -NormalUpdatable - - -Node1 - - -NormalUpdatable - - - - - - - - - diff --git a/docs/Doxygen/dd/dd6/classAnalogMultiplex__coll__graph.map b/docs/Doxygen/dd/dd6/classAnalogMultiplex__coll__graph.map deleted file mode 100644 index 256f79e55..000000000 --- a/docs/Doxygen/dd/dd6/classAnalogMultiplex__coll__graph.map +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/Doxygen/dd/dd6/classAnalogMultiplex__coll__graph.md5 b/docs/Doxygen/dd/dd6/classAnalogMultiplex__coll__graph.md5 deleted file mode 100644 index 62ebe8714..000000000 --- a/docs/Doxygen/dd/dd6/classAnalogMultiplex__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -a029c3e370be0d85ff08def68b340701 \ No newline at end of file diff --git a/docs/Doxygen/dd/dd6/classAnalogMultiplex__coll__graph.svg b/docs/Doxygen/dd/dd6/classAnalogMultiplex__coll__graph.svg deleted file mode 100644 index 53806a6d2..000000000 --- a/docs/Doxygen/dd/dd6/classAnalogMultiplex__coll__graph.svg +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - -AnalogMultiplex< N > - - -Node1 - - -AnalogMultiplex< N > - -- analogPin -- enablePin -- MUX_ENABLED -- MUX_DISABLED - -+ AnalogMultiplex() -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogRead() -+ analogWrite() -+ begin() -+ update() -- setMuxAddress() -- prepareReading() -- afterReading() - - - - -Node2 - - -StaticSizeExtendedIOElement -< 1<< N > - - - -+ pins() -+ length() -# StaticSizeExtendedIOElement() - - - - -Node2->Node1 - - - - -Node3 - - -ExtendedIOElement - -- length -- start -- end -- offset - -+ ~ExtendedIOElement() -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogWrite() -+ analogRead() -+ begin() -+ update() -+ pin() -+ operator[]() -+ getLength() -+ getEnd() -+ getStart() -+ beginAll() -+ getAll() -# ExtendedIOElement() - - - - -Node3->Node2 - - - - -Node4 - - -DoublyLinkable< Extended -IOElement > - - - -# ~DoublyLinkable() - - - - -Node3->Node4 - - - #next -#previous - - -Node5 - - -DoublyLinkedList< Extended -IOElement > - - - -+ append() -+ append() -+ insertBefore() -+ insertBefore() -+ insertSorted() -+ insertSorted() -+ remove() -+ remove() -+ moveDown() -+ couldContain() -+ begin() -+ begin() -+ end() -+ end() -+ rbegin() -+ rbegin() -+ rend() -+ rend() -+ getFirst() -+ getLast() - - - - -Node3->Node5 - - - -last --first - - -Node4->Node3 - - - - -Node5->Node3 - - - -elements - - -Node6 - - -Array< pin_t, N > - -+ data -+ length - -+ operator[]() -+ operator[]() -+ begin() -+ begin() -+ end() -+ end() -+ operator==() -+ operator!=() -+ slice() -+ slice() -+ cslice() - - - - -Node6->Node1 - - - -addressPins - - - diff --git a/docs/Doxygen/dd/ddf/ExtendedInputOutput_8hpp.html b/docs/Doxygen/dd/ddf/ExtendedInputOutput_8hpp.html deleted file mode 100644 index 1dee7b31a..000000000 --- a/docs/Doxygen/dd/ddf/ExtendedInputOutput_8hpp.html +++ /dev/null @@ -1,304 +0,0 @@ - - - - - - - -Arduino Helpers: ExtendedInputOutput.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ExtendedInputOutput.hpp File Reference
-
-
-
#include <AH/Settings/Warnings.hpp>
-#include <Arduino.h>
-#include "ExtendedIOElement.hpp"
-
-Include dependency graph for ExtendedInputOutput.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - - - -

-Namespaces

 detail
 
 ExtIO
 A namespace with alternatives to the standard Arduino IO functions that can be used with extended IO pin numbers.
 
- - - -

-Macros

#define AH_EXT_PIN(x)   (x + NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS)
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

ExtendedIOElementgetIOElementOfPin (pin_t pin)
 Find the IO element of a given extended IO pin number. More...
 
void pinMode (pin_t pin, uint8_t mode)
 An ExtIO version of the Arduino function. More...
 
void pinMode (int pin, uint8_t mode)
 An ExtIO version of the Arduino function. More...
 
void digitalWrite (pin_t pin, uint8_t val)
 An ExtIO version of the Arduino function. More...
 
void digitalWrite (int pin, uint8_t val)
 An ExtIO version of the Arduino function. More...
 
int digitalRead (pin_t pin)
 An ExtIO version of the Arduino function. More...
 
int digitalRead (int pin)
 An ExtIO version of the Arduino function. More...
 
void shiftOut (pin_t dataPin, pin_t clockPin, uint8_t bitOrder, uint8_t val)
 An ExtIO version of the Arduino function. More...
 
void shiftOut (int dataPin, int clockPin, uint8_t bitOrder, uint8_t val)
 An ExtIO version of the Arduino function. More...
 
analog_t analogRead (pin_t pin)
 An ExtIO version of the Arduino function. More...
 
analog_t analogRead (int pin)
 An ExtIO version of the Arduino function. More...
 
void analogWrite (pin_t pin, analog_t val)
 An ExtIO version of the Arduino function. More...
 
void analogWrite (int pin, analog_t val)
 An ExtIO version of the Arduino function. More...
 
void analogWrite (int pin, int val)
 An ExtIO version of the Arduino function. More...
 
void analogWrite (pin_t pin, int val)
 An ExtIO version of the Arduino function. More...
 
- - - - - - - - - - - - - - - - - - - - - -

-Variables

const static uint8_t tmp_HIGH = HIGH
 
const static uint8_t tmp_LOW = LOW
 
const static uint8_t tmp_INPUT = INPUT
 
const static uint8_t tmp_OUTPUT = OUTPUT
 
const static uint8_t tmp_INPUT_PULLUP = INPUT_PULLUP
 
const uint8_t HIGH = AH::detail::tmp_HIGH
 
const uint8_t LOW = AH::detail::tmp_LOW
 
const uint8_t INPUT = AH::detail::tmp_INPUT
 
const uint8_t OUTPUT = AH::detail::tmp_OUTPUT
 
const uint8_t INPUT_PULLUP = AH::detail::tmp_INPUT_PULLUP
 
-

Macro Definition Documentation

- -

◆ AH_EXT_PIN

- -
-
- - - - - - - - -
#define AH_EXT_PIN( x)   (x + NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS)
-
- -

Definition at line 16 of file ExtendedInputOutput.hpp.

- -
-
-

Variable Documentation

- -

◆ HIGH

- -
-
- - - - -
const uint8_t HIGH = AH::detail::tmp_HIGH
-
-
Examples
1.SPI-Blink.ino, 2.BitBang-Blink.ino, and 2.RGB-LED-Chaser.ino.
-
- -

Definition at line 46 of file ExtendedInputOutput.hpp.

- -
-
- -

◆ LOW

- -
-
- - - - -
const uint8_t LOW = AH::detail::tmp_LOW
-
-
- -

◆ INPUT

- -
-
- - - - -
const uint8_t INPUT = AH::detail::tmp_INPUT
-
- -

Definition at line 49 of file ExtendedInputOutput.hpp.

- -
-
- -

◆ OUTPUT

- -
-
- - - - -
const uint8_t OUTPUT = AH::detail::tmp_OUTPUT
-
-
- -

◆ INPUT_PULLUP

- -
-
- - - - -
const uint8_t INPUT_PULLUP = AH::detail::tmp_INPUT_PULLUP
-
-
Examples
2.DigitalReadSerial.ino.
-
- -

Definition at line 51 of file ExtendedInputOutput.hpp.

- -
-
-
- - - - diff --git a/docs/Doxygen/dd/ddf/ExtendedInputOutput_8hpp_source.html b/docs/Doxygen/dd/ddf/ExtendedInputOutput_8hpp_source.html deleted file mode 100644 index fe5da9ed5..000000000 --- a/docs/Doxygen/dd/ddf/ExtendedInputOutput_8hpp_source.html +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - - -Arduino Helpers: ExtendedInputOutput.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ExtendedInputOutput.hpp
-
-
-Go to the documentation of this file.
1 /* ✔ */
-
2 
-
3 #pragma once
-
4 
- -
6 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
7 
- -
9 #include <Arduino.h> // pin functions and constants
- -
11 
-
12 #include "ExtendedIOElement.hpp"
-
13 
- -
15 
-
16 #define AH_EXT_PIN(x) (x + NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS)
-
17 
-
18 namespace detail {
-
19 const static uint8_t tmp_HIGH = HIGH;
-
20 const static uint8_t tmp_LOW = LOW;
-
21 const static uint8_t tmp_INPUT = INPUT;
-
22 const static uint8_t tmp_OUTPUT = OUTPUT;
-
23 const static uint8_t tmp_INPUT_PULLUP = INPUT_PULLUP;
-
24 }
-
25 
- -
27 
-
28 #ifndef ARDUINO_API_VERSION
-
29 #ifdef HIGH
-
30 #undef HIGH
-
31 #endif
-
32 #ifdef LOW
-
33 #undef LOW
-
34 #endif
-
35 
-
36 #ifdef INPUT
-
37 #undef INPUT
-
38 #endif
-
39 #ifdef OUTPUT
-
40 #undef OUTPUT
-
41 #endif
-
42 #ifdef INPUT_PULLUP
-
43 #undef INPUT_PULLUP
-
44 #endif
-
45 
-
46 const uint8_t HIGH = AH::detail::tmp_HIGH;
-
47 const uint8_t LOW = AH::detail::tmp_LOW;
-
48 
-
49 const uint8_t INPUT = AH::detail::tmp_INPUT;
- - -
52 #endif
-
53 
- -
55 
-
60 namespace ExtIO {
- -
70 extern void pinMode(pin_t pin, uint8_t mode);
-
72 extern void pinMode(int pin, uint8_t mode);
-
74 extern void digitalWrite(pin_t pin, uint8_t val);
-
76 extern void digitalWrite(int pin, uint8_t val);
-
78 extern int digitalRead(pin_t pin);
-
80 extern int digitalRead(int pin);
-
82 extern void shiftOut(pin_t dataPin, pin_t clockPin, uint8_t bitOrder,
-
83  uint8_t val);
-
85 extern void shiftOut(int dataPin, int clockPin, uint8_t bitOrder, uint8_t val);
-
87 extern analog_t analogRead(pin_t pin);
-
89 extern analog_t analogRead(int pin);
-
91 extern void analogWrite(pin_t pin, analog_t val);
-
93 extern void analogWrite(int pin, analog_t val);
-
95 extern void analogWrite(int pin, int val);
-
97 extern void analogWrite(pin_t pin, int val);
-
98 
-
99 } // namespace ExtIO
-
100 
- -
102 
- -
-
const uint8_t INPUT_PULLUP
-
#define BEGIN_AH_NAMESPACE
- -
void digitalWrite(pin_t pin, uint8_t val)
An ExtIO version of the Arduino function.
-
uint16_t analog_t
The type returned from analogRead and similar functions.
-
void analogWrite(pin_t pin, analog_t val)
An ExtIO version of the Arduino function.
- -
int digitalRead(pin_t pin)
An ExtIO version of the Arduino function.
-
void shiftOut(pin_t dataPin, pin_t clockPin, uint8_t bitOrder, uint8_t val)
An ExtIO version of the Arduino function.
-
ExtendedIOElement & getIOElementOfPin(pin_t pin)
Find the IO element of a given extended IO pin number.
-
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
const uint8_t HIGH
-
const static uint8_t tmp_INPUT
-
const static uint8_t tmp_HIGH
-
analog_t analogRead(pin_t pin)
An ExtIO version of the Arduino function.
-
const uint8_t LOW
-
A namespace with alternatives to the standard Arduino IO functions that can be used with extended IO ...
-
#define AH_DIAGNOSTIC_EXTERNAL_HEADER()
Definition: Warnings.hpp:18
-
An abstract base class for Extended Input/Output elements.
-
const static uint8_t tmp_LOW
-
void pinMode(pin_t pin, uint8_t mode)
An ExtIO version of the Arduino function.
-
const static uint8_t tmp_OUTPUT
-
const uint8_t INPUT
-
const static uint8_t tmp_INPUT_PULLUP
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
-
#define END_AH_NAMESPACE
-
const uint8_t OUTPUT
- - - - diff --git a/docs/Doxygen/dd/df0/Button_8hpp__dep__incl.map b/docs/Doxygen/dd/df0/Button_8hpp__dep__incl.map deleted file mode 100644 index 8a4c2c6f9..000000000 --- a/docs/Doxygen/dd/df0/Button_8hpp__dep__incl.map +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/Doxygen/dd/df0/Button_8hpp__dep__incl.md5 b/docs/Doxygen/dd/df0/Button_8hpp__dep__incl.md5 deleted file mode 100644 index e189e6003..000000000 --- a/docs/Doxygen/dd/df0/Button_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -d0efa3d66928ef0f5614ed698b9359c8 \ No newline at end of file diff --git a/docs/Doxygen/dd/df0/Button_8hpp__dep__incl.svg b/docs/Doxygen/dd/df0/Button_8hpp__dep__incl.svg deleted file mode 100644 index 70e1ca988..000000000 --- a/docs/Doxygen/dd/df0/Button_8hpp__dep__incl.svg +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - -Button.hpp - - -Node1 - - -Button.hpp - - - - -Node2 - - -Button.cpp - - - - -Node1->Node2 - - - - -Node3 - - -IncrementButton.hpp - - - - -Node1->Node3 - - - - -Node5 - - -IncrementDecrementButtons.hpp - - - - -Node1->Node5 - - - - -Node4 - - -IncrementButton.cpp - - - - -Node3->Node4 - - - - -Node6 - - -IncrementDecrementButtons.cpp - - - - -Node5->Node6 - - - - - diff --git a/docs/Doxygen/dd/dfd/ShiftRegisterOutBase_8hpp__incl.map b/docs/Doxygen/dd/dfd/ShiftRegisterOutBase_8hpp__incl.map deleted file mode 100644 index 6de3210ed..000000000 --- a/docs/Doxygen/dd/dfd/ShiftRegisterOutBase_8hpp__incl.map +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/dd/dfd/ShiftRegisterOutBase_8hpp__incl.md5 b/docs/Doxygen/dd/dfd/ShiftRegisterOutBase_8hpp__incl.md5 deleted file mode 100644 index f43b02891..000000000 --- a/docs/Doxygen/dd/dfd/ShiftRegisterOutBase_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -816796b56b4e901e0fd023be1bb92d7f \ No newline at end of file diff --git a/docs/Doxygen/dd/dfd/ShiftRegisterOutBase_8hpp__incl.svg b/docs/Doxygen/dd/dfd/ShiftRegisterOutBase_8hpp__incl.svg deleted file mode 100644 index 159e967ec..000000000 --- a/docs/Doxygen/dd/dfd/ShiftRegisterOutBase_8hpp__incl.svg +++ /dev/null @@ -1,618 +0,0 @@ - - - - - - -ShiftRegisterOutBase.hpp - - -Node1 - - -ShiftRegisterOutBase.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -StaticSizeExtendedIOElement.hpp - - - - -Node1->Node3 - - - - -Node30 - - -AH/Containers/BitArray.hpp - - - - -Node1->Node30 - - - - -Node31 - - -ShiftRegisterOutBase.ipp - - - - -Node1->Node31 - - - - -Node3->Node2 - - - - -Node4 - - -ExtendedIOElement.hpp - - - - -Node3->Node4 - - - - -Node28 - - -AH/Containers/ArrayHelpers.hpp - - - - -Node3->Node28 - - - - -Node4->Node2 - - - - -Node5 - - -AH/Hardware/Hardware --Types.hpp - - - - -Node4->Node5 - - - - -Node23 - - -AH/Containers/LinkedList.hpp - - - - -Node4->Node23 - - - - -Node5->Node2 - - - - -Node6 - - -AH/Containers/Array.hpp - - - - -Node5->Node6 - - - - -Node12 - - -NamespaceSettings.hpp - - - - -Node5->Node12 - - - - -Node18 - - -stdint.h - - - - -Node5->Node18 - - - - -Node6->Node2 - - - - -Node7 - - -AH/Error/Error.hpp - - - - -Node6->Node7 - - - - -Node17 - - -stddef.h - - - - -Node6->Node17 - - - - -Node21 - - -AH/STL/iterator - - - - -Node6->Node21 - - - - -Node22 - - -AH/STL/type_traits - - - - -Node6->Node22 - - - - -Node7->Node2 - - - - -Node8 - - -AH/Debug/Debug.hpp - - - - -Node7->Node8 - - - - -Node8->Node2 - - - - -Node9 - - -AH/PrintStream/PrintStream.hpp - - - - -Node8->Node9 - - - - -Node11 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node8->Node11 - - - - -Node20 - - -DebugVal.hpp - - - - -Node8->Node20 - - - - -Node9->Node2 - - - - -Node10 - - -Arduino.h - - - - -Node9->Node10 - - - - -Node11->Node2 - - - - -Node11->Node8 - - - - -Node11->Node12 - - - - -Node13 - - -Settings.hpp - - - - -Node11->Node13 - - - - -Node19 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node11->Node19 - - - - -Node14 - - -AH/Types/Frequency.hpp - - - - -Node13->Node14 - - - - -Node15 - - -AH/Hardware/ADCConfig.hpp - - - - -Node13->Node15 - - - - -Node16 - - -limits.h - - - - -Node13->Node16 - - - - -Node13->Node17 - - - - -Node13->Node18 - - - - -Node14->Node2 - - - - -Node14->Node12 - - - - -Node15->Node2 - - - - -Node15->Node10 - - - - -Node23->Node2 - - - - -Node23->Node8 - - - - -Node24 - - -AH/Math/MinMaxFix.hpp - - - - -Node23->Node24 - - - - -Node26 - - -stdlib.h - - - - -Node23->Node26 - - - - -Node27 - - -iterator - - - - -Node23->Node27 - - - - -Node24->Node2 - - - - -Node24->Node12 - - - - -Node25 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node24->Node25 - - - - -Node25->Node2 - - - - -Node25->Node10 - - - - -Node28->Node2 - - - - -Node28->Node6 - - - - -Node28->Node9 - - - - -Node29 - - -AH/STL/algorithm - - - - -Node28->Node29 - - - - -Node30->Node2 - - - - -Node30->Node7 - - - - -Node30->Node12 - - - - -Node30->Node18 - - - - -Node31->Node1 - - - - -Node32 - - -ExtendedInputOutput.hpp - - - - -Node31->Node32 - - - - -Node33 - - -ShiftRegisterOutRGB.hpp - - - - -Node31->Node33 - - - - -Node32->Node2 - - - - -Node32->Node4 - - - - -Node32->Node10 - - - - -Node33->Node2 - - - - -Node33->Node11 - - - - -Node33->Node18 - - - - - diff --git a/docs/Doxygen/dd/dfe/Frequency_8hpp__incl.map b/docs/Doxygen/dd/dfe/Frequency_8hpp__incl.map deleted file mode 100644 index 3ff657a2e..000000000 --- a/docs/Doxygen/dd/dfe/Frequency_8hpp__incl.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/Doxygen/dd/dfe/Frequency_8hpp__incl.md5 b/docs/Doxygen/dd/dfe/Frequency_8hpp__incl.md5 deleted file mode 100644 index c7aab0984..000000000 --- a/docs/Doxygen/dd/dfe/Frequency_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -221070eb58b9c53f0be44c771d50b89b \ No newline at end of file diff --git a/docs/Doxygen/dd/dfe/Frequency_8hpp__incl.svg b/docs/Doxygen/dd/dfe/Frequency_8hpp__incl.svg deleted file mode 100644 index 02879dafd..000000000 --- a/docs/Doxygen/dd/dfe/Frequency_8hpp__incl.svg +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - -Frequency.hpp - - -Node1 - - -Frequency.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -AH/Settings/NamespaceSettings.hpp - - - - -Node1->Node3 - - - - - diff --git a/docs/Doxygen/de/d16/AnalogMultiplex_8cpp.html b/docs/Doxygen/de/d16/AnalogMultiplex_8cpp.html deleted file mode 100644 index 358babc5d..000000000 --- a/docs/Doxygen/de/d16/AnalogMultiplex_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: AnalogMultiplex.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
AnalogMultiplex.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/de/d16/AnalogMultiplex_8cpp_source.html b/docs/Doxygen/de/d16/AnalogMultiplex_8cpp_source.html deleted file mode 100644 index e75de5d0c..000000000 --- a/docs/Doxygen/de/d16/AnalogMultiplex_8cpp_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Arduino Helpers: AnalogMultiplex.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
AnalogMultiplex.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
-
2 #include "AnalogMultiplex.hpp"
-
3 #endif
-
- - - - - diff --git a/docs/Doxygen/de/d1f/ExtendedIOElement_8hpp__incl.map b/docs/Doxygen/de/d1f/ExtendedIOElement_8hpp__incl.map deleted file mode 100644 index 649285ef1..000000000 --- a/docs/Doxygen/de/d1f/ExtendedIOElement_8hpp__incl.map +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/de/d1f/ExtendedIOElement_8hpp__incl.md5 b/docs/Doxygen/de/d1f/ExtendedIOElement_8hpp__incl.md5 deleted file mode 100644 index 4cb22c788..000000000 --- a/docs/Doxygen/de/d1f/ExtendedIOElement_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -66cb48ef3aa9810383771f3785695330 \ No newline at end of file diff --git a/docs/Doxygen/de/d1f/ExtendedIOElement_8hpp__incl.svg b/docs/Doxygen/de/d1f/ExtendedIOElement_8hpp__incl.svg deleted file mode 100644 index aa9e81f5f..000000000 --- a/docs/Doxygen/de/d1f/ExtendedIOElement_8hpp__incl.svg +++ /dev/null @@ -1,434 +0,0 @@ - - - - - - -ExtendedIOElement.hpp - - -Node1 - - -ExtendedIOElement.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -AH/Hardware/Hardware --Types.hpp - - - - -Node1->Node3 - - - - -Node21 - - -AH/Containers/LinkedList.hpp - - - - -Node1->Node21 - - - - -Node3->Node2 - - - - -Node4 - - -AH/Containers/Array.hpp - - - - -Node3->Node4 - - - - -Node10 - - -NamespaceSettings.hpp - - - - -Node3->Node10 - - - - -Node16 - - -stdint.h - - - - -Node3->Node16 - - - - -Node4->Node2 - - - - -Node5 - - -AH/Error/Error.hpp - - - - -Node4->Node5 - - - - -Node15 - - -stddef.h - - - - -Node4->Node15 - - - - -Node19 - - -AH/STL/iterator - - - - -Node4->Node19 - - - - -Node20 - - -AH/STL/type_traits - - - - -Node4->Node20 - - - - -Node5->Node2 - - - - -Node6 - - -AH/Debug/Debug.hpp - - - - -Node5->Node6 - - - - -Node6->Node2 - - - - -Node7 - - -AH/PrintStream/PrintStream.hpp - - - - -Node6->Node7 - - - - -Node9 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node6->Node9 - - - - -Node18 - - -DebugVal.hpp - - - - -Node6->Node18 - - - - -Node7->Node2 - - - - -Node8 - - -Arduino.h - - - - -Node7->Node8 - - - - -Node9->Node2 - - - - -Node9->Node6 - - - - -Node9->Node10 - - - - -Node11 - - -Settings.hpp - - - - -Node9->Node11 - - - - -Node17 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node9->Node17 - - - - -Node12 - - -AH/Types/Frequency.hpp - - - - -Node11->Node12 - - - - -Node13 - - -AH/Hardware/ADCConfig.hpp - - - - -Node11->Node13 - - - - -Node14 - - -limits.h - - - - -Node11->Node14 - - - - -Node11->Node15 - - - - -Node11->Node16 - - - - -Node12->Node2 - - - - -Node12->Node10 - - - - -Node13->Node2 - - - - -Node13->Node8 - - - - -Node21->Node2 - - - - -Node21->Node6 - - - - -Node22 - - -AH/Math/MinMaxFix.hpp - - - - -Node21->Node22 - - - - -Node24 - - -stdlib.h - - - - -Node21->Node24 - - - - -Node25 - - -iterator - - - - -Node21->Node25 - - - - -Node22->Node2 - - - - -Node22->Node10 - - - - -Node23 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node22->Node23 - - - - -Node23->Node2 - - - - -Node23->Node8 - - - - - diff --git a/docs/Doxygen/de/d23/classEMA__coll__graph.map b/docs/Doxygen/de/d23/classEMA__coll__graph.map deleted file mode 100644 index cdc46a897..000000000 --- a/docs/Doxygen/de/d23/classEMA__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/de/d23/classEMA__coll__graph.md5 b/docs/Doxygen/de/d23/classEMA__coll__graph.md5 deleted file mode 100644 index 0bf1e6b93..000000000 --- a/docs/Doxygen/de/d23/classEMA__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -38c1fd0e27c7a7eb6f3df041b350b799 \ No newline at end of file diff --git a/docs/Doxygen/de/d23/classEMA__coll__graph.svg b/docs/Doxygen/de/d23/classEMA__coll__graph.svg deleted file mode 100644 index 7a91f96f1..000000000 --- a/docs/Doxygen/de/d23/classEMA__coll__graph.svg +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - -EMA< K, uint_t > - - -Node1 - - -EMA< K, uint_t > - - - -+ filter() -+ operator()() - - - - -Node2 - - -uint_t - - - - - - - - -Node2->Node1 - - - -fixedPointAHalf --filtered - - - diff --git a/docs/Doxygen/de/d47/UniquePtr_8cpp.html b/docs/Doxygen/de/d47/UniquePtr_8cpp.html deleted file mode 100644 index dbd7be294..000000000 --- a/docs/Doxygen/de/d47/UniquePtr_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: UniquePtr.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
UniquePtr.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/de/d47/UniquePtr_8cpp_source.html b/docs/Doxygen/de/d47/UniquePtr_8cpp_source.html deleted file mode 100644 index 504d68b62..000000000 --- a/docs/Doxygen/de/d47/UniquePtr_8cpp_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Arduino Helpers: UniquePtr.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
UniquePtr.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
-
2 #include "UniquePtr.hpp"
-
3 #endif
-
- - - - - diff --git a/docs/Doxygen/de/d4e/classExtendedIOElement.html b/docs/Doxygen/de/d4e/classExtendedIOElement.html deleted file mode 100644 index 2d790a177..000000000 --- a/docs/Doxygen/de/d4e/classExtendedIOElement.html +++ /dev/null @@ -1,904 +0,0 @@ - - - - - - - -Arduino Helpers: ExtendedIOElement Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

An abstract base class for Extended Input/Output elements. - More...

- -

#include <ExtendedIOElement.hpp>

-
-Inheritance diagram for ExtendedIOElement:
-
-
-
-
-Collaboration diagram for ExtendedIOElement:
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

virtual ~ExtendedIOElement ()
 
virtual void pinMode (pin_t pin, uint8_t mode)=0
 Set the mode of a given pin. More...
 
virtual void digitalWrite (pin_t pin, uint8_t state)=0
 Set the output of the given pin to the given state. More...
 
virtual int digitalRead (pin_t pin)=0
 Read the state of the given pin. More...
 
virtual void analogWrite (pin_t pin, analog_t val)=0
 Write an analog (or PWM) value to the given pin. More...
 
virtual analog_t analogRead (pin_t pin)=0
 Read the analog value of the given pin. More...
 
virtual void begin ()=0
 Initialize the extended IO element. More...
 
virtual void update ()=0
 Update the extended IO element: write the internal state to the physical outputs, or read the physical state into the input buffers. More...
 
pin_t pin (pin_t pin) const
 Get the extended IO pin number of a given physical pin of this extended IO element. More...
 
pin_t operator[] (pin_t pin) const
 Get the extended IO pin number of a given physical pin of this extended IO element. More...
 
pin_t getLength () const
 Get the number of pins this IO element has. More...
 
pin_t getEnd () const
 Get the largest global extended IO pin number that belongs to this extended IO element. More...
 
pin_t getStart () const
 Get the smallest global extended IO pin number that belongs to this extended IO element. More...
 
- - - - - - - -

-Static Public Member Functions

static void beginAll ()
 Initialize all extended IO elements. More...
 
static DoublyLinkedList< ExtendedIOElement > & getAll ()
 Get the list of all Extended IO elements. More...
 
- - - - -

-Protected Member Functions

 ExtendedIOElement (pin_t length)
 Create an ExtendedIOElement with the given number of pins. More...
 
- - - - - -

-Protected Attributes

ExtendedIOElementnext
 
ExtendedIOElementprevious
 
- - - - - - - -

-Private Attributes

const pin_t length
 
const pin_t start
 
const pin_t end
 
- - - - - -

-Static Private Attributes

static pin_t offset = NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS
 
static DoublyLinkedList< ExtendedIOElementelements
 
-

Detailed Description

-

An abstract base class for Extended Input/Output elements.

-

The limited number of IO pins of the Arduino can be extended by adding multiplexers, shift registers, IO expanders, etc.
- ExtendedIOElement serves as a base class for all these expanders.

-

The pins of each extended IO element are mapped to a pin number greater than the greatest Arduino pin number.
- You can supply this pin number to the IO functions in the ExtIO namespace.
- If the pin number corresponds to an actual Arduino pin, the default Arduino IO function (digitalRead, digitalWrite, ...) will be called.
- If the pin is not an Arduino pin, it is an extended IO pin number, so the extended IO element that this pin belongs to is looked up, and the IO function for this element is executed with the correct pin number.

-

For example: Imagine an Arduino with 20 pins (e.g. the Arduino UNO). Pins 0 - 19 will correspond to the Arduino pins, and ExtIO::digitalRead(pin) will have the exact same effect as the standard digitalRead(pin) function (albeit a little slower).
- Now, we'll add two 8-channel analog multiplexers, let's call them mux1 and mux2.
- The first pin (pin 0) of mux1 will be extended IO pin number 20, the last pin (pin 7) of mux1 will be extended IO pin number 27, etc. The first pin of mux2 will be extended IO pin number 28, you get the idea. If you now call ExtIO::digitalRead(mux1.#pin (7)) or ExtIO::digitalRead(27), both will be translated to mux1.digitalRead(7).

-

The number of extended IO elements is limited only by the size of pin_t. However, looking up the extended IO element for a given extended IO pin number uses linear search, so that might add some noticable overhead for large pin numbers.
-

-

The design here is a compromise: saving a pointer to each extended IO element to find it directly would be much faster than having to search all elements each time. On the other hand, it would require each pin_t variable to be at least one byte larger. Since almost all other classes in this library store pin variables, the memory penalty would be too large, especially on AVR microcontrollers.
- Another reason to do it this way, is that this approach is still fast enough to make sure it is not noticable to human users.

- -

Definition at line 62 of file ExtendedIOElement.hpp.

-

Constructor & Destructor Documentation

- -

◆ ExtendedIOElement()

- -
-
- - - - - -
- - - - - - - - -
ExtendedIOElement (pin_t length)
-
-protected
-
- -

Create an ExtendedIOElement with the given number of pins.

-
Parameters
- - -
lengthThe number of pins this element has.
-
-
- -

Definition at line 10 of file ExtendedIOElement.cpp.

- -
-
- -

◆ ~ExtendedIOElement()

- -
-
- - - - - -
- - - - - - - -
~ExtendedIOElement ()
-
-virtual
-
- -

Definition at line 21 of file ExtendedIOElement.cpp.

- -
-
-

Member Function Documentation

- -

◆ pinMode()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
virtual void pinMode (pin_t pin,
uint8_t mode 
)
-
-pure virtual
-
- -

Set the mode of a given pin.

-
Note
This function might not be implemented by all subclasses.
- Some extended IO types, such as shift registers, can only be used as outputs.
- On others, it might be implemented, but it could impact all pins of the IO element. For example, enabling the internal pull-up resistor on an analog multiplexer affects all pins of the mux.
-
Parameters
- - - -
pinThe (zero-based) pin of this IO element.
modeThe mode to set the pin to (e.g. INPUT, OUTPUT or INPUT_PULLUP).
-
-
- -

Implemented in ShiftRegisterOutBase< N >, MAX7219, and AnalogMultiplex< N >.

- -
-
- -

◆ digitalWrite()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
virtual void digitalWrite (pin_t pin,
uint8_t state 
)
-
-pure virtual
-
- -

Set the output of the given pin to the given state.

-
Parameters
- - - -
pinThe (zero-based) pin of this IO element.
stateThe new state to set the pin to.
-
-
- -

Implemented in AnalogMultiplex< N >, ShiftRegisterOutBase< N >, and MAX7219.

- -
-
- -

◆ digitalRead()

- -
-
- - - - - -
- - - - - - - - -
virtual int digitalRead (pin_t pin)
-
-pure virtual
-
- -

Read the state of the given pin.

-
Parameters
- - -
pinThe (zero-based) pin of this IO element.
-
-
-
Returns
The state of the given pin.
- -

Implemented in AnalogMultiplex< N >, ShiftRegisterOutBase< N >, and MAX7219.

- -
-
- -

◆ analogWrite()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
virtual void analogWrite (pin_t pin,
analog_t val 
)
-
-pure virtual
-
- -

Write an analog (or PWM) value to the given pin.

-
Parameters
- - - -
pinThe (zero-based) pin of this IO element.
valThe new analog value to set the pin to.
-
-
- -

Implemented in AnalogMultiplex< N >, ShiftRegisterOutBase< N >, and MAX7219.

- -
-
- -

◆ analogRead()

- -
-
- - - - - -
- - - - - - - - -
virtual analog_t analogRead (pin_t pin)
-
-pure virtual
-
- -

Read the analog value of the given pin.

-
Parameters
- - -
pinThe (zero-based) pin of this IO element.
-
-
-
Returns
The new analog value of pin.
- -

Implemented in ShiftRegisterOutBase< N >, MAX7219, and AnalogMultiplex< N >.

- -
-
- -

◆ begin()

- -
-
- - - - - -
- - - - - - - -
virtual void begin ()
-
-pure virtual
-
- -

Initialize the extended IO element.

- -

Implemented in AnalogMultiplex< N >, ShiftRegisterOut< N >, SPIShiftRegisterOut< N >, and MAX7219.

- -
-
- -

◆ beginAll()

- -
-
- - - - - -
- - - - - - - -
void beginAll ()
-
-static
-
- -

Initialize all extended IO elements.

- -

Definition at line 23 of file ExtendedIOElement.cpp.

- -
-
- -

◆ update()

- -
-
- - - - - -
- - - - - - - -
virtual void update ()
-
-pure virtual
-
- -

Update the extended IO element: write the internal state to the physical outputs, or read the physical state into the input buffers.

- -

Implemented in MAX7219, AnalogMultiplex< N >, ShiftRegisterOut< N >, and SPIShiftRegisterOut< N >.

- -
-
- -

◆ pin()

- -
-
- - - - - - - - -
pin_t pin (pin_t pin) const
-
- -

Get the extended IO pin number of a given physical pin of this extended IO element.

-
Parameters
- - -
pinThe zero-based physical pin number of this IO element.
-
-
-
Returns
The global, unique extended IO pin number for the given pin.
-
Examples
Toggle-LEDs.ino.
-
- -

Definition at line 28 of file ExtendedIOElement.cpp.

- -
-
- -

◆ operator[]()

- -
-
- - - - - - - - -
pin_t operator[] (pin_t pin) const
-
- -

Get the extended IO pin number of a given physical pin of this extended IO element.

-


- It is alias for ExtendedIOElement::pin.

Parameters
- - -
pinThe zero-based physical pin number of this IO element.
-
-
-
Returns
The global, unique extended IO pin number for the given pin.
- -

Definition at line 43 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getLength()

- -
-
- - - - - - - -
pin_t getLength () const
-
- -

Get the number of pins this IO element has.

-
Returns
The number of pins this IO element has.
-
Examples
1.AnalogReadSerial.ino, and 2.DigitalReadSerial.ino.
-
- -

Definition at line 45 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getEnd()

- -
-
- - - - - - - -
pin_t getEnd () const
-
- -

Get the largest global extended IO pin number that belongs to this extended IO element.

- -

Definition at line 47 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getStart()

- -
-
- - - - - - - -
pin_t getStart () const
-
- -

Get the smallest global extended IO pin number that belongs to this extended IO element.

- -

Definition at line 49 of file ExtendedIOElement.cpp.

- -
-
- -

◆ getAll()

- -
-
- - - - - -
- - - - - - - -
DoublyLinkedList< ExtendedIOElement > & getAll ()
-
-static
-
- -

Get the list of all Extended IO elements.

- -

Definition at line 51 of file ExtendedIOElement.cpp.

- -
-
-

Member Data Documentation

- -

◆ length

- -
-
- - - - - -
- - - - -
const pin_t length
-
-private
-
- -

Definition at line 192 of file ExtendedIOElement.hpp.

- -
-
- -

◆ start

- -
-
- - - - - -
- - - - -
const pin_t start
-
-private
-
- -

Definition at line 193 of file ExtendedIOElement.hpp.

- -
-
- -

◆ end

- -
-
- - - - - -
- - - - -
const pin_t end
-
-private
-
- -

Definition at line 194 of file ExtendedIOElement.hpp.

- -
-
- -

◆ offset

- -
-
- - - - - -
- - - - -
pin_t offset = NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS
-
-staticprivate
-
- -

Definition at line 195 of file ExtendedIOElement.hpp.

- -
-
- -

◆ elements

- -
-
- - - - - -
- - - - -
DoublyLinkedList< ExtendedIOElement > elements
-
-staticprivate
-
- -

Definition at line 197 of file ExtendedIOElement.hpp.

- -
-
- -

◆ next

- -
-
- - - - - -
- - - - -
ExtendedIOElement * next
-
-protectedinherited
-
- -

Definition at line 305 of file LinkedList.hpp.

- -
-
- -

◆ previous

- -
-
- - - - - -
- - - - -
ExtendedIOElement * previous
-
-protectedinherited
-
- -

Definition at line 306 of file LinkedList.hpp.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/docs/Doxygen/de/d68/classDoublyLinkedList_1_1node__iterator__base-members.html b/docs/Doxygen/de/d68/classDoublyLinkedList_1_1node__iterator__base-members.html deleted file mode 100644 index 0f9a98af2..000000000 --- a/docs/Doxygen/de/d68/classDoublyLinkedList_1_1node__iterator__base-members.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
DoublyLinkedList< Node >::node_iterator_base< INode > Member List
-
- - - - - diff --git a/docs/Doxygen/de/d76/Array_8hpp.html b/docs/Doxygen/de/d76/Array_8hpp.html deleted file mode 100644 index 55f6a575d..000000000 --- a/docs/Doxygen/de/d76/Array_8hpp.html +++ /dev/null @@ -1,281 +0,0 @@ - - - - - - - -Arduino Helpers: Array.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
Array.hpp File Reference
-
-
-
#include <AH/Settings/Warnings.hpp>
-#include <AH/Error/Error.hpp>
-#include <AH/STL/iterator>
-#include <AH/STL/type_traits>
-#include <stddef.h>
-
-Include dependency graph for Array.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - - - - - - - - - -

-Classes

class  ArraySlice< T, N, Reverse, Const >
 Class for a view on a slice of an array. More...
 
struct  Array< T, N >
 An array wrapper for easy copying, comparing, and iterating. More...
 
class  ArraySlice< T, N, Reverse, Const >
 Class for a view on a slice of an array. More...
 
class  ArraySlice< T, N, Reverse, Const >::Iterator
 
- - - - - -

-Typedefs

template<class T , size_t nb_rows, size_t nb_cols>
using Array2D = Array< Array< T, nb_cols >, nb_rows >
 An easy alias for two-dimensional Arrays. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<class T >
constexpr T abs_diff (const T &a, const T &b)
 
template<class T1 , class T2 , size_t N1, size_t N2, bool Reverse1, bool Reverse2, bool Const1, bool Const2>
bool operator== (ArraySlice< T1, N1, Reverse1, Const1 > a, ArraySlice< T2, N2, Reverse2, Const2 > b)
 Slice == Slice. More...
 
template<class T1 , class T2 , size_t N1, size_t N2, bool Reverse2, bool Const2>
bool operator== (const Array< T1, N1 > &a, ArraySlice< T2, N2, Reverse2, Const2 > b)
 Array == Slice. More...
 
template<class T1 , class T2 , size_t N1, size_t N2, bool Reverse1, bool Const1>
bool operator== (ArraySlice< T1, N1, Reverse1, Const1 > a, const Array< T2, N2 > &b)
 Slice == Array. More...
 
template<class T1 , class T2 , size_t N1, size_t N2, bool Reverse1, bool Reverse2, bool Const1, bool Const2>
bool operator!= (ArraySlice< T1, N1, Reverse1, Const1 > a, ArraySlice< T2, N2, Reverse2, Const2 > b)
 Slice != Slice. More...
 
template<class T1 , class T2 , size_t N1, size_t N2, bool Reverse2, bool Const2>
bool operator!= (const Array< T1, N1 > &a, ArraySlice< T2, N2, Reverse2, Const2 > b)
 Array != Slice. More...
 
template<class T1 , class T2 , size_t N1, size_t N2, bool Reverse1, bool Const1>
bool operator!= (ArraySlice< T1, N1, Reverse1, Const1 > a, const Array< T2, N2 > &b)
 Slice != Array. More...
 
template<class T1 , class T2 , size_t N1, size_t N2, bool Reverse1, bool Reverse2, bool Const1, bool Const2>
Array< decltype(T1{}+T2{}), N1 > operator+ (ArraySlice< T1, N1, Reverse1, Const1 > a, ArraySlice< T2, N2, Reverse2, Const2 > b)
 Slice + Slice. More...
 
template<class T1 , class T2 , size_t N1, size_t N2>
Array< decltype(T1{}+T2{}), N1 > operator+ (const Array< T1, N1 > &a, const Array< T2, N2 > &b)
 Array + Array. More...
 
template<class T1 , class T2 , size_t N1, size_t N2, bool Reverse1, bool Reverse2, bool Const1, bool Const2>
const ArraySlice< T1, N1, Reverse1, Const1 > & operator+= (const ArraySlice< T1, N1, Reverse1, Const1 > &a, const ArraySlice< T2, N2, Reverse2, Const2 > &b)
 Slice += Slice. More...
 
template<class T1 , class T2 , size_t N1, size_t N2>
Array< T1, N1 > & operator+= (Array< T1, N1 > &a, const Array< T2, N2 > &b)
 Array += Array. More...
 
template<class T1 , class T2 , size_t N1, size_t N2, bool Reverse1, bool Reverse2, bool Const1, bool Const2>
Array< decltype(T1{} - T2{}), N1 > operator- (ArraySlice< T1, N1, Reverse1, Const1 > a, ArraySlice< T2, N2, Reverse2, Const2 > b)
 Slice - Slice. More...
 
template<class T1 , class T2 , size_t N1, size_t N2>
Array< decltype(T1{} - T2{}), N1 > operator- (const Array< T1, N1 > &a, const Array< T2, N2 > &b)
 Array - Array. More...
 
template<class T1 , class T2 , size_t N1, size_t N2, bool Reverse1, bool Reverse2, bool Const1, bool Const2>
const ArraySlice< T1, N1, Reverse1, Const1 > & operator-= (const ArraySlice< T1, N1, Reverse1, Const1 > &a, const ArraySlice< T2, N2, Reverse2, Const2 > &b)
 Slice -= Slice. More...
 
template<class T1 , class T2 , size_t N1, size_t N2>
Array< T1, N1 > & operator-= (Array< T1, N1 > &a, const Array< T2, N2 > &b)
 Array -= Array. More...
 
template<class T1 , class T2 , size_t N1, bool Reverse1, bool Const1>
Array< decltype(T1{} *T2{}), N1 > operator* (ArraySlice< T1, N1, Reverse1, Const1 > a, T2 b)
 Slice * Scalar. More...
 
template<class T1 , class T2 , size_t N1>
Array< decltype(T1{} *T2{}), N1 > operator* (const Array< T1, N1 > &a, T2 b)
 Array * Scalar. More...
 
template<class T1 , class T2 , size_t N2, bool Reverse2, bool Const2>
Array< decltype(T1{} *T2{}), N2 > operator* (T1 a, ArraySlice< T2, N2, Reverse2, Const2 > b)
 Scalar * Slice. More...
 
template<class T1 , class T2 , size_t N2>
Array< decltype(T1{} *T2{}), N2 > operator* (T1 a, const Array< T2, N2 > &b)
 Scalar * Array. More...
 
template<class T1 , class T2 , size_t N1, bool Reverse1, bool Const1>
const ArraySlice< T1, N1, Reverse1, Const1 > & operator*= (const ArraySlice< T1, N1, Reverse1, Const1 > &a, T2 b)
 Slice *= Scalar. More...
 
template<class T1 , class T2 , size_t N1>
Array< T1, N1 > & operator*= (Array< T1, N1 > &a, T2 b)
 Array *= Scalar. More...
 
template<class T1 , class T2 , size_t N1, bool Reverse1, bool Const1>
Array< decltype(T1{}/T2{}), N1 > operator/ (ArraySlice< T1, N1, Reverse1, Const1 > a, T2 b)
 Slice / Scalar. More...
 
template<class T1 , class T2 , size_t N1>
Array< decltype(T1{}/T2{}), N1 > operator/ (const Array< T1, N1 > &a, T2 b)
 Array / Scalar. More...
 
template<class T1 , class T2 , size_t N1, bool Reverse1, bool Const1>
const ArraySlice< T1, N1, Reverse1, Const1 > & operator/= (const ArraySlice< T1, N1, Reverse1, Const1 > &a, T2 b)
 Slice /= Scalar. More...
 
template<class T1 , class T2 , size_t N1>
Array< T1, N1 > & operator/= (Array< T1, N1 > &a, T2 b)
 Array /= Scalar. More...
 
template<class T , size_t N, bool Reverse, bool Const>
Array< decltype(-T{}), N > operator- (ArraySlice< T, N, Reverse, Const > a)
 -Slice More...
 
template<class T , size_t N>
Array< decltype(-T{}), N > operator- (const Array< T, N > &a)
 -Array More...
 
-

Function Documentation

- -

◆ abs_diff()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
constexpr T abs_diff (const T & a,
const T & b 
)
-
-constexpr
-
- -

Definition at line 17 of file Array.hpp.

- -
-
-
- - - - diff --git a/docs/Doxygen/de/d76/Array_8hpp_source.html b/docs/Doxygen/de/d76/Array_8hpp_source.html deleted file mode 100644 index e05f81819..000000000 --- a/docs/Doxygen/de/d76/Array_8hpp_source.html +++ /dev/null @@ -1,565 +0,0 @@ - - - - - - - -Arduino Helpers: Array.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Array.hpp
-
-
-Go to the documentation of this file.
1 /* ✔ */
-
2 
-
3 #pragma once
-
4 
- -
6 
-
7 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
8 
-
9 #include <AH/Error/Error.hpp>
-
10 #include <AH/STL/iterator>
-
11 #include <AH/STL/type_traits> // conditional
-
12 #include <stddef.h> // size_t
-
13 
- -
15 
-
16 template <class T>
-
17 constexpr T abs_diff(const T &a, const T &b) {
-
18  return a < b ? b - a : a - b;
-
19 }
-
20 
-
23 
-
24 template <class T, size_t N, bool Reverse, bool Const>
-
25 class ArraySlice;
-
26 
-
35 template <class T, size_t N>
-
36 struct Array {
-
37  T data[N];
-
38  using type = T;
-
39  constexpr static size_t length = N;
-
40 
-
50  T &operator[](size_t index) {
-
51  if (index >= N) { // TODO
-
52  ERROR(F("Index out of bounds: ") << index << F(" ≥ ") << N, 0xEDED);
-
53  index = N - 1; // LCOV_EXCL_LINE
-
54  } // LCOV_EXCL_LINE
-
55  return data[index];
-
56  }
-
57 
-
67  const T &operator[](size_t index) const {
-
68  if (index >= N) { // TODO
-
69  ERROR(F("Index out of bounds: ") << index << F(" ≥ ") << N, 0xEDED);
-
70  index = N - 1; // LCOV_EXCL_LINE
-
71  } // LCOV_EXCL_LINE
-
72  return data[index];
-
73  }
-
74 
-
78  T *begin() { return &data[0]; }
-
79 
-
83  const T *begin() const { return &data[0]; }
-
84 
-
88  T *end() { return &data[N]; }
-
89 
-
93  const T *end() const { return &data[N]; }
-
94 
-
101  bool operator==(const Array<T, N> &rhs) const {
-
102  if (this == &rhs)
-
103  return true;
-
104  for (size_t i = 0; i < N; i++)
-
105  if ((*this)[i] != rhs[i])
-
106  return false;
-
107  return true;
-
108  }
-
109 
-
116  bool operator!=(const Array<T, N> &rhs) const { return !(*this == rhs); }
-
117 
-
118  public:
-
130  template <size_t Start = 0, size_t End = N - 1>
-
131  ArraySlice<T, abs_diff(Start, End) + 1, (End < Start), false> slice();
-
132 
-
137  template <size_t Start = 0, size_t End = N - 1>
-
138  ArraySlice<T, abs_diff(Start, End) + 1, (End < Start), true> slice() const;
-
139 
-
144  template <size_t Start = 0, size_t End = N - 1>
-
145  ArraySlice<T, abs_diff(Start, End) + 1, (End < Start), true>
-
146  cslice() const {
-
147  const Array<T, N> *This = this;
-
148  return This->slice();
-
149  }
-
150 };
-
151 
-
167 template <class T, size_t N, bool Reverse = false, bool Const = true>
-
168 class ArraySlice {
-
169  using ElementRefType =
-
170  typename std::conditional<Const, const T &, T &>::type;
-
171  using ElementPtrType =
-
172  typename std::conditional<Const, const T *, T *>::type;
-
173 
-
174  public:
- -
177 
-
179  operator Array<T, N>() const { return asArray(); }
-
180 
- -
182  Array<T, N> slice = {{}};
-
183  for (size_t i = 0; i < N; ++i)
-
184  slice[i] = (*this)[i];
-
185  return slice;
-
186  }
-
187 
-
188  class Iterator {
-
189  public:
- -
191 
-
192  using difference_type = std::ptrdiff_t;
-
193  using value_type = T;
- - -
196  using iterator_category = std::random_access_iterator_tag;
-
197 
-
198  bool operator!=(Iterator rhs) const { return ptr != rhs.ptr; }
-
199  bool operator==(Iterator rhs) const { return ptr == rhs.ptr; }
-
200 
-
201  reference operator*() const { return *ptr; }
-
202 
- -
204  Reverse ? --ptr : ++ptr;
-
205  return *this;
-
206  }
-
207 
- -
209  Reverse ? ++ptr : --ptr;
-
210  return *this;
-
211  }
-
212 
- -
214  return Reverse ? rhs.ptr - ptr : ptr - rhs.ptr;
-
215  }
-
216 
- -
218  return Reverse ? ptr - rhs : ptr + rhs;
-
219  }
-
220 
- -
222  return Reverse ? ptr + rhs : ptr - rhs;
-
223  }
-
224 
-
225  bool operator<(Iterator rhs) const {
-
226  return Reverse ? rhs.ptr < ptr : ptr < rhs.ptr;
-
227  }
-
228 
-
229  private:
- -
231  };
-
232 
-
242  ElementRefType operator[](size_t index) const {
-
243  if (index >= N) { // TODO
-
244  ERROR(F("Index out of bounds: ") << index << F(" ≥ ") << N, 0xEDEF);
-
245  index = N - 1; // LCOV_EXCL_LINE
-
246  } // LCOV_EXCL_LINE
-
247  if (Reverse)
-
248  return array[-index];
-
249  else
-
250  return array[index];
-
251  }
-
252 
-
253  Iterator begin() const {
-
254  if (Reverse)
-
255  return array;
-
256  else
-
257  return array;
-
258  }
-
259 
-
260  Iterator end() const {
-
261  if (Reverse)
-
262  return array - N;
-
263  else
-
264  return array + N;
-
265  }
-
266 
-
267  template <size_t Start, size_t End>
-
268  ArraySlice<T, abs_diff(End, Start) + 1, Reverse ^ (End < Start), Const>
-
269  slice() const;
-
270 
-
271  private:
- -
273 };
-
274 
-
275 template <class T, size_t N>
-
276 template <size_t Start, size_t End>
-
277 inline ArraySlice<T, abs_diff(Start, End) + 1, (End < Start), false>
- -
279  static_assert(Start < N, "");
-
280  static_assert(End < N, "");
-
281  return &(*this)[Start];
-
282 }
-
283 
-
284 template <class T, size_t N>
-
285 template <size_t Start, size_t End>
-
286 inline ArraySlice<T, abs_diff(Start, End) + 1, (End < Start), true>
-
287 Array<T, N>::slice() const {
-
288  static_assert(Start < N, "");
-
289  static_assert(End < N, "");
-
290  return &(*this)[Start];
-
291 }
-
292 
-
293 template <class T, size_t N, bool Reverse, bool Const>
-
294 template <size_t Start, size_t End>
-
295 ArraySlice<T, abs_diff(End, Start) + 1, Reverse ^ (End < Start), Const>
- -
297  static_assert(Start < N, "");
-
298  static_assert(End < N, "");
-
299  return &(*this)[Start];
-
300 }
-
301 
-
302 // Equality ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
303 
-
305 template <class T1, class T2, size_t N1, size_t N2, bool Reverse1,
-
306  bool Reverse2, bool Const1, bool Const2>
- - -
309  static_assert(N1 == N2, "Error: sizes do not match");
-
310  for (size_t i = 0; i < N1; ++i)
-
311  if (a[i] != b[i])
-
312  return false;
-
313  return true;
-
314 }
-
315 
-
317 template <class T1, class T2, size_t N1, size_t N2, bool Reverse2, bool Const2>
-
318 bool operator==(const Array<T1, N1> &a,
- -
320  return a.slice() == b;
-
321 }
-
322 
-
324 template <class T1, class T2, size_t N1, size_t N2, bool Reverse1, bool Const1>
- -
326  const Array<T2, N2> &b) {
-
327  return a == b.slice();
-
328 }
-
329 
-
330 // Inequality ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
331 
-
333 template <class T1, class T2, size_t N1, size_t N2, bool Reverse1,
-
334  bool Reverse2, bool Const1, bool Const2>
- - -
337  return !(a == b);
-
338 }
-
339 
-
341 template <class T1, class T2, size_t N1, size_t N2, bool Reverse2, bool Const2>
-
342 bool operator!=(const Array<T1, N1> &a,
- -
344  return a.slice() != b;
-
345 }
-
346 
-
348 template <class T1, class T2, size_t N1, size_t N2, bool Reverse1, bool Const1>
- -
350  const Array<T2, N2> &b) {
-
351  return a != b.slice();
-
352 }
-
353 
-
354 // Addition ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
355 
-
357 template <class T1, class T2, size_t N1, size_t N2, bool Reverse1,
-
358  bool Reverse2, bool Const1, bool Const2>
-
359 Array<decltype(T1{} + T2{}), N1>
- - -
362  static_assert(N1 == N2, "Error: sizes do not match");
-
363  Array<decltype(T1{} + T2{}), N1> result = {{}};
-
364  for (size_t i = 0; i < N1; ++i)
-
365  result[i] = a[i] + b[i];
-
366  return result;
-
367 }
-
368 
-
370 template <class T1, class T2, size_t N1, size_t N2>
-
371 Array<decltype(T1{} + T2{}), N1> operator+(const Array<T1, N1> &a,
-
372  const Array<T2, N2> &b) {
-
373  return a.slice() + b.slice();
-
374 }
-
375 
-
377 template <class T1, class T2, size_t N1, size_t N2, bool Reverse1,
-
378  bool Reverse2, bool Const1, bool Const2>
- - - -
382  static_assert(N1 == N2, "Error: sizes do not match");
-
383  for (size_t i = 0; i < N1; ++i)
-
384  a[i] += b[i];
-
385  return a;
-
386 }
-
387 
-
389 template <class T1, class T2, size_t N1, size_t N2>
- -
391  a.slice() += b.slice();
-
392  return a;
-
393 }
-
394 
-
395 // Subtraction :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
396 
-
398 template <class T1, class T2, size_t N1, size_t N2, bool Reverse1,
-
399  bool Reverse2, bool Const1, bool Const2>
-
400 Array<decltype(T1{} - T2{}), N1>
- - -
403  static_assert(N1 == N2, "Error: sizes do not match");
-
404  Array<decltype(T1{} - T2{}), N1> result = {{}};
-
405  for (size_t i = 0; i < N1; ++i)
-
406  result[i] = a[i] - b[i];
-
407  return result;
-
408 }
-
409 
-
411 template <class T1, class T2, size_t N1, size_t N2>
-
412 Array<decltype(T1{} - T2{}), N1> operator-(const Array<T1, N1> &a,
-
413  const Array<T2, N2> &b) {
-
414  return a.slice() - b.slice();
-
415 }
-
416 
-
418 template <class T1, class T2, size_t N1, size_t N2, bool Reverse1,
-
419  bool Reverse2, bool Const1, bool Const2>
- - - -
423  static_assert(N1 == N2, "Error: sizes do not match");
-
424  for (size_t i = 0; i < N1; ++i)
-
425  a[i] -= b[i];
-
426  return a;
-
427 }
-
428 
-
430 template <class T1, class T2, size_t N1, size_t N2>
- -
432  a.slice() -= b.slice();
-
433  return a;
-
434 }
-
435 
-
436 // Scalar Multiplication :::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
437 
-
439 template <class T1, class T2, size_t N1, bool Reverse1, bool Const1>
-
440 Array<decltype(T1{} * T2{}), N1>
- -
442  Array<decltype(T1{} * T2{}), N1> result = {{}};
-
443  for (size_t i = 0; i < N1; ++i)
-
444  result[i] = a[i] * b;
-
445  return result;
-
446 }
-
447 
-
449 template <class T1, class T2, size_t N1>
-
450 Array<decltype(T1{} * T2{}), N1> operator*(const Array<T1, N1> &a, T2 b) {
-
451  return a.slice() * b;
-
452 }
-
453 
-
455 template <class T1, class T2, size_t N2, bool Reverse2, bool Const2>
-
456 Array<decltype(T1{} * T2{}), N2>
- -
458  Array<decltype(T1{} * T2{}), N2> result = {{}};
-
459  for (size_t i = 0; i < N2; ++i)
-
460  result[i] = a * b[i];
-
461  return result;
-
462 }
-
463 
-
465 template <class T1, class T2, size_t N2>
-
466 Array<decltype(T1{} * T2{}), N2> operator*(T1 a, const Array<T2, N2> &b) {
-
467  return a * b.slice();
-
468 }
-
469 
-
471 template <class T1, class T2, size_t N1, bool Reverse1, bool Const1>
- - -
474  for (size_t i = 0; i < N1; ++i)
-
475  a[i] *= b;
-
476  return a;
-
477 }
-
478 
-
480 template <class T1, class T2, size_t N1>
- -
482  a.slice() *= b;
-
483  return a;
-
484 }
-
485 
-
486 // Scalar Division :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
487 
-
489 template <class T1, class T2, size_t N1, bool Reverse1, bool Const1>
-
490 Array<decltype(T1{} / T2{}), N1>
- -
492  Array<decltype(T1{} / T2{}), N1> result = {{}};
-
493  for (size_t i = 0; i < N1; ++i)
-
494  result[i] = a[i] / b;
-
495  return result;
-
496 }
-
497 
-
499 template <class T1, class T2, size_t N1>
-
500 Array<decltype(T1{} / T2{}), N1> operator/(const Array<T1, N1> &a, T2 b) {
-
501  return a.slice() / b;
-
502 }
-
503 
-
505 template <class T1, class T2, size_t N1, bool Reverse1, bool Const1>
- - -
508  for (size_t i = 0; i < N1; ++i)
-
509  a[i] /= b;
-
510  return a;
-
511 }
-
512 
-
514 template <class T1, class T2, size_t N1>
- -
516  a.slice() /= b;
-
517  return a;
-
518 }
-
519 
-
520 // Negation ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
521 
-
523 template <class T, size_t N, bool Reverse, bool Const>
-
524 Array<decltype(-T{}), N> operator-(ArraySlice<T, N, Reverse, Const> a) {
-
525  Array<decltype(-T{}), N> result = {{}};
-
526  for (size_t i = 0; i < N; ++i)
-
527  result[i] = -a[i];
-
528  return result;
-
529 }
-
530 
-
532 template <class T, size_t N>
-
533 Array<decltype(-T{}), N> operator-(const Array<T, N> &a) {
-
534  return -a.slice();
-
535 }
-
536 
-
537 // Type aliases ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
538 
-
540 template <class T, size_t nb_rows, size_t nb_cols>
- -
542 
-
544 
- -
546 
- -
-
constexpr static size_t length
Definition: Array.hpp:39
-
Iterator(ElementPtrType ptr)
Definition: Array.hpp:190
-
#define BEGIN_AH_NAMESPACE
-
reference operator*() const
Definition: Array.hpp:201
-
ArraySlice< T, abs_diff(Start, End)+1,(End< Start), false > slice()
Get a view on a slice of the Array.
-
ElementRefType reference
Definition: Array.hpp:195
-
std::random_access_iterator_tag iterator_category
Definition: Array.hpp:196
-
const ArraySlice< T1, N1, Reverse1, Const1 > & operator*=(const ArraySlice< T1, N1, Reverse1, Const1 > &a, T2 b)
Slice *= Scalar.
Definition: Array.hpp:473
- -
typename std::conditional< Const, const T &, T & >::type ElementRefType
Definition: Array.hpp:170
-
std::ptrdiff_t difference_type
Definition: Array.hpp:192
-
bool operator!=(Iterator rhs) const
Definition: Array.hpp:198
- -
bool operator!=(const Array< T, N > &rhs) const
Check the inequality of all elements in two arrays.
Definition: Array.hpp:116
-
Iterator end() const
Definition: Array.hpp:260
-
ArraySlice(ElementPtrType array)
Constructor.
Definition: Array.hpp:176
-
ElementPtrType pointer
Definition: Array.hpp:194
-
ArraySlice< T, abs_diff(End, Start)+1, Reverse ^(End< Start), Const > slice() const
-
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
An array wrapper for easy copying, comparing, and iterating.
Definition: Array.hpp:36
-
const T * end() const
Get a pointer to the memory beyond the array.
Definition: Array.hpp:93
-
constexpr T abs_diff(const T &a, const T &b)
Definition: Array.hpp:17
-
ElementRefType operator[](size_t index) const
Get the element at the given index.
Definition: Array.hpp:242
-
nb_rows type
Definition: Array.hpp:38
-
T data[N]
Definition: Array.hpp:37
-
bool operator==(const Array< T, N > &rhs) const
Check the equality of all elements in two arrays.
Definition: Array.hpp:101
-
ElementPtrType ptr
Definition: Array.hpp:230
-
const T * begin() const
Get a pointer to the first element.
Definition: Array.hpp:83
-
difference_type operator-(Iterator rhs) const
Definition: Array.hpp:213
-
bool operator==(Iterator rhs) const
Definition: Array.hpp:199
-
#define ERROR(msg, errc)
Print the error message and error code, and stop the execution if FATAL_ERRORS are enabled.
Definition: Error.hpp:42
-
Iterator begin() const
Definition: Array.hpp:253
-
bool operator!=(ArraySlice< T1, N1, Reverse1, Const1 > a, ArraySlice< T2, N2, Reverse2, Const2 > b)
Slice != Slice.
Definition: Array.hpp:335
-
const ArraySlice< T1, N1, Reverse1, Const1 > & operator-=(const ArraySlice< T1, N1, Reverse1, Const1 > &a, const ArraySlice< T2, N2, Reverse2, Const2 > &b)
Slice -= Slice.
Definition: Array.hpp:421
-
Class for a view on a slice of an array.
Definition: Array.hpp:25
-
T & operator[](size_t index)
Get the element at the given index.
Definition: Array.hpp:50
-
ArraySlice< T, abs_diff(Start, End)+1,(End< Start), true > cslice() const
Get a read-only view on a slice of the Array.
Definition: Array.hpp:146
-
Iterator & operator++()
Definition: Array.hpp:203
-
Iterator operator+(difference_type rhs) const
Definition: Array.hpp:217
-
Array< T, N > asArray() const
Definition: Array.hpp:181
-
T * end()
Get a pointer to the memory beyond the array.
Definition: Array.hpp:88
-
Iterator operator-(difference_type rhs) const
Definition: Array.hpp:221
-
const ArraySlice< T1, N1, Reverse1, Const1 > & operator+=(const ArraySlice< T1, N1, Reverse1, Const1 > &a, const ArraySlice< T2, N2, Reverse2, Const2 > &b)
Slice += Slice.
Definition: Array.hpp:380
-
const ArraySlice< T1, N1, Reverse1, Const1 > & operator/=(const ArraySlice< T1, N1, Reverse1, Const1 > &a, T2 b)
Slice /= Scalar.
Definition: Array.hpp:507
-
typename std::conditional< Const, const T *, T * >::type ElementPtrType
Definition: Array.hpp:172
-
T * begin()
Get a pointer to the first element.
Definition: Array.hpp:78
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
#define END_AH_NAMESPACE
-
const T & operator[](size_t index) const
Get the element at the given index.
Definition: Array.hpp:67
- -
bool operator<(Iterator rhs) const
Definition: Array.hpp:225
-
bool operator==(ArraySlice< T1, N1, Reverse1, Const1 > a, ArraySlice< T2, N2, Reverse2, Const2 > b)
Slice == Slice.
Definition: Array.hpp:307
-
ElementPtrType array
Definition: Array.hpp:272
-
Iterator & operator--()
Definition: Array.hpp:208
- - - - diff --git a/docs/Doxygen/de/d78/ButtonMatrix_8ipp__dep__incl.map b/docs/Doxygen/de/d78/ButtonMatrix_8ipp__dep__incl.map deleted file mode 100644 index b5a26a8b5..000000000 --- a/docs/Doxygen/de/d78/ButtonMatrix_8ipp__dep__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/de/d78/ButtonMatrix_8ipp__dep__incl.md5 b/docs/Doxygen/de/d78/ButtonMatrix_8ipp__dep__incl.md5 deleted file mode 100644 index 96cdd06d2..000000000 --- a/docs/Doxygen/de/d78/ButtonMatrix_8ipp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -009fd8a3456ef97d49aff190a5876f89 \ No newline at end of file diff --git a/docs/Doxygen/de/d78/ButtonMatrix_8ipp__dep__incl.svg b/docs/Doxygen/de/d78/ButtonMatrix_8ipp__dep__incl.svg deleted file mode 100644 index bf7f61c55..000000000 --- a/docs/Doxygen/de/d78/ButtonMatrix_8ipp__dep__incl.svg +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - -ButtonMatrix.ipp - - -Node1 - - -ButtonMatrix.ipp - - - - -Node2 - - -ButtonMatrix.hpp - - - - -Node1->Node2 - - - - -Node2->Node1 - - - - - diff --git a/docs/Doxygen/de/d7e/UniquePtr_8hpp.html b/docs/Doxygen/de/d7e/UniquePtr_8hpp.html deleted file mode 100644 index b0a3dced3..000000000 --- a/docs/Doxygen/de/d7e/UniquePtr_8hpp.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - -Arduino Helpers: UniquePtr.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
UniquePtr.hpp File Reference
-
-
-
#include <AH/Settings/Warnings.hpp>
-#include <AH/STL/type_traits>
-#include <AH/STL/utility>
-
-Include dependency graph for UniquePtr.hpp:
-
-
-
-
-

Go to the source code of this file.

- - - - - -

-Classes

class  UniquePtr< T >
 Very basic smart pointer. More...
 
- - - - -

-Functions

template<typename T , typename... Args>
UniquePtr< T > MakeUnique (Args &&... args)
 
-
- - - - diff --git a/docs/Doxygen/de/d7e/UniquePtr_8hpp_source.html b/docs/Doxygen/de/d7e/UniquePtr_8hpp_source.html deleted file mode 100644 index ecde57d7c..000000000 --- a/docs/Doxygen/de/d7e/UniquePtr_8hpp_source.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - -Arduino Helpers: UniquePtr.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
UniquePtr.hpp
-
-
-Go to the documentation of this file.
1 #pragma once
-
2 
- -
4 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
5 
-
6 #include <AH/STL/type_traits>
-
7 #include <AH/STL/utility> // std::forward
-
8 
- -
10 
-
13 
-
20 template <class T>
-
21 class UniquePtr {
-
22  public:
-
23  UniquePtr() = default;
-
24  explicit UniquePtr(T *p) : p(p) {}
-
25  UniquePtr(const UniquePtr &) = delete;
-
26  template <class U>
- -
28  reset(r.release());
-
29  }
-
30 
-
31  ~UniquePtr() { delete p; }
-
32 
-
33  UniquePtr &operator=(const UniquePtr &) = delete;
- -
35  reset(r.release());
-
36  return *this;
-
37  }
-
38 
-
39  void reset(T *newP = nullptr) {
-
40  T *old_ptr = p;
-
41  p = newP;
-
42  delete old_ptr;
-
43  }
-
44 
-
45  T *release() {
-
46  T *old_ptr = p;
-
47  p = nullptr;
-
48  return old_ptr;
-
49  }
-
50 
-
51  explicit operator bool() const { return p != nullptr; }
-
52 
-
53  T *get() { return p; }
-
54  const T *get() const { return p; }
-
55 
-
56  T *operator->() { return p; }
-
57  const T *operator->() const { return p; }
-
58  T &operator*() { return *p; }
-
59  const T &operator*() const { return *p; }
-
60 
-
61  private:
-
62  T *p = nullptr;
-
63 };
-
64 
-
65 template <typename T, typename... Args>
-
66 UniquePtr<T> MakeUnique(Args &&... args) {
-
67  return UniquePtr<T>(new T(std::forward<Args>(args)...));
-
68 }
-
69 
-
71 
- -
73 
- -
-
void reset(T *newP=nullptr)
Definition: UniquePtr.hpp:39
-
#define BEGIN_AH_NAMESPACE
-
T * release()
Definition: UniquePtr.hpp:45
-
UniquePtr< T > & operator=(UniquePtr< T > &&r)
Definition: UniquePtr.hpp:34
- - -
UniquePtr< T > MakeUnique(Args &&... args)
Definition: UniquePtr.hpp:66
-
T & operator*()
Definition: UniquePtr.hpp:58
-
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
const T * operator->() const
Definition: UniquePtr.hpp:57
-
const T * get() const
Definition: UniquePtr.hpp:54
-
T * operator->()
Definition: UniquePtr.hpp:56
-
const T & operator*() const
Definition: UniquePtr.hpp:59
- -
UniquePtr(T *p)
Definition: UniquePtr.hpp:24
-
T * get()
Definition: UniquePtr.hpp:53
-
UniquePtr & operator=(const UniquePtr &)=delete
-
Very basic smart pointer.
Definition: UniquePtr.hpp:21
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
#define END_AH_NAMESPACE
-
UniquePtr(UniquePtr< U > &&r)
Definition: UniquePtr.hpp:27
-
UniquePtr()=default
- - - - diff --git a/docs/Doxygen/de/d81/classMAX7219__coll__graph.map b/docs/Doxygen/de/d81/classMAX7219__coll__graph.map deleted file mode 100644 index 487a0a68a..000000000 --- a/docs/Doxygen/de/d81/classMAX7219__coll__graph.map +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/docs/Doxygen/de/d81/classMAX7219__coll__graph.md5 b/docs/Doxygen/de/d81/classMAX7219__coll__graph.md5 deleted file mode 100644 index b0e1dc55b..000000000 --- a/docs/Doxygen/de/d81/classMAX7219__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -ad231ce64dd18bdc6e51694458d665b0 \ No newline at end of file diff --git a/docs/Doxygen/de/d81/classMAX7219__coll__graph.svg b/docs/Doxygen/de/d81/classMAX7219__coll__graph.svg deleted file mode 100644 index 4f9a21fb8..000000000 --- a/docs/Doxygen/de/d81/classMAX7219__coll__graph.svg +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - -MAX7219 - - -Node1 - - -MAX7219 - - - -+ MAX7219() -+ begin() -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogRead() -+ analogWrite() -+ update() - - - - -Node2 - - -MAX7219_Base - -+ DECODEMODE -+ INTENSITY -+ SCANLIMIT -+ SHUTDOWN -+ DISPLAYTEST -- loadPin -- settings - -+ MAX7219_Base() -+ init() -+ clear() -+ send() -+ sendRaw() -+ setIntensity() - - - - -Node2->Node1 - - - - -Node3 - - -StaticSizeExtendedIOElement -< 8 *8 > - - - -+ pins() -+ length() -# StaticSizeExtendedIOElement() - - - - -Node3->Node1 - - - - -Node4 - - -ExtendedIOElement - -- length -- start -- end -- offset - -+ ~ExtendedIOElement() -+ pinMode() -+ digitalWrite() -+ digitalRead() -+ analogWrite() -+ analogRead() -+ begin() -+ update() -+ pin() -+ operator[]() -+ getLength() -+ getEnd() -+ getStart() -+ beginAll() -+ getAll() -# ExtendedIOElement() - - - - -Node4->Node3 - - - - -Node5 - - -DoublyLinkable< Extended -IOElement > - - - -# ~DoublyLinkable() - - - - -Node4->Node5 - - - #next -#previous - - -Node6 - - -DoublyLinkedList< Extended -IOElement > - - - -+ append() -+ append() -+ insertBefore() -+ insertBefore() -+ insertSorted() -+ insertSorted() -+ remove() -+ remove() -+ moveDown() -+ couldContain() -+ begin() -+ begin() -+ end() -+ end() -+ rbegin() -+ rbegin() -+ rend() -+ rend() -+ getFirst() -+ getLast() - - - - -Node4->Node6 - - - -last --first - - -Node5->Node4 - - - - -Node6->Node4 - - - -elements - - -Node7 - - -BitArray< 8 *8 > - -- buffer -- bufferLength - -+ get() -+ set() -+ set() -+ clear() -+ safeIndex() -+ getByte() -+ getBufferLength() -- getBufferIndex() -- getBufferBit() -- getBufferMask() - - - - -Node7->Node1 - - - -buffer - - - diff --git a/docs/Doxygen/de/d8a/ArrayHelpers_8hpp__dep__incl.map b/docs/Doxygen/de/d8a/ArrayHelpers_8hpp__dep__incl.map deleted file mode 100644 index fe43edf91..000000000 --- a/docs/Doxygen/de/d8a/ArrayHelpers_8hpp__dep__incl.map +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/docs/Doxygen/de/d8a/ArrayHelpers_8hpp__dep__incl.md5 b/docs/Doxygen/de/d8a/ArrayHelpers_8hpp__dep__incl.md5 deleted file mode 100644 index dd7b1f1ef..000000000 --- a/docs/Doxygen/de/d8a/ArrayHelpers_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -c4c54db058cfc625543c382e62531500 \ No newline at end of file diff --git a/docs/Doxygen/de/d8a/ArrayHelpers_8hpp__dep__incl.svg b/docs/Doxygen/de/d8a/ArrayHelpers_8hpp__dep__incl.svg deleted file mode 100644 index 2d96ae7b9..000000000 --- a/docs/Doxygen/de/d8a/ArrayHelpers_8hpp__dep__incl.svg +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - -ArrayHelpers.hpp - - -Node1 - - -ArrayHelpers.hpp - - - - -Node2 - - -StaticSizeExtendedIOElement.hpp - - - - -Node1->Node2 - - - - -Node3 - - -AnalogMultiplex.hpp - - - - -Node2->Node3 - - - - -Node4 - - -MAX7219.hpp - - - - -Node2->Node4 - - - - -Node5 - - -ShiftRegisterOutBase.hpp - - - - -Node2->Node5 - - - - -Node6 - - -ShiftRegisterOut.hpp - - - - -Node5->Node6 - - - - -Node8 - - -ShiftRegisterOutBase.ipp - - - - -Node5->Node8 - - - - -Node9 - - -SPIShiftRegisterOut.hpp - - - - -Node5->Node9 - - - - -Node7 - - -ShiftRegisterOut.ipp - - - - -Node6->Node7 - - - - -Node7->Node6 - - - - -Node8->Node5 - - - - -Node10 - - -SPIShiftRegisterOut.ipp - - - - -Node9->Node10 - - - - -Node10->Node9 - - - - - diff --git a/docs/Doxygen/de/d91/LEDs_8hpp__dep__incl.map b/docs/Doxygen/de/d91/LEDs_8hpp__dep__incl.map deleted file mode 100644 index b63fc5dc4..000000000 --- a/docs/Doxygen/de/d91/LEDs_8hpp__dep__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/de/d91/LEDs_8hpp__dep__incl.md5 b/docs/Doxygen/de/d91/LEDs_8hpp__dep__incl.md5 deleted file mode 100644 index 05b2290cc..000000000 --- a/docs/Doxygen/de/d91/LEDs_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -0436fd0f833249738cb2396b30c20f2c \ No newline at end of file diff --git a/docs/Doxygen/de/d91/LEDs_8hpp__dep__incl.svg b/docs/Doxygen/de/d91/LEDs_8hpp__dep__incl.svg deleted file mode 100644 index ffde23245..000000000 --- a/docs/Doxygen/de/d91/LEDs_8hpp__dep__incl.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - -LEDs.hpp - - -Node1 - - -LEDs.hpp - - - - -Node2 - - -DotBarDisplayLEDs.hpp - - - - -Node1->Node2 - - - - - diff --git a/docs/Doxygen/de/d94/IncrementButton_8hpp__incl.map b/docs/Doxygen/de/d94/IncrementButton_8hpp__incl.map deleted file mode 100644 index ae8c6dc41..000000000 --- a/docs/Doxygen/de/d94/IncrementButton_8hpp__incl.map +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/de/d94/IncrementButton_8hpp__incl.md5 b/docs/Doxygen/de/d94/IncrementButton_8hpp__incl.md5 deleted file mode 100644 index 484573047..000000000 --- a/docs/Doxygen/de/d94/IncrementButton_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -47e13d975d385b05f150d2f54452ce2d \ No newline at end of file diff --git a/docs/Doxygen/de/d94/IncrementButton_8hpp__incl.svg b/docs/Doxygen/de/d94/IncrementButton_8hpp__incl.svg deleted file mode 100644 index 622a48e76..000000000 --- a/docs/Doxygen/de/d94/IncrementButton_8hpp__incl.svg +++ /dev/null @@ -1,499 +0,0 @@ - - - - - - -IncrementButton.hpp - - -Node1 - - -IncrementButton.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -Button.hpp - - - - -Node1->Node3 - - - - -Node3->Node2 - - - - -Node4 - - -AH/Hardware/ExtendedInput -Output/ExtendedInputOutput.hpp - - - - -Node3->Node4 - - - - -Node12 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node3->Node12 - - - - -Node4->Node2 - - - - -Node5 - - -Arduino.h - - - - -Node4->Node5 - - - - -Node6 - - -ExtendedIOElement.hpp - - - - -Node4->Node6 - - - - -Node6->Node2 - - - - -Node7 - - -AH/Hardware/Hardware --Types.hpp - - - - -Node6->Node7 - - - - -Node24 - - -AH/Containers/LinkedList.hpp - - - - -Node6->Node24 - - - - -Node7->Node2 - - - - -Node8 - - -AH/Containers/Array.hpp - - - - -Node7->Node8 - - - - -Node13 - - -NamespaceSettings.hpp - - - - -Node7->Node13 - - - - -Node19 - - -stdint.h - - - - -Node7->Node19 - - - - -Node8->Node2 - - - - -Node9 - - -AH/Error/Error.hpp - - - - -Node8->Node9 - - - - -Node18 - - -stddef.h - - - - -Node8->Node18 - - - - -Node22 - - -AH/STL/iterator - - - - -Node8->Node22 - - - - -Node23 - - -AH/STL/type_traits - - - - -Node8->Node23 - - - - -Node9->Node2 - - - - -Node10 - - -AH/Debug/Debug.hpp - - - - -Node9->Node10 - - - - -Node10->Node2 - - - - -Node11 - - -AH/PrintStream/PrintStream.hpp - - - - -Node10->Node11 - - - - -Node10->Node12 - - - - -Node21 - - -DebugVal.hpp - - - - -Node10->Node21 - - - - -Node11->Node2 - - - - -Node11->Node5 - - - - -Node12->Node2 - - - - -Node12->Node10 - - - - -Node12->Node13 - - - - -Node14 - - -Settings.hpp - - - - -Node12->Node14 - - - - -Node20 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node12->Node20 - - - - -Node15 - - -AH/Types/Frequency.hpp - - - - -Node14->Node15 - - - - -Node16 - - -AH/Hardware/ADCConfig.hpp - - - - -Node14->Node16 - - - - -Node17 - - -limits.h - - - - -Node14->Node17 - - - - -Node14->Node18 - - - - -Node14->Node19 - - - - -Node15->Node2 - - - - -Node15->Node13 - - - - -Node16->Node2 - - - - -Node16->Node5 - - - - -Node24->Node2 - - - - -Node24->Node10 - - - - -Node25 - - -AH/Math/MinMaxFix.hpp - - - - -Node24->Node25 - - - - -Node27 - - -stdlib.h - - - - -Node24->Node27 - - - - -Node28 - - -iterator - - - - -Node24->Node28 - - - - -Node25->Node2 - - - - -Node25->Node13 - - - - -Node26 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node25->Node26 - - - - -Node26->Node2 - - - - -Node26->Node5 - - - - - diff --git a/docs/Doxygen/de/d95/ShiftRegisterOut_8ipp.html b/docs/Doxygen/de/d95/ShiftRegisterOut_8ipp.html deleted file mode 100644 index 645419ba9..000000000 --- a/docs/Doxygen/de/d95/ShiftRegisterOut_8ipp.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - -Arduino Helpers: ShiftRegisterOut.ipp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ShiftRegisterOut.ipp File Reference
-
-
-
-Include dependency graph for ShiftRegisterOut.ipp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

-
- - - - diff --git a/docs/Doxygen/de/d95/ShiftRegisterOut_8ipp_source.html b/docs/Doxygen/de/d95/ShiftRegisterOut_8ipp_source.html deleted file mode 100644 index cfbd1116c..000000000 --- a/docs/Doxygen/de/d95/ShiftRegisterOut_8ipp_source.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - -Arduino Helpers: ShiftRegisterOut.ipp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ShiftRegisterOut.ipp
-
-
-Go to the documentation of this file.
-
2 #include "ShiftRegisterOut.hpp"
-
3 
- -
5 
-
6 template <uint8_t N>
- -
8  pin_t latchPin, BitOrder_t bitOrder)
-
9  : ShiftRegisterOutBase<N>(latchPin, bitOrder), dataPin(dataPin),
-
10  clockPin(clockPin) {}
-
11 
-
12 template <uint8_t N>
- -
14  ExtIO::pinMode(dataPin, OUTPUT);
-
15  ExtIO::pinMode(clockPin, OUTPUT);
-
16  ExtIO::pinMode(this->latchPin, OUTPUT);
-
17  update();
-
18 }
-
19 
-
20 template <uint8_t N>
- -
22  if (!this->dirty)
-
23  return;
-
24  ExtIO::digitalWrite(this->latchPin, LOW);
-
25  const uint8_t bufferLength = this->buffer.getBufferLength();
-
26  if (this->bitOrder == LSBFIRST)
-
27  for (uint8_t i = 0; i < bufferLength; i++)
-
28  ExtIO::shiftOut(dataPin, clockPin, uint8_t(LSBFIRST),
-
29  this->buffer.getByte(i));
-
30  else
-
31  for (int8_t i = bufferLength - 1; i >= 0; i--)
-
32  ExtIO::shiftOut(dataPin, clockPin, uint8_t(MSBFIRST),
-
33  this->buffer.getByte(i));
-
34 
-
35  ExtIO::digitalWrite(this->latchPin, HIGH);
-
36  this->dirty = false;
-
37 }
-
38 
- -
-
#define BEGIN_AH_NAMESPACE
-
void digitalWrite(pin_t pin, uint8_t val)
An ExtIO version of the Arduino function.
-
typename ShiftRegisterOutBase< N >::BitOrder_t BitOrder_t
- - -
void shiftOut(pin_t dataPin, pin_t clockPin, uint8_t bitOrder, uint8_t val)
An ExtIO version of the Arduino function.
-
const uint8_t HIGH
-
A class for serial-in/parallel-out shift registers, like the 74HC595.
-
const uint8_t LOW
-
void pinMode(pin_t pin, uint8_t mode)
An ExtIO version of the Arduino function.
-
void begin() override
Initialize the shift register.
-
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
-
#define END_AH_NAMESPACE
-
const uint8_t OUTPUT
-
ShiftRegisterOut(pin_t dataPin, pin_t clockPin, pin_t latchPin, BitOrder_t bitOrder=MSBFIRST)
Create a new ShiftRegisterOut object with a shift register connected to the given pins,...
-
void update() override
Write the state buffer to the physical outputs.
- - - - diff --git a/docs/Doxygen/de/d9b/IncreaseBitDepth_8cpp.html b/docs/Doxygen/de/d9b/IncreaseBitDepth_8cpp.html deleted file mode 100644 index e16f8d514..000000000 --- a/docs/Doxygen/de/d9b/IncreaseBitDepth_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: IncreaseBitDepth.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
IncreaseBitDepth.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/de/d9b/IncreaseBitDepth_8cpp_source.html b/docs/Doxygen/de/d9b/IncreaseBitDepth_8cpp_source.html deleted file mode 100644 index 70eafae5a..000000000 --- a/docs/Doxygen/de/d9b/IncreaseBitDepth_8cpp_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Arduino Helpers: IncreaseBitDepth.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
IncreaseBitDepth.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
-
2 #include "IncreaseBitDepth.hpp"
-
3 #endif
-
- - - - - diff --git a/docs/Doxygen/de/da7/DotBarDisplayLEDs_8cpp.html b/docs/Doxygen/de/da7/DotBarDisplayLEDs_8cpp.html deleted file mode 100644 index f7b1f14b6..000000000 --- a/docs/Doxygen/de/da7/DotBarDisplayLEDs_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: DotBarDisplayLEDs.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
DotBarDisplayLEDs.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/de/da7/DotBarDisplayLEDs_8cpp_source.html b/docs/Doxygen/de/da7/DotBarDisplayLEDs_8cpp_source.html deleted file mode 100644 index 252ab4bad..000000000 --- a/docs/Doxygen/de/da7/DotBarDisplayLEDs_8cpp_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Arduino Helpers: DotBarDisplayLEDs.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
DotBarDisplayLEDs.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
-
2 #include "DotBarDisplayLEDs.hpp"
-
3 #endif
-
- - - - - diff --git a/docs/Doxygen/de/daf/md_pages_Debug.html b/docs/Doxygen/de/daf/md_pages_Debug.html deleted file mode 100644 index 7c3255b66..000000000 --- a/docs/Doxygen/de/daf/md_pages_Debug.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -Arduino Helpers: Debug - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Debug
-
-
-
See also
Module Debug for more information.
-
-Debug.ino for example usage.
-

-Adding a 'Debug' menu in the Arduino IDE

-

If you are going to be debugging a lot, it might be useful to just add a menu option in the IDE to disable/enable debugging.
- This can be easily done by editing the boards.txt file.

-

Open the boards.txt file of the board you are using. If you're using version 1.8.x of the Arduino IDE, it'll be located in ~/.arduino15/packages/<package-name>/hardware/<architecture>/<version>/ or C:\users\<username>\AppData\Local\Arduino15\packages\<package-name>\hardware\<architecture>\<version>\.
- Open it using a text editor (e.g. Gedit on Linux, or Notepad on Windows).

-

First, create the menu option by adding the following line at the top of the file:

-
menu.debug=Debug output
-

Then for your board, just add the different debug options.
- For example, if you're using an Arduino UNO:

-
uno.menu.debug.None=None
-
uno.menu.debug.None.build.debug_output=
-
uno.menu.debug.Serial=Serial
-
uno.menu.debug.Serial.build.debug_output=-DDEBUG_OUT=Serial
-

Next, add the debugging flags to the compilation options by adding the line:

-
uno.build.extra_flags={build.debug_output}
-

If your board already has an extra_flags entry, just add {build.debug_output} to the end (separated by a space).

-

A complete list of all the AVR boards and their added debug options can be found here.

-

Finally, restart the IDE.
- If you now open your the Tools menu in the Arduino IDE, you should see the debug options:

- -
-Selecting the Debug output in the Arduino IDE
-
-
- - - - diff --git a/docs/Doxygen/de/dbc/ShiftRegisterOutBase_8hpp__dep__incl.map b/docs/Doxygen/de/dbc/ShiftRegisterOutBase_8hpp__dep__incl.map deleted file mode 100644 index 2402a208b..000000000 --- a/docs/Doxygen/de/dbc/ShiftRegisterOutBase_8hpp__dep__incl.map +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/docs/Doxygen/de/dbc/ShiftRegisterOutBase_8hpp__dep__incl.md5 b/docs/Doxygen/de/dbc/ShiftRegisterOutBase_8hpp__dep__incl.md5 deleted file mode 100644 index e77d4bbf7..000000000 --- a/docs/Doxygen/de/dbc/ShiftRegisterOutBase_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -8a916a7db89e96b17dca3c6d9d261bac \ No newline at end of file diff --git a/docs/Doxygen/de/dbc/ShiftRegisterOutBase_8hpp__dep__incl.svg b/docs/Doxygen/de/dbc/ShiftRegisterOutBase_8hpp__dep__incl.svg deleted file mode 100644 index f787a0361..000000000 --- a/docs/Doxygen/de/dbc/ShiftRegisterOutBase_8hpp__dep__incl.svg +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - -ShiftRegisterOutBase.hpp - - -Node1 - - -ShiftRegisterOutBase.hpp - - - - -Node2 - - -ShiftRegisterOut.hpp - - - - -Node1->Node2 - - - - -Node4 - - -ShiftRegisterOutBase.ipp - - - - -Node1->Node4 - - - - -Node5 - - -SPIShiftRegisterOut.hpp - - - - -Node1->Node5 - - - - -Node3 - - -ShiftRegisterOut.ipp - - - - -Node2->Node3 - - - - -Node3->Node2 - - - - -Node4->Node1 - - - - -Node6 - - -SPIShiftRegisterOut.ipp - - - - -Node5->Node6 - - - - -Node6->Node5 - - - - - diff --git a/docs/Doxygen/de/dd1/Button_8cpp.html b/docs/Doxygen/de/dd1/Button_8cpp.html deleted file mode 100644 index ec3e35959..000000000 --- a/docs/Doxygen/de/dd1/Button_8cpp.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - -Arduino Helpers: Button.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Button.cpp File Reference
-
-
-
#include "Button.hpp"
-
-Include dependency graph for Button.cpp:
-
-
-
-
-

Go to the source code of this file.

-
- - - - diff --git a/docs/Doxygen/de/dd1/Button_8cpp_source.html b/docs/Doxygen/de/dd1/Button_8cpp_source.html deleted file mode 100644 index 4debfb9a5..000000000 --- a/docs/Doxygen/de/dd1/Button_8cpp_source.html +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - - -Arduino Helpers: Button.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Button.cpp
-
-
-Go to the documentation of this file.
1 #include "Button.hpp"
-
2 
-
3 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
4 
- -
6 
-
7 using namespace ExtIO;
-
8 
-
9 Button::Button(pin_t pin) : pin(pin) {}
-
10 
- -
12 
-
13 void Button::invert() { invertState = true; }
-
14 
-
15 #ifndef AH_INDIVIDUAL_BUTTON_INVERT
-
16 bool Button::invertState = false;
-
17 #endif
-
18 
- -
20  // read the button state and invert it if "invertState" is true
-
21  bool input = ExtIO::digitalRead(pin) ^ invertState;
-
22  bool prevState = debouncedState & 0b01;
-
23  unsigned long now = millis();
-
24  if (now - prevBounceTime > debounceTime) { // wait for state to stabilize
-
25  debouncedState = static_cast<State>((prevState << 1) | input);
-
26  } else {
-
27  debouncedState = static_cast<State>((prevState << 1) | prevState);
-
28  }
-
29  if (input != prevInput) { // Button is pressed, released or bounces
-
30  prevBounceTime = now;
-
31  prevInput = input;
-
32  }
-
33  return debouncedState;
-
34 }
-
35 
- -
37 
-
38 const __FlashStringHelper *Button::getName(Button::State state) {
-
39  switch (state) {
-
40  case Button::Pressed: return F("Pressed");
-
41  case Button::Released: return F("Released");
-
42  case Button::Falling: return F("Falling");
-
43  case Button::Rising: return F("Rising");
-
44  default: return F("<invalid>"); // Keeps the compiler happy
-
45  }
-
46 }
-
47 
-
48 unsigned long Button::previousBounceTime() const { return prevBounceTime; }
-
49 
-
50 unsigned long Button::stableTime(unsigned long now) const {
-
51  return now - previousBounceTime();
-
52 }
-
53 
-
54 unsigned long Button::stableTime() const { return stableTime(millis()); }
-
55 
-
56 void Button::setDebounceTime(unsigned long debounceTime) {
- -
58 }
-
59 
-
60 unsigned long Button::getDebounceTime() { return Button::debounceTime; }
-
61 
- -
63 
- -
65 
- -
-
const uint8_t INPUT_PULLUP
-
#define BEGIN_AH_NAMESPACE
-
static const __FlashStringHelper * getName(State state)
Return the name of the state as a string.
Definition: Button.cpp:38
-
State getState() const
Get the state of the button, without updating it.
Definition: Button.cpp:36
-
Input went from high to low (1,0)
Definition: Button.hpp:56
-
pin_t pin
Definition: Button.hpp:130
- -
static unsigned long debounceTime
Edit this in Settings.hpp.
Definition: Button.hpp:144
-
A class for reading and debouncing buttons and switches.
Definition: Button.hpp:18
-
int digitalRead(pin_t pin)
An ExtIO version of the Arduino function.
-
Input went from low to low (0,0)
Definition: Button.hpp:54
-
constexpr unsigned long BUTTON_DEBOUNCE_TIME
The debounce time for momentary push buttons in milliseconds.
Definition: Settings.hpp:74
-
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
unsigned long stableTime() const
Return the time (in milliseconds) that the button has been stable for.
Definition: Button.cpp:54
-
unsigned long previousBounceTime() const
Return the time point (in milliseconds) when the button last bounced.
Definition: Button.cpp:48
-
State debouncedState
Definition: Button.hpp:133
-
static void setDebounceTime(unsigned long debounceTime=BUTTON_DEBOUNCE_TIME)
Set the debounce time for all Buttons.
Definition: Button.cpp:56
-
bool prevInput
Definition: Button.hpp:132
-
State update()
Read the button and return its new state.
Definition: Button.cpp:19
-
A namespace with alternatives to the standard Arduino IO functions that can be used with extended IO ...
-
static bool invertState
Definition: Button.hpp:139
-
void begin()
Initialize (enable the internal pull-up resistor).
Definition: Button.cpp:11
-
void pinMode(pin_t pin, uint8_t mode)
An ExtIO version of the Arduino function.
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
-
AH_INDIVIDUAL_BUTTON_INVERT_STATIC void invert()
Invert the state of all buttons, or of this specific button (button pressed is HIGH instead of LOW).
Definition: Button.cpp:13
-
#define END_AH_NAMESPACE
-
static unsigned long getDebounceTime()
Get the debounce time.
Definition: Button.cpp:60
-
unsigned long prevBounceTime
Definition: Button.hpp:134
-
State
An enumeration of the different states a button can be in.
Definition: Button.hpp:53
-
Input went from low to high (0,1)
Definition: Button.hpp:57
-
Input went from high to high (1,1)
Definition: Button.hpp:55
- - - - diff --git a/docs/Doxygen/de/dd1/LinkedList_8hpp.html b/docs/Doxygen/de/dd1/LinkedList_8hpp.html deleted file mode 100644 index 84da3b755..000000000 --- a/docs/Doxygen/de/dd1/LinkedList_8hpp.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - -Arduino Helpers: LinkedList.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
LinkedList.hpp File Reference
-
-
-
#include <AH/Settings/Warnings.hpp>
-#include <AH/Debug/Debug.hpp>
-#include <AH/Math/MinMaxFix.hpp>
-#include <stdlib.h>
-#include <iterator>
-
-Include dependency graph for LinkedList.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - - - - - - - - - - - - - -

-Classes

class  DoublyLinkedList< Node >
 A class for doubly linked lists. More...
 
class  DoublyLinkedList< Node >::node_iterator_base< INode >
 Base class for doubly linked list iterators. More...
 
class  DoublyLinkedList< Node >::node_iterator< INode >
 Forward bidirectional doubly linked list iterator. More...
 
class  DoublyLinkedList< Node >::reverse_node_iterator< INode >
 Reverse bidirectional doubly linked list iterator. More...
 
class  DoublyLinkable< Node >
 A class that can be inherited from to allow inserting into a DoublyLinkedList. More...
 
-
- - - - diff --git a/docs/Doxygen/de/dd1/LinkedList_8hpp_source.html b/docs/Doxygen/de/dd1/LinkedList_8hpp_source.html deleted file mode 100644 index ad46cdeb8..000000000 --- a/docs/Doxygen/de/dd1/LinkedList_8hpp_source.html +++ /dev/null @@ -1,358 +0,0 @@ - - - - - - - -Arduino Helpers: LinkedList.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
LinkedList.hpp
-
-
-Go to the documentation of this file.
1 /* ✔ */
-
2 
-
3 #pragma once
-
4 
- -
6 
-
7 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
8 
-
9 #include <AH/Debug/Debug.hpp>
-
10 #include <AH/Math/MinMaxFix.hpp>
-
11 #include <stdlib.h>
-
12 
-
13 #ifndef __AVR__
-
14 #include <iterator>
-
15 #endif
-
16 
-
19 
-
26 template <class Node>
- -
28  public:
-
30  template <class INode>
- -
32  public:
- -
34 
-
35  bool operator!=(const node_iterator_base &rhs) const {
-
36  return node != rhs.node;
-
37  }
-
38 
-
39  INode &operator*() const {
-
40  // TODO: check node != nullptr
-
41  return *node;
-
42  }
-
43 
-
44  protected:
-
45  INode *node;
-
46  };
-
47 
-
49  template <class INode>
-
50  class node_iterator : public node_iterator_base<INode> {
-
51  public:
- -
53 
-
54 #ifndef __AVR__
-
55  using difference_type = void;
-
56  using value_type = INode;
-
57  using pointer = INode *;
-
58  using reference = INode &;
-
59  using iterator_category = std::bidirectional_iterator_tag;
-
60 #endif
-
61 
- -
64  // TODO: check node != nullptr
-
65  this->node = this->node->next;
-
66  return *this;
-
67  }
-
68 
- -
71  // TODO: check node != nullptr
-
72  this->node = this->node->previous;
-
73  return *this;
-
74  }
-
75  };
-
76 
-
78  template <class INode>
-
79  class reverse_node_iterator : public node_iterator_base<INode> {
-
80  public:
- -
82 
-
83 #ifndef __AVR__
-
84  using difference_type = void;
-
85  using value_type = INode;
-
86  using pointer = INode *;
-
87  using reference = INode &;
-
88  using iterator_category = std::bidirectional_iterator_tag;
-
89 #endif
-
90 
- -
93  // TODO: check node != nullptr
-
94  this->node = this->node->previous;
-
95  return *this;
-
96  }
-
97 
- -
100  // TODO: check node != nullptr
-
101  this->node = this->node->next;
-
102  return *this;
-
103  }
-
104  };
-
105 
-
106  using iterator = node_iterator<Node>;
-
107  using const_iterator = node_iterator<const Node>;
-
108  using reverse_iterator = reverse_node_iterator<Node>;
-
109  using const_reverse_iterator = reverse_node_iterator<const Node>;
-
110 
-
117  void append(Node *node) {
-
118  if (first == nullptr)
-
119  first = node;
-
120  node->previous = last;
-
121  if (node->previous != nullptr)
-
122  node->previous->next = node;
-
123  last = node;
-
124  node->next = nullptr;
-
125  }
-
126 
-
133  void append(Node &node) { append(&node); }
-
134 
-
144  void insertBefore(Node *toBeInserted, Node *before) {
-
145  if (before == first)
-
146  first = toBeInserted;
-
147  else
-
148  before->previous->next = toBeInserted;
-
149  toBeInserted->previous = before->previous;
-
150  toBeInserted->next = before;
-
151  before->previous = toBeInserted;
-
152  }
-
153 
-
155  void insertBefore(Node &toBeInserted, Node &before) {
-
156  insertBefore(&toBeInserted, &before);
-
157  }
-
158 
-
169  template <class Compare>
-
170  void insertSorted(Node *node, Compare cmp) {
-
171  iterator it = this->begin();
-
172  iterator end = this->end();
-
173  while (it != end) {
-
174  if (cmp(*node, *it)) {
-
175  insertBefore(*node, *it);
-
176  return;
-
177  }
-
178  ++it;
-
179  }
-
180  append(node);
-
181  }
-
182 
-
190  void insertSorted(Node *node) {
-
191  insertSorted(node, [](Node &lhs, Node &rhs) { return lhs < rhs; });
-
192  }
-
193 
-
200  void remove(Node *node) {
-
201  if (node->previous != nullptr)
-
202  node->previous->next = node->next;
-
203  if (node == last)
-
204  last = node->previous;
-
205  if (node->next != nullptr)
-
206  node->next->previous = node->previous;
-
207  if (node == first)
-
208  first = node->next;
-
209  node->previous = nullptr;
-
210  node->next = nullptr;
-
211  }
-
212 
-
219  void remove(Node &node) { remove(&node); }
-
220 
-
232  void moveDown(Node *node) {
-
233  Node *nodeB = node->previous;
-
234  if (nodeB == nullptr) // Can't move first node further down
-
235  return;
-
236  Node *nodeA = nodeB->previous;
-
237  Node *nodeD = node->next;
-
238 
-
239  if (nodeA != nullptr)
-
240  nodeA->next = node;
-
241  else
-
242  first = node;
-
243  nodeB->next = nodeD;
-
244  nodeB->previous = node;
-
245  node->next = nodeB;
-
246  node->previous = nodeA;
-
247  if (nodeD != nullptr)
-
248  nodeD->previous = nodeB;
-
249  else
-
250  last = nodeB;
-
251  }
-
252 
-
268  bool couldContain(Node *node) {
-
269  return node && (node == first || node->next != nullptr ||
-
270  node->previous != nullptr);
-
271  }
-
272 
-
273  iterator begin() { return {first}; }
-
274  iterator end() { return {nullptr}; }
-
275 
-
276  const_iterator begin() const { return {first}; }
-
277  const_iterator end() const { return {nullptr}; }
-
278 
-
279  reverse_iterator rbegin() { return {last}; }
-
280  reverse_iterator rend() { return {nullptr}; }
-
281 
-
282  const_reverse_iterator rbegin() const { return {last}; }
-
283  const_reverse_iterator rend() const { return {nullptr}; }
-
284 
-
286  Node *getFirst() const { return first; }
-
288  Node *getLast() const { return last; }
-
289 
-
290  private:
-
291  Node *first = nullptr;
-
292  Node *last = nullptr;
-
293 };
-
294 
-
301 template <class Node>
- -
303  protected:
-
304  friend class DoublyLinkedList<Node>;
-
305  Node *next = nullptr;
-
306  Node *previous = nullptr;
-
307  virtual ~DoublyLinkable() = default;
-
308 };
-
309 
-
311 
- -
-
reverse_node_iterator< const ExtendedIOElement > const_reverse_iterator
Definition: LinkedList.hpp:109
-
Node * getFirst() const
Get a pointer to the first node.
Definition: LinkedList.hpp:286
- -
const_reverse_iterator rbegin() const
Definition: LinkedList.hpp:282
-
Reverse bidirectional doubly linked list iterator.
Definition: LinkedList.hpp:79
-
reverse_node_iterator & operator++()
Prefix increment operator.
Definition: LinkedList.hpp:92
-
node_iterator & operator++()
Prefix increment operator.
Definition: LinkedList.hpp:63
- -
void insertBefore(Node *toBeInserted, Node *before)
Insert a node before another node.
Definition: LinkedList.hpp:144
-
void remove(Node &node)
Remove a node from the linked list.
Definition: LinkedList.hpp:219
-
reverse_iterator rbegin()
Definition: LinkedList.hpp:279
- - - -
iterator end()
Definition: LinkedList.hpp:274
- -
bool operator!=(const node_iterator_base &rhs) const
Definition: LinkedList.hpp:35
-
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
- - -
node_iterator & operator--()
Prefix decrement operator.
Definition: LinkedList.hpp:70
-
node_iterator< ExtendedIOElement > iterator
Definition: LinkedList.hpp:106
-
void insertSorted(Node *node)
Insert a new node at the correct location into a sorted list, using operator<.
Definition: LinkedList.hpp:190
- -
void append(Node *node)
Append a node to a linked list.
Definition: LinkedList.hpp:117
-
Node * getLast() const
Get a pointer to the last node.
Definition: LinkedList.hpp:288
- -
const_iterator end() const
Definition: LinkedList.hpp:277
-
node_iterator< const ExtendedIOElement > const_iterator
Definition: LinkedList.hpp:107
-
iterator begin()
Definition: LinkedList.hpp:273
- -
Base class for doubly linked list iterators.
Definition: LinkedList.hpp:31
-
void moveDown(Node *node)
Move down the given node in the linked list.
Definition: LinkedList.hpp:232
- -
void remove(Node *node)
Remove a node from the linked list.
Definition: LinkedList.hpp:200
-
Forward bidirectional doubly linked list iterator.
Definition: LinkedList.hpp:50
-
reverse_iterator rend()
Definition: LinkedList.hpp:280
- -
reverse_node_iterator & operator--()
Prefix decrement operator.
Definition: LinkedList.hpp:99
-
void append(Node &node)
Append a node to a linked list.
Definition: LinkedList.hpp:133
-
reverse_node_iterator< ExtendedIOElement > reverse_iterator
Definition: LinkedList.hpp:108
-
A class for doubly linked lists.
Definition: LinkedList.hpp:27
- -
virtual ~DoublyLinkable()=default
-
A class that can be inherited from to allow inserting into a DoublyLinkedList.
Definition: LinkedList.hpp:302
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
std::bidirectional_iterator_tag iterator_category
Definition: LinkedList.hpp:59
-
std::bidirectional_iterator_tag iterator_category
Definition: LinkedList.hpp:88
- - -
const_iterator begin() const
Definition: LinkedList.hpp:276
-
void insertSorted(Node *node, Compare cmp)
Insert a new node at the correct location into a sorted list.
Definition: LinkedList.hpp:170
- -
const_reverse_iterator rend() const
Definition: LinkedList.hpp:283
- - -
bool couldContain(Node *node)
Check if the linked list could contain the given node.
Definition: LinkedList.hpp:268
-
void insertBefore(Node &toBeInserted, Node &before)
Definition: LinkedList.hpp:155
- - - - diff --git a/docs/Doxygen/de/dd4/Settings_8hpp__dep__incl.map b/docs/Doxygen/de/dd4/Settings_8hpp__dep__incl.map deleted file mode 100644 index dbaf2843a..000000000 --- a/docs/Doxygen/de/dd4/Settings_8hpp__dep__incl.map +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/de/dd4/Settings_8hpp__dep__incl.md5 b/docs/Doxygen/de/dd4/Settings_8hpp__dep__incl.md5 deleted file mode 100644 index f44ce94cb..000000000 --- a/docs/Doxygen/de/dd4/Settings_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -01cd76bea10538da512519aa05602ea2 \ No newline at end of file diff --git a/docs/Doxygen/de/dd4/Settings_8hpp__dep__incl.svg b/docs/Doxygen/de/dd4/Settings_8hpp__dep__incl.svg deleted file mode 100644 index da111f61f..000000000 --- a/docs/Doxygen/de/dd4/Settings_8hpp__dep__incl.svg +++ /dev/null @@ -1,658 +0,0 @@ - - - - - - -Settings.hpp - - -Node1 - - -Settings.hpp - - - - -Node2 - - -SettingsWrapper.hpp - - - - -Node1->Node2 - - - - -Node3 - - -Updatable.hpp - - - - -Node2->Node3 - - - - -Node4 - - -Debug.hpp - - - - -Node2->Node4 - - - - -Node8 - - -Button.hpp - - - - -Node2->Node8 - - - - -Node24 - - -FilteredAnalog.hpp - - - - -Node2->Node24 - - - - -Node39 - - -ShiftRegisterOutRGB.hpp - - - - -Node2->Node39 - - - - -Node4->Node2 - - - - -Node5 - - -LinkedList.hpp - - - - -Node4->Node5 - - - - -Node32 - - -Debug.cpp - - - - -Node4->Node32 - - - - -Node33 - - -Error.hpp - - - - -Node4->Node33 - - - - -Node5->Node3 - - - - -Node6 - - -ExtendedIOElement.hpp - - - - -Node5->Node6 - - - - -Node7 - - -ExtendedInputOutput.hpp - - - - -Node6->Node7 - - - - -Node17 - - -ExtendedInputOutput.cpp - - - - -Node6->Node17 - - - - -Node30 - - -StaticSizeExtendedIOElement.hpp - - - - -Node6->Node30 - - - - -Node31 - - -ExtendedIOElement.cpp - - - - -Node6->Node31 - - - - -Node7->Node8 - - - - -Node14 - - -ButtonMatrix.ipp - - - - -Node7->Node14 - - - - -Node16 - - -AnalogMultiplex.hpp - - - - -Node7->Node16 - - - - -Node7->Node17 - - - - -Node18 - - -ShiftRegisterOutBase.ipp - - - - -Node7->Node18 - - - - -Node21 - - -ShiftRegisterOut.ipp - - - - -Node7->Node21 - - - - -Node23 - - -SPIShiftRegisterOut.ipp - - - - -Node7->Node23 - - - - -Node7->Node24 - - - - -Node25 - - -LEDs.hpp - - - - -Node7->Node25 - - - - -Node27 - - -MAX7219_Base.hpp - - - - -Node7->Node27 - - - - -Node9 - - -Button.cpp - - - - -Node8->Node9 - - - - -Node10 - - -IncrementButton.hpp - - - - -Node8->Node10 - - - - -Node12 - - -IncrementDecrementButtons.hpp - - - - -Node8->Node12 - - - - -Node11 - - -IncrementButton.cpp - - - - -Node10->Node11 - - - - -Node13 - - -IncrementDecrementButtons.cpp - - - - -Node12->Node13 - - - - -Node15 - - -ButtonMatrix.hpp - - - - -Node14->Node15 - - - - -Node15->Node14 - - - - -Node19 - - -ShiftRegisterOutBase.hpp - - - - -Node18->Node19 - - - - -Node19->Node18 - - - - -Node20 - - -ShiftRegisterOut.hpp - - - - -Node19->Node20 - - - - -Node22 - - -SPIShiftRegisterOut.hpp - - - - -Node19->Node22 - - - - -Node20->Node21 - - - - -Node21->Node20 - - - - -Node22->Node23 - - - - -Node23->Node22 - - - - -Node26 - - -DotBarDisplayLEDs.hpp - - - - -Node25->Node26 - - - - -Node28 - - -MAX7219.hpp - - - - -Node27->Node28 - - - - -Node29 - - -MAX7219SevenSegmentDisplay.hpp - - - - -Node27->Node29 - - - - -Node30->Node16 - - - - -Node30->Node19 - - - - -Node30->Node28 - - - - -Node33->Node3 - - - - -Node33->Node17 - - - - -Node33->Node31 - - - - -Node34 - - -Array.hpp - - - - -Node33->Node34 - - - - -Node37 - - -BitArray.hpp - - - - -Node33->Node37 - - - - -Node38 - - -Exit.cpp - - - - -Node33->Node38 - - - - -Node34->Node16 - - - - -Node35 - - -ArrayHelpers.hpp - - - - -Node34->Node35 - - - - -Node36 - - -Hardware-Types.hpp - - - - -Node34->Node36 - - - - -Node35->Node30 - - - - -Node36->Node6 - - - - -Node36->Node15 - - - - -Node36->Node24 - - - - -Node37->Node19 - - - - -Node37->Node22 - - - - -Node37->Node28 - - - - -Node39->Node18 - - - - -Node40 - - -ShiftRegisterOutRGB.cpp - - - - -Node39->Node40 - - - - - diff --git a/docs/Doxygen/de/ddf/classTimer__coll__graph.map b/docs/Doxygen/de/ddf/classTimer__coll__graph.map deleted file mode 100644 index 36a70c713..000000000 --- a/docs/Doxygen/de/ddf/classTimer__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/de/ddf/classTimer__coll__graph.md5 b/docs/Doxygen/de/ddf/classTimer__coll__graph.md5 deleted file mode 100644 index 64f75aaec..000000000 --- a/docs/Doxygen/de/ddf/classTimer__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -c1152bd95cbebf07ecd058ddc7f18cb6 \ No newline at end of file diff --git a/docs/Doxygen/de/ddf/classTimer__coll__graph.svg b/docs/Doxygen/de/ddf/classTimer__coll__graph.svg deleted file mode 100644 index 791ea0568..000000000 --- a/docs/Doxygen/de/ddf/classTimer__coll__graph.svg +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - -Timer< time > - - -Node1 - - -Timer< time > - -- interval -- previous - -+ Timer() -+ begin() -+ operator bool() -+ getInterval() -+ setInterval() - - - - - diff --git a/docs/Doxygen/de/de5/classDoublyLinkedList_1_1node__iterator-members.html b/docs/Doxygen/de/de5/classDoublyLinkedList_1_1node__iterator-members.html deleted file mode 100644 index 2b63b3c35..000000000 --- a/docs/Doxygen/de/de5/classDoublyLinkedList_1_1node__iterator-members.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
DoublyLinkedList< Node >::node_iterator< INode > Member List
-
- - - - - diff --git a/docs/Doxygen/de/dea/classDotBarDisplayLEDs__coll__graph.map b/docs/Doxygen/de/dea/classDotBarDisplayLEDs__coll__graph.map deleted file mode 100644 index 53b2c98ab..000000000 --- a/docs/Doxygen/de/dea/classDotBarDisplayLEDs__coll__graph.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/Doxygen/de/dea/classDotBarDisplayLEDs__coll__graph.md5 b/docs/Doxygen/de/dea/classDotBarDisplayLEDs__coll__graph.md5 deleted file mode 100644 index 8dd116f73..000000000 --- a/docs/Doxygen/de/dea/classDotBarDisplayLEDs__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -ebd92bfa8f7abbdeb2c73e68199d1574 \ No newline at end of file diff --git a/docs/Doxygen/de/dea/classDotBarDisplayLEDs__coll__graph.svg b/docs/Doxygen/de/dea/classDotBarDisplayLEDs__coll__graph.svg deleted file mode 100644 index 767a77390..000000000 --- a/docs/Doxygen/de/dea/classDotBarDisplayLEDs__coll__graph.svg +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - -DotBarDisplayLEDs< N > - - -Node1 - - -DotBarDisplayLEDs< N > - -- mode - -+ DotBarDisplayLEDs() -+ display() -+ display() -+ getMode() -+ setMode() -+ dotMode() -+ barMode() -+ toggleMode() - - - - -Node2 - - -LEDs< N > - - - -+ LEDs() -+ begin() -+ displayRange() -+ set() -+ clear() -+ displayDot() -+ clear() - - - - -Node2->Node1 - - - - -Node3 - - -Array< N > - -+ length - -+ operator[]() -+ operator[]() -+ begin() -+ begin() -+ end() -+ end() -+ operator==() -+ operator!=() -+ slice() -+ slice() -+ cslice() - - - - -Node3->Node2 - - - -ledPins - - -Node4 - - -N - - - - - - - - -Node4->Node3 - - - +data - - - diff --git a/docs/Doxygen/de/df5/classEMA__f-members.html b/docs/Doxygen/de/df5/classEMA__f-members.html deleted file mode 100644 index c735ca31d..000000000 --- a/docs/Doxygen/de/df5/classEMA__f-members.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
EMA_f Member List
-
-
- -

This is the complete list of members for EMA_f, including all inherited members.

- - - - - - -
alphaEMA_fprivate
EMA_f(float pole)EMA_finline
filter(float value)EMA_finline
filteredEMA_fprivate
operator()(float value)EMA_finline
- - - - diff --git a/docs/Doxygen/df/d18/FilteredAnalog_8hpp__incl.map b/docs/Doxygen/df/d18/FilteredAnalog_8hpp__incl.map deleted file mode 100644 index 8e7ce208b..000000000 --- a/docs/Doxygen/df/d18/FilteredAnalog_8hpp__incl.map +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/df/d18/FilteredAnalog_8hpp__incl.md5 b/docs/Doxygen/df/d18/FilteredAnalog_8hpp__incl.md5 deleted file mode 100644 index 931924718..000000000 --- a/docs/Doxygen/df/d18/FilteredAnalog_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -a6b1735dbe752a8fb22bdd4fd07e7d2c \ No newline at end of file diff --git a/docs/Doxygen/df/d18/FilteredAnalog_8hpp__incl.svg b/docs/Doxygen/df/d18/FilteredAnalog_8hpp__incl.svg deleted file mode 100644 index d40716caf..000000000 --- a/docs/Doxygen/df/d18/FilteredAnalog_8hpp__incl.svg +++ /dev/null @@ -1,570 +0,0 @@ - - - - - - -FilteredAnalog.hpp - - -Node1 - - -FilteredAnalog.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -AH/Filters/EMA.hpp - - - - -Node1->Node3 - - - - -Node5 - - -AH/Filters/Hysteresis.hpp - - - - -Node1->Node5 - - - - -Node6 - - -AH/Hardware/ExtendedInput -Output/ExtendedInputOutput.hpp - - - - -Node1->Node6 - - - - -Node9 - - -AH/Hardware/Hardware --Types.hpp - - - - -Node1->Node9 - - - - -Node14 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node1->Node14 - - - - -Node26 - - -AH/Math/MinMaxFix.hpp - - - - -Node1->Node26 - - - - -Node30 - - -AH/Math/IncreaseBitDepth.hpp - - - - -Node1->Node30 - - - - -Node3->Node2 - - - - -Node4 - - -stdint.h - - - - -Node3->Node4 - - - - -Node5->Node2 - - - - -Node5->Node4 - - - - -Node6->Node2 - - - - -Node7 - - -Arduino.h - - - - -Node6->Node7 - - - - -Node8 - - -ExtendedIOElement.hpp - - - - -Node6->Node8 - - - - -Node8->Node2 - - - - -Node8->Node9 - - - - -Node25 - - -AH/Containers/LinkedList.hpp - - - - -Node8->Node25 - - - - -Node9->Node2 - - - - -Node9->Node4 - - - - -Node10 - - -AH/Containers/Array.hpp - - - - -Node9->Node10 - - - - -Node15 - - -NamespaceSettings.hpp - - - - -Node9->Node15 - - - - -Node10->Node2 - - - - -Node11 - - -AH/Error/Error.hpp - - - - -Node10->Node11 - - - - -Node20 - - -stddef.h - - - - -Node10->Node20 - - - - -Node23 - - -AH/STL/iterator - - - - -Node10->Node23 - - - - -Node24 - - -AH/STL/type_traits - - - - -Node10->Node24 - - - - -Node11->Node2 - - - - -Node12 - - -AH/Debug/Debug.hpp - - - - -Node11->Node12 - - - - -Node12->Node2 - - - - -Node13 - - -AH/PrintStream/PrintStream.hpp - - - - -Node12->Node13 - - - - -Node12->Node14 - - - - -Node22 - - -DebugVal.hpp - - - - -Node12->Node22 - - - - -Node13->Node2 - - - - -Node13->Node7 - - - - -Node14->Node2 - - - - -Node14->Node12 - - - - -Node14->Node15 - - - - -Node16 - - -Settings.hpp - - - - -Node14->Node16 - - - - -Node21 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node14->Node21 - - - - -Node16->Node4 - - - - -Node17 - - -AH/Types/Frequency.hpp - - - - -Node16->Node17 - - - - -Node18 - - -AH/Hardware/ADCConfig.hpp - - - - -Node16->Node18 - - - - -Node19 - - -limits.h - - - - -Node16->Node19 - - - - -Node16->Node20 - - - - -Node17->Node2 - - - - -Node17->Node15 - - - - -Node18->Node2 - - - - -Node18->Node7 - - - - -Node25->Node2 - - - - -Node25->Node12 - - - - -Node25->Node26 - - - - -Node28 - - -stdlib.h - - - - -Node25->Node28 - - - - -Node29 - - -iterator - - - - -Node25->Node29 - - - - -Node26->Node2 - - - - -Node26->Node15 - - - - -Node27 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node26->Node27 - - - - -Node27->Node2 - - - - -Node27->Node7 - - - - -Node30->Node2 - - - - -Node30->Node19 - - - - -Node30->Node20 - - - - -Node30->Node24 - - - - - diff --git a/docs/Doxygen/df/d26/Debug_8dox.html b/docs/Doxygen/df/d26/Debug_8dox.html deleted file mode 100644 index fc2673b08..000000000 --- a/docs/Doxygen/df/d26/Debug_8dox.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Debug.dox File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Debug.dox File Reference
-
-
-
- - - - diff --git a/docs/Doxygen/df/d26/SPIShiftRegisterOut_8ipp__dep__incl.map b/docs/Doxygen/df/d26/SPIShiftRegisterOut_8ipp__dep__incl.map deleted file mode 100644 index 44d40fd1f..000000000 --- a/docs/Doxygen/df/d26/SPIShiftRegisterOut_8ipp__dep__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/df/d26/SPIShiftRegisterOut_8ipp__dep__incl.md5 b/docs/Doxygen/df/d26/SPIShiftRegisterOut_8ipp__dep__incl.md5 deleted file mode 100644 index 1b79c6678..000000000 --- a/docs/Doxygen/df/d26/SPIShiftRegisterOut_8ipp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -18921312b369b8f60c75517462cbe08c \ No newline at end of file diff --git a/docs/Doxygen/df/d26/SPIShiftRegisterOut_8ipp__dep__incl.svg b/docs/Doxygen/df/d26/SPIShiftRegisterOut_8ipp__dep__incl.svg deleted file mode 100644 index cd40abae2..000000000 --- a/docs/Doxygen/df/d26/SPIShiftRegisterOut_8ipp__dep__incl.svg +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - -SPIShiftRegisterOut.ipp - - -Node1 - - -SPIShiftRegisterOut.ipp - - - - -Node2 - - -SPIShiftRegisterOut.hpp - - - - -Node1->Node2 - - - - -Node2->Node1 - - - - - diff --git a/docs/Doxygen/df/d27/classDotBarDisplayLEDs__inherit__graph.map b/docs/Doxygen/df/d27/classDotBarDisplayLEDs__inherit__graph.map deleted file mode 100644 index 529d8fe1c..000000000 --- a/docs/Doxygen/df/d27/classDotBarDisplayLEDs__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/df/d27/classDotBarDisplayLEDs__inherit__graph.md5 b/docs/Doxygen/df/d27/classDotBarDisplayLEDs__inherit__graph.md5 deleted file mode 100644 index adb24d179..000000000 --- a/docs/Doxygen/df/d27/classDotBarDisplayLEDs__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -401afa5aa1be3bc3c96b613063d74d47 \ No newline at end of file diff --git a/docs/Doxygen/df/d27/classDotBarDisplayLEDs__inherit__graph.svg b/docs/Doxygen/df/d27/classDotBarDisplayLEDs__inherit__graph.svg deleted file mode 100644 index 1c0d7f2f8..000000000 --- a/docs/Doxygen/df/d27/classDotBarDisplayLEDs__inherit__graph.svg +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - -DotBarDisplayLEDs< N > - - -Node1 - - -DotBarDisplayLEDs< N > - -- mode - -+ DotBarDisplayLEDs() -+ display() -+ display() -+ getMode() -+ setMode() -+ dotMode() -+ barMode() -+ toggleMode() - - - - -Node2 - - -LEDs< N > - -- ledPins - -+ LEDs() -+ begin() -+ displayRange() -+ set() -+ clear() -+ displayDot() -+ clear() - - - - -Node2->Node1 - - - - - diff --git a/docs/Doxygen/df/d28/classDoublyLinkable-members.html b/docs/Doxygen/df/d28/classDoublyLinkable-members.html deleted file mode 100644 index e873beb72..000000000 --- a/docs/Doxygen/df/d28/classDoublyLinkable-members.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
DoublyLinkable< Node > Member List
-
-
- -

This is the complete list of members for DoublyLinkable< Node >, including all inherited members.

- - - - -
nextDoublyLinkable< Node >protected
previousDoublyLinkable< Node >protected
~DoublyLinkable()=defaultDoublyLinkable< Node >protectedvirtual
- - - - diff --git a/docs/Doxygen/df/d2b/classBitArray-members.html b/docs/Doxygen/df/d2b/classBitArray-members.html deleted file mode 100644 index 5018cd4d5..000000000 --- a/docs/Doxygen/df/d2b/classBitArray-members.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
BitArray< N > Member List
-
-
- -

This is the complete list of members for BitArray< N >, including all inherited members.

- - - - - - - - - - - - - -
bufferBitArray< N >private
bufferLengthBitArray< N >privatestatic
clear(uint8_t bitIndex)BitArray< N >inline
get(uint8_t bitIndex) constBitArray< N >inline
getBufferBit(uint8_t bitIndex) constBitArray< N >inlineprivate
getBufferIndex(uint8_t bitIndex) constBitArray< N >inlineprivate
getBufferLength() constBitArray< N >inline
getBufferMask(uint8_t bitIndex) constBitArray< N >inlineprivate
getByte(uint8_t byteIndex) constBitArray< N >inline
safeIndex(uint8_t byteIndex) constBitArray< N >inline
set(uint8_t bitIndex)BitArray< N >inline
set(uint8_t bitIndex, bool state)BitArray< N >inline
- - - - diff --git a/docs/Doxygen/df/d2b/structArray__coll__graph.map b/docs/Doxygen/df/d2b/structArray__coll__graph.map deleted file mode 100644 index b7dfc10f2..000000000 --- a/docs/Doxygen/df/d2b/structArray__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/df/d2b/structArray__coll__graph.md5 b/docs/Doxygen/df/d2b/structArray__coll__graph.md5 deleted file mode 100644 index 0a1178d3a..000000000 --- a/docs/Doxygen/df/d2b/structArray__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -0f829ef8b5e451305f60c1b0189eda7e \ No newline at end of file diff --git a/docs/Doxygen/df/d2b/structArray__coll__graph.svg b/docs/Doxygen/df/d2b/structArray__coll__graph.svg deleted file mode 100644 index 15c23635d..000000000 --- a/docs/Doxygen/df/d2b/structArray__coll__graph.svg +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - -Array< T, N > - - -Node1 - - -Array< T, N > - -+ length - -+ operator[]() -+ operator[]() -+ begin() -+ begin() -+ end() -+ end() -+ operator==() -+ operator!=() -+ slice() -+ slice() -+ cslice() - - - - -Node2 - - -T - - - - - - - - -Node2->Node1 - - - +data - - - diff --git a/docs/Doxygen/df/d38/classIncrementButton.html b/docs/Doxygen/df/d38/classIncrementButton.html deleted file mode 100644 index 94e2a3220..000000000 --- a/docs/Doxygen/df/d38/classIncrementButton.html +++ /dev/null @@ -1,451 +0,0 @@ - - - - - - - -Arduino Helpers: IncrementButton Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
- -
- -

A class for buttons that increment some counter or setting. - More...

- -

#include <IncrementButton.hpp>

-
-Collaboration diagram for IncrementButton:
-
-
-
- - - - - -

-Public Types

enum  State { Nothing = 0, -Increment - }
 An enumeration of the different actions to be performed by the counter. More...
 
- - - - - - - - - - - - -

-Public Member Functions

 IncrementButton (const Button &button)
 Create a IncrementButton. More...
 
void begin ()
 
State update ()
 Update and return the state of the increment button. More...
 
State getState () const
 Return the state of the increment button without updating it. More...
 
- - - -

-Protected Member Functions

State updateImplementation ()
 
- - - -

-Private Types

enum  { Initial, -LongPress - }
 
- - - - - - - - - -

-Private Attributes

Button button
 
enum IncrementButton:: { ... }  longPressState = Initial
 
unsigned long longPressRepeat
 
State state = Nothing
 
-

Detailed Description

-

A class for buttons that increment some counter or setting.

-

It behaves the same way as a computer keyboard: when you press the button, it increments the counter once. If you keep on pressing it for longer than a certain threshold, it keeps on incrementing at a faster rate, until you release it.

- -

Definition at line 22 of file IncrementButton.hpp.

-

Member Enumeration Documentation

- -

◆ State

- -
-
- - - - -
enum State
-
- -

An enumeration of the different actions to be performed by the counter.

-
Todo:
Add states for initial press.
- - - -
Enumerator
Nothing 

The counter must not be incremented.

-
Increment 

The counter must be incremented.

-
- -

Definition at line 41 of file IncrementButton.hpp.

- -
-
- -

◆ anonymous enum

- -
-
- - - - - -
- - - - -
anonymous enum
-
-private
-
- - - -
Enumerator
Initial 
LongPress 
- -

Definition at line 69 of file IncrementButton.hpp.

- -
-
-

Constructor & Destructor Documentation

- -

◆ IncrementButton()

- -
-
- - - - - -
- - - - - - - - -
IncrementButton (const Buttonbutton)
-
-inline
-
- -

Create a IncrementButton.

-
Parameters
- - -
buttonThe button to read from.
- The button is copied.
-
-
- -

Definition at line 31 of file IncrementButton.hpp.

- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - -
- - - - - - - -
void begin ()
-
-inline
-
-
See also
Button::begin
- -

Definition at line 34 of file IncrementButton.hpp.

- -
-
- -

◆ update()

- -
-
- - - - - -
- - - - - - - -
State update ()
-
-inline
-
- -

Update and return the state of the increment button.

- -

Definition at line 49 of file IncrementButton.hpp.

- -
-
- -

◆ getState()

- -
-
- - - - - -
- - - - - - - -
State getState () const
-
-inline
-
- -

Return the state of the increment button without updating it.

-

Returns the same value as the last update call.

- -

Definition at line 56 of file IncrementButton.hpp.

- -
-
- -

◆ updateImplementation()

- -
-
- - - - - -
- - - - - - - -
IncrementButton::State updateImplementation ()
-
-protected
-
- -

Definition at line 7 of file IncrementButton.cpp.

- -
-
-

Member Data Documentation

- -

◆ button

- -
-
- - - - - -
- - - - -
Button button
-
-private
-
- -

Definition at line 67 of file IncrementButton.hpp.

- -
-
- -

◆ longPressState

- -
-
- - - - -
enum { ... } longPressState
-
- -
-
- -

◆ longPressRepeat

- -
-
- - - - - -
- - - - -
unsigned long longPressRepeat
-
-private
-
- -

Definition at line 73 of file IncrementButton.hpp.

- -
-
- -

◆ state

- -
-
- - - - - -
- - - - -
State state = Nothing
-
-private
-
- -

Definition at line 75 of file IncrementButton.hpp.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/docs/Doxygen/df/d60/STL-test_8ino-example.html b/docs/Doxygen/df/d60/STL-test_8ino-example.html deleted file mode 100644 index 791af0cdf..000000000 --- a/docs/Doxygen/df/d60/STL-test_8ino-example.html +++ /dev/null @@ -1,207 +0,0 @@ - - - - - - - -Arduino Helpers: STL-test.ino - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
STL-test.ino
-
-
-

-STL-test

-
Boards:
AVR, AVR USB, Nano 33, Teensy 3.x, ESP8266, ESP32
-
- -
-
#include <AH/STL/algorithm>
-
#include <AH/STL/array>
-
#include <AH/STL/bitset>
-
#include <AH/STL/cmath>
-
#include <AH/STL/complex>
-
#include <AH/STL/cstdint>
-
#include <AH/STL/cstdlib>
-
#include <AH/STL/initializer_list>
-
#include <AH/STL/limits>
-
#include <AH/STL/memory>
-
#include <AH/STL/new>
-
#include <AH/STL/numeric>
-
#include <AH/STL/optional>
-
#include <AH/STL/tuple>
-
#include <AH/STL/type_traits>
-
#include <AH/STL/utility>
-
-
AH_DIAGNOSTIC_WERROR() // ESP32 -Werror=c++0x-compat fix
-
-
long double f() {
-
return rand();
-
}
-
-
using std::is_same;
-
-
#define TEST_CMATH_FUNCTION(Fun) \
-
static_assert(is_same<decltype(Fun((float)1)), float>::value, \
-
"cmath error " #Fun "(float)"); \
-
static_assert(is_same<decltype(Fun((double)1)), double>::value, \
-
"cmath error " #Fun "(double)"); \
-
static_assert(is_same<decltype(Fun((long double)1)), long double>::value, \
-
"cmath error " #Fun "(long double)"); \
-
Serial.println(Fun((float)f())); \
-
Serial.println(Fun((double)f())); \
-
Serial.println((double)Fun((long double)f()));
-
-
#define TEST_CMATH_FUNCTION_I(Fun) \
-
TEST_CMATH_FUNCTION(Fun); \
-
static_assert(is_same<decltype(Fun((int)1)), int>::value, \
-
"cmath error " #Fun "(int)"); \
-
Serial.println(Fun((int)f()));
-
-
#define TEST_CMATH_FUNCTION3(Fun) \
-
static_assert( \
-
is_same<decltype(Fun((float)1, (float)1, (float)1)), float>::value, \
-
"cmath error " #Fun "(float)"); \
-
static_assert( \
-
is_same<decltype(Fun((double)1, (double)1, (double)1)), double>::value, \
-
"cmath error " #Fun "(double)"); \
-
static_assert( \
-
is_same<decltype(Fun((long double)1, (long double)1, (long double)1)), \
-
long double>::value, \
-
"cmath error " #Fun "(long double)"); \
-
Serial.println(Fun((float)f(), (float)f(), (float)f())); \
-
Serial.println(Fun((double)f(), (double)f(), (double)f())); \
-
Serial.println( \
-
(double)Fun((long double)f(), (long double)f(), (long double)f()));
-
-
#define TEST_CMATH_FUNCTION2(Fun) \
-
static_assert(is_same<decltype(Fun((float)1, (float)1)), float>::value, \
-
"cmath error " #Fun "(float)"); \
-
static_assert(is_same<decltype(Fun((double)1, (double)1)), double>::value, \
-
"cmath error " #Fun "(double)"); \
-
static_assert(is_same<decltype(Fun((long double)1, (long double)1)), \
-
long double>::value, \
-
"cmath error " #Fun "(long double)"); \
-
Serial.println(Fun((float)f(), (float)f())); \
-
Serial.println(Fun((double)f(), (double)f())); \
-
Serial.println((double)Fun((long double)f(), (long double)f()));
-
-
void setup() {
-
Serial.begin(115200);
-
while (!Serial)
-
;
-
#ifdef __cpp_lib_optional
-
std::optional<int> opt = std::nullopt;
-
opt = 1;
-
Serial.println(*opt);
-
#endif
-
std::bitset<128> bs;
-
bs[0] = 1;
-
bs[2] = 1;
-
Serial << bs << endl;
-
auto ptr = AH::make_unique<std::array<int, 10>>();
-
ptr->operator[](2) = 42;
-
Serial.println(ptr->at(2));
-
-
TEST_CMATH_FUNCTION(std::round);
-
TEST_CMATH_FUNCTION(std::sin);
-
TEST_CMATH_FUNCTION(std::cos);
-
TEST_CMATH_FUNCTION(std::tan);
-
TEST_CMATH_FUNCTION(std::asin);
-
TEST_CMATH_FUNCTION(std::acos);
-
TEST_CMATH_FUNCTION(std::atan);
-
TEST_CMATH_FUNCTION(std::exp);
-
TEST_CMATH_FUNCTION(std::log);
-
TEST_CMATH_FUNCTION(std::log10);
-
-
#ifndef __AVR__
-
TEST_CMATH_FUNCTION(std::asinh);
-
TEST_CMATH_FUNCTION(std::exp2);
-
#endif
-
-
TEST_CMATH_FUNCTION_I(std::abs);
-
-
TEST_CMATH_FUNCTION2(std::hypot);
-
TEST_CMATH_FUNCTION3(std::fma);
-
}
-
-
void loop() {}
-
- -
-
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
Print & endl(Print &printer)
Definition: PrintStream.cpp:27
-
Dummy header file for Arduino builder. You have to add this file first, so the other headers are in t...
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
- - - - diff --git a/docs/Doxygen/df/d62/SettingsWrapper_8hpp__incl.map b/docs/Doxygen/df/d62/SettingsWrapper_8hpp__incl.map deleted file mode 100644 index b0e7bfe63..000000000 --- a/docs/Doxygen/df/d62/SettingsWrapper_8hpp__incl.map +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/df/d62/SettingsWrapper_8hpp__incl.md5 b/docs/Doxygen/df/d62/SettingsWrapper_8hpp__incl.md5 deleted file mode 100644 index 46ac779f4..000000000 --- a/docs/Doxygen/df/d62/SettingsWrapper_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -9d0f2ffcafa4b88a9f9025af4dc87743 \ No newline at end of file diff --git a/docs/Doxygen/df/d62/SettingsWrapper_8hpp__incl.svg b/docs/Doxygen/df/d62/SettingsWrapper_8hpp__incl.svg deleted file mode 100644 index 161308dd0..000000000 --- a/docs/Doxygen/df/d62/SettingsWrapper_8hpp__incl.svg +++ /dev/null @@ -1,225 +0,0 @@ - - - - - - -SettingsWrapper.hpp - - -Node1 - - -SettingsWrapper.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -NamespaceSettings.hpp - - - - -Node1->Node3 - - - - -Node4 - - -Settings.hpp - - - - -Node1->Node4 - - - - -Node11 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node1->Node11 - - - - -Node12 - - -AH/Debug/Debug.hpp - - - - -Node1->Node12 - - - - -Node5 - - -AH/Types/Frequency.hpp - - - - -Node4->Node5 - - - - -Node6 - - -AH/Hardware/ADCConfig.hpp - - - - -Node4->Node6 - - - - -Node8 - - -limits.h - - - - -Node4->Node8 - - - - -Node9 - - -stddef.h - - - - -Node4->Node9 - - - - -Node10 - - -stdint.h - - - - -Node4->Node10 - - - - -Node5->Node2 - - - - -Node5->Node3 - - - - -Node6->Node2 - - - - -Node7 - - -Arduino.h - - - - -Node6->Node7 - - - - -Node12->Node1 - - - - -Node12->Node2 - - - - -Node13 - - -AH/PrintStream/PrintStream.hpp - - - - -Node12->Node13 - - - - -Node14 - - -DebugVal.hpp - - - - -Node12->Node14 - - - - -Node13->Node2 - - - - -Node13->Node7 - - - - - diff --git a/docs/Doxygen/df/d65/Settings_8dox.html b/docs/Doxygen/df/d65/Settings_8dox.html deleted file mode 100644 index c4f5d16c9..000000000 --- a/docs/Doxygen/df/d65/Settings_8dox.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Settings.dox File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
Settings.dox File Reference
-
-
-
- - - - diff --git a/docs/Doxygen/df/d66/Debug_8cpp.html b/docs/Doxygen/df/d66/Debug_8cpp.html deleted file mode 100644 index 7c0aea316..000000000 --- a/docs/Doxygen/df/d66/Debug_8cpp.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - -Arduino Helpers: Debug.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Debug.cpp File Reference
-
-
-
#include "Debug.hpp"
-
-Include dependency graph for Debug.cpp:
-
-
-
-
-

Go to the source code of this file.

-
- - - - diff --git a/docs/Doxygen/df/d66/Debug_8cpp_source.html b/docs/Doxygen/df/d66/Debug_8cpp_source.html deleted file mode 100644 index 7c44c54e7..000000000 --- a/docs/Doxygen/df/d66/Debug_8cpp_source.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -Arduino Helpers: Debug.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Debug.cpp
-
-
-Go to the documentation of this file.
1 #include "Debug.hpp"
-
2 
-
3 #ifdef DEBUG_OUT
-
4 #pragma message("Debugging enabled on output " DEBUG_STR(DEBUG_OUT))
-
5 
-
6 #ifndef ARDUINO
- -
8 const decltype(std::chrono::high_resolution_clock::now()) start_time =
-
9  std::chrono::high_resolution_clock::now();
- -
11 #endif
-
12 
-
13 #endif
-
-
#define BEGIN_AH_NAMESPACE
- -
#define END_AH_NAMESPACE
- - - - diff --git a/docs/Doxygen/df/d9e/2_8RGB-LED-Chaser_8ino-example.html b/docs/Doxygen/df/d9e/2_8RGB-LED-Chaser_8ino-example.html deleted file mode 100644 index 0e463d398..000000000 --- a/docs/Doxygen/df/d9e/2_8RGB-LED-Chaser_8ino-example.html +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - -Arduino Helpers: 2.RGB-LED-Chaser.ino - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
2.RGB-LED-Chaser.ino
-
-
-

-2.RGB-LED-Chaser

-

This is an example of the ShiftRegisterOut class of the Control Surface library. It creates light effects using three 8-bit shift registers and some RGB LEDs.

-
Boards:
AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32
-

-Connections

-

Connect three daisy-chained shift registers to the SPI pins.
- Connect 8 RGB LEDs (+ current limiting resistors) to the outputs of the shift registers.

-
SCK >───────────┬──────────────────────┬──────────────────────┐
-
┏━━━━━━━┷━━━━━━━┓ ┏━━━━━━━┷━━━━━━━┓ ┏━━━━━━━┷━━━━━━━┓
-
┃ SH_CP ┃ ┃ SH_CP ┃ ┃ SH_CP ┃
-
MOSI >───┨ DS Q7S ┠──────┨ DS Q7S ┠──────┨ DS Q7S ┃
-
┃ ST_CP ┃ ┃ ST_CP ┃ ┃ ST_CP ┃
-
┗━━━━━━━┯━━━━━━━┛ ┗━━━━━━━┯━━━━━━━┛ ┗━━━━━━━┯━━━━━━━┛
-
SS >───────────┴──────────────────────┴──────────────────────┘
-

Remember to connect the enable pin of the shift register to ground and the master reset pin to Vcc in order to enable it.
-

-

The order of the colors doesn't matter. You can change them in software using the ShiftRegisterOutRGB::redBit, ShiftRegisterOutRGB::greenBit and ShiftRegisterOutRGB::blueBit constants.

-

If you wired the LEDs as RGB (red first, then green and then blue), the red bit is 0, the green bit is 1 and the blue bit is 2.
- If you wired the LEDs as BGR (blue first, then green and then red), the red bit is 2, the green bit is 1 and the blue bit is 0.
- Other combinations are possible as well.

-

-Behavior

-

This example will turn on all red LEDs one by one, then turn them off one by one, next, it will turn on and off all green LEDs in the same manner, and finally the same for the blue LEDs. This is repeated indefinitely.

-

-Demo

-

- -

-

Written by Pieter P, 2018-07-13
- https://github.com/tttapa/Arduino-Helpers

-
-
#include <Arduino_Helpers.h> // Include the Arduino Helpers library.
- -
-
using namespace ExtIO; // Bring the ExtIO pin functions into your sketch
-
-
// If you wired your LEDs as RGB
-
const uint8_t ShiftRegisterOutRGB::redBit = 0;
- -
const uint8_t ShiftRegisterOutRGB::blueBit = 2;
-
-
// If you wired your LEDs as BGR
-
// const uint8_t ShiftRegisterOutRGB::redBit = 2;
-
// const uint8_t ShiftRegisterOutRGB::greenBit = 1;
-
// const uint8_t ShiftRegisterOutRGB::blueBit = 0;
-
-
// Create a new shift register output connected to pins 11, 13 and 10,
-
// shift the data out with the most significant bit first.
-
// There are 24 (= 3×8) outputs in total.
-
SPIShiftRegisterOut<24> sreg = {SS, MSBFIRST};
-
-
void setup() {
-
// Initialize the shift registers
-
sreg.begin();
-
}
-
-
constexpr unsigned long delayTime = 50;
-
-
void loop() {
-
// Red on
-
for (uint8_t i = 0; i < 8; i++) {
-
digitalWrite(sreg.red(i), HIGH);
-
delay(delayTime);
-
}
-
// Red off
-
for (uint8_t i = 0; i < 8; i++) {
-
digitalWrite(sreg.red(i), LOW);
-
delay(delayTime);
-
}
-
// Green on
-
for (uint8_t i = 0; i < 8; i++) {
-
digitalWrite(sreg.green(i), HIGH);
-
delay(delayTime);
-
}
-
// Green off
-
for (uint8_t i = 0; i < 8; i++) {
-
digitalWrite(sreg.green(i), LOW);
-
delay(delayTime);
-
}
-
// Blue on
-
for (uint8_t i = 0; i < 8; i++) {
-
digitalWrite(sreg.blue(i), HIGH);
-
delay(delayTime);
-
}
-
// Blue off
-
for (uint8_t i = 0; i < 8; i++) {
-
digitalWrite(sreg.blue(i), LOW);
-
delay(delayTime);
-
}
-
}
-
-
void begin() override
Initialize the shift register.
-
pin_t green(pin_t id)
Get the green output pin of the given LED.
-
const static uint8_t redBit
The position of the red output pin for 3-color LEDs.
-
const static uint8_t greenBit
The position of the green output pin for 3-color LEDs.
-
pin_t blue(pin_t id)
Get the blue output pin of the given LED.
-
void digitalWrite(pin_t pin, uint8_t val)
An ExtIO version of the Arduino function.
-
A class for serial-in/parallel-out shift registers, like the 74HC595 that are connected to the SPI bu...
- -
const static uint8_t blueBit
The position of the blue output pin for 3-color LEDs.
-
const uint8_t HIGH
-
const uint8_t LOW
-
A namespace with alternatives to the standard Arduino IO functions that can be used with extended IO ...
-
Dummy header file for Arduino builder. You have to add this file first, so the other headers are in t...
-
pin_t red(pin_t id)
Get the red output pin of the given LED.
- - - - diff --git a/docs/Doxygen/df/d9e/SPIShiftRegisterOut_8hpp__dep__incl.map b/docs/Doxygen/df/d9e/SPIShiftRegisterOut_8hpp__dep__incl.map deleted file mode 100644 index dae9010bb..000000000 --- a/docs/Doxygen/df/d9e/SPIShiftRegisterOut_8hpp__dep__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/df/d9e/SPIShiftRegisterOut_8hpp__dep__incl.md5 b/docs/Doxygen/df/d9e/SPIShiftRegisterOut_8hpp__dep__incl.md5 deleted file mode 100644 index e028b7cf3..000000000 --- a/docs/Doxygen/df/d9e/SPIShiftRegisterOut_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -679c7b3d7f93a6b22bdd6592697c9eaf \ No newline at end of file diff --git a/docs/Doxygen/df/d9e/SPIShiftRegisterOut_8hpp__dep__incl.svg b/docs/Doxygen/df/d9e/SPIShiftRegisterOut_8hpp__dep__incl.svg deleted file mode 100644 index 379c38d78..000000000 --- a/docs/Doxygen/df/d9e/SPIShiftRegisterOut_8hpp__dep__incl.svg +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - -SPIShiftRegisterOut.hpp - - -Node1 - - -SPIShiftRegisterOut.hpp - - - - -Node2 - - -SPIShiftRegisterOut.ipp - - - - -Node1->Node2 - - - - -Node2->Node1 - - - - - diff --git a/docs/Doxygen/df/da2/Numeric_8ino-example.html b/docs/Doxygen/df/da2/Numeric_8ino-example.html deleted file mode 100644 index 189ba9f2a..000000000 --- a/docs/Doxygen/df/da2/Numeric_8ino-example.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - -Arduino Helpers: Numeric.ino - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
Numeric.ino
-
-
-

-Numeric

-

Example of using the standard library numeric functions.

-
Boards:
AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32
-

This sketch creates an incremental array using the iota function, then computes the inner product of the vector with itself, and uses that to calculate the norm of the vector.

-

Output

v = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
-
〈v, v〉 = 385
-
‖v‖ = 19.6214160
-

Written by PieterP, 2019-11-18
- https://github.com/tttapa/Arduino-Helpers

-
- -
-
#include <AH/Containers/Array.hpp> // Array
-
#include <AH/Containers/ArrayHelpers.hpp> // For printing the array
-
#include <AH/STL/cmath> // std::sqrt
-
#include <AH/STL/numeric> // std::iota, std::inner_product
-
-
void setup() {
-
Serial.begin(115200);
-
while (!Serial)
-
;
-
-
// Create an array with the elements [1, 2 ... 9, 10]
- -
std::iota(std::begin(vector), std::end(vector), 1);
-
Serial << "v = [" << vector << ']' << endl;
-
-
// Compute the inner product of vector with itself, with an initial sum of 0
-
int sum_sq = std::inner_product(std::begin(vector), std::end(vector),
-
std::begin(vector), 0);
-
Serial << "〈v, v〉 = " << sum_sq << endl;
-
-
// The 2-norm of a vector is the squareroot of the inner product with itself
-
double norm = std::sqrt(sum_sq);
-
Serial << "‖v‖ = " << setprecision(7) << norm << endl;
-
}
-
-
void loop() {}
-
-
Setprecision setprecision(int n)
-
An array wrapper for easy copying, comparing, and iterating.
Definition: Array.hpp:36
- - -
Print & endl(Print &printer)
Definition: PrintStream.cpp:27
-
Dummy header file for Arduino builder. You have to add this file first, so the other headers are in t...
- - - - diff --git a/docs/Doxygen/df/dae/StaticSizeExtendedIOElement_8hpp__incl.map b/docs/Doxygen/df/dae/StaticSizeExtendedIOElement_8hpp__incl.map deleted file mode 100644 index 303e394ef..000000000 --- a/docs/Doxygen/df/dae/StaticSizeExtendedIOElement_8hpp__incl.map +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/df/dae/StaticSizeExtendedIOElement_8hpp__incl.md5 b/docs/Doxygen/df/dae/StaticSizeExtendedIOElement_8hpp__incl.md5 deleted file mode 100644 index d1026916b..000000000 --- a/docs/Doxygen/df/dae/StaticSizeExtendedIOElement_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -2802516a97889b68de696810dbfd28ba \ No newline at end of file diff --git a/docs/Doxygen/df/dae/StaticSizeExtendedIOElement_8hpp__incl.svg b/docs/Doxygen/df/dae/StaticSizeExtendedIOElement_8hpp__incl.svg deleted file mode 100644 index b2b709689..000000000 --- a/docs/Doxygen/df/dae/StaticSizeExtendedIOElement_8hpp__incl.svg +++ /dev/null @@ -1,493 +0,0 @@ - - - - - - -StaticSizeExtendedIOElement.hpp - - -Node1 - - -StaticSizeExtendedIOElement.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -ExtendedIOElement.hpp - - - - -Node1->Node3 - - - - -Node27 - - -AH/Containers/ArrayHelpers.hpp - - - - -Node1->Node27 - - - - -Node3->Node2 - - - - -Node4 - - -AH/Hardware/Hardware --Types.hpp - - - - -Node3->Node4 - - - - -Node22 - - -AH/Containers/LinkedList.hpp - - - - -Node3->Node22 - - - - -Node4->Node2 - - - - -Node5 - - -AH/Containers/Array.hpp - - - - -Node4->Node5 - - - - -Node11 - - -NamespaceSettings.hpp - - - - -Node4->Node11 - - - - -Node17 - - -stdint.h - - - - -Node4->Node17 - - - - -Node5->Node2 - - - - -Node6 - - -AH/Error/Error.hpp - - - - -Node5->Node6 - - - - -Node16 - - -stddef.h - - - - -Node5->Node16 - - - - -Node20 - - -AH/STL/iterator - - - - -Node5->Node20 - - - - -Node21 - - -AH/STL/type_traits - - - - -Node5->Node21 - - - - -Node6->Node2 - - - - -Node7 - - -AH/Debug/Debug.hpp - - - - -Node6->Node7 - - - - -Node7->Node2 - - - - -Node8 - - -AH/PrintStream/PrintStream.hpp - - - - -Node7->Node8 - - - - -Node10 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node7->Node10 - - - - -Node19 - - -DebugVal.hpp - - - - -Node7->Node19 - - - - -Node8->Node2 - - - - -Node9 - - -Arduino.h - - - - -Node8->Node9 - - - - -Node10->Node2 - - - - -Node10->Node7 - - - - -Node10->Node11 - - - - -Node12 - - -Settings.hpp - - - - -Node10->Node12 - - - - -Node18 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node10->Node18 - - - - -Node13 - - -AH/Types/Frequency.hpp - - - - -Node12->Node13 - - - - -Node14 - - -AH/Hardware/ADCConfig.hpp - - - - -Node12->Node14 - - - - -Node15 - - -limits.h - - - - -Node12->Node15 - - - - -Node12->Node16 - - - - -Node12->Node17 - - - - -Node13->Node2 - - - - -Node13->Node11 - - - - -Node14->Node2 - - - - -Node14->Node9 - - - - -Node22->Node2 - - - - -Node22->Node7 - - - - -Node23 - - -AH/Math/MinMaxFix.hpp - - - - -Node22->Node23 - - - - -Node25 - - -stdlib.h - - - - -Node22->Node25 - - - - -Node26 - - -iterator - - - - -Node22->Node26 - - - - -Node23->Node2 - - - - -Node23->Node11 - - - - -Node24 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node23->Node24 - - - - -Node24->Node2 - - - - -Node24->Node9 - - - - -Node27->Node2 - - - - -Node27->Node5 - - - - -Node27->Node8 - - - - -Node28 - - -AH/STL/algorithm - - - - -Node27->Node28 - - - - - diff --git a/docs/Doxygen/df/db1/Hysteresis_8hpp__incl.map b/docs/Doxygen/df/db1/Hysteresis_8hpp__incl.map deleted file mode 100644 index 92c51eac6..000000000 --- a/docs/Doxygen/df/db1/Hysteresis_8hpp__incl.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/Doxygen/df/db1/Hysteresis_8hpp__incl.md5 b/docs/Doxygen/df/db1/Hysteresis_8hpp__incl.md5 deleted file mode 100644 index 116b67599..000000000 --- a/docs/Doxygen/df/db1/Hysteresis_8hpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -fffb10e9e516b301bdc6eb7aab136ce5 \ No newline at end of file diff --git a/docs/Doxygen/df/db1/Hysteresis_8hpp__incl.svg b/docs/Doxygen/df/db1/Hysteresis_8hpp__incl.svg deleted file mode 100644 index 972ca3f71..000000000 --- a/docs/Doxygen/df/db1/Hysteresis_8hpp__incl.svg +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - -Hysteresis.hpp - - -Node1 - - -Hysteresis.hpp - - - - -Node2 - - -AH/Settings/Warnings.hpp - - - - -Node1->Node2 - - - - -Node3 - - -stdint.h - - - - -Node1->Node3 - - - - - diff --git a/docs/Doxygen/df/db2/classShiftRegisterOutBase-members.html b/docs/Doxygen/df/db2/classShiftRegisterOutBase-members.html deleted file mode 100644 index 816eba0dc..000000000 --- a/docs/Doxygen/df/db2/classShiftRegisterOutBase-members.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - -Arduino Helpers: Member List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
ShiftRegisterOutBase< N > Member List
-
-
- -

This is the complete list of members for ShiftRegisterOutBase< N >, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
analogRead(pin_t pin) override __attribute__((deprecated))ShiftRegisterOutBase< N >inlinevirtual
analogWrite(pin_t pin, analog_t val) override __attribute__((deprecated))ShiftRegisterOutBase< N >inlinevirtual
begin()=0ExtendedIOElementpure virtual
beginAll()ExtendedIOElementstatic
bitOrderShiftRegisterOutBase< N >protected
BitOrder_t typedefShiftRegisterOutBase< N >
blue(pin_t id)ShiftRegisterOutBase< N >
bluePins()ShiftRegisterOutBase< N >
bufferShiftRegisterOutBase< N >protected
digitalRead(pin_t pin) overrideShiftRegisterOutBase< N >virtual
digitalWrite(pin_t pin, uint8_t val) overrideShiftRegisterOutBase< N >virtual
dirtyShiftRegisterOutBase< N >protected
elementsExtendedIOElementprivatestatic
endExtendedIOElementprivate
ExtendedIOElement(pin_t length)ExtendedIOElementprotected
getAll()ExtendedIOElementstatic
getEnd() constExtendedIOElement
getLength() constExtendedIOElement
getStart() constExtendedIOElement
green(pin_t id)ShiftRegisterOutBase< N >
greenPins()ShiftRegisterOutBase< N >
latchPinShiftRegisterOutBase< N >protected
length()StaticSizeExtendedIOElement< N >inlinestatic
nextDoublyLinkable< ExtendedIOElement >protected
offsetExtendedIOElementprivatestatic
operator[](pin_t pin) constExtendedIOElement
pin(pin_t pin) constExtendedIOElement
pinMode(pin_t pin, uint8_t mode) override __attribute__((deprecated))ShiftRegisterOutBase< N >inlinevirtual
pins() constStaticSizeExtendedIOElement< N >inline
previousDoublyLinkable< ExtendedIOElement >protected
red(pin_t id)ShiftRegisterOutBase< N >
redPins()ShiftRegisterOutBase< N >
ShiftRegisterOutBase(pin_t latchPin, BitOrder_t bitOrder)ShiftRegisterOutBase< N >protected
startExtendedIOElementprivate
StaticSizeExtendedIOElement()StaticSizeExtendedIOElement< N >inlineprotected
update()=0ExtendedIOElementpure virtual
~DoublyLinkable()=defaultDoublyLinkable< ExtendedIOElement >protectedvirtual
~ExtendedIOElement()ExtendedIOElementvirtual
- - - - diff --git a/docs/Doxygen/df/db3/SettingsWrapper_8hpp__dep__incl.map b/docs/Doxygen/df/db3/SettingsWrapper_8hpp__dep__incl.map deleted file mode 100644 index 5a38ba8c0..000000000 --- a/docs/Doxygen/df/db3/SettingsWrapper_8hpp__dep__incl.map +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/df/db3/SettingsWrapper_8hpp__dep__incl.md5 b/docs/Doxygen/df/db3/SettingsWrapper_8hpp__dep__incl.md5 deleted file mode 100644 index 5d7706132..000000000 --- a/docs/Doxygen/df/db3/SettingsWrapper_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -e8da778e5adbbc24f956875bac8188f1 \ No newline at end of file diff --git a/docs/Doxygen/df/db3/SettingsWrapper_8hpp__dep__incl.svg b/docs/Doxygen/df/db3/SettingsWrapper_8hpp__dep__incl.svg deleted file mode 100644 index bebf74418..000000000 --- a/docs/Doxygen/df/db3/SettingsWrapper_8hpp__dep__incl.svg +++ /dev/null @@ -1,645 +0,0 @@ - - - - - - -SettingsWrapper.hpp - - -Node1 - - -SettingsWrapper.hpp - - - - -Node2 - - -Updatable.hpp - - - - -Node1->Node2 - - - - -Node3 - - -Debug.hpp - - - - -Node1->Node3 - - - - -Node7 - - -Button.hpp - - - - -Node1->Node7 - - - - -Node23 - - -FilteredAnalog.hpp - - - - -Node1->Node23 - - - - -Node38 - - -ShiftRegisterOutRGB.hpp - - - - -Node1->Node38 - - - - -Node3->Node1 - - - - -Node4 - - -LinkedList.hpp - - - - -Node3->Node4 - - - - -Node31 - - -Debug.cpp - - - - -Node3->Node31 - - - - -Node32 - - -Error.hpp - - - - -Node3->Node32 - - - - -Node4->Node2 - - - - -Node5 - - -ExtendedIOElement.hpp - - - - -Node4->Node5 - - - - -Node6 - - -ExtendedInputOutput.hpp - - - - -Node5->Node6 - - - - -Node16 - - -ExtendedInputOutput.cpp - - - - -Node5->Node16 - - - - -Node29 - - -StaticSizeExtendedIOElement.hpp - - - - -Node5->Node29 - - - - -Node30 - - -ExtendedIOElement.cpp - - - - -Node5->Node30 - - - - -Node6->Node7 - - - - -Node13 - - -ButtonMatrix.ipp - - - - -Node6->Node13 - - - - -Node15 - - -AnalogMultiplex.hpp - - - - -Node6->Node15 - - - - -Node6->Node16 - - - - -Node17 - - -ShiftRegisterOutBase.ipp - - - - -Node6->Node17 - - - - -Node20 - - -ShiftRegisterOut.ipp - - - - -Node6->Node20 - - - - -Node22 - - -SPIShiftRegisterOut.ipp - - - - -Node6->Node22 - - - - -Node6->Node23 - - - - -Node24 - - -LEDs.hpp - - - - -Node6->Node24 - - - - -Node26 - - -MAX7219_Base.hpp - - - - -Node6->Node26 - - - - -Node8 - - -Button.cpp - - - - -Node7->Node8 - - - - -Node9 - - -IncrementButton.hpp - - - - -Node7->Node9 - - - - -Node11 - - -IncrementDecrementButtons.hpp - - - - -Node7->Node11 - - - - -Node10 - - -IncrementButton.cpp - - - - -Node9->Node10 - - - - -Node12 - - -IncrementDecrementButtons.cpp - - - - -Node11->Node12 - - - - -Node14 - - -ButtonMatrix.hpp - - - - -Node13->Node14 - - - - -Node14->Node13 - - - - -Node18 - - -ShiftRegisterOutBase.hpp - - - - -Node17->Node18 - - - - -Node18->Node17 - - - - -Node19 - - -ShiftRegisterOut.hpp - - - - -Node18->Node19 - - - - -Node21 - - -SPIShiftRegisterOut.hpp - - - - -Node18->Node21 - - - - -Node19->Node20 - - - - -Node20->Node19 - - - - -Node21->Node22 - - - - -Node22->Node21 - - - - -Node25 - - -DotBarDisplayLEDs.hpp - - - - -Node24->Node25 - - - - -Node27 - - -MAX7219.hpp - - - - -Node26->Node27 - - - - -Node28 - - -MAX7219SevenSegmentDisplay.hpp - - - - -Node26->Node28 - - - - -Node29->Node15 - - - - -Node29->Node18 - - - - -Node29->Node27 - - - - -Node32->Node2 - - - - -Node32->Node16 - - - - -Node32->Node30 - - - - -Node33 - - -Array.hpp - - - - -Node32->Node33 - - - - -Node36 - - -BitArray.hpp - - - - -Node32->Node36 - - - - -Node37 - - -Exit.cpp - - - - -Node32->Node37 - - - - -Node33->Node15 - - - - -Node34 - - -ArrayHelpers.hpp - - - - -Node33->Node34 - - - - -Node35 - - -Hardware-Types.hpp - - - - -Node33->Node35 - - - - -Node34->Node29 - - - - -Node35->Node5 - - - - -Node35->Node14 - - - - -Node35->Node23 - - - - -Node36->Node18 - - - - -Node36->Node21 - - - - -Node36->Node27 - - - - -Node38->Node17 - - - - -Node39 - - -ShiftRegisterOutRGB.cpp - - - - -Node38->Node39 - - - - - diff --git a/docs/Doxygen/df/db8/LinkedList_8cpp.html b/docs/Doxygen/df/db8/LinkedList_8cpp.html deleted file mode 100644 index d48773367..000000000 --- a/docs/Doxygen/df/db8/LinkedList_8cpp.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: LinkedList.cpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
LinkedList.cpp File Reference
-
- - - - - diff --git a/docs/Doxygen/df/db8/LinkedList_8cpp_source.html b/docs/Doxygen/df/db8/LinkedList_8cpp_source.html deleted file mode 100644 index b2fc34a61..000000000 --- a/docs/Doxygen/df/db8/LinkedList_8cpp_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Arduino Helpers: LinkedList.cpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
LinkedList.cpp
-
-
-Go to the documentation of this file.
1 #ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY
-
2 #include "LinkedList.hpp"
-
3 #endif
-
- - - - - diff --git a/docs/Doxygen/df/ddc/FixArduinoMacros_8hpp__dep__incl.map b/docs/Doxygen/df/ddc/FixArduinoMacros_8hpp__dep__incl.map deleted file mode 100644 index 5180c716d..000000000 --- a/docs/Doxygen/df/ddc/FixArduinoMacros_8hpp__dep__incl.map +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/df/ddc/FixArduinoMacros_8hpp__dep__incl.md5 b/docs/Doxygen/df/ddc/FixArduinoMacros_8hpp__dep__incl.md5 deleted file mode 100644 index 56a4d7de6..000000000 --- a/docs/Doxygen/df/ddc/FixArduinoMacros_8hpp__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -826795d1b53c360da1f184ba52bbbe8c \ No newline at end of file diff --git a/docs/Doxygen/df/ddc/FixArduinoMacros_8hpp__dep__incl.svg b/docs/Doxygen/df/ddc/FixArduinoMacros_8hpp__dep__incl.svg deleted file mode 100644 index 4468046c7..000000000 --- a/docs/Doxygen/df/ddc/FixArduinoMacros_8hpp__dep__incl.svg +++ /dev/null @@ -1,453 +0,0 @@ - - - - - - -FixArduinoMacros.hpp - - -Node1 - - -FixArduinoMacros.hpp - - - - -Node2 - - -MinMaxFix.hpp - - - - -Node1->Node2 - - - - -Node3 - - -LinkedList.hpp - - - - -Node2->Node3 - - - - -Node23 - - -FilteredAnalog.hpp - - - - -Node2->Node23 - - - - -Node4 - - -Updatable.hpp - - - - -Node3->Node4 - - - - -Node5 - - -ExtendedIOElement.hpp - - - - -Node3->Node5 - - - - -Node6 - - -ExtendedInputOutput.hpp - - - - -Node5->Node6 - - - - -Node16 - - -ExtendedInputOutput.cpp - - - - -Node5->Node16 - - - - -Node29 - - -StaticSizeExtendedIOElement.hpp - - - - -Node5->Node29 - - - - -Node30 - - -ExtendedIOElement.cpp - - - - -Node5->Node30 - - - - -Node7 - - -Button.hpp - - - - -Node6->Node7 - - - - -Node13 - - -ButtonMatrix.ipp - - - - -Node6->Node13 - - - - -Node15 - - -AnalogMultiplex.hpp - - - - -Node6->Node15 - - - - -Node6->Node16 - - - - -Node17 - - -ShiftRegisterOutBase.ipp - - - - -Node6->Node17 - - - - -Node20 - - -ShiftRegisterOut.ipp - - - - -Node6->Node20 - - - - -Node22 - - -SPIShiftRegisterOut.ipp - - - - -Node6->Node22 - - - - -Node6->Node23 - - - - -Node24 - - -LEDs.hpp - - - - -Node6->Node24 - - - - -Node26 - - -MAX7219_Base.hpp - - - - -Node6->Node26 - - - - -Node8 - - -Button.cpp - - - - -Node7->Node8 - - - - -Node9 - - -IncrementButton.hpp - - - - -Node7->Node9 - - - - -Node11 - - -IncrementDecrementButtons.hpp - - - - -Node7->Node11 - - - - -Node10 - - -IncrementButton.cpp - - - - -Node9->Node10 - - - - -Node12 - - -IncrementDecrementButtons.cpp - - - - -Node11->Node12 - - - - -Node14 - - -ButtonMatrix.hpp - - - - -Node13->Node14 - - - - -Node14->Node13 - - - - -Node18 - - -ShiftRegisterOutBase.hpp - - - - -Node17->Node18 - - - - -Node18->Node17 - - - - -Node19 - - -ShiftRegisterOut.hpp - - - - -Node18->Node19 - - - - -Node21 - - -SPIShiftRegisterOut.hpp - - - - -Node18->Node21 - - - - -Node19->Node20 - - - - -Node20->Node19 - - - - -Node21->Node22 - - - - -Node22->Node21 - - - - -Node25 - - -DotBarDisplayLEDs.hpp - - - - -Node24->Node25 - - - - -Node27 - - -MAX7219.hpp - - - - -Node26->Node27 - - - - -Node28 - - -MAX7219SevenSegmentDisplay.hpp - - - - -Node26->Node28 - - - - -Node29->Node15 - - - - -Node29->Node18 - - - - -Node29->Node27 - - - - - diff --git a/docs/Doxygen/df/de0/classArraySlice.html b/docs/Doxygen/df/de0/classArraySlice.html deleted file mode 100644 index 7d3554cc9..000000000 --- a/docs/Doxygen/df/de0/classArraySlice.html +++ /dev/null @@ -1,430 +0,0 @@ - - - - - - - -Arduino Helpers: ArraySlice< T, N, Reverse, Const > Class Template Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- -
-
- -
-
ArraySlice< T, N, Reverse, Const > Class Template Reference
-
-
- -

Class for a view on a slice of an array. - More...

- -

#include <Array.hpp>

-
-Collaboration diagram for ArraySlice< T, N, Reverse, Const >:
-
-
-
- - - - -

-Classes

class  Iterator
 
- - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 ArraySlice (ElementPtrType array)
 Constructor. More...
 
 operator Array< T, N > () const
 Implicit conversion from slice to new array (creates a copy). More...
 
Array< T, N > asArray () const
 
ElementRefType operator[] (size_t index) const
 Get the element at the given index. More...
 
Iterator begin () const
 
Iterator end () const
 
template<size_t Start, size_t End>
ArraySlice< T, abs_diff(End, Start)+1, Reverse ^(End< Start), Const > slice () const
 
- - - - - -

-Private Types

using ElementRefType = typename std::conditional< Const, const T &, T & >::type
 
using ElementPtrType = typename std::conditional< Const, const T *, T * >::type
 
- - - -

-Private Attributes

ElementPtrType array
 
-

Detailed Description

-

template<class T, size_t N, bool Reverse = false, bool Const = true>
-class ArraySlice< T, N, Reverse, Const >

- -

Class for a view on a slice of an array.

-

Doesn't copy the contents of the array, it's just a reference to the original array.

-
Template Parameters
- - - - - -
TThe type of elements of the Array.
NThe size of the slice.
ReverseWhether the slice is reversed or not.
ConstWhether to save a read-only or mutable reference to the Array.
-
-
- -

Definition at line 25 of file Array.hpp.

-

Member Typedef Documentation

- -

◆ ElementRefType

- -
-
- - - - - -
- - - - -
using ElementRefType = typename std::conditional<Const, const T &, T &>::type
-
-private
-
- -

Definition at line 170 of file Array.hpp.

- -
-
- -

◆ ElementPtrType

- -
-
- - - - - -
- - - - -
using ElementPtrType = typename std::conditional<Const, const T *, T *>::type
-
-private
-
- -

Definition at line 172 of file Array.hpp.

- -
-
-

Constructor & Destructor Documentation

- -

◆ ArraySlice()

- -
-
- - - - - -
- - - - - - - - -
ArraySlice (ElementPtrType array)
-
-inline
-
- -

Constructor.

- -

Definition at line 176 of file Array.hpp.

- -
-
-

Member Function Documentation

- -

◆ operator Array< T, N >()

- -
-
- - - - - -
- - - - - - - -
operator Array< T, N > () const
-
-inline
-
- -

Implicit conversion from slice to new array (creates a copy).

- -

Definition at line 179 of file Array.hpp.

- -
-
- -

◆ asArray()

- -
-
- - - - - -
- - - - - - - -
Array<T, N> asArray () const
-
-inline
-
- -

Definition at line 181 of file Array.hpp.

- -
-
- -

◆ operator[]()

- -
-
- - - - - -
- - - - - - - - -
ElementRefType operator[] (size_t index) const
-
-inline
-
- -

Get the element at the given index.

-
Note
Bounds checking is performed. If fatal errors are disabled, the last element is returned if the index is out of bounds.
-
Parameters
- - -
indexThe (zero-based) index of the element to return.
-
-
- -

Definition at line 242 of file Array.hpp.

- -
-
- -

◆ begin()

- -
-
- - - - - -
- - - - - - - -
Iterator begin () const
-
-inline
-
- -

Definition at line 253 of file Array.hpp.

- -
-
- -

◆ end()

- -
-
- - - - - -
- - - - - - - -
Iterator end () const
-
-inline
-
- -

Definition at line 260 of file Array.hpp.

- -
-
- -

◆ slice()

- -
-
- - - - - - - -
ArraySlice<T, abs_diff(End, Start) + 1, Reverse ^ (End < Start), Const> slice () const
-
- -
-
-

Member Data Documentation

- -

◆ array

- -
-
- - - - - -
- - - - -
ElementPtrType array
-
-private
-
- -

Definition at line 272 of file Array.hpp.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/docs/Doxygen/df/de8/Button_8cpp__incl.map b/docs/Doxygen/df/de8/Button_8cpp__incl.map deleted file mode 100644 index ae171eb02..000000000 --- a/docs/Doxygen/df/de8/Button_8cpp__incl.map +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/df/de8/Button_8cpp__incl.md5 b/docs/Doxygen/df/de8/Button_8cpp__incl.md5 deleted file mode 100644 index 4f6d36c35..000000000 --- a/docs/Doxygen/df/de8/Button_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -56d08139b30cb5cd2b2d4fd58b9254b5 \ No newline at end of file diff --git a/docs/Doxygen/df/de8/Button_8cpp__incl.svg b/docs/Doxygen/df/de8/Button_8cpp__incl.svg deleted file mode 100644 index db02a087e..000000000 --- a/docs/Doxygen/df/de8/Button_8cpp__incl.svg +++ /dev/null @@ -1,494 +0,0 @@ - - - - - - -Button.cpp - - -Node1 - - -Button.cpp - - - - -Node2 - - -Button.hpp - - - - -Node1->Node2 - - - - -Node3 - - -AH/Settings/Warnings.hpp - - - - -Node2->Node3 - - - - -Node4 - - -AH/Hardware/ExtendedInput -Output/ExtendedInputOutput.hpp - - - - -Node2->Node4 - - - - -Node12 - - -AH/Settings/SettingsWrapper.hpp - - - - -Node2->Node12 - - - - -Node4->Node3 - - - - -Node5 - - -Arduino.h - - - - -Node4->Node5 - - - - -Node6 - - -ExtendedIOElement.hpp - - - - -Node4->Node6 - - - - -Node6->Node3 - - - - -Node7 - - -AH/Hardware/Hardware --Types.hpp - - - - -Node6->Node7 - - - - -Node24 - - -AH/Containers/LinkedList.hpp - - - - -Node6->Node24 - - - - -Node7->Node3 - - - - -Node8 - - -AH/Containers/Array.hpp - - - - -Node7->Node8 - - - - -Node13 - - -NamespaceSettings.hpp - - - - -Node7->Node13 - - - - -Node19 - - -stdint.h - - - - -Node7->Node19 - - - - -Node8->Node3 - - - - -Node9 - - -AH/Error/Error.hpp - - - - -Node8->Node9 - - - - -Node18 - - -stddef.h - - - - -Node8->Node18 - - - - -Node22 - - -AH/STL/iterator - - - - -Node8->Node22 - - - - -Node23 - - -AH/STL/type_traits - - - - -Node8->Node23 - - - - -Node9->Node3 - - - - -Node10 - - -AH/Debug/Debug.hpp - - - - -Node9->Node10 - - - - -Node10->Node3 - - - - -Node11 - - -AH/PrintStream/PrintStream.hpp - - - - -Node10->Node11 - - - - -Node10->Node12 - - - - -Node21 - - -DebugVal.hpp - - - - -Node10->Node21 - - - - -Node11->Node3 - - - - -Node11->Node5 - - - - -Node12->Node3 - - - - -Node12->Node10 - - - - -Node12->Node13 - - - - -Node14 - - -Settings.hpp - - - - -Node12->Node14 - - - - -Node20 - - -AH/Teensy/TeensyUSBTypes.hpp - - - - -Node12->Node20 - - - - -Node15 - - -AH/Types/Frequency.hpp - - - - -Node14->Node15 - - - - -Node16 - - -AH/Hardware/ADCConfig.hpp - - - - -Node14->Node16 - - - - -Node17 - - -limits.h - - - - -Node14->Node17 - - - - -Node14->Node18 - - - - -Node14->Node19 - - - - -Node15->Node3 - - - - -Node15->Node13 - - - - -Node16->Node3 - - - - -Node16->Node5 - - - - -Node24->Node3 - - - - -Node24->Node10 - - - - -Node25 - - -AH/Math/MinMaxFix.hpp - - - - -Node24->Node25 - - - - -Node27 - - -stdlib.h - - - - -Node24->Node27 - - - - -Node28 - - -iterator - - - - -Node24->Node28 - - - - -Node25->Node3 - - - - -Node25->Node13 - - - - -Node26 - - -AH/Math/FixArduinoMacros.hpp - - - - -Node25->Node26 - - - - -Node26->Node3 - - - - -Node26->Node5 - - - - - diff --git a/docs/Doxygen/df/dee/Debug_8hpp.html b/docs/Doxygen/df/dee/Debug_8hpp.html deleted file mode 100644 index aa011a7e6..000000000 --- a/docs/Doxygen/df/dee/Debug_8hpp.html +++ /dev/null @@ -1,250 +0,0 @@ - - - - - - - -Arduino Helpers: Debug.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
Debug.hpp File Reference
-
-
-
-Include dependency graph for Debug.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Macros

#define FLUSH_ON_EVERY_DEBUG_STATEMENT   0
 Should the output stream be flushed after each debug statement? Enabling this feature can slow things down significantly, and is not supported on ESP32 / ESP8266. More...
 
#define DEBUG_ENDL   "\r\n"
 
#define DEBUG_STR_HELPER(x)   #x
 
#define DEBUG_STR(x)   DEBUG_STR_HELPER(x)
 
#define DEBUG_FUNC_LOCATION   '[' << __PRETTY_FUNCTION__ << F(" @ line " DEBUG_STR(__LINE__) "]:\t")
 
#define DEBUG_LOCATION   "[" __FILE__ ":" DEBUG_STR(__LINE__) "]:\t"
 
#define NAMEDVALUE(x)   F(DEBUG_STR(x) " = ") << x
 Macro for printing an expression as a string, followed by its value. More...
 
#define DEBUG(x)
 Print an expression to the debug output if debugging is enabled. More...
 
#define DEBUGREF(x)
 Print an expression and its location (file and line number) to the debug output if debugging is enabled. More...
 
#define DEBUGFN(x)
 Print an expression and its function (function name and line number) to the debug output if debugging is enabled. More...
 
#define DEBUGTIME(x)
 Print an expression and the time since startup to the debug output if debugging is enabled. More...
 
#define DEBUGVAL(...)   DEBUGVALN(COUNT(__VA_ARGS__))(__VA_ARGS__)
 Print multiple expressions and their values to the debug output if debugging is enabled. More...
 
-

Macro Definition Documentation

- -

◆ FLUSH_ON_EVERY_DEBUG_STATEMENT

- -
-
- - - - -
#define FLUSH_ON_EVERY_DEBUG_STATEMENT   0
-
- -

Should the output stream be flushed after each debug statement? Enabling this feature can slow things down significantly, and is not supported on ESP32 / ESP8266.

-
Todo:
I should probably use Streams instead of Prints, so Espressif boards can flush as well.
- -

Definition at line 20 of file Debug.hpp.

- -
-
- -

◆ DEBUG_ENDL

- -
-
- - - - -
#define DEBUG_ENDL   "\r\n"
-
- -

Definition at line 48 of file Debug.hpp.

- -
-
- -

◆ DEBUG_STR_HELPER

- -
-
- - - - - - - - -
#define DEBUG_STR_HELPER( x)   #x
-
- -

Definition at line 57 of file Debug.hpp.

- -
-
- -

◆ DEBUG_STR

- -
-
- - - - - - - - -
#define DEBUG_STR( x)   DEBUG_STR_HELPER(x)
-
- -

Definition at line 58 of file Debug.hpp.

- -
-
- -

◆ DEBUG_FUNC_LOCATION

- -
-
- - - - -
#define DEBUG_FUNC_LOCATION   '[' << __PRETTY_FUNCTION__ << F(" @ line " DEBUG_STR(__LINE__) "]:\t")
-
- -

Definition at line 60 of file Debug.hpp.

- -
-
- -

◆ DEBUG_LOCATION

- -
-
- - - - -
#define DEBUG_LOCATION   "[" __FILE__ ":" DEBUG_STR(__LINE__) "]:\t"
-
- -

Definition at line 62 of file Debug.hpp.

- -
-
-
- - - - diff --git a/docs/Doxygen/df/dee/Debug_8hpp_source.html b/docs/Doxygen/df/dee/Debug_8hpp_source.html deleted file mode 100644 index 6dfb357e5..000000000 --- a/docs/Doxygen/df/dee/Debug_8hpp_source.html +++ /dev/null @@ -1,238 +0,0 @@ - - - - - - - -Arduino Helpers: Debug.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Debug.hpp
-
-
-Go to the documentation of this file.
1 #pragma once
-
2 
-
4 
- -
6 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
7 
-
8 #include <AH/PrintStream/PrintStream.hpp>
- -
10 
-
11 #ifndef FLUSH_ON_EVERY_DEBUG_STATEMENT
-
12 #if !(defined(ESP32) || defined(ESP8266))
-
13 
-
20 #define FLUSH_ON_EVERY_DEBUG_STATEMENT 0
-
21 
-
22 #else
-
23 
-
24 #define FLUSH_ON_EVERY_DEBUG_STATEMENT 0
-
25 
-
26 #endif
-
27 #endif
-
28 
-
29 // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
30 
-
31 #ifdef ARDUINO
-
32 
-
33 // Uncomment this line to override Arduino debug output
-
34 // #define DEBUG_OUT Serial
-
35 
-
36 #else
-
37 
-
38 // Uncomment this line to override PC tests debug output
-
39 // #define DEBUG_OUT std::cout
-
40 
-
41 #endif
-
42 
-
43 // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
44 
-
45 #if FLUSH_ON_EVERY_DEBUG_STATEMENT
-
46 #define DEBUG_ENDL endl
-
47 #else
-
48 #define DEBUG_ENDL "\r\n"
-
49 #endif
-
50 
-
51 #if (defined(ESP32) || defined(ESP8266)) && FLUSH_ON_EVERY_DEBUG_STATEMENT
-
52 #error "ESP32 and ESP8266 don't support flushing `Print` objects"
-
53 #endif
-
54 
-
55 // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
56 
-
57 #define DEBUG_STR_HELPER(x) #x
-
58 #define DEBUG_STR(x) DEBUG_STR_HELPER(x)
-
59 
-
60 #define DEBUG_FUNC_LOCATION \
-
61  '[' << __PRETTY_FUNCTION__ << F(" @ line " DEBUG_STR(__LINE__) "]:\t")
-
62 #define DEBUG_LOCATION "[" __FILE__ ":" DEBUG_STR(__LINE__) "]:\t"
-
63 
-
64 // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
65 
-
69 #define NAMEDVALUE(x) F(DEBUG_STR(x) " = ") << x
-
70 
-
71 #ifdef DEBUG_OUT // Debugging enabled ==========================================
-
72 
-
75 #define DEBUG(x) \
-
76  do { \
-
77  DEBUG_OUT << x << DEBUG_ENDL; \
-
78  } while (0)
-
79 
-
84 #define DEBUGREF(x) \
-
85  do { \
-
86  DEBUG_OUT << F(DEBUG_LOCATION) << x << DEBUG_ENDL; \
-
87  } while (0)
-
88 
-
93 #define DEBUGFN(x) \
-
94  do { \
-
95  DEBUG_OUT << DEBUG_FUNC_LOCATION << x << DEBUG_ENDL; \
-
96  } while (0)
-
97 
-
98 #ifdef ARDUINO
-
99 
-
104 #define DEBUGTIME(x) \
-
105  do { \
-
106  unsigned long t = millis(); \
-
107  unsigned long h = t / (60UL * 60 * 1000); \
-
108  unsigned long m = (t / (60UL * 1000)) % 60; \
-
109  unsigned long s = (t / (1000UL)) % 60; \
-
110  unsigned long ms = t % 1000; \
-
111  const char *ms_zeros = ms > 99 ? "" : (ms > 9 ? "0" : "00"); \
-
112  DEBUG_OUT << '[' << h << ':' << m << ':' << s << '.' << ms_zeros << ms \
-
113  << "]:\t" << x << DEBUG_ENDL; \
-
114  } while (0)
-
115 
-
116 #else // !ARDUINO
-
117 
-
118 #include <chrono>
-
119 
- -
121 extern const decltype(std::chrono::high_resolution_clock::now()) start_time;
- -
123 
-
124 #define DEBUGTIME(x) \
-
125  do { \
-
126  USING_AH_NAMESPACE; \
-
127  using namespace std::chrono; \
-
128  auto now = high_resolution_clock::now(); \
-
129  unsigned long t = \
-
130  duration_cast<milliseconds>(now - start_time).count(); \
-
131  unsigned long h = t / (60UL * 60 * 1000); \
-
132  unsigned long m = (t / (60UL * 1000)) % 60; \
-
133  unsigned long s = (t / (1000UL)) % 60; \
-
134  unsigned long ms = t % 1000; \
-
135  const char *ms_zeros = ms > 99 ? "" : (ms > 9 ? "0" : "00"); \
-
136  DEBUG_OUT << '[' << h << ':' << m << ':' << s << '.' << ms_zeros << ms \
-
137  << "]:\t" << x << DEBUG_ENDL; \
-
138  } while (0)
-
139 
-
140 #endif // ARDUINO
-
141 
-
142 #include "DebugVal.hpp"
-
143 
-
151 #define DEBUGVAL(...) DEBUGVALN(COUNT(__VA_ARGS__))(__VA_ARGS__)
-
152 
-
153 #else // Debugging disabled ====================================================
-
154 
-
155 #define DEBUG(x) \
-
156  do { \
-
157  } while (0)
-
158 #define DEBUGREF(x) \
-
159  do { \
-
160  } while (0)
-
161 #define DEBUGFN(x) \
-
162  do { \
-
163  } while (0)
-
164 #define DEBUGTIME(x) \
-
165  do { \
-
166  } while (0)
-
167 #define DEBUGVAL(...) \
-
168  do { \
-
169  } while (0)
-
170 
-
171 #endif
-
172 
- -
-
#define BEGIN_AH_NAMESPACE
- -
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
#define END_AH_NAMESPACE
- - - - - - diff --git a/docs/Doxygen/df/df5/IncrementDecrementButtons_8hpp.html b/docs/Doxygen/df/df5/IncrementDecrementButtons_8hpp.html deleted file mode 100644 index 6aa10ae74..000000000 --- a/docs/Doxygen/df/df5/IncrementDecrementButtons_8hpp.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -Arduino Helpers: IncrementDecrementButtons.hpp File Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
IncrementDecrementButtons.hpp File Reference
-
-
-
#include <AH/Settings/Warnings.hpp>
-#include "Button.hpp"
-
-Include dependency graph for IncrementDecrementButtons.hpp:
-
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
-
-
-

Go to the source code of this file.

- - - - - -

-Classes

class  IncrementDecrementButtons
 A class for buttons that increment and decrement some counter or setting. More...
 
-
- - - - diff --git a/docs/Doxygen/df/df5/IncrementDecrementButtons_8hpp_source.html b/docs/Doxygen/df/df5/IncrementDecrementButtons_8hpp_source.html deleted file mode 100644 index 8c0e69f58..000000000 --- a/docs/Doxygen/df/df5/IncrementDecrementButtons_8hpp_source.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - -Arduino Helpers: IncrementDecrementButtons.hpp Source File - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
IncrementDecrementButtons.hpp
-
-
-Go to the documentation of this file.
1 /* ✔ */
-
2 
-
3 #pragma once
-
4 
- -
6 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
-
7 
-
8 #include "Button.hpp"
-
9 
- -
11 
- -
26  public:
- -
38  const Button &decrementButton)
- -
40 
-
42  void begin() {
- - -
45  }
-
46 
-
52  enum State {
-
53  Nothing = 0,
- - - -
57  };
-
58 
- -
63 
-
70  State getState() const { return state; }
-
71 
-
72 #ifdef AH_INDIVIDUAL_BUTTON_INVERT
-
73  void invert() {
- - -
77  }
-
78 #endif
-
79 
-
80  protected:
- -
82 
-
83  private:
- - -
86 
-
87  enum {
- - - - -
92  unsigned long longPressRepeat;
- -
94 };
-
95 
- -
97 
- -
-
#define BEGIN_AH_NAMESPACE
- - -
State update()
Update and return the state of the increment/decrement button.
- - -
A class for reading and debouncing buttons and switches.
Definition: Button.hpp:18
-
State
An enumeration of the different actions to be performed by the counter.
- -
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
- -
IncrementDecrementButtons(const Button &incrementButton, const Button &decrementButton)
Create a IncrementDecrementButtons object.
- -
The counter should be reset to the initial value.
-
enum IncrementDecrementButtons::@1 longPressState
- -
void begin()
Initialize (enable the internal pull-up resistor).
Definition: Button.cpp:11
- -
A class for buttons that increment and decrement some counter or setting.
-
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
-
AH_INDIVIDUAL_BUTTON_INVERT_STATIC void invert()
Invert the state of all buttons, or of this specific button (button pressed is HIGH instead of LOW).
Definition: Button.cpp:13
- -
#define END_AH_NAMESPACE
-
The counter should not be incremented.
-
State getState() const
Return the state of the increment/decrement button without updating it.
-
The counter should be incremented.
-
The counter should be decremented.
- - - - diff --git a/docs/Doxygen/df/dfb/classDoublyLinkedList__coll__graph.map b/docs/Doxygen/df/dfb/classDoublyLinkedList__coll__graph.map deleted file mode 100644 index b0ae46cde..000000000 --- a/docs/Doxygen/df/dfb/classDoublyLinkedList__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/df/dfb/classDoublyLinkedList__coll__graph.md5 b/docs/Doxygen/df/dfb/classDoublyLinkedList__coll__graph.md5 deleted file mode 100644 index 7b5ff8be7..000000000 --- a/docs/Doxygen/df/dfb/classDoublyLinkedList__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -a87bd674f0fb547abf669b40f7780494 \ No newline at end of file diff --git a/docs/Doxygen/df/dfb/classDoublyLinkedList__coll__graph.svg b/docs/Doxygen/df/dfb/classDoublyLinkedList__coll__graph.svg deleted file mode 100644 index 72204bc02..000000000 --- a/docs/Doxygen/df/dfb/classDoublyLinkedList__coll__graph.svg +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - -DoublyLinkedList< Node > - - -Node1 - - -DoublyLinkedList< Node > - - - -+ append() -+ append() -+ insertBefore() -+ insertBefore() -+ insertSorted() -+ insertSorted() -+ remove() -+ remove() -+ moveDown() -+ couldContain() -+ begin() -+ end() -+ begin() -+ end() -+ rbegin() -+ rend() -+ rbegin() -+ rend() -+ getFirst() -+ getLast() - - - - -Node2 - - -Node - - - - - - - - -Node2->Node1 - - - -last --first - - - diff --git a/docs/Doxygen/dir_000002_000003.html b/docs/Doxygen/dir_000002_000003.html deleted file mode 100644 index 02cefeaa7..000000000 --- a/docs/Doxygen/dir_000002_000003.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Hardware -> ExtendedInputOutput Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

Hardware → ExtendedInputOutput Relation

File in src/AH/HardwareIncludes file in src/AH/Hardware/ExtendedInputOutput
Button.hppExtendedInputOutput.hpp
ButtonMatrix.ippExtendedInputOutput.hpp
FilteredAnalog.hppExtendedInputOutput.hpp
LEDs / LEDs.hppExtendedInputOutput.hpp
LEDs / MAX7219_Base.hppExtendedInputOutput.hpp
- - - - diff --git a/docs/Doxygen/dir_000002_000004.html b/docs/Doxygen/dir_000002_000004.html deleted file mode 100644 index d3195ec50..000000000 --- a/docs/Doxygen/dir_000002_000004.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Hardware -> Containers Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
- - - - - diff --git a/docs/Doxygen/dir_000002_000008.html b/docs/Doxygen/dir_000002_000008.html deleted file mode 100644 index bdff41577..000000000 --- a/docs/Doxygen/dir_000002_000008.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Hardware -> Filters Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

Hardware → Filters Relation

File in src/AH/HardwareIncludes file in src/AH/Filters
FilteredAnalog.hppEMA.hpp
FilteredAnalog.hppHysteresis.hpp
- - - - diff --git a/docs/Doxygen/dir_000002_000009.html b/docs/Doxygen/dir_000002_000009.html deleted file mode 100644 index 3fc1a19ca..000000000 --- a/docs/Doxygen/dir_000002_000009.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Hardware -> Error Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

Hardware → Error Relation

File in src/AH/HardwareIncludes file in src/AH/Error
ExtendedInputOutput / ExtendedInputOutput.cppError.hpp
ExtendedInputOutput / ExtendedIOElement.cppError.hpp
- - - - diff --git a/docs/Doxygen/dir_000002_000011.html b/docs/Doxygen/dir_000002_000011.html deleted file mode 100644 index c77eb9f5f..000000000 --- a/docs/Doxygen/dir_000002_000011.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Hardware -> Math Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

Hardware → Math Relation

File in src/AH/HardwareIncludes file in src/AH/Math
FilteredAnalog.hppIncreaseBitDepth.hpp
FilteredAnalog.hppMinMaxFix.hpp
- - - - diff --git a/docs/Doxygen/dir_000002_000014.html b/docs/Doxygen/dir_000002_000014.html deleted file mode 100644 index 27ed7c176..000000000 --- a/docs/Doxygen/dir_000002_000014.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Hardware -> Settings Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
- - - - - diff --git a/docs/Doxygen/dir_000003_000004.html b/docs/Doxygen/dir_000003_000004.html deleted file mode 100644 index c2db2fe91..000000000 --- a/docs/Doxygen/dir_000003_000004.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: ExtendedInputOutput -> Containers Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
- - - - - diff --git a/docs/Doxygen/dir_000003_000007.html b/docs/Doxygen/dir_000003_000007.html deleted file mode 100644 index bfbf3d2c2..000000000 --- a/docs/Doxygen/dir_000003_000007.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: ExtendedInputOutput -> LEDs Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

ExtendedInputOutput → LEDs Relation

File in src/AH/Hardware/ExtendedInputOutputIncludes file in src/AH/Hardware/LEDs
MAX7219.hppMAX7219_Base.hpp
- - - - diff --git a/docs/Doxygen/dir_000003_000009.html b/docs/Doxygen/dir_000003_000009.html deleted file mode 100644 index 2b245fb4a..000000000 --- a/docs/Doxygen/dir_000003_000009.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: ExtendedInputOutput -> Error Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

ExtendedInputOutput → Error Relation

File in src/AH/Hardware/ExtendedInputOutputIncludes file in src/AH/Error
ExtendedInputOutput.cppError.hpp
ExtendedIOElement.cppError.hpp
- - - - diff --git a/docs/Doxygen/dir_000003_000014.html b/docs/Doxygen/dir_000003_000014.html deleted file mode 100644 index 73b4c46ea..000000000 --- a/docs/Doxygen/dir_000003_000014.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: ExtendedInputOutput -> Settings Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
- - - - - diff --git a/docs/Doxygen/dir_000004_000005.html b/docs/Doxygen/dir_000004_000005.html deleted file mode 100644 index d539c58f8..000000000 --- a/docs/Doxygen/dir_000004_000005.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Containers -> Debug Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

Containers → Debug Relation

File in src/AH/ContainersIncludes file in src/AH/Debug
LinkedList.hppDebug.hpp
- - - - diff --git a/docs/Doxygen/dir_000004_000009.html b/docs/Doxygen/dir_000004_000009.html deleted file mode 100644 index 6c3b493e4..000000000 --- a/docs/Doxygen/dir_000004_000009.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Containers -> Error Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

Containers → Error Relation

File in src/AH/ContainersIncludes file in src/AH/Error
Array.hppError.hpp
BitArray.hppError.hpp
Updatable.hppError.hpp
- - - - diff --git a/docs/Doxygen/dir_000004_000011.html b/docs/Doxygen/dir_000004_000011.html deleted file mode 100644 index a8f49da45..000000000 --- a/docs/Doxygen/dir_000004_000011.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Containers -> Math Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

Containers → Math Relation

File in src/AH/ContainersIncludes file in src/AH/Math
LinkedList.hppMinMaxFix.hpp
- - - - diff --git a/docs/Doxygen/dir_000004_000014.html b/docs/Doxygen/dir_000004_000014.html deleted file mode 100644 index 66c2efb17..000000000 --- a/docs/Doxygen/dir_000004_000014.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Containers -> Settings Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
- - - - - diff --git a/docs/Doxygen/dir_000004_000015.html b/docs/Doxygen/dir_000004_000015.html deleted file mode 100644 index 1927b28a4..000000000 --- a/docs/Doxygen/dir_000004_000015.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Containers -> PrintStream Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

Containers → PrintStream Relation

File in src/AH/ContainersIncludes file in src/AH/PrintStream
ArrayHelpers.hppPrintStream.hpp
- - - - diff --git a/docs/Doxygen/dir_000005_000014.html b/docs/Doxygen/dir_000005_000014.html deleted file mode 100644 index 5637e65ce..000000000 --- a/docs/Doxygen/dir_000005_000014.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Debug -> Settings Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

Debug → Settings Relation

File in src/AH/DebugIncludes file in src/AH/Settings
Debug.hppSettingsWrapper.hpp
Debug.hppWarnings.hpp
- - - - diff --git a/docs/Doxygen/dir_000005_000015.html b/docs/Doxygen/dir_000005_000015.html deleted file mode 100644 index 29d87414c..000000000 --- a/docs/Doxygen/dir_000005_000015.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Debug -> PrintStream Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

Debug → PrintStream Relation

File in src/AH/DebugIncludes file in src/AH/PrintStream
Debug.hppPrintStream.hpp
- - - - diff --git a/docs/Doxygen/dir_000007_000003.html b/docs/Doxygen/dir_000007_000003.html deleted file mode 100644 index 1f8eda688..000000000 --- a/docs/Doxygen/dir_000007_000003.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: LEDs -> ExtendedInputOutput Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

LEDs → ExtendedInputOutput Relation

File in src/AH/Hardware/LEDsIncludes file in src/AH/Hardware/ExtendedInputOutput
LEDs.hppExtendedInputOutput.hpp
MAX7219_Base.hppExtendedInputOutput.hpp
- - - - diff --git a/docs/Doxygen/dir_000007_000014.html b/docs/Doxygen/dir_000007_000014.html deleted file mode 100644 index 66a3df29d..000000000 --- a/docs/Doxygen/dir_000007_000014.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: LEDs -> Settings Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

LEDs → Settings Relation

File in src/AH/Hardware/LEDsIncludes file in src/AH/Settings
DotBarDisplayLEDs.hppWarnings.hpp
LEDs.hppWarnings.hpp
MAX7219_Base.hppWarnings.hpp
MAX7219SevenSegmentDisplay.hppWarnings.hpp
- - - - diff --git a/docs/Doxygen/dir_000008_000014.html b/docs/Doxygen/dir_000008_000014.html deleted file mode 100644 index fa73833b2..000000000 --- a/docs/Doxygen/dir_000008_000014.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Filters -> Settings Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

Filters → Settings Relation

File in src/AH/FiltersIncludes file in src/AH/Settings
EMA.hppWarnings.hpp
Hysteresis.hppWarnings.hpp
- - - - diff --git a/docs/Doxygen/dir_000009_000005.html b/docs/Doxygen/dir_000009_000005.html deleted file mode 100644 index 81c7a9897..000000000 --- a/docs/Doxygen/dir_000009_000005.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Error -> Debug Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

Error → Debug Relation

File in src/AH/ErrorIncludes file in src/AH/Debug
Error.hppDebug.hpp
- - - - diff --git a/docs/Doxygen/dir_000009_000014.html b/docs/Doxygen/dir_000009_000014.html deleted file mode 100644 index f24e7816d..000000000 --- a/docs/Doxygen/dir_000009_000014.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Error -> Settings Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

Error → Settings Relation

File in src/AH/ErrorIncludes file in src/AH/Settings
Error.hppWarnings.hpp
Exit.cppWarnings.hpp
- - - - diff --git a/docs/Doxygen/dir_000011_000014.html b/docs/Doxygen/dir_000011_000014.html deleted file mode 100644 index 93271d6a4..000000000 --- a/docs/Doxygen/dir_000011_000014.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Math -> Settings Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
- - - - - diff --git a/docs/Doxygen/dir_000012_000014.html b/docs/Doxygen/dir_000012_000014.html deleted file mode 100644 index 61c41bed0..000000000 --- a/docs/Doxygen/dir_000012_000014.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Types -> Settings Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

Types → Settings Relation

File in src/AH/TypesIncludes file in src/AH/Settings
Frequency.hppNamespaceSettings.hpp
Frequency.hppWarnings.hpp
- - - - diff --git a/docs/Doxygen/dir_000013_000014.html b/docs/Doxygen/dir_000013_000014.html deleted file mode 100644 index 7ab7ef8de..000000000 --- a/docs/Doxygen/dir_000013_000014.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Timing -> Settings Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

Timing → Settings Relation

File in src/AH/TimingIncludes file in src/AH/Settings
MillisMicrosTimer.hppNamespaceSettings.hpp
MillisMicrosTimer.hppWarnings.hpp
- - - - diff --git a/docs/Doxygen/dir_000014_000002.html b/docs/Doxygen/dir_000014_000002.html deleted file mode 100644 index b3a26c3ea..000000000 --- a/docs/Doxygen/dir_000014_000002.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Settings -> Hardware Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

Settings → Hardware Relation

File in src/AH/SettingsIncludes file in src/AH/Hardware
Settings.hppADCConfig.hpp
- - - - diff --git a/docs/Doxygen/dir_000014_000005.html b/docs/Doxygen/dir_000014_000005.html deleted file mode 100644 index 933921a1d..000000000 --- a/docs/Doxygen/dir_000014_000005.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Settings -> Debug Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

Settings → Debug Relation

File in src/AH/SettingsIncludes file in src/AH/Debug
SettingsWrapper.hppDebug.hpp
- - - - diff --git a/docs/Doxygen/dir_000014_000012.html b/docs/Doxygen/dir_000014_000012.html deleted file mode 100644 index ef15ddb05..000000000 --- a/docs/Doxygen/dir_000014_000012.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Settings -> Types Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

Settings → Types Relation

File in src/AH/SettingsIncludes file in src/AH/Types
Settings.hppFrequency.hpp
- - - - diff --git a/docs/Doxygen/dir_000014_000016.html b/docs/Doxygen/dir_000014_000016.html deleted file mode 100644 index 33da055b6..000000000 --- a/docs/Doxygen/dir_000014_000016.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: Settings -> Teensy Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

Settings → Teensy Relation

File in src/AH/SettingsIncludes file in src/AH/Teensy
SettingsWrapper.hppTeensyUSBTypes.hpp
- - - - diff --git a/docs/Doxygen/dir_000015_000014.html b/docs/Doxygen/dir_000015_000014.html deleted file mode 100644 index 4530ea6d6..000000000 --- a/docs/Doxygen/dir_000015_000014.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -Arduino Helpers: PrintStream -> Settings Relation - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-

PrintStream → Settings Relation

File in src/AH/PrintStreamIncludes file in src/AH/Settings
PrintStream.hppWarnings.hpp
- - - - diff --git a/docs/Doxygen/dir_15b6432dff6a6d357bf70f8fbf2cdf14.html b/docs/Doxygen/dir_15b6432dff6a6d357bf70f8fbf2cdf14.html deleted file mode 100644 index 13f52a561..000000000 --- a/docs/Doxygen/dir_15b6432dff6a6d357bf70f8fbf2cdf14.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - -Arduino Helpers: AH Directory Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
AH Directory Reference
-
-
-
-Directory dependency graph for AH:
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - -

-Directories

directory  Containers
 
directory  Debug
 
directory  Error
 
directory  Filters
 
directory  Hardware
 
directory  Math
 
directory  PrintStream
 
directory  Settings
 
directory  Teensy
 
directory  Timing
 
directory  Types
 
-
- - - - diff --git a/docs/Doxygen/dir_15b6432dff6a6d357bf70f8fbf2cdf14_dep.map b/docs/Doxygen/dir_15b6432dff6a6d357bf70f8fbf2cdf14_dep.map deleted file mode 100644 index 4021a31cc..000000000 --- a/docs/Doxygen/dir_15b6432dff6a6d357bf70f8fbf2cdf14_dep.map +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/dir_15b6432dff6a6d357bf70f8fbf2cdf14_dep.md5 b/docs/Doxygen/dir_15b6432dff6a6d357bf70f8fbf2cdf14_dep.md5 deleted file mode 100644 index 94c69de8a..000000000 --- a/docs/Doxygen/dir_15b6432dff6a6d357bf70f8fbf2cdf14_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -5ba367c83965ba7af2418d345c739578 \ No newline at end of file diff --git a/docs/Doxygen/dir_15b6432dff6a6d357bf70f8fbf2cdf14_dep.svg b/docs/Doxygen/dir_15b6432dff6a6d357bf70f8fbf2cdf14_dep.svg deleted file mode 100644 index dc80a2a71..000000000 --- a/docs/Doxygen/dir_15b6432dff6a6d357bf70f8fbf2cdf14_dep.svg +++ /dev/null @@ -1,325 +0,0 @@ - - - - - - -AH - -clusterdir_68267d1309a1af8e8297ef4c3efbcdba - - -src - - - -clusterdir_15b6432dff6a6d357bf70f8fbf2cdf14 - - - - - - -dir_15b6432dff6a6d357bf70f8fbf2cdf14 -AH - - -dir_a47c593fc78d643c88f09a46c50bf78a - - -Containers - - - - -dir_54ed9a2f055393fe51924247a0779d9a - - -Debug - - - - -dir_a47c593fc78d643c88f09a46c50bf78a->dir_54ed9a2f055393fe51924247a0779d9a - - - -1 - - - - -dir_a084c16939eb8fb9f97e0d007826b989 - - -Error - - - - -dir_a47c593fc78d643c88f09a46c50bf78a->dir_a084c16939eb8fb9f97e0d007826b989 - - - -3 - - - - -dir_17c5e84722ec43f18e2d8633178d0f79 - - -Math - - - - -dir_a47c593fc78d643c88f09a46c50bf78a->dir_17c5e84722ec43f18e2d8633178d0f79 - - - -1 - - - - -dir_3c4018d305623b2abf46b1ad99013cf4 - - -PrintStream - - - - -dir_a47c593fc78d643c88f09a46c50bf78a->dir_3c4018d305623b2abf46b1ad99013cf4 - - - -1 - - - - -dir_c93ba603db00711c7f5106968469b448 - - -Settings - - - - -dir_a47c593fc78d643c88f09a46c50bf78a->dir_c93ba603db00711c7f5106968469b448 - - - -8 - - - - -dir_54ed9a2f055393fe51924247a0779d9a->dir_3c4018d305623b2abf46b1ad99013cf4 - - - -1 - - - - -dir_54ed9a2f055393fe51924247a0779d9a->dir_c93ba603db00711c7f5106968469b448 - - - -2 - - - - -dir_a084c16939eb8fb9f97e0d007826b989->dir_54ed9a2f055393fe51924247a0779d9a - - - -1 - - - - -dir_a084c16939eb8fb9f97e0d007826b989->dir_c93ba603db00711c7f5106968469b448 - - - -2 - - - - -dir_d61b814a793619a867cee0523d2eb6da - - -Filters - - - - -dir_d61b814a793619a867cee0523d2eb6da->dir_c93ba603db00711c7f5106968469b448 - - - -2 - - - - -dir_fe496568715fe26a65b354e6e2365ccd - - -Hardware - - - - -dir_fe496568715fe26a65b354e6e2365ccd->dir_a47c593fc78d643c88f09a46c50bf78a - - - -7 - - - - -dir_fe496568715fe26a65b354e6e2365ccd->dir_a084c16939eb8fb9f97e0d007826b989 - - - -2 - - - - -dir_fe496568715fe26a65b354e6e2365ccd->dir_d61b814a793619a867cee0523d2eb6da - - - -2 - - - - -dir_fe496568715fe26a65b354e6e2365ccd->dir_17c5e84722ec43f18e2d8633178d0f79 - - - -2 - - - - -dir_fe496568715fe26a65b354e6e2365ccd->dir_c93ba603db00711c7f5106968469b448 - - - -26 - - - - -dir_17c5e84722ec43f18e2d8633178d0f79->dir_c93ba603db00711c7f5106968469b448 - - - -4 - - - - -dir_3c4018d305623b2abf46b1ad99013cf4->dir_c93ba603db00711c7f5106968469b448 - - - -1 - - - - -dir_c93ba603db00711c7f5106968469b448->dir_54ed9a2f055393fe51924247a0779d9a - - - -1 - - - - -dir_c93ba603db00711c7f5106968469b448->dir_fe496568715fe26a65b354e6e2365ccd - - - -1 - - - - -dir_22cc041e64085de06e5f66b2732f928a - - -Teensy - - - - -dir_c93ba603db00711c7f5106968469b448->dir_22cc041e64085de06e5f66b2732f928a - - - -1 - - - - -dir_dbe54f2115b12050a4f51da0d7c3487b - - -Types - - - - -dir_c93ba603db00711c7f5106968469b448->dir_dbe54f2115b12050a4f51da0d7c3487b - - - -1 - - - - -dir_a685bf69d461a29e99591549e2feaab1 - - -Timing - - - - -dir_a685bf69d461a29e99591549e2feaab1->dir_c93ba603db00711c7f5106968469b448 - - - -2 - - - - -dir_dbe54f2115b12050a4f51da0d7c3487b->dir_c93ba603db00711c7f5106968469b448 - - - -2 - - - - - diff --git a/docs/Doxygen/dir_17c5e84722ec43f18e2d8633178d0f79.html b/docs/Doxygen/dir_17c5e84722ec43f18e2d8633178d0f79.html deleted file mode 100644 index eaae9cc47..000000000 --- a/docs/Doxygen/dir_17c5e84722ec43f18e2d8633178d0f79.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - -Arduino Helpers: Math Directory Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Math Directory Reference
-
-
-
-Directory dependency graph for Math:
-
-
-
- - - - - - - - - - - - -

-Files

file  FixArduinoMacros.hpp [code]
 
file  IncreaseBitDepth.cpp [code]
 
file  IncreaseBitDepth.hpp [code]
 
file  MinMaxFix.cpp [code]
 
file  MinMaxFix.hpp [code]
 
-
- - - - diff --git a/docs/Doxygen/dir_17c5e84722ec43f18e2d8633178d0f79_dep.map b/docs/Doxygen/dir_17c5e84722ec43f18e2d8633178d0f79_dep.map deleted file mode 100644 index a94edeb57..000000000 --- a/docs/Doxygen/dir_17c5e84722ec43f18e2d8633178d0f79_dep.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/Doxygen/dir_17c5e84722ec43f18e2d8633178d0f79_dep.md5 b/docs/Doxygen/dir_17c5e84722ec43f18e2d8633178d0f79_dep.md5 deleted file mode 100644 index c30b56a36..000000000 --- a/docs/Doxygen/dir_17c5e84722ec43f18e2d8633178d0f79_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -52154d4fd54b056f02b74d8233e93dd4 \ No newline at end of file diff --git a/docs/Doxygen/dir_17c5e84722ec43f18e2d8633178d0f79_dep.svg b/docs/Doxygen/dir_17c5e84722ec43f18e2d8633178d0f79_dep.svg deleted file mode 100644 index 203614f39..000000000 --- a/docs/Doxygen/dir_17c5e84722ec43f18e2d8633178d0f79_dep.svg +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - -Math - -clusterdir_15b6432dff6a6d357bf70f8fbf2cdf14 - - -AH - - - - -dir_17c5e84722ec43f18e2d8633178d0f79 - - -Math - - - - -dir_c93ba603db00711c7f5106968469b448 - - -Settings - - - - -dir_17c5e84722ec43f18e2d8633178d0f79->dir_c93ba603db00711c7f5106968469b448 - - - -4 - - - - - diff --git a/docs/Doxygen/dir_22cc041e64085de06e5f66b2732f928a.html b/docs/Doxygen/dir_22cc041e64085de06e5f66b2732f928a.html deleted file mode 100644 index f58d9715f..000000000 --- a/docs/Doxygen/dir_22cc041e64085de06e5f66b2732f928a.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - -Arduino Helpers: Teensy Directory Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Teensy Directory Reference
-
-
- - - - -

-Files

file  TeensyUSBTypes.hpp [code]
 
-
- - - - diff --git a/docs/Doxygen/dir_242b6e8526387d642d81914582ef5537.html b/docs/Doxygen/dir_242b6e8526387d642d81914582ef5537.html deleted file mode 100644 index ef5b56252..000000000 --- a/docs/Doxygen/dir_242b6e8526387d642d81914582ef5537.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - -Arduino Helpers: LEDs Directory Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
LEDs Directory Reference
-
-
-
-Directory dependency graph for LEDs:
-
-
-
- - - - - - - - - - - - - - - - - - -

-Files

file  DotBarDisplayLEDs.cpp [code]
 
file  DotBarDisplayLEDs.hpp [code]
 
file  LEDs.cpp [code]
 
file  LEDs.hpp [code]
 
file  MAX7219_Base.cpp [code]
 
file  MAX7219_Base.hpp [code]
 
file  MAX7219SevenSegmentDisplay.cpp [code]
 
file  MAX7219SevenSegmentDisplay.hpp [code]
 
-
- - - - diff --git a/docs/Doxygen/dir_242b6e8526387d642d81914582ef5537_dep.map b/docs/Doxygen/dir_242b6e8526387d642d81914582ef5537_dep.map deleted file mode 100644 index 315f25a89..000000000 --- a/docs/Doxygen/dir_242b6e8526387d642d81914582ef5537_dep.map +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/docs/Doxygen/dir_242b6e8526387d642d81914582ef5537_dep.md5 b/docs/Doxygen/dir_242b6e8526387d642d81914582ef5537_dep.md5 deleted file mode 100644 index 38d947965..000000000 --- a/docs/Doxygen/dir_242b6e8526387d642d81914582ef5537_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -097f1633b0d8cf1bc9c4e2df769c4bdd \ No newline at end of file diff --git a/docs/Doxygen/dir_242b6e8526387d642d81914582ef5537_dep.svg b/docs/Doxygen/dir_242b6e8526387d642d81914582ef5537_dep.svg deleted file mode 100644 index daa510f4c..000000000 --- a/docs/Doxygen/dir_242b6e8526387d642d81914582ef5537_dep.svg +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - -LEDs - -clusterdir_fe496568715fe26a65b354e6e2365ccd - - -Hardware - - - - -dir_242b6e8526387d642d81914582ef5537 - - -LEDs - - - - -dir_c93ba603db00711c7f5106968469b448 - - -Settings - - - - -dir_242b6e8526387d642d81914582ef5537->dir_c93ba603db00711c7f5106968469b448 - - - -4 - - - - -dir_6d0023d18521cff94ce9c6d6e763c3b1 - - -ExtendedInputOutput - - - - -dir_242b6e8526387d642d81914582ef5537->dir_6d0023d18521cff94ce9c6d6e763c3b1 - - - -2 - - - - -dir_6d0023d18521cff94ce9c6d6e763c3b1->dir_242b6e8526387d642d81914582ef5537 - - - -1 - - - - -dir_6d0023d18521cff94ce9c6d6e763c3b1->dir_c93ba603db00711c7f5106968469b448 - - - -12 - - - - - diff --git a/docs/Doxygen/dir_3c4018d305623b2abf46b1ad99013cf4.html b/docs/Doxygen/dir_3c4018d305623b2abf46b1ad99013cf4.html deleted file mode 100644 index cd8125856..000000000 --- a/docs/Doxygen/dir_3c4018d305623b2abf46b1ad99013cf4.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - -Arduino Helpers: PrintStream Directory Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
PrintStream Directory Reference
-
-
-
-Directory dependency graph for PrintStream:
-
-
-
- - - - - - -

-Files

file  PrintStream.cpp [code]
 
file  PrintStream.hpp [code]
 
-
- - - - diff --git a/docs/Doxygen/dir_3c4018d305623b2abf46b1ad99013cf4_dep.map b/docs/Doxygen/dir_3c4018d305623b2abf46b1ad99013cf4_dep.map deleted file mode 100644 index 4c6505d29..000000000 --- a/docs/Doxygen/dir_3c4018d305623b2abf46b1ad99013cf4_dep.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/Doxygen/dir_3c4018d305623b2abf46b1ad99013cf4_dep.md5 b/docs/Doxygen/dir_3c4018d305623b2abf46b1ad99013cf4_dep.md5 deleted file mode 100644 index 6a43ef038..000000000 --- a/docs/Doxygen/dir_3c4018d305623b2abf46b1ad99013cf4_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -1bbc83a894c113ec0b3347442b9451ee \ No newline at end of file diff --git a/docs/Doxygen/dir_3c4018d305623b2abf46b1ad99013cf4_dep.svg b/docs/Doxygen/dir_3c4018d305623b2abf46b1ad99013cf4_dep.svg deleted file mode 100644 index 9bc007d2a..000000000 --- a/docs/Doxygen/dir_3c4018d305623b2abf46b1ad99013cf4_dep.svg +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - -PrintStream - -clusterdir_15b6432dff6a6d357bf70f8fbf2cdf14 - - -AH - - - - -dir_3c4018d305623b2abf46b1ad99013cf4 - - -PrintStream - - - - -dir_c93ba603db00711c7f5106968469b448 - - -Settings - - - - -dir_3c4018d305623b2abf46b1ad99013cf4->dir_c93ba603db00711c7f5106968469b448 - - - -1 - - - - - diff --git a/docs/Doxygen/dir_54ed9a2f055393fe51924247a0779d9a.html b/docs/Doxygen/dir_54ed9a2f055393fe51924247a0779d9a.html deleted file mode 100644 index 68d5d4d1c..000000000 --- a/docs/Doxygen/dir_54ed9a2f055393fe51924247a0779d9a.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - -Arduino Helpers: Debug Directory Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Debug Directory Reference
-
-
-
-Directory dependency graph for Debug:
-
-
-
- - - - - - - - -

-Files

file  Debug.cpp [code]
 
file  Debug.hpp [code]
 
file  DebugVal.hpp [code]
 
-
- - - - diff --git a/docs/Doxygen/dir_54ed9a2f055393fe51924247a0779d9a_dep.map b/docs/Doxygen/dir_54ed9a2f055393fe51924247a0779d9a_dep.map deleted file mode 100644 index b4b4650c2..000000000 --- a/docs/Doxygen/dir_54ed9a2f055393fe51924247a0779d9a_dep.map +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/docs/Doxygen/dir_54ed9a2f055393fe51924247a0779d9a_dep.md5 b/docs/Doxygen/dir_54ed9a2f055393fe51924247a0779d9a_dep.md5 deleted file mode 100644 index fa8597599..000000000 --- a/docs/Doxygen/dir_54ed9a2f055393fe51924247a0779d9a_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -e4b97bdd2fb5a54bce6cee016a1f0661 \ No newline at end of file diff --git a/docs/Doxygen/dir_54ed9a2f055393fe51924247a0779d9a_dep.svg b/docs/Doxygen/dir_54ed9a2f055393fe51924247a0779d9a_dep.svg deleted file mode 100644 index a3c13be74..000000000 --- a/docs/Doxygen/dir_54ed9a2f055393fe51924247a0779d9a_dep.svg +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - -Debug - -clusterdir_15b6432dff6a6d357bf70f8fbf2cdf14 - - -AH - - - - -dir_54ed9a2f055393fe51924247a0779d9a - - -Debug - - - - -dir_3c4018d305623b2abf46b1ad99013cf4 - - -PrintStream - - - - -dir_54ed9a2f055393fe51924247a0779d9a->dir_3c4018d305623b2abf46b1ad99013cf4 - - - -1 - - - - -dir_c93ba603db00711c7f5106968469b448 - - -Settings - - - - -dir_54ed9a2f055393fe51924247a0779d9a->dir_c93ba603db00711c7f5106968469b448 - - - -2 - - - - -dir_3c4018d305623b2abf46b1ad99013cf4->dir_c93ba603db00711c7f5106968469b448 - - - -1 - - - - -dir_c93ba603db00711c7f5106968469b448->dir_54ed9a2f055393fe51924247a0779d9a - - - -1 - - - - - diff --git a/docs/Doxygen/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/docs/Doxygen/dir_68267d1309a1af8e8297ef4c3efbcdba.html deleted file mode 100644 index 274b25db9..000000000 --- a/docs/Doxygen/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - -Arduino Helpers: src Directory Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
src Directory Reference
-
-
-
-Directory dependency graph for src:
-
-
-
- - - - -

-Directories

directory  AH
 
- - - - -

-Files

file  Arduino_Helpers.h [code]
 Dummy header file for Arduino builder. You have to add this file first, so the other headers are in the include path.
 
-
- - - - diff --git a/docs/Doxygen/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map b/docs/Doxygen/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map deleted file mode 100644 index 522cb30b0..000000000 --- a/docs/Doxygen/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 b/docs/Doxygen/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 deleted file mode 100644 index 178e63cc8..000000000 --- a/docs/Doxygen/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -871da5e60f2f59b768297622eda4e3ce \ No newline at end of file diff --git a/docs/Doxygen/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.svg b/docs/Doxygen/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.svg deleted file mode 100644 index 6b21b45e9..000000000 --- a/docs/Doxygen/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - -src - -clusterdir_68267d1309a1af8e8297ef4c3efbcdba - - - - - - -dir_68267d1309a1af8e8297ef4c3efbcdba -src - - -dir_15b6432dff6a6d357bf70f8fbf2cdf14 - - -AH - - - - - diff --git a/docs/Doxygen/dir_6d0023d18521cff94ce9c6d6e763c3b1.html b/docs/Doxygen/dir_6d0023d18521cff94ce9c6d6e763c3b1.html deleted file mode 100644 index 4c10414fb..000000000 --- a/docs/Doxygen/dir_6d0023d18521cff94ce9c6d6e763c3b1.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - - -Arduino Helpers: ExtendedInputOutput Directory Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ExtendedInputOutput Directory Reference
-
-
-
-Directory dependency graph for ExtendedInputOutput:
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Files

file  AnalogMultiplex.cpp [code]
 
file  AnalogMultiplex.hpp [code]
 
file  ExtendedInputOutput.cpp [code]
 
file  ExtendedInputOutput.hpp [code]
 
file  ExtendedIOElement.cpp [code]
 
file  ExtendedIOElement.hpp [code]
 
file  MAX7219.cpp [code]
 
file  MAX7219.hpp [code]
 
file  ShiftRegisterOut.cpp [code]
 
file  ShiftRegisterOut.hpp [code]
 
file  ShiftRegisterOut.ipp [code]
 
file  ShiftRegisterOutBase.cpp [code]
 
file  ShiftRegisterOutBase.hpp [code]
 
file  ShiftRegisterOutBase.ipp [code]
 
file  ShiftRegisterOutRGB.cpp [code]
 
file  ShiftRegisterOutRGB.hpp [code]
 
file  SPIShiftRegisterOut.cpp [code]
 
file  SPIShiftRegisterOut.hpp [code]
 
file  SPIShiftRegisterOut.ipp [code]
 
file  StaticSizeExtendedIOElement.cpp [code]
 
file  StaticSizeExtendedIOElement.hpp [code]
 
-
- - - - diff --git a/docs/Doxygen/dir_6d0023d18521cff94ce9c6d6e763c3b1_dep.map b/docs/Doxygen/dir_6d0023d18521cff94ce9c6d6e763c3b1_dep.map deleted file mode 100644 index e40b5d458..000000000 --- a/docs/Doxygen/dir_6d0023d18521cff94ce9c6d6e763c3b1_dep.map +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/dir_6d0023d18521cff94ce9c6d6e763c3b1_dep.md5 b/docs/Doxygen/dir_6d0023d18521cff94ce9c6d6e763c3b1_dep.md5 deleted file mode 100644 index 1cc51f387..000000000 --- a/docs/Doxygen/dir_6d0023d18521cff94ce9c6d6e763c3b1_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -410ed42d0b8ad6be9a0d41c429969a09 \ No newline at end of file diff --git a/docs/Doxygen/dir_6d0023d18521cff94ce9c6d6e763c3b1_dep.svg b/docs/Doxygen/dir_6d0023d18521cff94ce9c6d6e763c3b1_dep.svg deleted file mode 100644 index ba36b5e1d..000000000 --- a/docs/Doxygen/dir_6d0023d18521cff94ce9c6d6e763c3b1_dep.svg +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - -ExtendedInputOutput - -clusterdir_fe496568715fe26a65b354e6e2365ccd - - -Hardware - - - - -dir_6d0023d18521cff94ce9c6d6e763c3b1 - - -ExtendedInputOutput - - - - -dir_a084c16939eb8fb9f97e0d007826b989 - - -Error - - - - -dir_6d0023d18521cff94ce9c6d6e763c3b1->dir_a084c16939eb8fb9f97e0d007826b989 - - - -2 - - - - -dir_c93ba603db00711c7f5106968469b448 - - -Settings - - - - -dir_6d0023d18521cff94ce9c6d6e763c3b1->dir_c93ba603db00711c7f5106968469b448 - - - -12 - - - - -dir_242b6e8526387d642d81914582ef5537 - - -LEDs - - - - -dir_6d0023d18521cff94ce9c6d6e763c3b1->dir_242b6e8526387d642d81914582ef5537 - - - -1 - - - - -dir_a47c593fc78d643c88f09a46c50bf78a - - -Containers - - - - -dir_6d0023d18521cff94ce9c6d6e763c3b1->dir_a47c593fc78d643c88f09a46c50bf78a - - - -6 - - - - -dir_a084c16939eb8fb9f97e0d007826b989->dir_c93ba603db00711c7f5106968469b448 - - - -2 - - - - -dir_242b6e8526387d642d81914582ef5537->dir_6d0023d18521cff94ce9c6d6e763c3b1 - - - -2 - - - - -dir_242b6e8526387d642d81914582ef5537->dir_c93ba603db00711c7f5106968469b448 - - - -4 - - - - -dir_a47c593fc78d643c88f09a46c50bf78a->dir_a084c16939eb8fb9f97e0d007826b989 - - - -3 - - - - -dir_a47c593fc78d643c88f09a46c50bf78a->dir_c93ba603db00711c7f5106968469b448 - - - -8 - - - - - diff --git a/docs/Doxygen/dir_90c5bec27c94774c9e0ab767bc5d8d3f.html b/docs/Doxygen/dir_90c5bec27c94774c9e0ab767bc5d8d3f.html deleted file mode 100644 index 9410cf18e..000000000 --- a/docs/Doxygen/dir_90c5bec27c94774c9e0ab767bc5d8d3f.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -Arduino Helpers: pages Directory Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
pages Directory Reference
-
-
-
- - - - diff --git a/docs/Doxygen/dir_a084c16939eb8fb9f97e0d007826b989.html b/docs/Doxygen/dir_a084c16939eb8fb9f97e0d007826b989.html deleted file mode 100644 index 1d0b49438..000000000 --- a/docs/Doxygen/dir_a084c16939eb8fb9f97e0d007826b989.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - -Arduino Helpers: Error Directory Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Error Directory Reference
-
-
-
-Directory dependency graph for Error:
-
-
-
- - - - - - - - -

-Files

file  Error.cpp [code]
 
file  Error.hpp [code]
 
file  Exit.cpp [code]
 
-
- - - - diff --git a/docs/Doxygen/dir_a084c16939eb8fb9f97e0d007826b989_dep.map b/docs/Doxygen/dir_a084c16939eb8fb9f97e0d007826b989_dep.map deleted file mode 100644 index 454fef841..000000000 --- a/docs/Doxygen/dir_a084c16939eb8fb9f97e0d007826b989_dep.map +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/docs/Doxygen/dir_a084c16939eb8fb9f97e0d007826b989_dep.md5 b/docs/Doxygen/dir_a084c16939eb8fb9f97e0d007826b989_dep.md5 deleted file mode 100644 index 2f33e5896..000000000 --- a/docs/Doxygen/dir_a084c16939eb8fb9f97e0d007826b989_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -9a4f1342fa3a540d2b0aa0a2aa32d4b0 \ No newline at end of file diff --git a/docs/Doxygen/dir_a084c16939eb8fb9f97e0d007826b989_dep.svg b/docs/Doxygen/dir_a084c16939eb8fb9f97e0d007826b989_dep.svg deleted file mode 100644 index 6c1b91636..000000000 --- a/docs/Doxygen/dir_a084c16939eb8fb9f97e0d007826b989_dep.svg +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - -Error - -clusterdir_15b6432dff6a6d357bf70f8fbf2cdf14 - - -AH - - - - -dir_a084c16939eb8fb9f97e0d007826b989 - - -Error - - - - -dir_c93ba603db00711c7f5106968469b448 - - -Settings - - - - -dir_a084c16939eb8fb9f97e0d007826b989->dir_c93ba603db00711c7f5106968469b448 - - - -2 - - - - -dir_54ed9a2f055393fe51924247a0779d9a - - -Debug - - - - -dir_a084c16939eb8fb9f97e0d007826b989->dir_54ed9a2f055393fe51924247a0779d9a - - - -1 - - - - -dir_c93ba603db00711c7f5106968469b448->dir_54ed9a2f055393fe51924247a0779d9a - - - -1 - - - - -dir_54ed9a2f055393fe51924247a0779d9a->dir_c93ba603db00711c7f5106968469b448 - - - -2 - - - - - diff --git a/docs/Doxygen/dir_a47c593fc78d643c88f09a46c50bf78a.html b/docs/Doxygen/dir_a47c593fc78d643c88f09a46c50bf78a.html deleted file mode 100644 index eddcc49c5..000000000 --- a/docs/Doxygen/dir_a47c593fc78d643c88f09a46c50bf78a.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - -Arduino Helpers: Containers Directory Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Containers Directory Reference
-
-
-
-Directory dependency graph for Containers:
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - -

-Files

file  Array.cpp [code]
 
file  Array.hpp [code]
 
file  ArrayHelpers.cpp [code]
 
file  ArrayHelpers.hpp [code]
 
file  BitArray.cpp [code]
 
file  BitArray.hpp [code]
 
file  LinkedList.cpp [code]
 
file  LinkedList.hpp [code]
 
file  UniquePtr.cpp [code]
 
file  UniquePtr.hpp [code]
 
file  Updatable.cpp [code]
 
file  Updatable.hpp [code]
 
-
- - - - diff --git a/docs/Doxygen/dir_a47c593fc78d643c88f09a46c50bf78a_dep.map b/docs/Doxygen/dir_a47c593fc78d643c88f09a46c50bf78a_dep.map deleted file mode 100644 index dc72562ab..000000000 --- a/docs/Doxygen/dir_a47c593fc78d643c88f09a46c50bf78a_dep.map +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/dir_a47c593fc78d643c88f09a46c50bf78a_dep.md5 b/docs/Doxygen/dir_a47c593fc78d643c88f09a46c50bf78a_dep.md5 deleted file mode 100644 index 67cec6a9e..000000000 --- a/docs/Doxygen/dir_a47c593fc78d643c88f09a46c50bf78a_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -941303e143daf012976a6b1e1e1a8c12 \ No newline at end of file diff --git a/docs/Doxygen/dir_a47c593fc78d643c88f09a46c50bf78a_dep.svg b/docs/Doxygen/dir_a47c593fc78d643c88f09a46c50bf78a_dep.svg deleted file mode 100644 index 5b3651fe2..000000000 --- a/docs/Doxygen/dir_a47c593fc78d643c88f09a46c50bf78a_dep.svg +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -Containers - -clusterdir_15b6432dff6a6d357bf70f8fbf2cdf14 - - -AH - - - - -dir_a47c593fc78d643c88f09a46c50bf78a - - -Containers - - - - -dir_17c5e84722ec43f18e2d8633178d0f79 - - -Math - - - - -dir_a47c593fc78d643c88f09a46c50bf78a->dir_17c5e84722ec43f18e2d8633178d0f79 - - - -1 - - - - -dir_3c4018d305623b2abf46b1ad99013cf4 - - -PrintStream - - - - -dir_a47c593fc78d643c88f09a46c50bf78a->dir_3c4018d305623b2abf46b1ad99013cf4 - - - -1 - - - - -dir_a084c16939eb8fb9f97e0d007826b989 - - -Error - - - - -dir_a47c593fc78d643c88f09a46c50bf78a->dir_a084c16939eb8fb9f97e0d007826b989 - - - -3 - - - - -dir_c93ba603db00711c7f5106968469b448 - - -Settings - - - - -dir_a47c593fc78d643c88f09a46c50bf78a->dir_c93ba603db00711c7f5106968469b448 - - - -8 - - - - -dir_54ed9a2f055393fe51924247a0779d9a - - -Debug - - - - -dir_a47c593fc78d643c88f09a46c50bf78a->dir_54ed9a2f055393fe51924247a0779d9a - - - -1 - - - - -dir_17c5e84722ec43f18e2d8633178d0f79->dir_c93ba603db00711c7f5106968469b448 - - - -4 - - - - -dir_3c4018d305623b2abf46b1ad99013cf4->dir_c93ba603db00711c7f5106968469b448 - - - -1 - - - - -dir_a084c16939eb8fb9f97e0d007826b989->dir_c93ba603db00711c7f5106968469b448 - - - -2 - - - - -dir_a084c16939eb8fb9f97e0d007826b989->dir_54ed9a2f055393fe51924247a0779d9a - - - -1 - - - - -dir_c93ba603db00711c7f5106968469b448->dir_54ed9a2f055393fe51924247a0779d9a - - - -1 - - - - -dir_54ed9a2f055393fe51924247a0779d9a->dir_3c4018d305623b2abf46b1ad99013cf4 - - - -1 - - - - -dir_54ed9a2f055393fe51924247a0779d9a->dir_c93ba603db00711c7f5106968469b448 - - - -2 - - - - - diff --git a/docs/Doxygen/dir_a685bf69d461a29e99591549e2feaab1.html b/docs/Doxygen/dir_a685bf69d461a29e99591549e2feaab1.html deleted file mode 100644 index 57f2218dc..000000000 --- a/docs/Doxygen/dir_a685bf69d461a29e99591549e2feaab1.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - -Arduino Helpers: Timing Directory Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Timing Directory Reference
-
-
-
-Directory dependency graph for Timing:
-
-
-
- - - - - - -

-Files

file  MillisMicrosTimer.cpp [code]
 
file  MillisMicrosTimer.hpp [code]
 
-
- - - - diff --git a/docs/Doxygen/dir_a685bf69d461a29e99591549e2feaab1_dep.map b/docs/Doxygen/dir_a685bf69d461a29e99591549e2feaab1_dep.map deleted file mode 100644 index 03d6c2a74..000000000 --- a/docs/Doxygen/dir_a685bf69d461a29e99591549e2feaab1_dep.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/Doxygen/dir_a685bf69d461a29e99591549e2feaab1_dep.md5 b/docs/Doxygen/dir_a685bf69d461a29e99591549e2feaab1_dep.md5 deleted file mode 100644 index 78915146d..000000000 --- a/docs/Doxygen/dir_a685bf69d461a29e99591549e2feaab1_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -4b8da35bcef1eb6a0964da8e6c39e232 \ No newline at end of file diff --git a/docs/Doxygen/dir_a685bf69d461a29e99591549e2feaab1_dep.svg b/docs/Doxygen/dir_a685bf69d461a29e99591549e2feaab1_dep.svg deleted file mode 100644 index 4d8e92893..000000000 --- a/docs/Doxygen/dir_a685bf69d461a29e99591549e2feaab1_dep.svg +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - -Timing - -clusterdir_15b6432dff6a6d357bf70f8fbf2cdf14 - - -AH - - - - -dir_a685bf69d461a29e99591549e2feaab1 - - -Timing - - - - -dir_c93ba603db00711c7f5106968469b448 - - -Settings - - - - -dir_a685bf69d461a29e99591549e2feaab1->dir_c93ba603db00711c7f5106968469b448 - - - -2 - - - - - diff --git a/docs/Doxygen/dir_c93ba603db00711c7f5106968469b448.html b/docs/Doxygen/dir_c93ba603db00711c7f5106968469b448.html deleted file mode 100644 index 940a76db8..000000000 --- a/docs/Doxygen/dir_c93ba603db00711c7f5106968469b448.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Arduino Helpers: Settings Directory Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Settings Directory Reference
-
-
-
-Directory dependency graph for Settings:
-
-
-
- - - - - - - - - - - - - - - - - -

-Files

file  NamespaceSettings.cpp [code]
 
file  NamespaceSettings.hpp [code]
 
file  Settings.cpp [code]
 
file  Settings.hpp [code]
 All user settings and debugging options can be changed here.
 
file  SettingsWrapper.cpp [code]
 
file  SettingsWrapper.hpp [code]
 
file  Warnings.hpp [code]
 
-
- - - - diff --git a/docs/Doxygen/dir_c93ba603db00711c7f5106968469b448_dep.map b/docs/Doxygen/dir_c93ba603db00711c7f5106968469b448_dep.map deleted file mode 100644 index 1a6c3f547..000000000 --- a/docs/Doxygen/dir_c93ba603db00711c7f5106968469b448_dep.map +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/docs/Doxygen/dir_c93ba603db00711c7f5106968469b448_dep.md5 b/docs/Doxygen/dir_c93ba603db00711c7f5106968469b448_dep.md5 deleted file mode 100644 index b971074e1..000000000 --- a/docs/Doxygen/dir_c93ba603db00711c7f5106968469b448_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -102cc3615dfc65136fd1a0c0b0820910 \ No newline at end of file diff --git a/docs/Doxygen/dir_c93ba603db00711c7f5106968469b448_dep.svg b/docs/Doxygen/dir_c93ba603db00711c7f5106968469b448_dep.svg deleted file mode 100644 index 5137f4de0..000000000 --- a/docs/Doxygen/dir_c93ba603db00711c7f5106968469b448_dep.svg +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - -Settings - -clusterdir_15b6432dff6a6d357bf70f8fbf2cdf14 - - -AH - - - - -dir_c93ba603db00711c7f5106968469b448 - - -Settings - - - - -dir_dbe54f2115b12050a4f51da0d7c3487b - - -Types - - - - -dir_c93ba603db00711c7f5106968469b448->dir_dbe54f2115b12050a4f51da0d7c3487b - - - -1 - - - - -dir_22cc041e64085de06e5f66b2732f928a - - -Teensy - - - - -dir_c93ba603db00711c7f5106968469b448->dir_22cc041e64085de06e5f66b2732f928a - - - -1 - - - - -dir_fe496568715fe26a65b354e6e2365ccd - - -Hardware - - - - -dir_c93ba603db00711c7f5106968469b448->dir_fe496568715fe26a65b354e6e2365ccd - - - -1 - - - - -dir_54ed9a2f055393fe51924247a0779d9a - - -Debug - - - - -dir_c93ba603db00711c7f5106968469b448->dir_54ed9a2f055393fe51924247a0779d9a - - - -1 - - - - -dir_dbe54f2115b12050a4f51da0d7c3487b->dir_c93ba603db00711c7f5106968469b448 - - - -2 - - - - -dir_54ed9a2f055393fe51924247a0779d9a->dir_c93ba603db00711c7f5106968469b448 - - - -2 - - - - - diff --git a/docs/Doxygen/dir_d28a4824dc47e487b107a5db32ef43c4.html b/docs/Doxygen/dir_d28a4824dc47e487b107a5db32ef43c4.html deleted file mode 100644 index 95ff715b2..000000000 --- a/docs/Doxygen/dir_d28a4824dc47e487b107a5db32ef43c4.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -Arduino Helpers: examples Directory Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
examples Directory Reference
-
-
-
- - - - diff --git a/docs/Doxygen/dir_d61b814a793619a867cee0523d2eb6da.html b/docs/Doxygen/dir_d61b814a793619a867cee0523d2eb6da.html deleted file mode 100644 index c9f314ed6..000000000 --- a/docs/Doxygen/dir_d61b814a793619a867cee0523d2eb6da.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - -Arduino Helpers: Filters Directory Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Filters Directory Reference
-
-
-
-Directory dependency graph for Filters:
-
-
-
- - - - - - - - - - -

-Files

file  EMA.cpp [code]
 
file  EMA.hpp [code]
 
file  Hysteresis.cpp [code]
 
file  Hysteresis.hpp [code]
 
-
- - - - diff --git a/docs/Doxygen/dir_d61b814a793619a867cee0523d2eb6da_dep.map b/docs/Doxygen/dir_d61b814a793619a867cee0523d2eb6da_dep.map deleted file mode 100644 index 4c7833a6a..000000000 --- a/docs/Doxygen/dir_d61b814a793619a867cee0523d2eb6da_dep.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/Doxygen/dir_d61b814a793619a867cee0523d2eb6da_dep.md5 b/docs/Doxygen/dir_d61b814a793619a867cee0523d2eb6da_dep.md5 deleted file mode 100644 index a5f93a2bc..000000000 --- a/docs/Doxygen/dir_d61b814a793619a867cee0523d2eb6da_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -c88da8a34bb3a5c3f321fa21f8795766 \ No newline at end of file diff --git a/docs/Doxygen/dir_d61b814a793619a867cee0523d2eb6da_dep.svg b/docs/Doxygen/dir_d61b814a793619a867cee0523d2eb6da_dep.svg deleted file mode 100644 index a0626bad9..000000000 --- a/docs/Doxygen/dir_d61b814a793619a867cee0523d2eb6da_dep.svg +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - -Filters - -clusterdir_15b6432dff6a6d357bf70f8fbf2cdf14 - - -AH - - - - -dir_d61b814a793619a867cee0523d2eb6da - - -Filters - - - - -dir_c93ba603db00711c7f5106968469b448 - - -Settings - - - - -dir_d61b814a793619a867cee0523d2eb6da->dir_c93ba603db00711c7f5106968469b448 - - - -2 - - - - - diff --git a/docs/Doxygen/dir_dbe54f2115b12050a4f51da0d7c3487b.html b/docs/Doxygen/dir_dbe54f2115b12050a4f51da0d7c3487b.html deleted file mode 100644 index 28340cf8d..000000000 --- a/docs/Doxygen/dir_dbe54f2115b12050a4f51da0d7c3487b.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - -Arduino Helpers: Types Directory Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Types Directory Reference
-
-
-
-Directory dependency graph for Types:
-
-
-
- - - - -

-Files

file  Frequency.hpp [code]
 
-
- - - - diff --git a/docs/Doxygen/dir_dbe54f2115b12050a4f51da0d7c3487b_dep.map b/docs/Doxygen/dir_dbe54f2115b12050a4f51da0d7c3487b_dep.map deleted file mode 100644 index 0a786120f..000000000 --- a/docs/Doxygen/dir_dbe54f2115b12050a4f51da0d7c3487b_dep.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/docs/Doxygen/dir_dbe54f2115b12050a4f51da0d7c3487b_dep.md5 b/docs/Doxygen/dir_dbe54f2115b12050a4f51da0d7c3487b_dep.md5 deleted file mode 100644 index e8c7d5425..000000000 --- a/docs/Doxygen/dir_dbe54f2115b12050a4f51da0d7c3487b_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -b2f289ea93733fa58c9793ee25cf21d0 \ No newline at end of file diff --git a/docs/Doxygen/dir_dbe54f2115b12050a4f51da0d7c3487b_dep.svg b/docs/Doxygen/dir_dbe54f2115b12050a4f51da0d7c3487b_dep.svg deleted file mode 100644 index 34063c597..000000000 --- a/docs/Doxygen/dir_dbe54f2115b12050a4f51da0d7c3487b_dep.svg +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - -Types - -clusterdir_15b6432dff6a6d357bf70f8fbf2cdf14 - - -AH - - - - -dir_dbe54f2115b12050a4f51da0d7c3487b - - -Types - - - - -dir_c93ba603db00711c7f5106968469b448 - - -Settings - - - - -dir_dbe54f2115b12050a4f51da0d7c3487b->dir_c93ba603db00711c7f5106968469b448 - - - -2 - - - - -dir_c93ba603db00711c7f5106968469b448->dir_dbe54f2115b12050a4f51da0d7c3487b - - - -1 - - - - - diff --git a/docs/Doxygen/dir_fe496568715fe26a65b354e6e2365ccd.html b/docs/Doxygen/dir_fe496568715fe26a65b354e6e2365ccd.html deleted file mode 100644 index 1ed41760f..000000000 --- a/docs/Doxygen/dir_fe496568715fe26a65b354e6e2365ccd.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - -Arduino Helpers: Hardware Directory Reference - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
Hardware Directory Reference
-
-
-
-Directory dependency graph for Hardware:
-
-
-
- - - - - - -

-Directories

directory  ExtendedInputOutput
 
directory  LEDs
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Files

file  ADCConfig.cpp [code]
 
file  ADCConfig.hpp [code]
 This file contains the platform-specific ADC resolutions. By default, the library automatically selects the maximum supported resolution for known boards, otherwise, it falls back to 10 bits.
 
file  Button.cpp [code]
 
file  Button.hpp [code]
 
file  ButtonMatrix.cpp [code]
 
file  ButtonMatrix.hpp [code]
 
file  ButtonMatrix.ipp [code]
 
file  FilteredAnalog.cpp [code]
 
file  FilteredAnalog.hpp [code]
 
file  Hardware-Types.hpp [code]
 
file  IncrementButton.cpp [code]
 
file  IncrementButton.hpp [code]
 
file  IncrementDecrementButtons.cpp [code]
 
file  IncrementDecrementButtons.hpp [code]
 
-
- - - - diff --git a/docs/Doxygen/dir_fe496568715fe26a65b354e6e2365ccd_dep.map b/docs/Doxygen/dir_fe496568715fe26a65b354e6e2365ccd_dep.map deleted file mode 100644 index a2f254ce3..000000000 --- a/docs/Doxygen/dir_fe496568715fe26a65b354e6e2365ccd_dep.map +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/Doxygen/dir_fe496568715fe26a65b354e6e2365ccd_dep.md5 b/docs/Doxygen/dir_fe496568715fe26a65b354e6e2365ccd_dep.md5 deleted file mode 100644 index 1cc873d3d..000000000 --- a/docs/Doxygen/dir_fe496568715fe26a65b354e6e2365ccd_dep.md5 +++ /dev/null @@ -1 +0,0 @@ -94b78438fdf08a3e72289af77814104e \ No newline at end of file diff --git a/docs/Doxygen/dir_fe496568715fe26a65b354e6e2365ccd_dep.svg b/docs/Doxygen/dir_fe496568715fe26a65b354e6e2365ccd_dep.svg deleted file mode 100644 index 5cf8068b0..000000000 --- a/docs/Doxygen/dir_fe496568715fe26a65b354e6e2365ccd_dep.svg +++ /dev/null @@ -1,230 +0,0 @@ - - - - - - -Hardware - -clusterdir_15b6432dff6a6d357bf70f8fbf2cdf14 - - -AH - - - -clusterdir_fe496568715fe26a65b354e6e2365ccd - - - - - - -dir_fe496568715fe26a65b354e6e2365ccd -Hardware - - -dir_6d0023d18521cff94ce9c6d6e763c3b1 - - -ExtendedInputOutput - - - - -dir_fe496568715fe26a65b354e6e2365ccd->dir_6d0023d18521cff94ce9c6d6e763c3b1 - - - -5 - - - - -dir_17c5e84722ec43f18e2d8633178d0f79 - - -Math - - - - -dir_fe496568715fe26a65b354e6e2365ccd->dir_17c5e84722ec43f18e2d8633178d0f79 - - - -2 - - - - -dir_d61b814a793619a867cee0523d2eb6da - - -Filters - - - - -dir_fe496568715fe26a65b354e6e2365ccd->dir_d61b814a793619a867cee0523d2eb6da - - - -2 - - - - -dir_242b6e8526387d642d81914582ef5537 - - -LEDs - - - - -dir_6d0023d18521cff94ce9c6d6e763c3b1->dir_242b6e8526387d642d81914582ef5537 - - - -1 - - - - -dir_a084c16939eb8fb9f97e0d007826b989 - - -Error - - - - -dir_6d0023d18521cff94ce9c6d6e763c3b1->dir_a084c16939eb8fb9f97e0d007826b989 - - - -2 - - - - -dir_c93ba603db00711c7f5106968469b448 - - -Settings - - - - -dir_6d0023d18521cff94ce9c6d6e763c3b1->dir_c93ba603db00711c7f5106968469b448 - - - -12 - - - - -dir_a47c593fc78d643c88f09a46c50bf78a - - -Containers - - - - -dir_6d0023d18521cff94ce9c6d6e763c3b1->dir_a47c593fc78d643c88f09a46c50bf78a - - - -6 - - - - -dir_242b6e8526387d642d81914582ef5537->dir_6d0023d18521cff94ce9c6d6e763c3b1 - - - -2 - - - - -dir_242b6e8526387d642d81914582ef5537->dir_c93ba603db00711c7f5106968469b448 - - - -4 - - - - -dir_17c5e84722ec43f18e2d8633178d0f79->dir_c93ba603db00711c7f5106968469b448 - - - -4 - - - - -dir_d61b814a793619a867cee0523d2eb6da->dir_c93ba603db00711c7f5106968469b448 - - - -2 - - - - -dir_a084c16939eb8fb9f97e0d007826b989->dir_c93ba603db00711c7f5106968469b448 - - - -2 - - - - -dir_c93ba603db00711c7f5106968469b448->dir_fe496568715fe26a65b354e6e2365ccd - - - -1 - - - - -dir_a47c593fc78d643c88f09a46c50bf78a->dir_17c5e84722ec43f18e2d8633178d0f79 - - - -1 - - - - -dir_a47c593fc78d643c88f09a46c50bf78a->dir_a084c16939eb8fb9f97e0d007826b989 - - - -3 - - - - -dir_a47c593fc78d643c88f09a46c50bf78a->dir_c93ba603db00711c7f5106968469b448 - - - -8 - - - - - diff --git a/docs/Doxygen/doc.png b/docs/Doxygen/doc.png deleted file mode 100644 index 46ed36a8b..000000000 Binary files a/docs/Doxygen/doc.png and /dev/null differ diff --git a/docs/Doxygen/doxygen.css b/docs/Doxygen/doxygen.css deleted file mode 100644 index 80960b405..000000000 --- a/docs/Doxygen/doxygen.css +++ /dev/null @@ -1,1766 +0,0 @@ -/* The standard CSS for doxygen 1.8.16 */ - -body, table, div, p, dl { - font: 400 14px/22px Roboto,sans-serif; -} - -p.reference, p.definition { - font: 400 14px/22px Roboto,sans-serif; -} - -/* @group Heading Levels */ - -h1.groupheader { - font-size: 150%; -} - -.title { - font: 400 14px/28px Roboto,sans-serif; - font-size: 150%; - font-weight: bold; - margin: 10px 2px; -} - -h2.groupheader { - border-bottom: 1px solid #8EA0C4; - color: #3C4F74; - font-size: 150%; - font-weight: normal; - margin-top: 1.75em; - padding-top: 8px; - padding-bottom: 4px; - width: 100%; -} - -h3.groupheader { - font-size: 100%; -} - -h1, h2, h3, h4, h5, h6 { - -webkit-transition: text-shadow 0.5s linear; - -moz-transition: text-shadow 0.5s linear; - -ms-transition: text-shadow 0.5s linear; - -o-transition: text-shadow 0.5s linear; - transition: text-shadow 0.5s linear; - margin-right: 15px; -} - -h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { - text-shadow: 0 0 15px cyan; -} - -dt { - font-weight: bold; -} - -ul.multicol { - -moz-column-gap: 1em; - -webkit-column-gap: 1em; - column-gap: 1em; - -moz-column-count: 3; - -webkit-column-count: 3; - column-count: 3; -} - -p.startli, p.startdd { - margin-top: 2px; -} - -p.starttd { - margin-top: 0px; -} - -p.endli { - margin-bottom: 0px; -} - -p.enddd { - margin-bottom: 4px; -} - -p.endtd { - margin-bottom: 2px; -} - -p.interli { -} - -p.interdd { -} - -p.intertd { -} - -/* @end */ - -caption { - font-weight: bold; -} - -span.legend { - font-size: 70%; - text-align: center; -} - -h3.version { - font-size: 90%; - text-align: center; -} - -div.qindex, div.navtab{ - background-color: #EDEFF5; - border: 1px solid #A9B6D2; - text-align: center; -} - -div.qindex, div.navpath { - width: 100%; - line-height: 140%; -} - -div.navtab { - margin-right: 15px; -} - -/* @group Link Styling */ - -a { - color: #455A84; - font-weight: normal; - text-decoration: none; -} - -.contents a:visited { - color: #506899; -} - -a:hover { - text-decoration: underline; -} - -a.qindex { - font-weight: bold; -} - -a.qindexHL { - font-weight: bold; - background-color: #A2B0CE; - color: #FFFFFF; - border: 1px double #8D9FC3; -} - -.contents a.qindexHL:visited { - color: #FFFFFF; -} - -a.el { - font-weight: bold; -} - -a.elRef { -} - -a.code, a.code:visited, a.line, a.line:visited { - color: #506899; -} - -a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { - color: #506899; -} - -/* @end */ - -dl.el { - margin-left: -1cm; -} - -ul { - overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ -} - -#side-nav ul { - overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ -} - -#main-nav ul { - overflow: visible; /* reset ul rule for the navigation bar drop down lists */ -} - -.fragment { - text-align: left; - direction: ltr; - overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ - overflow-y: hidden; -} - -pre.fragment { - border: 1px solid #C8D0E2; - background-color: #FBFCFD; - padding: 4px 6px; - margin: 4px 8px 4px 2px; - overflow: auto; - word-wrap: break-word; - font-size: 9pt; - line-height: 125%; - font-family: monospace, fixed; - font-size: 105%; -} - -div.fragment { - padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ - margin: 4px 8px 4px 2px; - background-color: #FBFCFD; - border: 1px solid #C8D0E2; -} - -div.line { - font-family: monospace, fixed; - font-size: 13px; - min-height: 13px; - line-height: 1.0; - text-wrap: unrestricted; - white-space: -moz-pre-wrap; /* Moz */ - white-space: -pre-wrap; /* Opera 4-6 */ - white-space: -o-pre-wrap; /* Opera 7 */ - white-space: pre-wrap; /* CSS3 */ - word-wrap: break-word; /* IE 5.5+ */ - text-indent: -53px; - padding-left: 53px; - padding-bottom: 0px; - margin: 0px; - -webkit-transition-property: background-color, box-shadow; - -webkit-transition-duration: 0.5s; - -moz-transition-property: background-color, box-shadow; - -moz-transition-duration: 0.5s; - -ms-transition-property: background-color, box-shadow; - -ms-transition-duration: 0.5s; - -o-transition-property: background-color, box-shadow; - -o-transition-duration: 0.5s; - transition-property: background-color, box-shadow; - transition-duration: 0.5s; -} - -div.line:after { - content:"\000A"; - white-space: pre; -} - -div.line.glow { - background-color: cyan; - box-shadow: 0 0 10px cyan; -} - - -span.lineno { - padding-right: 4px; - text-align: right; - border-right: 2px solid #0F0; - background-color: #E8E8E8; - white-space: pre; -} -span.lineno a { - background-color: #D8D8D8; -} - -span.lineno a:hover { - background-color: #C8C8C8; -} - -.lineno { - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -div.ah, span.ah { - background-color: black; - font-weight: bold; - color: #FFFFFF; - margin-bottom: 3px; - margin-top: 3px; - padding: 0.2em; - border: solid thin #333; - border-radius: 0.5em; - -webkit-border-radius: .5em; - -moz-border-radius: .5em; - box-shadow: 2px 2px 3px #999; - -webkit-box-shadow: 2px 2px 3px #999; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); - background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); -} - -div.classindex ul { - list-style: none; - padding-left: 0; -} - -div.classindex span.ai { - display: inline-block; -} - -div.groupHeader { - margin-left: 16px; - margin-top: 12px; - font-weight: bold; -} - -div.groupText { - margin-left: 16px; - font-style: italic; -} - -body { - background-color: white; - color: black; - margin: 0; -} - -div.contents { - margin-top: 10px; - margin-left: 12px; - margin-right: 8px; -} - -td.indexkey { - background-color: #EDEFF5; - font-weight: bold; - border: 1px solid #C8D0E2; - margin: 2px 0px 2px 0; - padding: 2px 10px; - white-space: nowrap; - vertical-align: top; -} - -td.indexvalue { - background-color: #EDEFF5; - border: 1px solid #C8D0E2; - padding: 2px 10px; - margin: 2px 0px; -} - -tr.memlist { - background-color: #EFF1F6; -} - -p.formulaDsp { - text-align: center; -} - -img.formulaDsp { - -} - -img.formulaInl, img.inline { - vertical-align: middle; -} - -div.center { - text-align: center; - margin-top: 0px; - margin-bottom: 0px; - padding: 0px; -} - -div.center img { - border: 0px; -} - -address.footer { - text-align: right; - padding-right: 12px; -} - -img.footer { - border: 0px; - vertical-align: middle; -} - -/* @group Code Colorization */ - -span.keyword { - color: #008000 -} - -span.keywordtype { - color: #604020 -} - -span.keywordflow { - color: #e08000 -} - -span.comment { - color: #800000 -} - -span.preprocessor { - color: #806020 -} - -span.stringliteral { - color: #002080 -} - -span.charliteral { - color: #008080 -} - -span.vhdldigit { - color: #ff00ff -} - -span.vhdlchar { - color: #000000 -} - -span.vhdlkeyword { - color: #700070 -} - -span.vhdllogic { - color: #ff0000 -} - -blockquote { - background-color: #F7F8FB; - border-left: 2px solid #A2B0CE; - margin: 0 24px 0 4px; - padding: 0 12px 0 16px; -} - -blockquote.DocNodeRTL { - border-left: 0; - border-right: 2px solid #A2B0CE; - margin: 0 4px 0 24px; - padding: 0 16px 0 12px; -} - -/* @end */ - -/* -.search { - color: #003399; - font-weight: bold; -} - -form.search { - margin-bottom: 0px; - margin-top: 0px; -} - -input.search { - font-size: 75%; - color: #000080; - font-weight: normal; - background-color: #e8eef2; -} -*/ - -td.tiny { - font-size: 75%; -} - -.dirtab { - padding: 4px; - border-collapse: collapse; - border: 1px solid #A9B6D2; -} - -th.dirtab { - background: #EDEFF5; - font-weight: bold; -} - -hr { - height: 0px; - border: none; - border-top: 1px solid #546DA0; -} - -hr.footer { - height: 1px; -} - -/* @group Member Descriptions */ - -table.memberdecls { - border-spacing: 0px; - padding: 0px; -} - -.memberdecls td, .fieldtable tr { - -webkit-transition-property: background-color, box-shadow; - -webkit-transition-duration: 0.5s; - -moz-transition-property: background-color, box-shadow; - -moz-transition-duration: 0.5s; - -ms-transition-property: background-color, box-shadow; - -ms-transition-duration: 0.5s; - -o-transition-property: background-color, box-shadow; - -o-transition-duration: 0.5s; - transition-property: background-color, box-shadow; - transition-duration: 0.5s; -} - -.memberdecls td.glow, .fieldtable tr.glow { - background-color: cyan; - box-shadow: 0 0 15px cyan; -} - -.mdescLeft, .mdescRight, -.memItemLeft, .memItemRight, -.memTemplItemLeft, .memTemplItemRight, .memTemplParams { - background-color: #F9FAFC; - border: none; - margin: 4px; - padding: 1px 0 0 8px; -} - -.mdescLeft, .mdescRight { - padding: 0px 8px 4px 8px; - color: #555; -} - -.memSeparator { - border-bottom: 1px solid #E0E5EE; - line-height: 1px; - margin: 0px; - padding: 0px; -} - -.memItemLeft, .memTemplItemLeft { - white-space: nowrap; -} - -.memItemRight { - width: 100%; -} - -.memTemplParams { - color: #506899; - white-space: nowrap; - font-size: 80%; -} - -/* @end */ - -/* @group Member Details */ - -/* Styles for detailed member documentation */ - -.memtitle { - padding: 8px; - border-top: 1px solid #ADBAD4; - border-left: 1px solid #ADBAD4; - border-right: 1px solid #ADBAD4; - border-top-right-radius: 4px; - border-top-left-radius: 4px; - margin-bottom: -1px; - background-image: url('nav_f.png'); - background-repeat: repeat-x; - background-color: #E4E8F1; - line-height: 1.25; - font-weight: 300; - float:left; -} - -.permalink -{ - font-size: 65%; - display: inline-block; - vertical-align: middle; -} - -.memtemplate { - font-size: 80%; - color: #506899; - font-weight: normal; - margin-left: 9px; -} - -.memnav { - background-color: #EDEFF5; - border: 1px solid #A9B6D2; - text-align: center; - margin: 2px; - margin-right: 15px; - padding: 2px; -} - -.mempage { - width: 100%; -} - -.memitem { - padding: 0; - margin-bottom: 10px; - margin-right: 5px; - -webkit-transition: box-shadow 0.5s linear; - -moz-transition: box-shadow 0.5s linear; - -ms-transition: box-shadow 0.5s linear; - -o-transition: box-shadow 0.5s linear; - transition: box-shadow 0.5s linear; - display: table !important; - width: 100%; -} - -.memitem.glow { - box-shadow: 0 0 15px cyan; -} - -.memname { - font-weight: 400; - margin-left: 6px; -} - -.memname td { - vertical-align: bottom; -} - -.memproto, dl.reflist dt { - border-top: 1px solid #ADBAD4; - border-left: 1px solid #ADBAD4; - border-right: 1px solid #ADBAD4; - padding: 6px 0px 6px 0px; - color: #2A3650; - font-weight: bold; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - background-color: #E1E5EF; - /* opera specific markup */ - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - border-top-right-radius: 4px; - /* firefox specific markup */ - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - -moz-border-radius-topright: 4px; - /* webkit specific markup */ - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - -webkit-border-top-right-radius: 4px; - -} - -.overload { - font-family: "courier new",courier,monospace; - font-size: 65%; -} - -.memdoc, dl.reflist dd { - border-bottom: 1px solid #ADBAD4; - border-left: 1px solid #ADBAD4; - border-right: 1px solid #ADBAD4; - padding: 6px 10px 2px 10px; - background-color: #FBFCFD; - border-top-width: 0; - background-image:url('nav_g.png'); - background-repeat:repeat-x; - background-color: #FFFFFF; - /* opera specific markup */ - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - /* firefox specific markup */ - -moz-border-radius-bottomleft: 4px; - -moz-border-radius-bottomright: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - /* webkit specific markup */ - -webkit-border-bottom-left-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -} - -dl.reflist dt { - padding: 5px; -} - -dl.reflist dd { - margin: 0px 0px 10px 0px; - padding: 5px; -} - -.paramkey { - text-align: right; -} - -.paramtype { - white-space: nowrap; -} - -.paramname { - color: #602020; - white-space: nowrap; -} -.paramname em { - font-style: normal; -} -.paramname code { - line-height: 14px; -} - -.params, .retval, .exception, .tparams { - margin-left: 0px; - padding-left: 0px; -} - -.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { - font-weight: bold; - vertical-align: top; -} - -.params .paramtype, .tparams .paramtype { - font-style: italic; - vertical-align: top; -} - -.params .paramdir, .tparams .paramdir { - font-family: "courier new",courier,monospace; - vertical-align: top; -} - -table.mlabels { - border-spacing: 0px; -} - -td.mlabels-left { - width: 100%; - padding: 0px; -} - -td.mlabels-right { - vertical-align: bottom; - padding: 0px; - white-space: nowrap; -} - -span.mlabels { - margin-left: 8px; -} - -span.mlabel { - background-color: #7A8FB9; - border-top:1px solid #5D77AA; - border-left:1px solid #5D77AA; - border-right:1px solid #C8D0E2; - border-bottom:1px solid #C8D0E2; - text-shadow: none; - color: white; - margin-right: 4px; - padding: 2px 3px; - border-radius: 3px; - font-size: 7pt; - white-space: nowrap; - vertical-align: middle; -} - - - -/* @end */ - -/* these are for tree view inside a (index) page */ - -div.directory { - margin: 10px 0px; - border-top: 1px solid #A2B0CE; - border-bottom: 1px solid #A2B0CE; - width: 100%; -} - -.directory table { - border-collapse:collapse; -} - -.directory td { - margin: 0px; - padding: 0px; - vertical-align: top; -} - -.directory td.entry { - white-space: nowrap; - padding-right: 6px; - padding-top: 3px; -} - -.directory td.entry a { - outline:none; -} - -.directory td.entry a img { - border: none; -} - -.directory td.desc { - width: 100%; - padding-left: 6px; - padding-right: 6px; - padding-top: 3px; - border-left: 1px solid rgba(0,0,0,0.05); -} - -.directory tr.even { - padding-left: 6px; - background-color: #F7F8FB; -} - -.directory img { - vertical-align: -30%; -} - -.directory .levels { - white-space: nowrap; - width: 100%; - text-align: right; - font-size: 9pt; -} - -.directory .levels span { - cursor: pointer; - padding-left: 2px; - padding-right: 2px; - color: #455A84; -} - -.arrow { - color: #A2B0CE; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - cursor: pointer; - font-size: 80%; - display: inline-block; - width: 16px; - height: 22px; -} - -.icon { - font-family: Arial, Helvetica; - font-weight: bold; - font-size: 12px; - height: 14px; - width: 16px; - display: inline-block; - background-color: #7A8FB9; - color: white; - text-align: center; - border-radius: 4px; - margin-left: 2px; - margin-right: 2px; -} - -.icona { - width: 24px; - height: 22px; - display: inline-block; -} - -.iconfopen { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('folderopen.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -.iconfclosed { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('folderclosed.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -.icondoc { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('doc.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -table.directory { - font: 400 14px Roboto,sans-serif; -} - -/* @end */ - -div.dynheader { - margin-top: 8px; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -address { - font-style: normal; - color: #303F5C; -} - -table.doxtable caption { - caption-side: top; -} - -table.doxtable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.doxtable td, table.doxtable th { - border: 1px solid #334262; - padding: 3px 7px 2px; -} - -table.doxtable th { - background-color: #3E5278; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -table.fieldtable { - /*width: 100%;*/ - margin-bottom: 10px; - border: 1px solid #ADBAD4; - border-spacing: 0px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); - box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); -} - -.fieldtable td, .fieldtable th { - padding: 3px 7px 2px; -} - -.fieldtable td.fieldtype, .fieldtable td.fieldname { - white-space: nowrap; - border-right: 1px solid #ADBAD4; - border-bottom: 1px solid #ADBAD4; - vertical-align: top; -} - -.fieldtable td.fieldname { - padding-top: 3px; -} - -.fieldtable td.fielddoc { - border-bottom: 1px solid #ADBAD4; - /*width: 100%;*/ -} - -.fieldtable td.fielddoc p:first-child { - margin-top: 0px; -} - -.fieldtable td.fielddoc p:last-child { - margin-bottom: 2px; -} - -.fieldtable tr:last-child td { - border-bottom: none; -} - -.fieldtable th { - background-image:url('nav_f.png'); - background-repeat:repeat-x; - background-color: #E4E8F1; - font-size: 90%; - color: #2A3650; - padding-bottom: 4px; - padding-top: 5px; - text-align:left; - font-weight: 400; - -moz-border-radius-topleft: 4px; - -moz-border-radius-topright: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - border-bottom: 1px solid #ADBAD4; -} - - -.tabsearch { - top: 0px; - left: 10px; - height: 36px; - background-image: url('tab_b.png'); - z-index: 101; - overflow: hidden; - font-size: 13px; -} - -.navpath ul -{ - font-size: 11px; - background-image:url('tab_b.png'); - background-repeat:repeat-x; - background-position: 0 -5px; - height:30px; - line-height:30px; - color:#90A2C5; - border:solid 1px #C6CFE1; - overflow:hidden; - margin:0px; - padding:0px; -} - -.navpath li -{ - list-style-type:none; - float:left; - padding-left:10px; - padding-right:15px; - background-image:url('bc_s.png'); - background-repeat:no-repeat; - background-position:right; - color:#3D5075; -} - -.navpath li.navelem a -{ - height:32px; - display:block; - text-decoration: none; - outline: none; - color: #2E3C58; - font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - text-decoration: none; -} - -.navpath li.navelem a:hover -{ - color:#7187B4; -} - -.navpath li.footer -{ - list-style-type:none; - float:right; - padding-left:10px; - padding-right:15px; - background-image:none; - background-repeat:no-repeat; - background-position:right; - color:#3D5075; - font-size: 8pt; -} - - -div.summary -{ - float: right; - font-size: 8pt; - padding-right: 5px; - width: 50%; - text-align: right; -} - -div.summary a -{ - white-space: nowrap; -} - -table.classindex -{ - margin: 10px; - white-space: nowrap; - margin-left: 3%; - margin-right: 3%; - width: 94%; - border: 0; - border-spacing: 0; - padding: 0; -} - -div.ingroups -{ - font-size: 8pt; - width: 50%; - text-align: left; -} - -div.ingroups a -{ - white-space: nowrap; -} - -div.header -{ - background-image:url('nav_h.png'); - background-repeat:repeat-x; - background-color: #F9FAFC; - margin: 0px; - border-bottom: 1px solid #C8D0E2; -} - -div.headertitle -{ - padding: 5px 5px 5px 10px; -} - -.PageDocRTL-title div.headertitle { - text-align: right; - direction: rtl; -} - -dl { - padding: 0 0 0 0; -} - -/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ -dl.section { - margin-left: 0px; - padding-left: 0px; -} - -dl.section.DocNodeRTL { - margin-right: 0px; - padding-right: 0px; -} - -dl.note { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #D0C000; -} - -dl.note.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #D0C000; -} - -dl.warning, dl.attention { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #FF0000; -} - -dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #FF0000; -} - -dl.pre, dl.post, dl.invariant { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #00D000; -} - -dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #00D000; -} - -dl.deprecated { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #505050; -} - -dl.deprecated.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #505050; -} - -dl.todo { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #00C0E0; -} - -dl.todo.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #00C0E0; -} - -dl.test { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #3030E0; -} - -dl.test.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #3030E0; -} - -dl.bug { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #C08050; -} - -dl.bug.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #C08050; -} - -dl.section dd { - margin-bottom: 6px; -} - - -#projectlogo -{ - text-align: center; - vertical-align: bottom; - border-collapse: separate; -} - -#projectlogo img -{ - border: 0px none; -} - -#projectalign -{ - vertical-align: middle; -} - -#projectname -{ - font: 300% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 2px 0px; -} - -#projectbrief -{ - font: 120% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#projectnumber -{ - font: 50% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#titlearea -{ - padding: 0px; - margin: 0px; - width: 100%; - border-bottom: 1px solid #5D77AA; -} - -.image -{ - text-align: center; -} - -.dotgraph -{ - text-align: center; -} - -.mscgraph -{ - text-align: center; -} - -.plantumlgraph -{ - text-align: center; -} - -.diagraph -{ - text-align: center; -} - -.caption -{ - font-weight: bold; -} - -div.zoom -{ - border: 1px solid #96A7C8; -} - -dl.citelist { - margin-bottom:50px; -} - -dl.citelist dt { - color:#394B6E; - float:left; - font-weight:bold; - margin-right:10px; - padding:5px; -} - -dl.citelist dd { - margin:2px 0; - padding:5px 0; -} - -div.toc { - padding: 14px 25px; - background-color: #F5F7FA; - border: 1px solid #DAE0EC; - border-radius: 7px 7px 7px 7px; - float: right; - height: auto; - margin: 0 8px 10px 10px; - width: 200px; -} - -.PageDocRTL-title div.toc { - float: left !important; - text-align: right; -} - -div.toc li { - background: url("bdwn.png") no-repeat scroll 0 5px transparent; - font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; - margin-top: 5px; - padding-left: 10px; - padding-top: 2px; -} - -.PageDocRTL-title div.toc li { - background-position-x: right !important; - padding-left: 0 !important; - padding-right: 10px; -} - -div.toc h3 { - font: bold 12px/1.2 Arial,FreeSans,sans-serif; - color: #506899; - border-bottom: 0 none; - margin: 0; -} - -div.toc ul { - list-style: none outside none; - border: medium none; - padding: 0px; -} - -div.toc li.level1 { - margin-left: 0px; -} - -div.toc li.level2 { - margin-left: 15px; -} - -div.toc li.level3 { - margin-left: 30px; -} - -div.toc li.level4 { - margin-left: 45px; -} - -.PageDocRTL-title div.toc li.level1 { - margin-left: 0 !important; - margin-right: 0; -} - -.PageDocRTL-title div.toc li.level2 { - margin-left: 0 !important; - margin-right: 15px; -} - -.PageDocRTL-title div.toc li.level3 { - margin-left: 0 !important; - margin-right: 30px; -} - -.PageDocRTL-title div.toc li.level4 { - margin-left: 0 !important; - margin-right: 45px; -} - -.inherit_header { - font-weight: bold; - color: gray; - cursor: pointer; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.inherit_header td { - padding: 6px 0px 2px 5px; -} - -.inherit { - display: none; -} - -tr.heading h2 { - margin-top: 12px; - margin-bottom: 4px; -} - -/* tooltip related style info */ - -.ttc { - position: absolute; - display: none; -} - -#powerTip { - cursor: default; - white-space: nowrap; - background-color: white; - border: 1px solid gray; - border-radius: 4px 4px 4px 4px; - box-shadow: 1px 1px 7px gray; - display: none; - font-size: smaller; - max-width: 80%; - opacity: 0.9; - padding: 1ex 1em 1em; - position: absolute; - z-index: 2147483647; -} - -#powerTip div.ttdoc { - color: grey; - font-style: italic; -} - -#powerTip div.ttname a { - font-weight: bold; -} - -#powerTip div.ttname { - font-weight: bold; -} - -#powerTip div.ttdeci { - color: #006318; -} - -#powerTip div { - margin: 0px; - padding: 0px; - font: 12px/16px Roboto,sans-serif; -} - -#powerTip:before, #powerTip:after { - content: ""; - position: absolute; - margin: 0px; -} - -#powerTip.n:after, #powerTip.n:before, -#powerTip.s:after, #powerTip.s:before, -#powerTip.w:after, #powerTip.w:before, -#powerTip.e:after, #powerTip.e:before, -#powerTip.ne:after, #powerTip.ne:before, -#powerTip.se:after, #powerTip.se:before, -#powerTip.nw:after, #powerTip.nw:before, -#powerTip.sw:after, #powerTip.sw:before { - border: solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; -} - -#powerTip.n:after, #powerTip.s:after, -#powerTip.w:after, #powerTip.e:after, -#powerTip.nw:after, #powerTip.ne:after, -#powerTip.sw:after, #powerTip.se:after { - border-color: rgba(255, 255, 255, 0); -} - -#powerTip.n:before, #powerTip.s:before, -#powerTip.w:before, #powerTip.e:before, -#powerTip.nw:before, #powerTip.ne:before, -#powerTip.sw:before, #powerTip.se:before { - border-color: rgba(128, 128, 128, 0); -} - -#powerTip.n:after, #powerTip.n:before, -#powerTip.ne:after, #powerTip.ne:before, -#powerTip.nw:after, #powerTip.nw:before { - top: 100%; -} - -#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { - border-top-color: #FFFFFF; - border-width: 10px; - margin: 0px -10px; -} -#powerTip.n:before { - border-top-color: #808080; - border-width: 11px; - margin: 0px -11px; -} -#powerTip.n:after, #powerTip.n:before { - left: 50%; -} - -#powerTip.nw:after, #powerTip.nw:before { - right: 14px; -} - -#powerTip.ne:after, #powerTip.ne:before { - left: 14px; -} - -#powerTip.s:after, #powerTip.s:before, -#powerTip.se:after, #powerTip.se:before, -#powerTip.sw:after, #powerTip.sw:before { - bottom: 100%; -} - -#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { - border-bottom-color: #FFFFFF; - border-width: 10px; - margin: 0px -10px; -} - -#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { - border-bottom-color: #808080; - border-width: 11px; - margin: 0px -11px; -} - -#powerTip.s:after, #powerTip.s:before { - left: 50%; -} - -#powerTip.sw:after, #powerTip.sw:before { - right: 14px; -} - -#powerTip.se:after, #powerTip.se:before { - left: 14px; -} - -#powerTip.e:after, #powerTip.e:before { - left: 100%; -} -#powerTip.e:after { - border-left-color: #FFFFFF; - border-width: 10px; - top: 50%; - margin-top: -10px; -} -#powerTip.e:before { - border-left-color: #808080; - border-width: 11px; - top: 50%; - margin-top: -11px; -} - -#powerTip.w:after, #powerTip.w:before { - right: 100%; -} -#powerTip.w:after { - border-right-color: #FFFFFF; - border-width: 10px; - top: 50%; - margin-top: -10px; -} -#powerTip.w:before { - border-right-color: #808080; - border-width: 11px; - top: 50%; - margin-top: -11px; -} - -@media print -{ - #top { display: none; } - #side-nav { display: none; } - #nav-path { display: none; } - body { overflow:visible; } - h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } - .summary { display: none; } - .memitem { page-break-inside: avoid; } - #doc-content - { - margin-left:0 !important; - height:auto !important; - width:auto !important; - overflow:inherit; - display:inline; - } -} - -/* @group Markdown */ - -/* -table.markdownTable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.markdownTable td, table.markdownTable th { - border: 1px solid #334262; - padding: 3px 7px 2px; -} - -table.markdownTableHead tr { -} - -table.markdownTableBodyLeft td, table.markdownTable th { - border: 1px solid #334262; - padding: 3px 7px 2px; -} - -th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone { - background-color: #3E5278; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -th.markdownTableHeadLeft { - text-align: left -} - -th.markdownTableHeadRight { - text-align: right -} - -th.markdownTableHeadCenter { - text-align: center -} -*/ - -table.markdownTable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.markdownTable td, table.markdownTable th { - border: 1px solid #334262; - padding: 3px 7px 2px; -} - -table.markdownTable tr { -} - -th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { - background-color: #3E5278; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -th.markdownTableHeadLeft, td.markdownTableBodyLeft { - text-align: left -} - -th.markdownTableHeadRight, td.markdownTableBodyRight { - text-align: right -} - -th.markdownTableHeadCenter, td.markdownTableBodyCenter { - text-align: center -} - -.DocNodeRTL { - text-align: right; - direction: rtl; -} - -.DocNodeLTR { - text-align: left; - direction: ltr; -} - -table.DocNodeRTL { - width: auto; - margin-right: 0; - margin-left: auto; -} - -table.DocNodeLTR { - width: auto; - margin-right: auto; - margin-left: 0; -} - -tt, code, kbd, samp -{ - display: inline-block; - direction:ltr; -} -/* @end */ - -u { - text-decoration: underline; -} - diff --git a/docs/Doxygen/doxygen.png b/docs/Doxygen/doxygen.png deleted file mode 100644 index af0273bf2..000000000 Binary files a/docs/Doxygen/doxygen.png and /dev/null differ diff --git a/docs/Doxygen/dynsections.js b/docs/Doxygen/dynsections.js deleted file mode 100644 index c8e84aaa6..000000000 --- a/docs/Doxygen/dynsections.js +++ /dev/null @@ -1,127 +0,0 @@ -/* - @licstart The following is the entire license notice for the - JavaScript code in this file. - - Copyright (C) 1997-2017 by Dimitri van Heesch - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - @licend The above is the entire license notice - for the JavaScript code in this file - */ -function toggleVisibility(linkObj) -{ - var base = $(linkObj).attr('id'); - var summary = $('#'+base+'-summary'); - var content = $('#'+base+'-content'); - var trigger = $('#'+base+'-trigger'); - var src=$(trigger).attr('src'); - if (content.is(':visible')===true) { - content.hide(); - summary.show(); - $(linkObj).addClass('closed').removeClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); - } else { - content.show(); - summary.hide(); - $(linkObj).removeClass('closed').addClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); - } - return false; -} - -function updateStripes() -{ - $('table.directory tr'). - removeClass('even').filter(':visible:even').addClass('even'); -} - -function toggleLevel(level) -{ - $('table.directory tr').each(function() { - var l = this.id.split('_').length-1; - var i = $('#img'+this.id.substring(3)); - var a = $('#arr'+this.id.substring(3)); - if (l - - - - - - -Arduino Helpers: Examples - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
Examples
-
- - - - - diff --git a/docs/Doxygen/files.html b/docs/Doxygen/files.html deleted file mode 100644 index c7dd5bdc1..000000000 --- a/docs/Doxygen/files.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - - -Arduino Helpers: File List - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
File List
-
-
-
Here is a list of all files with brief descriptions:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 ADCConfig.cpp
 ADCConfig.hppThis file contains the platform-specific ADC resolutions. By default, the library automatically selects the maximum supported resolution for known boards, otherwise, it falls back to 10 bits
 AnalogMultiplex.cpp
 AnalogMultiplex.hpp
 Arduino_Helpers.hDummy header file for Arduino builder. You have to add this file first, so the other headers are in the include path
 Array.cpp
 Array.hpp
 ArrayHelpers.cpp
 ArrayHelpers.hpp
 BitArray.cpp
 BitArray.hpp
 Button.cpp
 Button.hpp
 ButtonMatrix.cpp
 ButtonMatrix.hpp
 ButtonMatrix.ipp
 Debug.cpp
 Debug.hpp
 DebugVal.hpp
 DotBarDisplayLEDs.cpp
 DotBarDisplayLEDs.hpp
 EMA.cpp
 EMA.hpp
 Error.cpp
 Error.hpp
 Exit.cpp
 ExtendedInputOutput.cpp
 ExtendedInputOutput.hpp
 ExtendedIOElement.cpp
 ExtendedIOElement.hpp
 FilteredAnalog.cpp
 FilteredAnalog.hpp
 FixArduinoMacros.hpp
 Frequency.hpp
 Hardware-Types.hpp
 Hysteresis.cpp
 Hysteresis.hpp
 IncreaseBitDepth.cpp
 IncreaseBitDepth.hpp
 IncrementButton.cpp
 IncrementButton.hpp
 IncrementDecrementButtons.cpp
 IncrementDecrementButtons.hpp
 LEDs.cpp
 LEDs.hpp
 LinkedList.cpp
 LinkedList.hpp
 MAX7219.cpp
 MAX7219.hpp
 MAX7219_Base.cpp
 MAX7219_Base.hpp
 MAX7219SevenSegmentDisplay.cpp
 MAX7219SevenSegmentDisplay.hpp
 MillisMicrosTimer.cpp
 MillisMicrosTimer.hpp
 MinMaxFix.cpp
 MinMaxFix.hpp
 NamespaceSettings.cpp
 NamespaceSettings.hpp
 PrintStream.cpp
 PrintStream.hpp
 Settings.cpp
 Settings.hppAll user settings and debugging options can be changed here
 SettingsWrapper.cpp
 SettingsWrapper.hpp
 ShiftRegisterOut.cpp
 ShiftRegisterOut.hpp
 ShiftRegisterOut.ipp
 ShiftRegisterOutBase.cpp
 ShiftRegisterOutBase.hpp
 ShiftRegisterOutBase.ipp
 ShiftRegisterOutRGB.cpp
 ShiftRegisterOutRGB.hpp
 SPIShiftRegisterOut.cpp
 SPIShiftRegisterOut.hpp
 SPIShiftRegisterOut.ipp
 StaticSizeExtendedIOElement.cpp
 StaticSizeExtendedIOElement.hpp
 TeensyUSBTypes.hpp
 UniquePtr.cpp
 UniquePtr.hpp
 Updatable.cpp
 Updatable.hpp
 Warnings.hpp
-
-
- - - - diff --git a/docs/Doxygen/folderclosed.png b/docs/Doxygen/folderclosed.png deleted file mode 100644 index d8a156c6a..000000000 Binary files a/docs/Doxygen/folderclosed.png and /dev/null differ diff --git a/docs/Doxygen/folderopen.png b/docs/Doxygen/folderopen.png deleted file mode 100644 index d413a2e70..000000000 Binary files a/docs/Doxygen/folderopen.png and /dev/null differ diff --git a/docs/Doxygen/functions.html b/docs/Doxygen/functions.html deleted file mode 100644 index dabb5dff1..000000000 --- a/docs/Doxygen/functions.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- a -

-
- - - - diff --git a/docs/Doxygen/functions_b.html b/docs/Doxygen/functions_b.html deleted file mode 100644 index 90e1d1995..000000000 --- a/docs/Doxygen/functions_b.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- - - - - - diff --git a/docs/Doxygen/functions_c.html b/docs/Doxygen/functions_c.html deleted file mode 100644 index 08e217e20..000000000 --- a/docs/Doxygen/functions_c.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- c -

-
- - - - diff --git a/docs/Doxygen/functions_d.html b/docs/Doxygen/functions_d.html deleted file mode 100644 index 66550cf72..000000000 --- a/docs/Doxygen/functions_d.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- d -

-
- - - - diff --git a/docs/Doxygen/functions_e.html b/docs/Doxygen/functions_e.html deleted file mode 100644 index 583a0d37b..000000000 --- a/docs/Doxygen/functions_e.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- e -

-
- - - - diff --git a/docs/Doxygen/functions_enum.html b/docs/Doxygen/functions_enum.html deleted file mode 100644 index 8ec1c06a4..000000000 --- a/docs/Doxygen/functions_enum.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - Enumerations - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- - - - - - diff --git a/docs/Doxygen/functions_eval.html b/docs/Doxygen/functions_eval.html deleted file mode 100644 index 4f997f424..000000000 --- a/docs/Doxygen/functions_eval.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - Enumerator - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
- - - - diff --git a/docs/Doxygen/functions_f.html b/docs/Doxygen/functions_f.html deleted file mode 100644 index 4f3eb160a..000000000 --- a/docs/Doxygen/functions_f.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- f -

-
- - - - diff --git a/docs/Doxygen/functions_func.html b/docs/Doxygen/functions_func.html deleted file mode 100644 index ceee65d4c..000000000 --- a/docs/Doxygen/functions_func.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - Functions - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- a -

-
- - - - diff --git a/docs/Doxygen/functions_func_b.html b/docs/Doxygen/functions_func_b.html deleted file mode 100644 index 8899046c2..000000000 --- a/docs/Doxygen/functions_func_b.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - Functions - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- - - - - - diff --git a/docs/Doxygen/functions_func_c.html b/docs/Doxygen/functions_func_c.html deleted file mode 100644 index 2c617d210..000000000 --- a/docs/Doxygen/functions_func_c.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - Functions - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- c -

-
- - - - diff --git a/docs/Doxygen/functions_func_d.html b/docs/Doxygen/functions_func_d.html deleted file mode 100644 index ab10e8af8..000000000 --- a/docs/Doxygen/functions_func_d.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - Functions - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- d -

-
- - - - diff --git a/docs/Doxygen/functions_func_e.html b/docs/Doxygen/functions_func_e.html deleted file mode 100644 index 0a038427c..000000000 --- a/docs/Doxygen/functions_func_e.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - Functions - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- e -

-
- - - - diff --git a/docs/Doxygen/functions_func_f.html b/docs/Doxygen/functions_func_f.html deleted file mode 100644 index 5d9a25201..000000000 --- a/docs/Doxygen/functions_func_f.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - Functions - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- f -

-
- - - - diff --git a/docs/Doxygen/functions_func_g.html b/docs/Doxygen/functions_func_g.html deleted file mode 100644 index 6203cf5ec..000000000 --- a/docs/Doxygen/functions_func_g.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - Functions - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- g -

-
- - - - diff --git a/docs/Doxygen/functions_func_i.html b/docs/Doxygen/functions_func_i.html deleted file mode 100644 index 341394393..000000000 --- a/docs/Doxygen/functions_func_i.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - Functions - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- i -

-
- - - - diff --git a/docs/Doxygen/functions_func_l.html b/docs/Doxygen/functions_func_l.html deleted file mode 100644 index d97af9017..000000000 --- a/docs/Doxygen/functions_func_l.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - Functions - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- l -

-
- - - - diff --git a/docs/Doxygen/functions_func_m.html b/docs/Doxygen/functions_func_m.html deleted file mode 100644 index 74176a37c..000000000 --- a/docs/Doxygen/functions_func_m.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - Functions - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- m -

-
- - - - diff --git a/docs/Doxygen/functions_func_n.html b/docs/Doxygen/functions_func_n.html deleted file mode 100644 index c8b534c50..000000000 --- a/docs/Doxygen/functions_func_n.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - Functions - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- n -

-
- - - - diff --git a/docs/Doxygen/functions_func_o.html b/docs/Doxygen/functions_func_o.html deleted file mode 100644 index 99d8c2d64..000000000 --- a/docs/Doxygen/functions_func_o.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - Functions - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- - - - - - diff --git a/docs/Doxygen/functions_func_p.html b/docs/Doxygen/functions_func_p.html deleted file mode 100644 index 65de5efc8..000000000 --- a/docs/Doxygen/functions_func_p.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - Functions - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- p -

-
- - - - diff --git a/docs/Doxygen/functions_func_r.html b/docs/Doxygen/functions_func_r.html deleted file mode 100644 index 2b9b807f9..000000000 --- a/docs/Doxygen/functions_func_r.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - Functions - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- r -

-
- - - - diff --git a/docs/Doxygen/functions_func_s.html b/docs/Doxygen/functions_func_s.html deleted file mode 100644 index bded34337..000000000 --- a/docs/Doxygen/functions_func_s.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - Functions - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- s -

-
- - - - diff --git a/docs/Doxygen/functions_func_t.html b/docs/Doxygen/functions_func_t.html deleted file mode 100644 index 0e12866f4..000000000 --- a/docs/Doxygen/functions_func_t.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - Functions - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- t -

-
- - - - diff --git a/docs/Doxygen/functions_func_u.html b/docs/Doxygen/functions_func_u.html deleted file mode 100644 index 6e642bead..000000000 --- a/docs/Doxygen/functions_func_u.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - Functions - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- - - - - - diff --git a/docs/Doxygen/functions_func_~.html b/docs/Doxygen/functions_func_~.html deleted file mode 100644 index 69b3fcfd3..000000000 --- a/docs/Doxygen/functions_func_~.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - Functions - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- ~ -

-
- - - - diff --git a/docs/Doxygen/functions_g.html b/docs/Doxygen/functions_g.html deleted file mode 100644 index dbc5554d1..000000000 --- a/docs/Doxygen/functions_g.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- g -

-
- - - - diff --git a/docs/Doxygen/functions_h.html b/docs/Doxygen/functions_h.html deleted file mode 100644 index f76f9b3aa..000000000 --- a/docs/Doxygen/functions_h.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- h -

-
- - - - diff --git a/docs/Doxygen/functions_i.html b/docs/Doxygen/functions_i.html deleted file mode 100644 index 123a305d1..000000000 --- a/docs/Doxygen/functions_i.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- i -

-
- - - - diff --git a/docs/Doxygen/functions_l.html b/docs/Doxygen/functions_l.html deleted file mode 100644 index eb00eca2c..000000000 --- a/docs/Doxygen/functions_l.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- l -

-
- - - - diff --git a/docs/Doxygen/functions_m.html b/docs/Doxygen/functions_m.html deleted file mode 100644 index 448ec08ac..000000000 --- a/docs/Doxygen/functions_m.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- m -

-
- - - - diff --git a/docs/Doxygen/functions_n.html b/docs/Doxygen/functions_n.html deleted file mode 100644 index 0f0e7f321..000000000 --- a/docs/Doxygen/functions_n.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- n -

-
- - - - diff --git a/docs/Doxygen/functions_o.html b/docs/Doxygen/functions_o.html deleted file mode 100644 index 046d8dc4b..000000000 --- a/docs/Doxygen/functions_o.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- o -

-
- - - - diff --git a/docs/Doxygen/functions_p.html b/docs/Doxygen/functions_p.html deleted file mode 100644 index 2b012f5a0..000000000 --- a/docs/Doxygen/functions_p.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- p -

-
- - - - diff --git a/docs/Doxygen/functions_r.html b/docs/Doxygen/functions_r.html deleted file mode 100644 index d464c8152..000000000 --- a/docs/Doxygen/functions_r.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- r -

-
- - - - diff --git a/docs/Doxygen/functions_s.html b/docs/Doxygen/functions_s.html deleted file mode 100644 index 93082b093..000000000 --- a/docs/Doxygen/functions_s.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- s -

-
- - - - diff --git a/docs/Doxygen/functions_t.html b/docs/Doxygen/functions_t.html deleted file mode 100644 index b60e508a7..000000000 --- a/docs/Doxygen/functions_t.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- t -

-
- - - - diff --git a/docs/Doxygen/functions_type.html b/docs/Doxygen/functions_type.html deleted file mode 100644 index 34a04719c..000000000 --- a/docs/Doxygen/functions_type.html +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - Typedefs - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- - - - - - diff --git a/docs/Doxygen/functions_u.html b/docs/Doxygen/functions_u.html deleted file mode 100644 index 96e86879c..000000000 --- a/docs/Doxygen/functions_u.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- u -

-
- - - - diff --git a/docs/Doxygen/functions_v.html b/docs/Doxygen/functions_v.html deleted file mode 100644 index 0c604828c..000000000 --- a/docs/Doxygen/functions_v.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- v -

-
- - - - diff --git a/docs/Doxygen/functions_vars.html b/docs/Doxygen/functions_vars.html deleted file mode 100644 index 383b0330c..000000000 --- a/docs/Doxygen/functions_vars.html +++ /dev/null @@ -1,379 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - Variables - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- a -

- - -

- b -

- - -

- c -

- - -

- d -

- - -

- e -

- - -

- f -

- - -

- g -

- - -

- h -

- - -

- i -

- - -

- l -

- - -

- m -

- - -

- n -

- - -

- o -

- - -

- p -

- - -

- r -

- - -

- s -

- - -

- u -

- - -

- v -

-
- - - - diff --git a/docs/Doxygen/functions_~.html b/docs/Doxygen/functions_~.html deleted file mode 100644 index f51c5d180..000000000 --- a/docs/Doxygen/functions_~.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - -Arduino Helpers: Class Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- ~ -

-
- - - - diff --git a/docs/Doxygen/globals.html b/docs/Doxygen/globals.html deleted file mode 100644 index 7a9265514..000000000 --- a/docs/Doxygen/globals.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - -Arduino Helpers: File Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- a -

-
- - - - diff --git a/docs/Doxygen/globals_b.html b/docs/Doxygen/globals_b.html deleted file mode 100644 index 9161e6ee7..000000000 --- a/docs/Doxygen/globals_b.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -Arduino Helpers: File Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- b -

-
- - - - diff --git a/docs/Doxygen/globals_c.html b/docs/Doxygen/globals_c.html deleted file mode 100644 index 3b6c14ecb..000000000 --- a/docs/Doxygen/globals_c.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - -Arduino Helpers: File Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- c -

-
- - - - diff --git a/docs/Doxygen/globals_d.html b/docs/Doxygen/globals_d.html deleted file mode 100644 index 7b7ba3353..000000000 --- a/docs/Doxygen/globals_d.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - - -Arduino Helpers: File Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- d -

-
- - - - diff --git a/docs/Doxygen/globals_defs.html b/docs/Doxygen/globals_defs.html deleted file mode 100644 index 477614382..000000000 --- a/docs/Doxygen/globals_defs.html +++ /dev/null @@ -1,255 +0,0 @@ - - - - - - - -Arduino Helpers: File Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- a -

- - -

- b -

- - -

- c -

- - -

- d -

- - -

- e -

- - -

- f -

- - -

- h -

- - -

- n -

- - -

- u -

-
- - - - diff --git a/docs/Doxygen/globals_e.html b/docs/Doxygen/globals_e.html deleted file mode 100644 index 52c6057e6..000000000 --- a/docs/Doxygen/globals_e.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - -Arduino Helpers: File Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- e -

-
- - - - diff --git a/docs/Doxygen/globals_enum.html b/docs/Doxygen/globals_enum.html deleted file mode 100644 index 75cbb66c5..000000000 --- a/docs/Doxygen/globals_enum.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -Arduino Helpers: File Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
- - - - diff --git a/docs/Doxygen/globals_eval.html b/docs/Doxygen/globals_eval.html deleted file mode 100644 index de18ef2ca..000000000 --- a/docs/Doxygen/globals_eval.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -Arduino Helpers: File Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
- - - - diff --git a/docs/Doxygen/globals_f.html b/docs/Doxygen/globals_f.html deleted file mode 100644 index 4b9c54877..000000000 --- a/docs/Doxygen/globals_f.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -Arduino Helpers: File Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- f -

-
- - - - diff --git a/docs/Doxygen/globals_func.html b/docs/Doxygen/globals_func.html deleted file mode 100644 index abe88f895..000000000 --- a/docs/Doxygen/globals_func.html +++ /dev/null @@ -1,307 +0,0 @@ - - - - - - - -Arduino Helpers: File Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-  - -

- a -

- - -

- b -

- - -

- c -

- - -

- d -

- - -

- e -

- - -

- f -

- - -

- g -

- - -

- h -

- - -

- i -

- - -

- l -

- - -

- m -

- - -

- n -

- - -

- o -

- - -

- p -

- - -

- s -

- - -

- u -

-
- - - - diff --git a/docs/Doxygen/globals_g.html b/docs/Doxygen/globals_g.html deleted file mode 100644 index 3f8fd9ef3..000000000 --- a/docs/Doxygen/globals_g.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: File Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- g -

-
- - - - diff --git a/docs/Doxygen/globals_h.html b/docs/Doxygen/globals_h.html deleted file mode 100644 index 914bf1077..000000000 --- a/docs/Doxygen/globals_h.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - -Arduino Helpers: File Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- h -

-
- - - - diff --git a/docs/Doxygen/globals_i.html b/docs/Doxygen/globals_i.html deleted file mode 100644 index c1d04041f..000000000 --- a/docs/Doxygen/globals_i.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - -Arduino Helpers: File Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- i -

-
- - - - diff --git a/docs/Doxygen/globals_l.html b/docs/Doxygen/globals_l.html deleted file mode 100644 index 1ad020f6c..000000000 --- a/docs/Doxygen/globals_l.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - -Arduino Helpers: File Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- l -

-
- - - - diff --git a/docs/Doxygen/globals_m.html b/docs/Doxygen/globals_m.html deleted file mode 100644 index a3cabc987..000000000 --- a/docs/Doxygen/globals_m.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - -Arduino Helpers: File Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- m -

-
- - - - diff --git a/docs/Doxygen/globals_n.html b/docs/Doxygen/globals_n.html deleted file mode 100644 index 0acdac719..000000000 --- a/docs/Doxygen/globals_n.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Arduino Helpers: File Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- n -

-
- - - - diff --git a/docs/Doxygen/globals_o.html b/docs/Doxygen/globals_o.html deleted file mode 100644 index 41d679190..000000000 --- a/docs/Doxygen/globals_o.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - -Arduino Helpers: File Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- o -

-
- - - - diff --git a/docs/Doxygen/globals_p.html b/docs/Doxygen/globals_p.html deleted file mode 100644 index 8dd771e26..000000000 --- a/docs/Doxygen/globals_p.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - -Arduino Helpers: File Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- p -

-
- - - - diff --git a/docs/Doxygen/globals_s.html b/docs/Doxygen/globals_s.html deleted file mode 100644 index 602d3bce4..000000000 --- a/docs/Doxygen/globals_s.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - -Arduino Helpers: File Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- s -

-
- - - - diff --git a/docs/Doxygen/globals_t.html b/docs/Doxygen/globals_t.html deleted file mode 100644 index 8cc62d781..000000000 --- a/docs/Doxygen/globals_t.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -Arduino Helpers: File Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- t -

-
- - - - diff --git a/docs/Doxygen/globals_type.html b/docs/Doxygen/globals_type.html deleted file mode 100644 index 13a9a76bb..000000000 --- a/docs/Doxygen/globals_type.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - -Arduino Helpers: File Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
- - - - diff --git a/docs/Doxygen/globals_u.html b/docs/Doxygen/globals_u.html deleted file mode 100644 index 9e2fd0243..000000000 --- a/docs/Doxygen/globals_u.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - -Arduino Helpers: File Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- u -

-
- - - - diff --git a/docs/Doxygen/globals_vars.html b/docs/Doxygen/globals_vars.html deleted file mode 100644 index c01c978e1..000000000 --- a/docs/Doxygen/globals_vars.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - -Arduino Helpers: File Members - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
- - - - diff --git a/docs/Doxygen/graph_legend.html b/docs/Doxygen/graph_legend.html deleted file mode 100644 index 6887ccfd6..000000000 --- a/docs/Doxygen/graph_legend.html +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - - -Arduino Helpers: Graph Legend - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
Graph Legend
-
-
-

This page explains how to interpret the graphs that are generated by doxygen.

-

Consider the following example:

/*! Invisible class because of truncation */
-
class Invisible { };
-
-
/*! Truncated class, inheritance relation is hidden */
-
class Truncated : public Invisible { };
-
-
/* Class not documented with doxygen comments */
-
class Undocumented { };
-
-
/*! Class that is inherited using public inheritance */
-
class PublicBase : public Truncated { };
-
-
/*! A template class */
-
template<class T> class Templ { };
-
-
/*! Class that is inherited using protected inheritance */
-
class ProtectedBase { };
-
-
/*! Class that is inherited using private inheritance */
-
class PrivateBase { };
-
-
/*! Class that is used by the Inherited class */
-
class Used { };
-
-
/*! Super class that inherits a number of other classes */
-
class Inherited : public PublicBase,
-
protected ProtectedBase,
-
private PrivateBase,
-
public Undocumented,
-
public Templ<int>
-
{
-
private:
-
Used *m_usedClass;
-
};
-

This will result in the following graph:

-

The boxes in the above graph have the following meaning:

-
    -
  • -A filled gray box represents the struct or class for which the graph is generated.
  • -
  • -A box with a black border denotes a documented struct or class.
  • -
  • -A box with a gray border denotes an undocumented struct or class.
  • -
  • -A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
  • -
-

The arrows have the following meaning:

-
    -
  • -A dark blue arrow is used to visualize a public inheritance relation between two classes.
  • -
  • -A dark green arrow is used for protected inheritance.
  • -
  • -A dark red arrow is used for private inheritance.
  • -
  • -A purple dashed arrow is used if a class is contained or used by another class. The arrow is labelled with the variable(s) through which the pointed class or struct is accessible.
  • -
  • -A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labelled with the template parameters of the instance.
  • -
-
- - - - diff --git a/docs/Doxygen/graph_legend.md5 b/docs/Doxygen/graph_legend.md5 deleted file mode 100644 index 3b4f8ab28..000000000 --- a/docs/Doxygen/graph_legend.md5 +++ /dev/null @@ -1 +0,0 @@ -2779a1676ca72f29ac6dddfb5b5a4bb2 \ No newline at end of file diff --git a/docs/Doxygen/graph_legend.svg b/docs/Doxygen/graph_legend.svg deleted file mode 100644 index 61dad7097..000000000 --- a/docs/Doxygen/graph_legend.svg +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - -Graph Legend - - -Node9 - -Inherited - - -Node10 - - -PublicBase - - - - -Node10->Node9 - - - - -Node11 - - -Truncated - - - - -Node11->Node10 - - - - -Node13 - - -ProtectedBase - - - - -Node13->Node9 - - - - -Node14 - - -PrivateBase - - - - -Node14->Node9 - - - - -Node15 - -Undocumented - - -Node15->Node9 - - - - -Node16 - - -Templ< int > - - - - -Node16->Node9 - - - - -Node17 - - -Templ< T > - - - - -Node17->Node16 - - -< int > - - -Node18 - - -Used - - - - -Node18->Node9 - - -m_usedClass - - - diff --git a/docs/Doxygen/hierarchy.html b/docs/Doxygen/hierarchy.html deleted file mode 100644 index be37ca8d5..000000000 --- a/docs/Doxygen/hierarchy.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - - -Arduino Helpers: Class Hierarchy - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
Class Hierarchy
-
-
-
-

Go to the graphical class hierarchy

-This inheritance list is sorted roughly, but not completely, alphabetically:
-
[detail level 12345]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 CArray< T, N >An array wrapper for easy copying, comparing, and iterating
 CArray< N >
 CArray< nb_cols >
 CArray< nb_rows >
 CArray< pin_t, N >
 CArraySlice< T, N, Reverse, Const >Class for a view on a slice of an array
 CBitArray< N >A class for arrays of bits
 CBitArray< 8 *8 >
 CButtonA class for reading and debouncing buttons and switches
 CButtonMatrix< nb_rows, nb_cols >A class that reads the states of a button matrix
 CDoublyLinkable< Node >A class that can be inherited from to allow inserting into a DoublyLinkedList
 CDoublyLinkable< ExtendedIOElement >
 CExtendedIOElementAn abstract base class for Extended Input/Output elements
 CStaticSizeExtendedIOElement< N >A class for ExtendedIOElements with a fixed size
 CShiftRegisterOutBase< N >A class for serial-in/parallel-out shift registers, like the 74HC595
 CShiftRegisterOut< N >A class for serial-in/parallel-out shift registers, like the 74HC595
 CSPIShiftRegisterOut< N >A class for serial-in/parallel-out shift registers, like the 74HC595 that are connected to the SPI bus
 CStaticSizeExtendedIOElement< 1<< N >
 CAnalogMultiplex< N >A class for reading multiplexed analog inputs
 CStaticSizeExtendedIOElement< 8 *8 >
 CMAX7219A class for LED outputs using the MAX7219 LED display driver
 CDoublyLinkable< Updatable< T > >
 CUpdatable< T >A super class for object that have to be updated regularly
 CDoublyLinkedList< Node >A class for doubly linked lists
 CDoublyLinkedList< ExtendedIOElement >
 CDoublyLinkedList< Updatable< T > >
 CEMA< K, uint_t >A class for single-pole infinite impulse response filters or exponential moving average filters
 CEMA< FilterShiftFactor, FilterType >
 CEMA_fA class for single-pole infinite impulse response filters or exponential moving average filters
 CFilteredAnalog< Precision, FilterShiftFactor, FilterType, AnalogType, IncRes >A class that reads and filters an analog input
 CFrequencyType-safe class for frequency values
 CHysteresis< BITS, T_in, T_out >A class for applying hysteresis to a given input
 CHysteresis< ADC_BITS+IncRes - Precision, AnalogType, AnalogType >
 CIncrementButtonA class for buttons that increment some counter or setting
 CIncrementDecrementButtonsA class for buttons that increment and decrement some counter or setting
 CIncrementor< T, V >Utility class that acts as a functor to return incremental values
 CArraySlice< T, N, Reverse, Const >::Iterator
 CLEDs< N >A class for collections of LEDs that can display ranges
 CDotBarDisplayLEDs< N >A class for LED bars
 CMAX7219_BaseA base class for classes that control MAX7219 LED drivers
 CMAX7219A class for LED outputs using the MAX7219 LED display driver
 CMAX7219SevenSegmentDisplayA class for 8-digit 7-segment displays with a MAX7219 driver
 CDoublyLinkedList< Node >::node_iterator_base< INode >Base class for doubly linked list iterators
 CDoublyLinkedList< Node >::node_iterator< INode >Forward bidirectional doubly linked list iterator
 CDoublyLinkedList< Node >::reverse_node_iterator< INode >Reverse bidirectional doubly linked list iterator
 CNormalUpdatable
 CSetbase
 CSetbytesep
 CSetprecision
 CShiftRegisterOutRGBA struct for setting the RGB mode for RGB shift registers
 CTimer< time >A class for easily managing timed events
 CUniquePtr< T >Very basic smart pointer
-
-
- - - - diff --git a/docs/Doxygen/index.html b/docs/Doxygen/index.html deleted file mode 100644 index 211242552..000000000 --- a/docs/Doxygen/index.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - -Arduino Helpers: Main Page - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
Arduino Helpers Documentation
-
-
-

Build Status Test Coverage Build Status GitHub

-

-Arduino Helpers

-

-Features

-
    -
  • Containers: Arrays, Bit Arrays, Linked Lists, Smart Pointers.
  • -
  • Extended Input/Output: Use shift registers (e.g. 74HC595) and multiplexers (e.g. 74HC4051, 74HC4067) as if they were normal Arduino IO pins.
  • -
  • Hardware Utilities: Debounced buttons, long press buttons, button matrices, filtered analog inputs, LED ranges, MAX7219 displays and LED matrices.
  • -
  • Filters: Exponential Moving Average filters, Hysteresis.
  • -
  • Math functions: min and max functions instead of macros, functions for uniformly increasing the bit depth of signals, all C++ standard library functions.
  • -
  • Timing Utilities: Blink Without Delay-style timers.
  • -
  • C++ STL Implementation (partial): Some useful parts of the C++ Standard Template Library, adapted to work on AVR Arduinos. Includes the <type_traits>, <algorithm>, <numeric>, <new>, <array>, <bitset>, <optional>, <cmath>, <complex>, <cstdlib>, <cstdint>, <tuple>, <memory> (std::unique_ptr), <initialize_list>, <utility> and <limits> headers, among others.
  • -
-

These utilities were originally part of the Control Surface library, and were split off to be used as a stand-alone library, or as a template for other libraries.

-

Libraries that use the Arduino Helpers library include:

-

-Documentation

-

The automatically generated Doxygen documentation for this library can be found here:
- Documentation
- Test coverage information can be found here:
- Code Coverage
- Arduino examples can be found here:
- Examples

-

-Supported boards

-

For each commit, the continuous integration tests compile the examples for the following boards:

-
    -
  • Arduino UNO
  • -
  • Arduino Leonardo
  • -
  • Teensy 3.2
  • -
  • Arduino Due
  • -
  • Arduino Nano 33 IoT
  • -
  • ESP8266
  • -
  • ESP32
  • -
-

This covers a very large part of the Arduino platform, and similar boards will also work (e.g. Arduino Nano, Arduino Mega, etc.).

-

If you have a board that's not supported, please open an issue and let me know!

-

-Known limitations

-

The Arduino Due toolchain provided by Arduino is very old, and has some configuration problems. As a result, some math functions are not available.
- There is nothing I can do about it in this library, it's a bug in the Arduino Due Core.

-
-
- - - - diff --git a/docs/Doxygen/inherit_graph_0.map b/docs/Doxygen/inherit_graph_0.map deleted file mode 100644 index bc381a0fc..000000000 --- a/docs/Doxygen/inherit_graph_0.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_0.md5 b/docs/Doxygen/inherit_graph_0.md5 deleted file mode 100644 index 2d7e70984..000000000 --- a/docs/Doxygen/inherit_graph_0.md5 +++ /dev/null @@ -1 +0,0 @@ -18457799be3b45880530c711c7d9c16e \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_0.svg b/docs/Doxygen/inherit_graph_0.svg deleted file mode 100644 index 65be6f6e0..000000000 --- a/docs/Doxygen/inherit_graph_0.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -Array< N > - - - - - diff --git a/docs/Doxygen/inherit_graph_1.map b/docs/Doxygen/inherit_graph_1.map deleted file mode 100644 index a35437e51..000000000 --- a/docs/Doxygen/inherit_graph_1.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_1.md5 b/docs/Doxygen/inherit_graph_1.md5 deleted file mode 100644 index 09d407102..000000000 --- a/docs/Doxygen/inherit_graph_1.md5 +++ /dev/null @@ -1 +0,0 @@ -5b1470c261b5008ef496271ebbcf0bad \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_1.svg b/docs/Doxygen/inherit_graph_1.svg deleted file mode 100644 index 8b77a2997..000000000 --- a/docs/Doxygen/inherit_graph_1.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -Array< nb_cols > - - - - - diff --git a/docs/Doxygen/inherit_graph_10.map b/docs/Doxygen/inherit_graph_10.map deleted file mode 100644 index 0c74fdebc..000000000 --- a/docs/Doxygen/inherit_graph_10.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_10.md5 b/docs/Doxygen/inherit_graph_10.md5 deleted file mode 100644 index 5c6081d96..000000000 --- a/docs/Doxygen/inherit_graph_10.md5 +++ /dev/null @@ -1 +0,0 @@ -ad73e98e5ac201858b121204381249e2 \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_10.svg b/docs/Doxygen/inherit_graph_10.svg deleted file mode 100644 index fced80544..000000000 --- a/docs/Doxygen/inherit_graph_10.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -ButtonMatrix< nb_rows, - nb_cols > - - - - - diff --git a/docs/Doxygen/inherit_graph_11.map b/docs/Doxygen/inherit_graph_11.map deleted file mode 100644 index 1de8561a0..000000000 --- a/docs/Doxygen/inherit_graph_11.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_11.md5 b/docs/Doxygen/inherit_graph_11.md5 deleted file mode 100644 index 845f50349..000000000 --- a/docs/Doxygen/inherit_graph_11.md5 +++ /dev/null @@ -1 +0,0 @@ -77afa6245be81d20a9db4c5c33949b3b \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_11.svg b/docs/Doxygen/inherit_graph_11.svg deleted file mode 100644 index 942463d99..000000000 --- a/docs/Doxygen/inherit_graph_11.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -DoublyLinkable< Node > - - - - - diff --git a/docs/Doxygen/inherit_graph_12.map b/docs/Doxygen/inherit_graph_12.map deleted file mode 100644 index 8c7eeaea8..000000000 --- a/docs/Doxygen/inherit_graph_12.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/inherit_graph_12.md5 b/docs/Doxygen/inherit_graph_12.md5 deleted file mode 100644 index 6d972630d..000000000 --- a/docs/Doxygen/inherit_graph_12.md5 +++ /dev/null @@ -1 +0,0 @@ -fb9869453632af102ea3e9cdd1f78004 \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_12.svg b/docs/Doxygen/inherit_graph_12.svg deleted file mode 100644 index 2442912b4..000000000 --- a/docs/Doxygen/inherit_graph_12.svg +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -DoublyLinkable< Updatable -< T > > - - - - -Node1 - - -Updatable< T > - - - - -Node0->Node1 - - - - - diff --git a/docs/Doxygen/inherit_graph_13.map b/docs/Doxygen/inherit_graph_13.map deleted file mode 100644 index 1db7866ba..000000000 --- a/docs/Doxygen/inherit_graph_13.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_13.md5 b/docs/Doxygen/inherit_graph_13.md5 deleted file mode 100644 index bdf3c01d2..000000000 --- a/docs/Doxygen/inherit_graph_13.md5 +++ /dev/null @@ -1 +0,0 @@ -d8803d9cd8ef3b690cac5c9a73a7aaab \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_13.svg b/docs/Doxygen/inherit_graph_13.svg deleted file mode 100644 index 405393e82..000000000 --- a/docs/Doxygen/inherit_graph_13.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -DoublyLinkedList< Extended -IOElement > - - - - - diff --git a/docs/Doxygen/inherit_graph_14.map b/docs/Doxygen/inherit_graph_14.map deleted file mode 100644 index 286d2e231..000000000 --- a/docs/Doxygen/inherit_graph_14.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_14.md5 b/docs/Doxygen/inherit_graph_14.md5 deleted file mode 100644 index d937ff855..000000000 --- a/docs/Doxygen/inherit_graph_14.md5 +++ /dev/null @@ -1 +0,0 @@ -11ed6797b99fb02a16e224bbadfaec21 \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_14.svg b/docs/Doxygen/inherit_graph_14.svg deleted file mode 100644 index ff951008e..000000000 --- a/docs/Doxygen/inherit_graph_14.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -DoublyLinkedList< Node > - - - - - diff --git a/docs/Doxygen/inherit_graph_15.map b/docs/Doxygen/inherit_graph_15.map deleted file mode 100644 index 1ff88b0fe..000000000 --- a/docs/Doxygen/inherit_graph_15.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/Doxygen/inherit_graph_15.md5 b/docs/Doxygen/inherit_graph_15.md5 deleted file mode 100644 index 15e246b98..000000000 --- a/docs/Doxygen/inherit_graph_15.md5 +++ /dev/null @@ -1 +0,0 @@ -ce08fb5433a7b56d17a2d7e57f59a104 \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_15.svg b/docs/Doxygen/inherit_graph_15.svg deleted file mode 100644 index 7fda555f1..000000000 --- a/docs/Doxygen/inherit_graph_15.svg +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -DoublyLinkedList< Node - >::node_iterator_base -< INode > - - - - -Node1 - - -DoublyLinkedList< Node - >::node_iterator< INode > - - - - -Node0->Node1 - - - - -Node2 - - -DoublyLinkedList< Node - >::reverse_node_iterator -< INode > - - - - -Node0->Node2 - - - - - diff --git a/docs/Doxygen/inherit_graph_16.map b/docs/Doxygen/inherit_graph_16.map deleted file mode 100644 index fd2f032b8..000000000 --- a/docs/Doxygen/inherit_graph_16.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_16.md5 b/docs/Doxygen/inherit_graph_16.md5 deleted file mode 100644 index 8e8c69e95..000000000 --- a/docs/Doxygen/inherit_graph_16.md5 +++ /dev/null @@ -1 +0,0 @@ -752807efb949b9c8538fbd639d9a34a0 \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_16.svg b/docs/Doxygen/inherit_graph_16.svg deleted file mode 100644 index 17c039a37..000000000 --- a/docs/Doxygen/inherit_graph_16.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -DoublyLinkedList< Updatable -< T > > - - - - - diff --git a/docs/Doxygen/inherit_graph_17.map b/docs/Doxygen/inherit_graph_17.map deleted file mode 100644 index f26e5dd0f..000000000 --- a/docs/Doxygen/inherit_graph_17.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_17.md5 b/docs/Doxygen/inherit_graph_17.md5 deleted file mode 100644 index cb51bb7cb..000000000 --- a/docs/Doxygen/inherit_graph_17.md5 +++ /dev/null @@ -1 +0,0 @@ -ed45f5db6f6adbb7d199795e682a14ef \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_17.svg b/docs/Doxygen/inherit_graph_17.svg deleted file mode 100644 index b80c4e54f..000000000 --- a/docs/Doxygen/inherit_graph_17.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -EMA< FilterShiftFactor, - FilterType > - - - - - diff --git a/docs/Doxygen/inherit_graph_18.map b/docs/Doxygen/inherit_graph_18.map deleted file mode 100644 index f570e3a7b..000000000 --- a/docs/Doxygen/inherit_graph_18.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_18.md5 b/docs/Doxygen/inherit_graph_18.md5 deleted file mode 100644 index c7e49c91f..000000000 --- a/docs/Doxygen/inherit_graph_18.md5 +++ /dev/null @@ -1 +0,0 @@ -f62a63e7920f2ed43fe351881bf4ba5f \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_18.svg b/docs/Doxygen/inherit_graph_18.svg deleted file mode 100644 index 2ede13603..000000000 --- a/docs/Doxygen/inherit_graph_18.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -EMA< K, uint_t > - - - - - diff --git a/docs/Doxygen/inherit_graph_19.map b/docs/Doxygen/inherit_graph_19.map deleted file mode 100644 index 8efcefa15..000000000 --- a/docs/Doxygen/inherit_graph_19.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_19.md5 b/docs/Doxygen/inherit_graph_19.md5 deleted file mode 100644 index e5c9b9f9c..000000000 --- a/docs/Doxygen/inherit_graph_19.md5 +++ /dev/null @@ -1 +0,0 @@ -11dbd502cbc88e432bcc137ea5f96962 \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_19.svg b/docs/Doxygen/inherit_graph_19.svg deleted file mode 100644 index 01594fe58..000000000 --- a/docs/Doxygen/inherit_graph_19.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -EMA_f - - - - - diff --git a/docs/Doxygen/inherit_graph_2.map b/docs/Doxygen/inherit_graph_2.map deleted file mode 100644 index bf699868b..000000000 --- a/docs/Doxygen/inherit_graph_2.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_2.md5 b/docs/Doxygen/inherit_graph_2.md5 deleted file mode 100644 index 4a13d1e60..000000000 --- a/docs/Doxygen/inherit_graph_2.md5 +++ /dev/null @@ -1 +0,0 @@ -948f7e40e8a25c048fc7aaf0da6f9e27 \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_2.svg b/docs/Doxygen/inherit_graph_2.svg deleted file mode 100644 index 84d8bab86..000000000 --- a/docs/Doxygen/inherit_graph_2.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -Array< nb_rows > - - - - - diff --git a/docs/Doxygen/inherit_graph_20.map b/docs/Doxygen/inherit_graph_20.map deleted file mode 100644 index 2f3a3cf34..000000000 --- a/docs/Doxygen/inherit_graph_20.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_20.md5 b/docs/Doxygen/inherit_graph_20.md5 deleted file mode 100644 index 484f2616c..000000000 --- a/docs/Doxygen/inherit_graph_20.md5 +++ /dev/null @@ -1 +0,0 @@ -32eb5ccd72966b4f1783bf446a3ac4f3 \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_20.svg b/docs/Doxygen/inherit_graph_20.svg deleted file mode 100644 index a89e85261..000000000 --- a/docs/Doxygen/inherit_graph_20.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -FilteredAnalog< Precision, - FilterShiftFactor, FilterType, - AnalogType, IncRes > - - - - - diff --git a/docs/Doxygen/inherit_graph_21.map b/docs/Doxygen/inherit_graph_21.map deleted file mode 100644 index 58fbcb19c..000000000 --- a/docs/Doxygen/inherit_graph_21.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_21.md5 b/docs/Doxygen/inherit_graph_21.md5 deleted file mode 100644 index eba1609f0..000000000 --- a/docs/Doxygen/inherit_graph_21.md5 +++ /dev/null @@ -1 +0,0 @@ -0d0abaccff945d7ab32a73740ef2b4ce \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_21.svg b/docs/Doxygen/inherit_graph_21.svg deleted file mode 100644 index 36154862f..000000000 --- a/docs/Doxygen/inherit_graph_21.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -Frequency - - - - - diff --git a/docs/Doxygen/inherit_graph_22.map b/docs/Doxygen/inherit_graph_22.map deleted file mode 100644 index 9780ba543..000000000 --- a/docs/Doxygen/inherit_graph_22.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_22.md5 b/docs/Doxygen/inherit_graph_22.md5 deleted file mode 100644 index 225fec3b6..000000000 --- a/docs/Doxygen/inherit_graph_22.md5 +++ /dev/null @@ -1 +0,0 @@ -6490b4b20fa77dc0ae92428a64e96d8c \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_22.svg b/docs/Doxygen/inherit_graph_22.svg deleted file mode 100644 index f2320783f..000000000 --- a/docs/Doxygen/inherit_graph_22.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -Hysteresis< ADC_BITS -+IncRes - Precision, - AnalogType, AnalogType > - - - - - diff --git a/docs/Doxygen/inherit_graph_23.map b/docs/Doxygen/inherit_graph_23.map deleted file mode 100644 index 8edb96241..000000000 --- a/docs/Doxygen/inherit_graph_23.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_23.md5 b/docs/Doxygen/inherit_graph_23.md5 deleted file mode 100644 index 150ba1245..000000000 --- a/docs/Doxygen/inherit_graph_23.md5 +++ /dev/null @@ -1 +0,0 @@ -11e193e5bb349a3c9a8393ba43afbd05 \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_23.svg b/docs/Doxygen/inherit_graph_23.svg deleted file mode 100644 index 734a7e516..000000000 --- a/docs/Doxygen/inherit_graph_23.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -Hysteresis< BITS, T -_in, T_out > - - - - - diff --git a/docs/Doxygen/inherit_graph_24.map b/docs/Doxygen/inherit_graph_24.map deleted file mode 100644 index 6f6d1932e..000000000 --- a/docs/Doxygen/inherit_graph_24.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_24.md5 b/docs/Doxygen/inherit_graph_24.md5 deleted file mode 100644 index 9c4d8134d..000000000 --- a/docs/Doxygen/inherit_graph_24.md5 +++ /dev/null @@ -1 +0,0 @@ -3447f26628d6ec13fdaa836ce3a6c679 \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_24.svg b/docs/Doxygen/inherit_graph_24.svg deleted file mode 100644 index 9fa69f5b9..000000000 --- a/docs/Doxygen/inherit_graph_24.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -IncrementButton - - - - - diff --git a/docs/Doxygen/inherit_graph_25.map b/docs/Doxygen/inherit_graph_25.map deleted file mode 100644 index 516969b26..000000000 --- a/docs/Doxygen/inherit_graph_25.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_25.md5 b/docs/Doxygen/inherit_graph_25.md5 deleted file mode 100644 index 813466bc4..000000000 --- a/docs/Doxygen/inherit_graph_25.md5 +++ /dev/null @@ -1 +0,0 @@ -4bd08083c2a7a677d4c74ed027e62963 \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_25.svg b/docs/Doxygen/inherit_graph_25.svg deleted file mode 100644 index e9fc05982..000000000 --- a/docs/Doxygen/inherit_graph_25.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -IncrementDecrementButtons - - - - - diff --git a/docs/Doxygen/inherit_graph_26.map b/docs/Doxygen/inherit_graph_26.map deleted file mode 100644 index 763d89159..000000000 --- a/docs/Doxygen/inherit_graph_26.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_26.md5 b/docs/Doxygen/inherit_graph_26.md5 deleted file mode 100644 index 1889c5ffb..000000000 --- a/docs/Doxygen/inherit_graph_26.md5 +++ /dev/null @@ -1 +0,0 @@ -6a09fde7bf61976cdf741a2e6b928f1e \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_26.svg b/docs/Doxygen/inherit_graph_26.svg deleted file mode 100644 index ffab110cf..000000000 --- a/docs/Doxygen/inherit_graph_26.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -Incrementor< T, V > - - - - - diff --git a/docs/Doxygen/inherit_graph_27.map b/docs/Doxygen/inherit_graph_27.map deleted file mode 100644 index 83e432051..000000000 --- a/docs/Doxygen/inherit_graph_27.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/Doxygen/inherit_graph_27.md5 b/docs/Doxygen/inherit_graph_27.md5 deleted file mode 100644 index 3421356fb..000000000 --- a/docs/Doxygen/inherit_graph_27.md5 +++ /dev/null @@ -1 +0,0 @@ -33d19ebb33a7ce43ade2d60abd4efe5b \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_27.svg b/docs/Doxygen/inherit_graph_27.svg deleted file mode 100644 index 969c005ce..000000000 --- a/docs/Doxygen/inherit_graph_27.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -LEDs< N > - - - - -Node1 - - -DotBarDisplayLEDs< N > - - - - -Node0->Node1 - - - - - diff --git a/docs/Doxygen/inherit_graph_28.map b/docs/Doxygen/inherit_graph_28.map deleted file mode 100644 index 69438adca..000000000 --- a/docs/Doxygen/inherit_graph_28.map +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/docs/Doxygen/inherit_graph_28.md5 b/docs/Doxygen/inherit_graph_28.md5 deleted file mode 100644 index 986fbea51..000000000 --- a/docs/Doxygen/inherit_graph_28.md5 +++ /dev/null @@ -1 +0,0 @@ -419064233402732f1b8e366c7bc2c4fc \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_28.svg b/docs/Doxygen/inherit_graph_28.svg deleted file mode 100644 index ae35d0b60..000000000 --- a/docs/Doxygen/inherit_graph_28.svg +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node32 - - -DoublyLinkable< Extended -IOElement > - - - - -Node33 - - -ExtendedIOElement - - - - -Node32->Node33 - - - - -Node34 - - -StaticSizeExtendedIOElement< N > - - - - -Node33->Node34 - - - - -Node38 - - -StaticSizeExtendedIOElement -< 1<< N > - - - - -Node33->Node38 - - - - -Node40 - - -StaticSizeExtendedIOElement -< 8 *8 > - - - - -Node33->Node40 - - - - -Node35 - - -ShiftRegisterOutBase< N > - - - - -Node34->Node35 - - - - -Node36 - - -ShiftRegisterOut< N > - - - - -Node35->Node36 - - - - -Node37 - - -SPIShiftRegisterOut< N > - - - - -Node35->Node37 - - - - -Node39 - - -AnalogMultiplex< N > - - - - -Node38->Node39 - - - - -Node1 - - -MAX7219 - - - - -Node40->Node1 - - - - -Node0 - - -MAX7219_Base - - - - -Node0->Node1 - - - - -Node2 - - -MAX7219SevenSegmentDisplay - - - - -Node0->Node2 - - - - - diff --git a/docs/Doxygen/inherit_graph_29.map b/docs/Doxygen/inherit_graph_29.map deleted file mode 100644 index c3bc8691e..000000000 --- a/docs/Doxygen/inherit_graph_29.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_29.md5 b/docs/Doxygen/inherit_graph_29.md5 deleted file mode 100644 index a8242544b..000000000 --- a/docs/Doxygen/inherit_graph_29.md5 +++ /dev/null @@ -1 +0,0 @@ -01f4f977a160010f92c0566143ec2e90 \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_29.svg b/docs/Doxygen/inherit_graph_29.svg deleted file mode 100644 index d1c5685b7..000000000 --- a/docs/Doxygen/inherit_graph_29.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -NormalUpdatable - - - - - diff --git a/docs/Doxygen/inherit_graph_3.map b/docs/Doxygen/inherit_graph_3.map deleted file mode 100644 index a35437e51..000000000 --- a/docs/Doxygen/inherit_graph_3.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_3.md5 b/docs/Doxygen/inherit_graph_3.md5 deleted file mode 100644 index 00bdd2f1b..000000000 --- a/docs/Doxygen/inherit_graph_3.md5 +++ /dev/null @@ -1 +0,0 @@ -5a81f025f993b599728e4b69db299f1f \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_3.svg b/docs/Doxygen/inherit_graph_3.svg deleted file mode 100644 index b08b24d93..000000000 --- a/docs/Doxygen/inherit_graph_3.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -Array< pin_t, N > - - - - - diff --git a/docs/Doxygen/inherit_graph_30.map b/docs/Doxygen/inherit_graph_30.map deleted file mode 100644 index 92187c707..000000000 --- a/docs/Doxygen/inherit_graph_30.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_30.md5 b/docs/Doxygen/inherit_graph_30.md5 deleted file mode 100644 index 740e5a382..000000000 --- a/docs/Doxygen/inherit_graph_30.md5 +++ /dev/null @@ -1 +0,0 @@ -acc3b9a3395fc3e54c50740b05078d0e \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_30.svg b/docs/Doxygen/inherit_graph_30.svg deleted file mode 100644 index 058c7dde7..000000000 --- a/docs/Doxygen/inherit_graph_30.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -Setbase - - - - - diff --git a/docs/Doxygen/inherit_graph_31.map b/docs/Doxygen/inherit_graph_31.map deleted file mode 100644 index 4d0e63590..000000000 --- a/docs/Doxygen/inherit_graph_31.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_31.md5 b/docs/Doxygen/inherit_graph_31.md5 deleted file mode 100644 index ba576ad60..000000000 --- a/docs/Doxygen/inherit_graph_31.md5 +++ /dev/null @@ -1 +0,0 @@ -c452249246c97d2788cd178224ed3576 \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_31.svg b/docs/Doxygen/inherit_graph_31.svg deleted file mode 100644 index a1e4f60e6..000000000 --- a/docs/Doxygen/inherit_graph_31.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -Setbytesep - - - - - diff --git a/docs/Doxygen/inherit_graph_32.map b/docs/Doxygen/inherit_graph_32.map deleted file mode 100644 index 0157d71e3..000000000 --- a/docs/Doxygen/inherit_graph_32.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_32.md5 b/docs/Doxygen/inherit_graph_32.md5 deleted file mode 100644 index 3ea3c4d70..000000000 --- a/docs/Doxygen/inherit_graph_32.md5 +++ /dev/null @@ -1 +0,0 @@ -442d6356ab60d0d1c0f154a0aaad118d \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_32.svg b/docs/Doxygen/inherit_graph_32.svg deleted file mode 100644 index 416cb5c61..000000000 --- a/docs/Doxygen/inherit_graph_32.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -Setprecision - - - - - diff --git a/docs/Doxygen/inherit_graph_33.map b/docs/Doxygen/inherit_graph_33.map deleted file mode 100644 index 18b280fce..000000000 --- a/docs/Doxygen/inherit_graph_33.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_33.md5 b/docs/Doxygen/inherit_graph_33.md5 deleted file mode 100644 index 8bc58dc43..000000000 --- a/docs/Doxygen/inherit_graph_33.md5 +++ /dev/null @@ -1 +0,0 @@ -1b58f11fe62d2745869e038941048525 \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_33.svg b/docs/Doxygen/inherit_graph_33.svg deleted file mode 100644 index 13995613a..000000000 --- a/docs/Doxygen/inherit_graph_33.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -ShiftRegisterOutRGB - - - - - diff --git a/docs/Doxygen/inherit_graph_34.map b/docs/Doxygen/inherit_graph_34.map deleted file mode 100644 index f01b8a7c1..000000000 --- a/docs/Doxygen/inherit_graph_34.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_34.md5 b/docs/Doxygen/inherit_graph_34.md5 deleted file mode 100644 index 981bfac12..000000000 --- a/docs/Doxygen/inherit_graph_34.md5 +++ /dev/null @@ -1 +0,0 @@ -9c4bc427d52ea7468267681b59ee95ac \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_34.svg b/docs/Doxygen/inherit_graph_34.svg deleted file mode 100644 index 48741e779..000000000 --- a/docs/Doxygen/inherit_graph_34.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -Timer< time > - - - - - diff --git a/docs/Doxygen/inherit_graph_35.map b/docs/Doxygen/inherit_graph_35.map deleted file mode 100644 index 23d68ae19..000000000 --- a/docs/Doxygen/inherit_graph_35.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_35.md5 b/docs/Doxygen/inherit_graph_35.md5 deleted file mode 100644 index 003f95473..000000000 --- a/docs/Doxygen/inherit_graph_35.md5 +++ /dev/null @@ -1 +0,0 @@ -20cd63e4dd190ba6a936a3b223b22dcf \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_35.svg b/docs/Doxygen/inherit_graph_35.svg deleted file mode 100644 index d870c866e..000000000 --- a/docs/Doxygen/inherit_graph_35.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -UniquePtr< T > - - - - - diff --git a/docs/Doxygen/inherit_graph_4.map b/docs/Doxygen/inherit_graph_4.map deleted file mode 100644 index 579bbd462..000000000 --- a/docs/Doxygen/inherit_graph_4.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_4.md5 b/docs/Doxygen/inherit_graph_4.md5 deleted file mode 100644 index 16b8dcf16..000000000 --- a/docs/Doxygen/inherit_graph_4.md5 +++ /dev/null @@ -1 +0,0 @@ -ff8333151bdd5862da798babd30c3a79 \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_4.svg b/docs/Doxygen/inherit_graph_4.svg deleted file mode 100644 index 622e0bcd6..000000000 --- a/docs/Doxygen/inherit_graph_4.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -Array< T, N > - - - - - diff --git a/docs/Doxygen/inherit_graph_5.map b/docs/Doxygen/inherit_graph_5.map deleted file mode 100644 index 0f26ca7c5..000000000 --- a/docs/Doxygen/inherit_graph_5.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_5.md5 b/docs/Doxygen/inherit_graph_5.md5 deleted file mode 100644 index 850aea561..000000000 --- a/docs/Doxygen/inherit_graph_5.md5 +++ /dev/null @@ -1 +0,0 @@ -3c40f845dcd461803f88441b53c2546e \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_5.svg b/docs/Doxygen/inherit_graph_5.svg deleted file mode 100644 index 8dc1cce25..000000000 --- a/docs/Doxygen/inherit_graph_5.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -ArraySlice< T, N, Reverse, - Const > - - - - - diff --git a/docs/Doxygen/inherit_graph_6.map b/docs/Doxygen/inherit_graph_6.map deleted file mode 100644 index 88f237c7e..000000000 --- a/docs/Doxygen/inherit_graph_6.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_6.md5 b/docs/Doxygen/inherit_graph_6.md5 deleted file mode 100644 index ff68fa92b..000000000 --- a/docs/Doxygen/inherit_graph_6.md5 +++ /dev/null @@ -1 +0,0 @@ -d559deb8663bfb7c11d1205302fd80ef \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_6.svg b/docs/Doxygen/inherit_graph_6.svg deleted file mode 100644 index f073fc260..000000000 --- a/docs/Doxygen/inherit_graph_6.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -ArraySlice< T, N, Reverse, - Const >::Iterator - - - - - diff --git a/docs/Doxygen/inherit_graph_7.map b/docs/Doxygen/inherit_graph_7.map deleted file mode 100644 index 0e9cd8092..000000000 --- a/docs/Doxygen/inherit_graph_7.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_7.md5 b/docs/Doxygen/inherit_graph_7.md5 deleted file mode 100644 index a47fb7b26..000000000 --- a/docs/Doxygen/inherit_graph_7.md5 +++ /dev/null @@ -1 +0,0 @@ -8e32771b4b330eac9e0650d160c1889f \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_7.svg b/docs/Doxygen/inherit_graph_7.svg deleted file mode 100644 index b92ca2a78..000000000 --- a/docs/Doxygen/inherit_graph_7.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -BitArray< 8 *8 > - - - - - diff --git a/docs/Doxygen/inherit_graph_8.map b/docs/Doxygen/inherit_graph_8.map deleted file mode 100644 index 46959c96d..000000000 --- a/docs/Doxygen/inherit_graph_8.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_8.md5 b/docs/Doxygen/inherit_graph_8.md5 deleted file mode 100644 index ec03c51fb..000000000 --- a/docs/Doxygen/inherit_graph_8.md5 +++ /dev/null @@ -1 +0,0 @@ -d1ab77fdff6d5b5fb0799eeb6e32c607 \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_8.svg b/docs/Doxygen/inherit_graph_8.svg deleted file mode 100644 index 826ca66a8..000000000 --- a/docs/Doxygen/inherit_graph_8.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -BitArray< N > - - - - - diff --git a/docs/Doxygen/inherit_graph_9.map b/docs/Doxygen/inherit_graph_9.map deleted file mode 100644 index ab84f4117..000000000 --- a/docs/Doxygen/inherit_graph_9.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/Doxygen/inherit_graph_9.md5 b/docs/Doxygen/inherit_graph_9.md5 deleted file mode 100644 index a4f899fac..000000000 --- a/docs/Doxygen/inherit_graph_9.md5 +++ /dev/null @@ -1 +0,0 @@ -66ee549ac7be24f178577ec47a57a4a3 \ No newline at end of file diff --git a/docs/Doxygen/inherit_graph_9.svg b/docs/Doxygen/inherit_graph_9.svg deleted file mode 100644 index 9ec70e7a1..000000000 --- a/docs/Doxygen/inherit_graph_9.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - -Graphical Class Hierarchy - - -Node0 - - -Button - - - - - diff --git a/docs/Doxygen/inherits.html b/docs/Doxygen/inherits.html deleted file mode 100644 index 9d0bef1ff..000000000 --- a/docs/Doxygen/inherits.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - -Arduino Helpers: Class Hierarchy - - - - - - - - - - - -
-
- - - - - - -
-
Arduino Helpers -  1.0.0 -
-
Utility library for Arduino
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
Class Hierarchy
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - diff --git a/docs/Doxygen/jquery.js b/docs/Doxygen/jquery.js deleted file mode 100644 index 103c32d79..000000000 --- a/docs/Doxygen/jquery.js +++ /dev/null @@ -1,35 +0,0 @@ -/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element -},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** - * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler - * Licensed under MIT - * @author Ariel Flesler - * @version 2.1.2 - */ -;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 - * http://www.smartmenus.org/ - * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/docs/Doxygen/menu.js b/docs/Doxygen/menu.js deleted file mode 100644 index 433c15b8f..000000000 --- a/docs/Doxygen/menu.js +++ /dev/null @@ -1,50 +0,0 @@ -/* - @licstart The following is the entire license notice for the - JavaScript code in this file. - - Copyright (C) 1997-2017 by Dimitri van Heesch - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - @licend The above is the entire license notice - for the JavaScript code in this file - */ -function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { - function makeTree(data,relPath) { - var result=''; - if ('children' in data) { - result+=''; - } - return result; - } - - $('#main-nav').append(makeTree(menudata,relPath)); - $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); - if (searchEnabled) { - if (serverSide) { - $('#main-menu').append('
  • '); - } else { - $('#main-menu').append('
  • '); - } - } - $('#main-menu').smartmenus(); -} -/* @license-end */ diff --git a/docs/Doxygen/menudata.js b/docs/Doxygen/menudata.js deleted file mode 100644 index cababbf2f..000000000 --- a/docs/Doxygen/menudata.js +++ /dev/null @@ -1,152 +0,0 @@ -/* -@licstart The following is the entire license notice for the -JavaScript code in this file. - -Copyright (C) 1997-2019 by Dimitri van Heesch - -This program is free software; you can redistribute it and/or modify -it under the terms of version 2 of the GNU General Public License as published by -the Free Software Foundation - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -@licend The above is the entire license notice -for the JavaScript code in this file -*/ -var menudata={children:[ -{text:"Main Page",url:"index.html"}, -{text:"Related Pages",url:"pages.html"}, -{text:"Modules",url:"modules.html"}, -{text:"Namespaces",url:"namespaces.html",children:[ -{text:"Namespace List",url:"namespaces.html"}, -{text:"Namespace Members",url:"namespacemembers.html",children:[ -{text:"All",url:"namespacemembers.html"}, -{text:"Functions",url:"namespacemembers_func.html"}, -{text:"Variables",url:"namespacemembers_vars.html"}]}]}, -{text:"Classes",url:"annotated.html",children:[ -{text:"Class List",url:"annotated.html"}, -{text:"Class Index",url:"classes.html"}, -{text:"Class Hierarchy",url:"inherits.html"}, -{text:"Class Members",url:"functions.html",children:[ -{text:"All",url:"functions.html",children:[ -{text:"a",url:"functions.html#index_a"}, -{text:"b",url:"functions_b.html#index_b"}, -{text:"c",url:"functions_c.html#index_c"}, -{text:"d",url:"functions_d.html#index_d"}, -{text:"e",url:"functions_e.html#index_e"}, -{text:"f",url:"functions_f.html#index_f"}, -{text:"g",url:"functions_g.html#index_g"}, -{text:"h",url:"functions_h.html#index_h"}, -{text:"i",url:"functions_i.html#index_i"}, -{text:"l",url:"functions_l.html#index_l"}, -{text:"m",url:"functions_m.html#index_m"}, -{text:"n",url:"functions_n.html#index_n"}, -{text:"o",url:"functions_o.html#index_o"}, -{text:"p",url:"functions_p.html#index_p"}, -{text:"r",url:"functions_r.html#index_r"}, -{text:"s",url:"functions_s.html#index_s"}, -{text:"t",url:"functions_t.html#index_t"}, -{text:"u",url:"functions_u.html#index_u"}, -{text:"v",url:"functions_v.html#index_v"}, -{text:"~",url:"functions_~.html#index__7E"}]}, -{text:"Functions",url:"functions_func.html",children:[ -{text:"a",url:"functions_func.html#index_a"}, -{text:"b",url:"functions_func_b.html#index_b"}, -{text:"c",url:"functions_func_c.html#index_c"}, -{text:"d",url:"functions_func_d.html#index_d"}, -{text:"e",url:"functions_func_e.html#index_e"}, -{text:"f",url:"functions_func_f.html#index_f"}, -{text:"g",url:"functions_func_g.html#index_g"}, -{text:"i",url:"functions_func_i.html#index_i"}, -{text:"l",url:"functions_func_l.html#index_l"}, -{text:"m",url:"functions_func_m.html#index_m"}, -{text:"n",url:"functions_func_n.html#index_n"}, -{text:"o",url:"functions_func_o.html#index_o"}, -{text:"p",url:"functions_func_p.html#index_p"}, -{text:"r",url:"functions_func_r.html#index_r"}, -{text:"s",url:"functions_func_s.html#index_s"}, -{text:"t",url:"functions_func_t.html#index_t"}, -{text:"u",url:"functions_func_u.html#index_u"}, -{text:"~",url:"functions_func_~.html#index__7E"}]}, -{text:"Variables",url:"functions_vars.html",children:[ -{text:"a",url:"functions_vars.html#index_a"}, -{text:"b",url:"functions_vars.html#index_b"}, -{text:"c",url:"functions_vars.html#index_c"}, -{text:"d",url:"functions_vars.html#index_d"}, -{text:"e",url:"functions_vars.html#index_e"}, -{text:"f",url:"functions_vars.html#index_f"}, -{text:"g",url:"functions_vars.html#index_g"}, -{text:"h",url:"functions_vars.html#index_h"}, -{text:"i",url:"functions_vars.html#index_i"}, -{text:"l",url:"functions_vars.html#index_l"}, -{text:"m",url:"functions_vars.html#index_m"}, -{text:"n",url:"functions_vars.html#index_n"}, -{text:"o",url:"functions_vars.html#index_o"}, -{text:"p",url:"functions_vars.html#index_p"}, -{text:"r",url:"functions_vars.html#index_r"}, -{text:"s",url:"functions_vars.html#index_s"}, -{text:"u",url:"functions_vars.html#index_u"}, -{text:"v",url:"functions_vars.html#index_v"}]}, -{text:"Typedefs",url:"functions_type.html"}, -{text:"Enumerations",url:"functions_enum.html"}, -{text:"Enumerator",url:"functions_eval.html"}]}]}, -{text:"Files",url:"files.html",children:[ -{text:"File List",url:"files.html"}, -{text:"File Members",url:"globals.html",children:[ -{text:"All",url:"globals.html",children:[ -{text:"a",url:"globals.html#index_a"}, -{text:"b",url:"globals_b.html#index_b"}, -{text:"c",url:"globals_c.html#index_c"}, -{text:"d",url:"globals_d.html#index_d"}, -{text:"e",url:"globals_e.html#index_e"}, -{text:"f",url:"globals_f.html#index_f"}, -{text:"g",url:"globals_g.html#index_g"}, -{text:"h",url:"globals_h.html#index_h"}, -{text:"i",url:"globals_i.html#index_i"}, -{text:"l",url:"globals_l.html#index_l"}, -{text:"m",url:"globals_m.html#index_m"}, -{text:"n",url:"globals_n.html#index_n"}, -{text:"o",url:"globals_o.html#index_o"}, -{text:"p",url:"globals_p.html#index_p"}, -{text:"s",url:"globals_s.html#index_s"}, -{text:"t",url:"globals_t.html#index_t"}, -{text:"u",url:"globals_u.html#index_u"}]}, -{text:"Functions",url:"globals_func.html",children:[ -{text:"a",url:"globals_func.html#index_a"}, -{text:"b",url:"globals_func.html#index_b"}, -{text:"c",url:"globals_func.html#index_c"}, -{text:"d",url:"globals_func.html#index_d"}, -{text:"e",url:"globals_func.html#index_e"}, -{text:"f",url:"globals_func.html#index_f"}, -{text:"g",url:"globals_func.html#index_g"}, -{text:"h",url:"globals_func.html#index_h"}, -{text:"i",url:"globals_func.html#index_i"}, -{text:"l",url:"globals_func.html#index_l"}, -{text:"m",url:"globals_func.html#index_m"}, -{text:"n",url:"globals_func.html#index_n"}, -{text:"o",url:"globals_func.html#index_o"}, -{text:"p",url:"globals_func.html#index_p"}, -{text:"s",url:"globals_func.html#index_s"}, -{text:"u",url:"globals_func.html#index_u"}]}, -{text:"Variables",url:"globals_vars.html"}, -{text:"Typedefs",url:"globals_type.html"}, -{text:"Enumerations",url:"globals_enum.html"}, -{text:"Enumerator",url:"globals_eval.html"}, -{text:"Macros",url:"globals_defs.html",children:[ -{text:"a",url:"globals_defs.html#index_a"}, -{text:"b",url:"globals_defs.html#index_b"}, -{text:"c",url:"globals_defs.html#index_c"}, -{text:"d",url:"globals_defs.html#index_d"}, -{text:"e",url:"globals_defs.html#index_e"}, -{text:"f",url:"globals_defs.html#index_f"}, -{text:"h",url:"globals_defs.html#index_h"}, -{text:"n",url:"globals_defs.html#index_n"}, -{text:"u",url:"globals_defs.html#index_u"}]}]}]}, -{text:"Examples",url:"examples.html"}]} diff --git a/docs/Doxygen/modules.html b/docs/Doxygen/modules.html deleted file mode 100644 index d5b7a1040..000000000 --- a/docs/Doxygen/modules.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - -Arduino Helpers: Modules - - - - - - - - - - - -
    -
    - - - - - - -
    -
    Arduino Helpers -  1.0.0 -
    -
    Utility library for Arduino
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    Modules
    -
    -
    -
    Here is a list of all modules:
    - - - - - - - - - - - -
     ContainersContainers like Array, BitArray, DoublyLinkedList and UniquePtr
     DebugMacros for printing debug information that can be easily enabled or disabled
     ErrorMacros for handling and reporting both fatal and non-fatal errors
     Extended Input/OutputAll Elements that extend the number of IO pins of the Arduino: Currently only shift registers and multiplexers
     FiltersClasses for basic filtering and hysteresis
     Hardware UtilitiesClasses used for debouncing buttons, incrementing/decrementing push buttons, scanning switch matrices, filtering analog input, etc
     Math UtilitiesMathematics helper functions. Min/max functions, functions to uniformly increase the effective bid depth, etc
     PrintStreamFunctions for printing to Streams using the streaming operator <<
     SettingsUser settings and debugging options
     TimingBlink Without Delay-style timers
    -
    -
    - - - - diff --git a/docs/Doxygen/namespacemembers.html b/docs/Doxygen/namespacemembers.html deleted file mode 100644 index 1b2e82e62..000000000 --- a/docs/Doxygen/namespacemembers.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - -Arduino Helpers: Namespace Members - - - - - - - - - - - -
    -
    - - - - - - -
    -
    Arduino Helpers -  1.0.0 -
    -
    Utility library for Arduino
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all namespace members with links to the namespace documentation for each member:
    -
    - - - - diff --git a/docs/Doxygen/namespacemembers_func.html b/docs/Doxygen/namespacemembers_func.html deleted file mode 100644 index d91a79f83..000000000 --- a/docs/Doxygen/namespacemembers_func.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - -Arduino Helpers: Namespace Members - - - - - - - - - - - -
    -
    - - - - - - -
    -
    Arduino Helpers -  1.0.0 -
    -
    Utility library for Arduino
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
      -
    • analogRead() -: ExtIO -
    • -
    • analogWrite() -: ExtIO -
    • -
    • digitalRead() -: ExtIO -
    • -
    • digitalWrite() -: ExtIO -
    • -
    • getIOElementOfPin() -: ExtIO -
    • -
    • inRange() -: ExtIO -
    • -
    • pinMode() -: ExtIO -
    • -
    • shiftOut() -: ExtIO -
    • -
    -
    - - - - diff --git a/docs/Doxygen/namespacemembers_vars.html b/docs/Doxygen/namespacemembers_vars.html deleted file mode 100644 index 3b0f283b3..000000000 --- a/docs/Doxygen/namespacemembers_vars.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - -Arduino Helpers: Namespace Members - - - - - - - - - - - -
    -
    - - - - - - -
    -
    Arduino Helpers -  1.0.0 -
    -
    Utility library for Arduino
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    - - - - diff --git a/docs/Doxygen/namespaces.html b/docs/Doxygen/namespaces.html deleted file mode 100644 index 4609622b2..000000000 --- a/docs/Doxygen/namespaces.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: Namespace List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    Arduino Helpers -  1.0.0 -
    -
    Utility library for Arduino
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    Namespace List
    -
    -
    -
    Here is a list of all namespaces with brief descriptions:
    - - - -
     Ndetail
     NExtIOA namespace with alternatives to the standard Arduino IO functions that can be used with extended IO pin numbers
    -
    -
    - - - - diff --git a/docs/Doxygen/nav_f.png b/docs/Doxygen/nav_f.png deleted file mode 100644 index 6c02360c5..000000000 Binary files a/docs/Doxygen/nav_f.png and /dev/null differ diff --git a/docs/Doxygen/nav_g.png b/docs/Doxygen/nav_g.png deleted file mode 100644 index 2093a237a..000000000 Binary files a/docs/Doxygen/nav_g.png and /dev/null differ diff --git a/docs/Doxygen/nav_h.png b/docs/Doxygen/nav_h.png deleted file mode 100644 index 78ebf53c5..000000000 Binary files a/docs/Doxygen/nav_h.png and /dev/null differ diff --git a/docs/Doxygen/open.png b/docs/Doxygen/open.png deleted file mode 100644 index 541cda366..000000000 Binary files a/docs/Doxygen/open.png and /dev/null differ diff --git a/docs/Doxygen/pages.html b/docs/Doxygen/pages.html deleted file mode 100644 index 3b34819f1..000000000 --- a/docs/Doxygen/pages.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -Arduino Helpers: Related Pages - - - - - - - - - - - -
    -
    - - - - - - -
    -
    Arduino Helpers -  1.0.0 -
    -
    Utility library for Arduino
    -
    -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    Related Pages
    -
    -
    -
    Here is a list of all related documentation pages:
    - - - -
     Debug
     Todo List
    -
    -
    - - - - diff --git a/docs/Doxygen/search/all_0.html b/docs/Doxygen/search/all_0.html deleted file mode 100644 index a52d5f053..000000000 --- a/docs/Doxygen/search/all_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/all_0.js b/docs/Doxygen/search/all_0.js deleted file mode 100644 index 6b2625e4e..000000000 --- a/docs/Doxygen/search/all_0.js +++ /dev/null @@ -1,47 +0,0 @@ -var searchData= -[ - ['abs_5fdiff_0',['abs_diff',['../de/d76/Array_8hpp.html#ae5bf4063671aea64f62cbfeb1f5f63d6',1,'Array.hpp']]], - ['adc_5fbits_1',['ADC_BITS',['../db/d02/Settings_8hpp.html#a8db0fcdeeb644f813c9b29211ce0a1ae',1,'Settings.hpp']]], - ['adc_5fresolution_2',['ADC_RESOLUTION',['../d7/d7c/ADCConfig_8hpp.html#a00978ca9e8220475258dcbbbb7d29129',1,'ADCConfig.hpp']]], - ['adcconfig_2ecpp_3',['ADCConfig.cpp',['../d1/d4a/ADCConfig_8cpp.html',1,'']]], - ['adcconfig_2ehpp_4',['ADCConfig.hpp',['../d7/d7c/ADCConfig_8hpp.html',1,'']]], - ['addresspins_5',['addressPins',['../d7/d8d/classAnalogMultiplex.html#a1944405e0abd4d8f5b8bc34c392d2338',1,'AnalogMultiplex']]], - ['afterreading_6',['afterReading',['../d7/d8d/classAnalogMultiplex.html#a9958d9974fc696854a5b77db0201a075',1,'AnalogMultiplex']]], - ['afterreset_7',['AfterReset',['../d5/d20/classIncrementDecrementButtons.html#adf764cbdea00d65edcd07bb9953ad2b7aaed1b2195f61c416fc4c072613d73099',1,'IncrementDecrementButtons']]], - ['ah_5fdiagnostic_5fexternal_5fheader_8',['AH_DIAGNOSTIC_EXTERNAL_HEADER',['../d1/d65/Warnings_8hpp.html#a44dd04a1d1f97866e5b01c548f35fe5e',1,'Warnings.hpp']]], - ['ah_5fdiagnostic_5fpop_9',['AH_DIAGNOSTIC_POP',['../d1/d65/Warnings_8hpp.html#a4f088fb95f1d6dc4279357ca2a562cbe',1,'Warnings.hpp']]], - ['ah_5fdiagnostic_5fwerror_10',['AH_DIAGNOSTIC_WERROR',['../d1/d65/Warnings_8hpp.html#a9f2deeea1dd06b45ebc381da1633c7ee',1,'Warnings.hpp']]], - ['ah_5fext_5fpin_11',['AH_EXT_PIN',['../dd/ddf/ExtendedInputOutput_8hpp.html#a83aa0a0fed53945fc7fd8c66d373a436',1,'ExtendedInputOutput.hpp']]], - ['ah_5findividual_5fbutton_5finvert_12',['AH_INDIVIDUAL_BUTTON_INVERT',['../db/d02/Settings_8hpp.html#ac7d8f5c5d6672ffc748f2c614740d2d6',1,'Settings.hpp']]], - ['ah_5findividual_5fbutton_5finvert_5fstatic_13',['AH_INDIVIDUAL_BUTTON_INVERT_STATIC',['../d2/dd5/SettingsWrapper_8hpp.html#aaf9b2b6312ec507a3ad47a2c5f4748a2',1,'SettingsWrapper.hpp']]], - ['ah_5fis_5fempty_14',['AH_IS_EMPTY',['../d2/dd5/SettingsWrapper_8hpp.html#a04be36de00cd3bce8a6764d6b5b5f4c6',1,'SettingsWrapper.hpp']]], - ['ah_5fis_5fempty_5fhelper_15',['AH_IS_EMPTY_HELPER',['../d2/dd5/SettingsWrapper_8hpp.html#a707484720c54a77b6d54a9a78078579a',1,'SettingsWrapper.hpp']]], - ['ah_5fnamespace_5fname_16',['AH_NAMESPACE_NAME',['../dc/dc7/NamespaceSettings_8hpp.html#a6b56d72e5238e6495c46decbafa0d329',1,'NamespaceSettings.hpp']]], - ['alpha_17',['alpha',['../db/d6f/classEMA__f.html#ab1551d8043c2aa4410fb7dbb1fe3be7b',1,'EMA_f']]], - ['alphachars_18',['AlphaChars',['../d5/d0c/MAX7219SevenSegmentDisplay_8hpp.html#a421add2f41548ad816d5d9bb028cfa6f',1,'MAX7219SevenSegmentDisplay.hpp']]], - ['analog_5ffilter_5fshift_5ffactor_19',['ANALOG_FILTER_SHIFT_FACTOR',['../db/d02/Settings_8hpp.html#a74cef1adb51d95add8b2bea344b6c755',1,'Settings.hpp']]], - ['analog_5ffilter_5ftype_20',['ANALOG_FILTER_TYPE',['../db/d02/Settings_8hpp.html#ae42145751d1331f921750738659d5d6b',1,'Settings.hpp']]], - ['analog_5ft_21',['analog_t',['../d4/d35/Hardware-Types_8hpp.html#a30fffbcff933a72fdd7bfc161d386bef',1,'Hardware-Types.hpp']]], - ['analogmultiplex_22',['AnalogMultiplex',['../d7/d8d/classAnalogMultiplex.html',1,'AnalogMultiplex< N >'],['../d7/d8d/classAnalogMultiplex.html#a0a2d2327d5aa0996c8a1009ce63a4737',1,'AnalogMultiplex::AnalogMultiplex()']]], - ['analogmultiplex_2ecpp_23',['AnalogMultiplex.cpp',['../de/d16/AnalogMultiplex_8cpp.html',1,'']]], - ['analogmultiplex_2ehpp_24',['AnalogMultiplex.hpp',['../d7/def/AnalogMultiplex_8hpp.html',1,'']]], - ['analogpin_25',['analogPin',['../d7/d8d/classAnalogMultiplex.html#a66f65580427e2512fca5f49b4742f5d8',1,'AnalogMultiplex::analogPin()'],['../da/da7/classFilteredAnalog.html#a66f65580427e2512fca5f49b4742f5d8',1,'FilteredAnalog::analogPin()']]], - ['analogread_26',['analogRead',['../d7/d8d/classAnalogMultiplex.html#a6e6cf5e65d0f38cba3839725bfaca7b5',1,'AnalogMultiplex::analogRead()'],['../de/d4e/classExtendedIOElement.html#a7dc0d012462169ef826dc7cfcbb5eb3e',1,'ExtendedIOElement::analogRead()'],['../dc/d19/classMAX7219.html#a95dfb56a8e54b9a627916371b91648f7',1,'MAX7219::analogRead()'],['../d8/db4/classShiftRegisterOutBase.html#a95dfb56a8e54b9a627916371b91648f7',1,'ShiftRegisterOutBase::analogRead()'],['../d8/d3d/namespaceExtIO.html#aa9e5896aa520b8b2d65e1828032ee6a2',1,'ExtIO::analogRead(pin_t pin)'],['../d8/d3d/namespaceExtIO.html#afc10d6ffc969685e9f11070f814234a0',1,'ExtIO::analogRead(int pin)']]], - ['analogwrite_27',['analogWrite',['../d7/d8d/classAnalogMultiplex.html#a251172dbebd68a9bf81f2ea0b47a2315',1,'AnalogMultiplex::analogWrite()'],['../de/d4e/classExtendedIOElement.html#a4c7700ad6cbe07d6f10e3cbfc545a9ba',1,'ExtendedIOElement::analogWrite()'],['../dc/d19/classMAX7219.html#a11243cbfdd8502261b8aca0e4b1ce829',1,'MAX7219::analogWrite()'],['../d8/db4/classShiftRegisterOutBase.html#a11243cbfdd8502261b8aca0e4b1ce829',1,'ShiftRegisterOutBase::analogWrite()'],['../d8/d3d/namespaceExtIO.html#a5aa3b4dbb8bfffdd022e1f5bb8dc5784',1,'ExtIO::analogWrite(pin_t pin, analog_t val)'],['../d8/d3d/namespaceExtIO.html#a91f6280a1573205c324783d55f91b0d2',1,'ExtIO::analogWrite(int pin, analog_t val)'],['../d8/d3d/namespaceExtIO.html#abc9bba50fc4f0e8c8e3ee16dde83c517',1,'ExtIO::analogWrite(int pin, int val)'],['../d8/d3d/namespaceExtIO.html#aa12648190e21d162949587c009ef294b',1,'ExtIO::analogWrite(pin_t pin, int val)']]], - ['append_28',['append',['../dd/d16/classDoublyLinkedList.html#a368e48ecd7bac79f14a42a0669574e38',1,'DoublyLinkedList::append(Node *node)'],['../dd/d16/classDoublyLinkedList.html#a90bb254293416d158c8d56006d97354c',1,'DoublyLinkedList::append(Node &node)']]], - ['apply_29',['apply',['../da/de8/group__AH__Containers.html#ga0895d71ba77dd8fa6640113b19d86c03',1,'ArrayHelpers.hpp']]], - ['arduino_5fhelpers_2edox_30',['Arduino_Helpers.dox',['../d9/df7/Arduino__Helpers_8dox.html',1,'']]], - ['arduino_5fhelpers_2eh_31',['Arduino_Helpers.h',['../dc/de6/Arduino__Helpers_8h.html',1,'']]], - ['array_32',['Array',['../d7/d6a/structArray.html',1,'Array< T, N >'],['../df/de0/classArraySlice.html#a42d993c77e4cebbfa52f41b61f78185e',1,'ArraySlice::array()']]], - ['array_2ecpp_33',['Array.cpp',['../d1/d32/Array_8cpp.html',1,'']]], - ['array_2ehpp_34',['Array.hpp',['../de/d76/Array_8hpp.html',1,'']]], - ['array2d_35',['Array2D',['../da/de8/group__AH__Containers.html#ga65347c7f97dc7e8e602fb77ac735f585',1,'Array.hpp']]], - ['array_3c_20n_20_3e_36',['Array< N >',['../d7/d6a/structArray.html',1,'']]], - ['array_3c_20nb_5fcols_20_3e_37',['Array< nb_cols >',['../d7/d6a/structArray.html',1,'']]], - ['array_3c_20nb_5frows_20_3e_38',['Array< nb_rows >',['../d7/d6a/structArray.html',1,'']]], - ['array_3c_20pin_5ft_2c_20n_20_3e_39',['Array< pin_t, N >',['../d7/d6a/structArray.html',1,'']]], - ['arrayhelpers_2ecpp_40',['ArrayHelpers.cpp',['../db/d93/ArrayHelpers_8cpp.html',1,'']]], - ['arrayhelpers_2ehpp_41',['ArrayHelpers.hpp',['../d5/db6/ArrayHelpers_8hpp.html',1,'']]], - ['arrayslice_42',['ArraySlice',['../df/de0/classArraySlice.html',1,'ArraySlice< T, N, Reverse, Const >'],['../df/de0/classArraySlice.html#a4d1735860de2456adfc31f3472b6d874',1,'ArraySlice::ArraySlice()']]], - ['asarray_43',['asArray',['../df/de0/classArraySlice.html#adb626672a33880a352b7a56edfb3d29f',1,'ArraySlice']]] -]; diff --git a/docs/Doxygen/search/all_1.html b/docs/Doxygen/search/all_1.html deleted file mode 100644 index 0fcb70401..000000000 --- a/docs/Doxygen/search/all_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/all_1.js b/docs/Doxygen/search/all_1.js deleted file mode 100644 index 9506be129..000000000 --- a/docs/Doxygen/search/all_1.js +++ /dev/null @@ -1,33 +0,0 @@ -var searchData= -[ - ['bar_44',['Bar',['../d6/d3a/DotBarDisplayLEDs_8hpp.html#af626aa654815b2c30bbc674379e8807aaddc35f88fa71b6ef142ae61f35364653',1,'DotBarDisplayLEDs.hpp']]], - ['barmode_45',['barMode',['../d1/d3e/classDotBarDisplayLEDs.html#afeeba1b73c4d56b72673288026516c29',1,'DotBarDisplayLEDs']]], - ['begin_46',['begin',['../d7/d6a/structArray.html#a23e2fdb99370f37cb764cac10378c721',1,'Array::begin()'],['../d7/d6a/structArray.html#a27772ca963c0c0a5a76988fb2f511473',1,'Array::begin() const'],['../df/de0/classArraySlice.html#a09dd208593b9721a30a83ed978ede577',1,'ArraySlice::begin()'],['../dd/d16/classDoublyLinkedList.html#ad69bd11391be1a1dba5c8202259664f8',1,'DoublyLinkedList::begin()'],['../dd/d16/classDoublyLinkedList.html#a29305669b60ca1680752e2fc3592ba99',1,'DoublyLinkedList::begin() const'],['../d5/de0/classUpdatable.html#aaf893c33f3c041e289a12c153dcc9789',1,'Updatable::begin()'],['../d1/d19/classButton.html#ab0bdf5cca484fb2ba637c39384b27fb2',1,'Button::begin()'],['../d8/d6c/classButtonMatrix.html#ab0bdf5cca484fb2ba637c39384b27fb2',1,'ButtonMatrix::begin()'],['../d7/d8d/classAnalogMultiplex.html#a7c3e14d99bd3dc0e3670d6956dafcaf2',1,'AnalogMultiplex::begin()'],['../de/d4e/classExtendedIOElement.html#aaf893c33f3c041e289a12c153dcc9789',1,'ExtendedIOElement::begin()'],['../dc/d19/classMAX7219.html#a7c3e14d99bd3dc0e3670d6956dafcaf2',1,'MAX7219::begin()'],['../d1/d5c/classShiftRegisterOut.html#a7c3e14d99bd3dc0e3670d6956dafcaf2',1,'ShiftRegisterOut::begin()'],['../dd/d81/classSPIShiftRegisterOut.html#a7c3e14d99bd3dc0e3670d6956dafcaf2',1,'SPIShiftRegisterOut::begin()'],['../df/d38/classIncrementButton.html#ab0bdf5cca484fb2ba637c39384b27fb2',1,'IncrementButton::begin()'],['../d5/d20/classIncrementDecrementButtons.html#ab0bdf5cca484fb2ba637c39384b27fb2',1,'IncrementDecrementButtons::begin()'],['../d2/d1b/classLEDs.html#ad82a5b04cc538aa3200ed2c11e9d37ea',1,'LEDs::begin()'],['../d4/d26/classMAX7219SevenSegmentDisplay.html#ab0bdf5cca484fb2ba637c39384b27fb2',1,'MAX7219SevenSegmentDisplay::begin()'],['../dc/dea/classTimer.html#ab0bdf5cca484fb2ba637c39384b27fb2',1,'Timer::begin()']]], - ['begin_5fah_5fnamespace_47',['BEGIN_AH_NAMESPACE',['../dc/dc7/NamespaceSettings_8hpp.html#abe0f0e505619b6899c38363f4e42a272',1,'NamespaceSettings.hpp']]], - ['beginall_48',['beginAll',['../d5/de0/classUpdatable.html#a4f7077a56ec41a07f5a54dd8b3828984',1,'Updatable::beginAll()'],['../de/d4e/classExtendedIOElement.html#ac6e14454ba435e2e2ea0ce820173430b',1,'ExtendedIOElement::beginAll()']]], - ['bin_49',['bin',['../d8/d4b/group__AH__PrintStream.html#ga99e9817ede325b42677fc53cfb468b7f',1,'bin(Print &printer): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga99e9817ede325b42677fc53cfb468b7f',1,'bin(Print &printer): PrintStream.cpp']]], - ['bitarray_50',['BitArray',['../db/de9/classBitArray.html',1,'']]], - ['bitarray_2ecpp_51',['BitArray.cpp',['../d2/d56/BitArray_8cpp.html',1,'']]], - ['bitarray_2ehpp_52',['BitArray.hpp',['../d1/d40/BitArray_8hpp.html',1,'']]], - ['bitarray_3c_208_20_2a8_20_3e_53',['BitArray< 8 *8 >',['../db/de9/classBitArray.html',1,'']]], - ['bitorder_54',['bitOrder',['../d8/db4/classShiftRegisterOutBase.html#a4e460a68da9f4a4878ea5bf65fdcaedc',1,'ShiftRegisterOutBase']]], - ['bitorder_5ft_55',['BitOrder_t',['../d1/d5c/classShiftRegisterOut.html#a9c89f2b0981844ec80c88f4696425867',1,'ShiftRegisterOut::BitOrder_t()'],['../d8/db4/classShiftRegisterOutBase.html#a43d3c7f80d4a67d87c13e7222466fe28',1,'ShiftRegisterOutBase::BitOrder_t()'],['../dd/d81/classSPIShiftRegisterOut.html#a9c89f2b0981844ec80c88f4696425867',1,'SPIShiftRegisterOut::BitOrder_t()']]], - ['bitstobitmask_56',['bitsToBitmask',['../d8/d6c/classButtonMatrix.html#a0e3aba825d6e3ca8a9d8b30db1e9f284',1,'ButtonMatrix']]], - ['bitstoindex_57',['bitsToIndex',['../d8/d6c/classButtonMatrix.html#ad6b42d38847e363b4c8c5952c73a0a08',1,'ButtonMatrix']]], - ['blue_58',['blue',['../d8/db4/classShiftRegisterOutBase.html#a35b0b219eacadf47985c9faf7b0d4d45',1,'ShiftRegisterOutBase']]], - ['bluebit_59',['blueBit',['../d5/d45/structShiftRegisterOutRGB.html#acfafcd5d8289f6ffc9ad09cb6ad5aadc',1,'ShiftRegisterOutRGB']]], - ['bluepins_60',['bluePins',['../d8/db4/classShiftRegisterOutBase.html#a2669914fd96fa48f87d3bd6cb0759740',1,'ShiftRegisterOutBase']]], - ['boolalpha_61',['boolalpha',['../d8/d4b/group__AH__PrintStream.html#gaa88c44c66680f55fd42b3a19095aff3f',1,'boolalpha(Print &printer): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gaa88c44c66680f55fd42b3a19095aff3f',1,'boolalpha(Print &printer): PrintStream.cpp']]], - ['boolalphaprintstream_62',['boolalphaPrintStream',['../da/d69/PrintStream_8cpp.html#ac031ea43b717d6e00396a00c3caef6f2',1,'PrintStream.cpp']]], - ['buffer_63',['buffer',['../db/de9/classBitArray.html#a6a292007425eb6c5d4eb7d5eb2d1e0ed',1,'BitArray::buffer()'],['../dc/d19/classMAX7219.html#aa34c8c6d924621c8ccc675ae399b2733',1,'MAX7219::buffer()'],['../d8/db4/classShiftRegisterOutBase.html#a52f28b99ebaf530ae5b8219ccc6f4f81',1,'ShiftRegisterOutBase::buffer()']]], - ['bufferlength_64',['bufferLength',['../db/de9/classBitArray.html#a9d55ac509c001d869fee5a71a4302a0e',1,'BitArray']]], - ['button_65',['Button',['../d1/d19/classButton.html',1,'Button'],['../df/d38/classIncrementButton.html#aa56e877ca6a7524cf1e891c7435c3ace',1,'IncrementButton::button()'],['../d1/d19/classButton.html#adf271b1be4c753b7f9ddf23e8f67c530',1,'Button::Button()'],['../d1/d19/classButton.html#a1ba44be4e4f304fca419fbf8215d2b92',1,'Button::Button(pin_t pin)']]], - ['button_2ecpp_66',['Button.cpp',['../de/dd1/Button_8cpp.html',1,'']]], - ['button_2ehpp_67',['Button.hpp',['../d4/db3/Button_8hpp.html',1,'']]], - ['button_5fdebounce_5ftime_68',['BUTTON_DEBOUNCE_TIME',['../db/d02/Settings_8hpp.html#a838b0bb32d176701ae1362e3188c578d',1,'Settings.hpp']]], - ['buttonmatrix_69',['ButtonMatrix',['../d8/d6c/classButtonMatrix.html',1,'ButtonMatrix< nb_rows, nb_cols >'],['../d8/d6c/classButtonMatrix.html#a4f0c2abdbc67c9472606789380aba336',1,'ButtonMatrix::ButtonMatrix()']]], - ['buttonmatrix_2ecpp_70',['ButtonMatrix.cpp',['../d9/db3/ButtonMatrix_8cpp.html',1,'']]], - ['buttonmatrix_2ehpp_71',['ButtonMatrix.hpp',['../d9/d4b/ButtonMatrix_8hpp.html',1,'']]], - ['buttonmatrix_2eipp_72',['ButtonMatrix.ipp',['../d5/d41/ButtonMatrix_8ipp.html',1,'']]], - ['byteseparatorprintstream_73',['byteSeparatorPrintStream',['../da/d69/PrintStream_8cpp.html#a643fcf8db7c14c0dc68d6ae017366506',1,'PrintStream.cpp']]] -]; diff --git a/docs/Doxygen/search/all_10.html b/docs/Doxygen/search/all_10.html deleted file mode 100644 index c234738ec..000000000 --- a/docs/Doxygen/search/all_10.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/all_10.js b/docs/Doxygen/search/all_10.js deleted file mode 100644 index 975e2ac4b..000000000 --- a/docs/Doxygen/search/all_10.js +++ /dev/null @@ -1,16 +0,0 @@ -var searchData= -[ - ['timing_449',['Timing',['../d1/df1/group__AH__Timing.html',1,'']]], - ['teensyusbtypes_2ehpp_450',['TeensyUSBTypes.hpp',['../d9/d98/TeensyUSBTypes_8hpp.html',1,'']]], - ['timefunction_451',['timefunction',['../d1/dd0/MillisMicrosTimer_8hpp.html#a4086ab91003e2f23ab3d8d590d6f2fe3',1,'MillisMicrosTimer.hpp']]], - ['timer_452',['Timer',['../dc/dea/classTimer.html',1,'Timer< time >'],['../dc/dea/classTimer.html#a601e4fc3c3d5fa54634192a88819ad5a',1,'Timer::Timer()']]], - ['timing_2edox_453',['Timing.dox',['../d8/dd7/Timing_8dox.html',1,'']]], - ['tmp_5fhigh_454',['tmp_HIGH',['../dd/d39/namespacedetail.html#a17ae6be1564c38e079bb4a295b34bc47',1,'detail']]], - ['tmp_5finput_455',['tmp_INPUT',['../dd/d39/namespacedetail.html#a648e0ebad7ea7f24f5101e57974018a7',1,'detail']]], - ['tmp_5finput_5fpullup_456',['tmp_INPUT_PULLUP',['../dd/d39/namespacedetail.html#ad5527335766c12876614ea8b2e2a49ab',1,'detail']]], - ['tmp_5flow_457',['tmp_LOW',['../dd/d39/namespacedetail.html#ad8bcc703d4f97453fb09f43e41be9c08',1,'detail']]], - ['tmp_5foutput_458',['tmp_OUTPUT',['../dd/d39/namespacedetail.html#acf75d554e4ca4a4379dcd5c93b3743d5',1,'detail']]], - ['todo_20list_459',['Todo List',['../dd/da0/todo.html',1,'']]], - ['togglemode_460',['toggleMode',['../d1/d3e/classDotBarDisplayLEDs.html#a2ffa1ba1cd260f6e8ffd484452c3bab7',1,'DotBarDisplayLEDs']]], - ['type_461',['type',['../d7/d6a/structArray.html#a834c467da58ea1d81821952d3c473b64',1,'Array']]] -]; diff --git a/docs/Doxygen/search/all_11.html b/docs/Doxygen/search/all_11.html deleted file mode 100644 index 2f927fe5f..000000000 --- a/docs/Doxygen/search/all_11.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/all_11.js b/docs/Doxygen/search/all_11.js deleted file mode 100644 index a2e1e1471..000000000 --- a/docs/Doxygen/search/all_11.js +++ /dev/null @@ -1,17 +0,0 @@ -var searchData= -[ - ['uniqueptr_462',['UniquePtr',['../d0/ddd/classUniquePtr.html',1,'UniquePtr< T >'],['../d0/ddd/classUniquePtr.html#a644a16aac250619a3134a57e6348f1ef',1,'UniquePtr::UniquePtr()=default'],['../d0/ddd/classUniquePtr.html#a51f3581b2281c6a684d46d27bf8abaae',1,'UniquePtr::UniquePtr(T *p)'],['../d0/ddd/classUniquePtr.html#aaef2e17f579f60d2fed8437412bc1b09',1,'UniquePtr::UniquePtr(const UniquePtr &)=delete'],['../d0/ddd/classUniquePtr.html#aa803d07d745f9c7d2639d289f21b97d6',1,'UniquePtr::UniquePtr(UniquePtr< U > &&r)']]], - ['uniqueptr_2ecpp_463',['UniquePtr.cpp',['../de/d47/UniquePtr_8cpp.html',1,'']]], - ['uniqueptr_2ehpp_464',['UniquePtr.hpp',['../de/d7e/UniquePtr_8hpp.html',1,'']]], - ['updatable_465',['Updatable',['../d5/de0/classUpdatable.html',1,'Updatable< T >'],['../d5/de0/classUpdatable.html#a87d2727bbd24a3064948a29b5e3bc79e',1,'Updatable::Updatable()']]], - ['updatable_2ecpp_466',['Updatable.cpp',['../d6/dea/Updatable_8cpp.html',1,'']]], - ['updatable_2ehpp_467',['Updatable.hpp',['../d4/d93/Updatable_8hpp.html',1,'']]], - ['updatables_468',['updatables',['../d5/de0/classUpdatable.html#a3e1d4cf193404475766f612eeab8f087',1,'Updatable']]], - ['update_469',['update',['../d5/de0/classUpdatable.html#a99b02345a8a15d3c5ea2844a2253f510',1,'Updatable::update()'],['../d2/dcb/classHysteresis.html#a131ea12643cc4dc7874f101f521f4324',1,'Hysteresis::update()'],['../d1/d19/classButton.html#a58595f333f45f8096d91bf42e8a760a2',1,'Button::update()'],['../d8/d6c/classButtonMatrix.html#ac5c54df7ed3b930268c8d7752c101725',1,'ButtonMatrix::update()'],['../d7/d8d/classAnalogMultiplex.html#a44137bb65de2396875934e48a6ee5099',1,'AnalogMultiplex::update()'],['../de/d4e/classExtendedIOElement.html#a99b02345a8a15d3c5ea2844a2253f510',1,'ExtendedIOElement::update()'],['../dc/d19/classMAX7219.html#a44137bb65de2396875934e48a6ee5099',1,'MAX7219::update()'],['../d1/d5c/classShiftRegisterOut.html#a44137bb65de2396875934e48a6ee5099',1,'ShiftRegisterOut::update()'],['../dd/d81/classSPIShiftRegisterOut.html#a44137bb65de2396875934e48a6ee5099',1,'SPIShiftRegisterOut::update()'],['../da/da7/classFilteredAnalog.html#aa2aac016e2bf7b5bd2b271786c2791aa',1,'FilteredAnalog::update()'],['../df/d38/classIncrementButton.html#ad3475e1e3dd2663470de0906a75ccf73',1,'IncrementButton::update()'],['../d5/d20/classIncrementDecrementButtons.html#ad3475e1e3dd2663470de0906a75ccf73',1,'IncrementDecrementButtons::update()']]], - ['updateall_470',['updateAll',['../d5/de0/classUpdatable.html#a44e05f733dace05adcf585b5a17be292',1,'Updatable']]], - ['updateimplementation_471',['updateImplementation',['../df/d38/classIncrementButton.html#aed6dd7ae138afdede444afa5832a1757',1,'IncrementButton::updateImplementation()'],['../d5/d20/classIncrementDecrementButtons.html#a53624594134ff1978bb74f6a9c0412fb',1,'IncrementDecrementButtons::updateImplementation()']]], - ['uppercase_472',['UPPERCASE',['../da/d69/PrintStream_8cpp.html#a6674af4819a4f85e8c40be5971746668a19d6b87b851ddfd4fdc4f182e2ae0617',1,'UPPERCASE(): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga2b44e6ada22b1b5a703617123ebd0598',1,'uppercase(Print &printer): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga2b44e6ada22b1b5a703617123ebd0598',1,'uppercase(Print &printer): PrintStream.cpp']]], - ['use_5fah_5fnamespace_473',['USE_AH_NAMESPACE',['../dc/dc7/NamespaceSettings_8hpp.html#a00f163a3376fd194033495f415535986',1,'NamespaceSettings.hpp']]], - ['use_5fconstexpr_5farray_5fhelpers_474',['USE_CONSTEXPR_ARRAY_HELPERS',['../d5/db6/ArrayHelpers_8hpp.html#addd42f8d7a7cb2605e50325b9c54fefa',1,'ArrayHelpers.hpp']]], - ['using_5fah_5fnamespace_475',['USING_AH_NAMESPACE',['../dc/dc7/NamespaceSettings_8hpp.html#a652d295f60f5f72e47f545429e4e1acc',1,'NamespaceSettings.hpp']]] -]; diff --git a/docs/Doxygen/search/all_12.html b/docs/Doxygen/search/all_12.html deleted file mode 100644 index 6b0988c92..000000000 --- a/docs/Doxygen/search/all_12.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/all_12.js b/docs/Doxygen/search/all_12.js deleted file mode 100644 index 6d23c0d1f..000000000 --- a/docs/Doxygen/search/all_12.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['value_476',['value',['../d5/d4a/classdetail_1_1Incrementor.html#a4fc7f59e3113e19697159919a5aad095',1,'detail::Incrementor']]], - ['value_5ftype_477',['value_type',['../d9/d1a/classArraySlice_1_1Iterator.html#afb9ded5f49336ae503bb9f2035ea902b',1,'ArraySlice::Iterator::value_type()'],['../dd/d02/classDoublyLinkedList_1_1node__iterator.html#ac5d0adbe71d37d9dad7e72fd26b163a6',1,'DoublyLinkedList::node_iterator::value_type()'],['../d1/d4c/classDoublyLinkedList_1_1reverse__node__iterator.html#ac5d0adbe71d37d9dad7e72fd26b163a6',1,'DoublyLinkedList::reverse_node_iterator::value_type()']]] -]; diff --git a/docs/Doxygen/search/all_13.html b/docs/Doxygen/search/all_13.html deleted file mode 100644 index 7e5f42a98..000000000 --- a/docs/Doxygen/search/all_13.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/all_13.js b/docs/Doxygen/search/all_13.js deleted file mode 100644 index 52bfe5eb0..000000000 --- a/docs/Doxygen/search/all_13.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['warnings_2ehpp_478',['Warnings.hpp',['../d1/d65/Warnings_8hpp.html',1,'']]] -]; diff --git a/docs/Doxygen/search/all_14.html b/docs/Doxygen/search/all_14.html deleted file mode 100644 index ec7711ee8..000000000 --- a/docs/Doxygen/search/all_14.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/all_14.js b/docs/Doxygen/search/all_14.js deleted file mode 100644 index f6cd5f7ea..000000000 --- a/docs/Doxygen/search/all_14.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['_7ebuttonmatrix_479',['~ButtonMatrix',['../d8/d6c/classButtonMatrix.html#a40a59c4c8c858fa54fd6b65e3d6430fd',1,'ButtonMatrix']]], - ['_7edoublylinkable_480',['~DoublyLinkable',['../d4/d23/classDoublyLinkable.html#a52e45d1ee1c4822cf1f133920fbfab62',1,'DoublyLinkable']]], - ['_7eextendedioelement_481',['~ExtendedIOElement',['../de/d4e/classExtendedIOElement.html#afb3e78caecbc529d44030584ba09d284',1,'ExtendedIOElement']]], - ['_7euniqueptr_482',['~UniquePtr',['../d0/ddd/classUniquePtr.html#abe23dfe2f820469d701ff9474260fd84',1,'UniquePtr']]], - ['_7eupdatable_483',['~Updatable',['../d5/de0/classUpdatable.html#aff29d399f9c2bc6901821811df949712',1,'Updatable']]] -]; diff --git a/docs/Doxygen/search/all_2.html b/docs/Doxygen/search/all_2.html deleted file mode 100644 index 19c530f25..000000000 --- a/docs/Doxygen/search/all_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/all_2.js b/docs/Doxygen/search/all_2.js deleted file mode 100644 index c01a9d456..000000000 --- a/docs/Doxygen/search/all_2.js +++ /dev/null @@ -1,19 +0,0 @@ -var searchData= -[ - ['containers_74',['Containers',['../da/de8/group__AH__Containers.html',1,'']]], - ['caseprintstream_75',['casePrintStream',['../da/d69/PrintStream_8cpp.html#a0ea54e5be4d1c162631f25acd0d1d6c9',1,'PrintStream.cpp']]], - ['cat_76',['cat',['../da/de8/group__AH__Containers.html#gaad0d1453702ba4ea1c2e3f4281029377',1,'ArrayHelpers.hpp']]], - ['cd74hc4051_77',['CD74HC4051',['../db/dd3/group__AH__ExtIO.html#ga3ab4921db62494df27df05daf4b11e70',1,'AnalogMultiplex.hpp']]], - ['cd74hc4067_78',['CD74HC4067',['../db/dd3/group__AH__ExtIO.html#ga76abe1cbb481b44875fb5e08da186ad0',1,'AnalogMultiplex.hpp']]], - ['clear_79',['clear',['../db/de9/classBitArray.html#a24366860e599d2f82b6befd11bf3dac8',1,'BitArray::clear()'],['../d2/d1b/classLEDs.html#af5c47848fb7a20923270eaee20472f47',1,'LEDs::clear(uint8_t index) const'],['../d2/d1b/classLEDs.html#adf1d9633e64d0de6a36e0af17ccd8163',1,'LEDs::clear() const'],['../da/dd0/classMAX7219__Base.html#ac8bb3912a3ce86b15842e79d0b421204',1,'MAX7219_Base::clear()']]], - ['clockpin_80',['clockPin',['../d1/d5c/classShiftRegisterOut.html#a3ca3c75ca8158615f33839b0e154c15d',1,'ShiftRegisterOut']]], - ['colpins_81',['colPins',['../d8/d6c/classButtonMatrix.html#a9ac5156794b322950acdc745de570aac',1,'ButtonMatrix']]], - ['const_5fiterator_82',['const_iterator',['../dd/d16/classDoublyLinkedList.html#a63727293e4b2d482e37cded1a5c30483',1,'DoublyLinkedList']]], - ['const_5freverse_5fiterator_83',['const_reverse_iterator',['../dd/d16/classDoublyLinkedList.html#a858c22bc6707c956dff7ed4838eb6450',1,'DoublyLinkedList']]], - ['containers_2edox_84',['Containers.dox',['../d5/def/Containers_8dox.html',1,'']]], - ['copyas_85',['copyAs',['../da/de8/group__AH__Containers.html#gafabc9f5a80a8d4c068141c62de619714',1,'ArrayHelpers.hpp']]], - ['couldcontain_86',['couldContain',['../dd/d16/classDoublyLinkedList.html#a07505b9229f646d1f819acee79aded6d',1,'DoublyLinkedList']]], - ['count_87',['COUNT',['../d7/d52/DebugVal_8hpp.html#adbcb2cf49651bf55398702c8e57b13fd',1,'DebugVal.hpp']]], - ['count_5fhelper_88',['COUNT_HELPER',['../d7/d52/DebugVal_8hpp.html#a3c4a20d343dd3badfcb32ad13e23011f',1,'DebugVal.hpp']]], - ['cslice_89',['cslice',['../d7/d6a/structArray.html#a095474b2ffde5d8acd7c8979107671ab',1,'Array']]] -]; diff --git a/docs/Doxygen/search/all_3.html b/docs/Doxygen/search/all_3.html deleted file mode 100644 index 1ae887fc6..000000000 --- a/docs/Doxygen/search/all_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/all_3.js b/docs/Doxygen/search/all_3.js deleted file mode 100644 index 4ec2d615f..000000000 --- a/docs/Doxygen/search/all_3.js +++ /dev/null @@ -1,65 +0,0 @@ -var searchData= -[ - ['debug_90',['Debug',['../d4/da5/group__AH__Debug.html',1,'']]], - ['data_91',['data',['../d7/d6a/structArray.html#a6896f24464ed35248eb0bc5cf32e8616',1,'Array']]], - ['datapin_92',['dataPin',['../d1/d5c/classShiftRegisterOut.html#a5a57853673d4bc52ccaa55936237fa1c',1,'ShiftRegisterOut']]], - ['debouncedstate_93',['debouncedState',['../d1/d19/classButton.html#ae33604ae5a1dfe1ed92f33733414cb45',1,'Button']]], - ['debouncetime_94',['debounceTime',['../d1/d19/classButton.html#afff06ce15647fe4cfea1c11dcc235858',1,'Button']]], - ['debug_95',['DEBUG',['../d4/da5/group__AH__Debug.html#ga3dfa58b1c5c2943dd49d8aa1981d377d',1,'Debug.hpp']]], - ['debug_2ecpp_96',['Debug.cpp',['../df/d66/Debug_8cpp.html',1,'']]], - ['debug_2edox_97',['Debug.dox',['../df/d26/Debug_8dox.html',1,'']]], - ['debug_2ehpp_98',['Debug.hpp',['../df/dee/Debug_8hpp.html',1,'']]], - ['debug_2emd_99',['Debug.md',['../d3/dba/Debug_8md.html',1,'']]], - ['debug_5fendl_100',['DEBUG_ENDL',['../df/dee/Debug_8hpp.html#adfee4e127bcb4f8cd258a42e57358d25',1,'Debug.hpp']]], - ['debug_5ffunc_5flocation_101',['DEBUG_FUNC_LOCATION',['../df/dee/Debug_8hpp.html#a612bc94828e6e5e75f6ff978d6eb6f87',1,'Debug.hpp']]], - ['debug_5flocation_102',['DEBUG_LOCATION',['../df/dee/Debug_8hpp.html#a287b57d7cf8a3a20f97c91893d2ebace',1,'Debug.hpp']]], - ['debug_5fout_103',['DEBUG_OUT',['../db/d02/Settings_8hpp.html#a7cc5a6d57623c456857b1ba01ce919ee',1,'Settings.hpp']]], - ['debug_5fstr_104',['DEBUG_STR',['../df/dee/Debug_8hpp.html#a6b1af4db37be4dd296aaf199038b27e1',1,'Debug.hpp']]], - ['debug_5fstr_5fhelper_105',['DEBUG_STR_HELPER',['../df/dee/Debug_8hpp.html#a8a6e9a76d67fbd228ee6bb2075ef65ac',1,'Debug.hpp']]], - ['debugfn_106',['DEBUGFN',['../d4/da5/group__AH__Debug.html#ga5e1b7520df0706433ae295a78471fb3c',1,'Debug.hpp']]], - ['debugref_107',['DEBUGREF',['../d4/da5/group__AH__Debug.html#gafedb5ed0c0a4ef76c6b968368af014c7',1,'Debug.hpp']]], - ['debugtime_108',['DEBUGTIME',['../d4/da5/group__AH__Debug.html#ga95d4440a4127650cdd221322b1780833',1,'Debug.hpp']]], - ['debugval_109',['DEBUGVAL',['../d4/da5/group__AH__Debug.html#gaab96fed8c4f7d9e0f985b05cc6a419b2',1,'Debug.hpp']]], - ['debugval_2ehpp_110',['DebugVal.hpp',['../d7/d52/DebugVal_8hpp.html',1,'']]], - ['debugval1_111',['DEBUGVAL1',['../d7/d52/DebugVal_8hpp.html#a5776c70ca2658ee15615b5c0c73a171e',1,'DebugVal.hpp']]], - ['debugval10_112',['DEBUGVAL10',['../d7/d52/DebugVal_8hpp.html#a49db3554a4bc83f94c74f8b334076fd2',1,'DebugVal.hpp']]], - ['debugval2_113',['DEBUGVAL2',['../d7/d52/DebugVal_8hpp.html#a6fc3e1e5dcab2f24d0eaaf1da1e0e5cd',1,'DebugVal.hpp']]], - ['debugval3_114',['DEBUGVAL3',['../d7/d52/DebugVal_8hpp.html#a051e42e568345c608ac081fc9d1052cf',1,'DebugVal.hpp']]], - ['debugval4_115',['DEBUGVAL4',['../d7/d52/DebugVal_8hpp.html#a22dadc94492304ce1bab5216d3ef7187',1,'DebugVal.hpp']]], - ['debugval5_116',['DEBUGVAL5',['../d7/d52/DebugVal_8hpp.html#abdc1fc2e7d70f6aebb5423cc05416834',1,'DebugVal.hpp']]], - ['debugval6_117',['DEBUGVAL6',['../d7/d52/DebugVal_8hpp.html#a501316c3e96d55dc6813047eb52522bf',1,'DebugVal.hpp']]], - ['debugval7_118',['DEBUGVAL7',['../d7/d52/DebugVal_8hpp.html#a558b890ad95113d17efda500fa37440c',1,'DebugVal.hpp']]], - ['debugval8_119',['DEBUGVAL8',['../d7/d52/DebugVal_8hpp.html#a7546313a1fd730e316473bec21417a20',1,'DebugVal.hpp']]], - ['debugval9_120',['DEBUGVAL9',['../d7/d52/DebugVal_8hpp.html#a9b1bfddda2744c66706abe0d48ae2edb',1,'DebugVal.hpp']]], - ['debugvaln_121',['DEBUGVALN',['../d7/d52/DebugVal_8hpp.html#ac0b7a03fe30bf8f2d5f4ee004da31c77',1,'DebugVal.hpp']]], - ['debugvaln_5fhelper_122',['DEBUGVALN_HELPER',['../d7/d52/DebugVal_8hpp.html#a3bc78571bf359b550772523a1200a475',1,'DebugVal.hpp']]], - ['dec_123',['dec',['../d8/d4b/group__AH__PrintStream.html#gaa46b20141a495c428e33bcdcbf63c04e',1,'dec(Print &printer): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gaa46b20141a495c428e33bcdcbf63c04e',1,'dec(Print &printer): PrintStream.cpp']]], - ['decodemode_124',['DECODEMODE',['../da/dd0/classMAX7219__Base.html#a904324e8c5b7efbdc44f1d860ec06508',1,'MAX7219_Base']]], - ['decrement_125',['Decrement',['../d5/d20/classIncrementDecrementButtons.html#a5d74787dedbc4e11c1ab15bf487e61f8a1f0f66cdf67254886aed03e2a04193e8',1,'IncrementDecrementButtons']]], - ['decrementbutton_126',['decrementButton',['../d5/d20/classIncrementDecrementButtons.html#ae8d30a93ba09e5497dd479a0a9022c31',1,'IncrementDecrementButtons']]], - ['defaultbaudrate_127',['defaultBaudRate',['../db/d02/Settings_8hpp.html#ac1052a84bab455c13aac40a30d8cb4ba',1,'Settings.hpp']]], - ['detail_128',['detail',['../dd/d39/namespacedetail.html',1,'']]], - ['difference_5ftype_129',['difference_type',['../d9/d1a/classArraySlice_1_1Iterator.html#ace405568d0b2f3fad4990044252c7732',1,'ArraySlice::Iterator::difference_type()'],['../dd/d02/classDoublyLinkedList_1_1node__iterator.html#ac153ebd21c9ff887d3db629171e6bf80',1,'DoublyLinkedList::node_iterator::difference_type()'],['../d1/d4c/classDoublyLinkedList_1_1reverse__node__iterator.html#ac153ebd21c9ff887d3db629171e6bf80',1,'DoublyLinkedList::reverse_node_iterator::difference_type()']]], - ['digitalread_130',['digitalRead',['../d7/d8d/classAnalogMultiplex.html#a06c8be051c17288bea66f7fd94d352b1',1,'AnalogMultiplex::digitalRead()'],['../de/d4e/classExtendedIOElement.html#afa50a5106cba6e0dc7822fb8cd73f737',1,'ExtendedIOElement::digitalRead()'],['../dc/d19/classMAX7219.html#a06c8be051c17288bea66f7fd94d352b1',1,'MAX7219::digitalRead()'],['../d8/db4/classShiftRegisterOutBase.html#a06c8be051c17288bea66f7fd94d352b1',1,'ShiftRegisterOutBase::digitalRead()'],['../d8/d3d/namespaceExtIO.html#aecc9c66e459fa540ac06ada7f25f0b96',1,'ExtIO::digitalRead(pin_t pin)'],['../d8/d3d/namespaceExtIO.html#ae1e3d979645a535a8ce49f935392d8bc',1,'ExtIO::digitalRead(int pin)']]], - ['digitalwrite_131',['digitalWrite',['../d7/d8d/classAnalogMultiplex.html#af873c712ef239ca96d8369c66d823a29',1,'AnalogMultiplex::digitalWrite()'],['../de/d4e/classExtendedIOElement.html#a7bea30a74383ad0a10a24fb0c8cc5a05',1,'ExtendedIOElement::digitalWrite()'],['../dc/d19/classMAX7219.html#a7b4fdbf457a991d88b4f7cf765a64b5e',1,'MAX7219::digitalWrite()'],['../d8/db4/classShiftRegisterOutBase.html#a7b4fdbf457a991d88b4f7cf765a64b5e',1,'ShiftRegisterOutBase::digitalWrite()'],['../d8/d3d/namespaceExtIO.html#aafb55ff1ef70b0086bfa19406c1d076a',1,'ExtIO::digitalWrite(pin_t pin, uint8_t val)'],['../d8/d3d/namespaceExtIO.html#a01431c91530865557cbbd074bbe84a95',1,'ExtIO::digitalWrite(int pin, uint8_t val)']]], - ['dirty_132',['dirty',['../d8/db4/classShiftRegisterOutBase.html#ad25edacba00e4d0666a9959053b7cc10',1,'ShiftRegisterOutBase']]], - ['disable_133',['disable',['../d5/de0/classUpdatable.html#a8cfbbe53c1cf6e3054736daea3044c0f',1,'Updatable::disable()'],['../d5/de0/classUpdatable.html#ac5cc10f3a68b6aa83bf1e99a1dd3264a',1,'Updatable::disable(Updatable< T > *element)'],['../d5/de0/classUpdatable.html#a82391f3239c38c964bf03011e4e9720d',1,'Updatable::disable(Updatable< T > &element)'],['../d5/de0/classUpdatable.html#ac05c991ba1ef6cb7363a44e2232119f0',1,'Updatable::disable(U(&array)[N])']]], - ['display_134',['display',['../d1/d3e/classDotBarDisplayLEDs.html#a56b50eafe5ba3a58be19a3691882fa57',1,'DotBarDisplayLEDs::display(uint8_t value) const'],['../d1/d3e/classDotBarDisplayLEDs.html#a1c653b463a49e26299ab95904372641a',1,'DotBarDisplayLEDs::display(float value) const'],['../d4/d26/classMAX7219SevenSegmentDisplay.html#a8a53cdf32432d6839387b6d65d9d7495',1,'MAX7219SevenSegmentDisplay::display(long number, uint8_t startDigit=0, uint8_t endDigit=7)'],['../d4/d26/classMAX7219SevenSegmentDisplay.html#a229ef78cca4de59ab26db2acd5901b83',1,'MAX7219SevenSegmentDisplay::display(const char *text, uint8_t startPos=0)'],['../d4/d26/classMAX7219SevenSegmentDisplay.html#a667ad7e72427719c28e594a4539c4279',1,'MAX7219SevenSegmentDisplay::display(const uint8_t(&characters)[N], uint8_t startPos=0)']]], - ['displaydot_135',['displayDot',['../d2/d1b/classLEDs.html#a6476e67a08f1e9bc02c9958bab7bffb8',1,'LEDs']]], - ['displayrange_136',['displayRange',['../d2/d1b/classLEDs.html#a052ced8e2541ff4c155cbc511417ac4e',1,'LEDs']]], - ['displaytest_137',['DISPLAYTEST',['../da/dd0/classMAX7219__Base.html#a8c8d383fac4673529d409feefb108e13',1,'MAX7219_Base']]], - ['distribute_138',['distribute',['../da/de8/group__AH__Containers.html#ga3def1b1b33c33994b36460d66b76ba72',1,'distribute(const ArraySlice< T1, N1, Reverse1, Const1 > &a, const ArraySlice< T2, N2, Reverse2, Const2 > &b): ArrayHelpers.hpp'],['../da/de8/group__AH__Containers.html#ga46326ad9f44882cf0619e570ee2b93f6',1,'distribute(const ArraySlice< T1, N1, Reverse1, Const1 > &a, const Array< T2, N2 > &b): ArrayHelpers.hpp'],['../da/de8/group__AH__Containers.html#ga434ebddb16f9fa34339dc68026fa6d90',1,'distribute(const Array< T1, N1 > &a, const ArraySlice< T2, N2, Reverse2, Const2 > &b): ArrayHelpers.hpp'],['../da/de8/group__AH__Containers.html#ga3f6de536d5a3a88afee2397343328945',1,'distribute(const Array< T1, N1 > &a, const Array< T2, N2 > &b): ArrayHelpers.hpp']]], - ['dot_139',['Dot',['../d6/d3a/DotBarDisplayLEDs_8hpp.html#af626aa654815b2c30bbc674379e8807aaaf6c6cf7a454b4ef4a850ac4d960a2cc',1,'DotBarDisplayLEDs.hpp']]], - ['dotbardisplayleds_140',['DotBarDisplayLEDs',['../d1/d3e/classDotBarDisplayLEDs.html',1,'DotBarDisplayLEDs< N >'],['../d1/d3e/classDotBarDisplayLEDs.html#aea5c06eb888dad499891ae2cdd379b10',1,'DotBarDisplayLEDs::DotBarDisplayLEDs()']]], - ['dotbardisplayleds_2ecpp_141',['DotBarDisplayLEDs.cpp',['../de/da7/DotBarDisplayLEDs_8cpp.html',1,'']]], - ['dotbardisplayleds_2ehpp_142',['DotBarDisplayLEDs.hpp',['../d6/d3a/DotBarDisplayLEDs_8hpp.html',1,'']]], - ['dotbarmode_143',['DotBarMode',['../d6/d3a/DotBarDisplayLEDs_8hpp.html#af626aa654815b2c30bbc674379e8807a',1,'DotBarDisplayLEDs.hpp']]], - ['dotmode_144',['dotMode',['../d1/d3e/classDotBarDisplayLEDs.html#afea99f014e9f1bfc928e6190d736dd3f',1,'DotBarDisplayLEDs']]], - ['doublylinkable_145',['DoublyLinkable',['../d4/d23/classDoublyLinkable.html',1,'']]], - ['doublylinkable_3c_20extendedioelement_20_3e_146',['DoublyLinkable< ExtendedIOElement >',['../d4/d23/classDoublyLinkable.html',1,'']]], - ['doublylinkable_3c_20updatable_3c_20t_20_3e_20_3e_147',['DoublyLinkable< Updatable< T > >',['../d4/d23/classDoublyLinkable.html',1,'']]], - ['doublylinkedlist_148',['DoublyLinkedList',['../dd/d16/classDoublyLinkedList.html',1,'']]], - ['doublylinkedlist_3c_20extendedioelement_20_3e_149',['DoublyLinkedList< ExtendedIOElement >',['../dd/d16/classDoublyLinkedList.html',1,'']]], - ['doublylinkedlist_3c_20updatable_3c_20t_20_3e_20_3e_150',['DoublyLinkedList< Updatable< T > >',['../dd/d16/classDoublyLinkedList.html',1,'']]], - ['debug_151',['Debug',['../de/daf/md_pages_Debug.html',1,'']]] -]; diff --git a/docs/Doxygen/search/all_4.html b/docs/Doxygen/search/all_4.html deleted file mode 100644 index 14c90ef56..000000000 --- a/docs/Doxygen/search/all_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/all_4.js b/docs/Doxygen/search/all_4.js deleted file mode 100644 index f72ab6bfa..000000000 --- a/docs/Doxygen/search/all_4.js +++ /dev/null @@ -1,31 +0,0 @@ -var searchData= -[ - ['error_152',['Error',['../d0/df7/group__AH__Error.html',1,'']]], - ['extended_20input_2foutput_153',['Extended Input/Output',['../db/dd3/group__AH__ExtIO.html',1,'']]], - ['elementptrtype_154',['ElementPtrType',['../df/de0/classArraySlice.html#a7887797978015583bedc5d864f3d2889',1,'ArraySlice']]], - ['elementreftype_155',['ElementRefType',['../df/de0/classArraySlice.html#a5037ddd33d843c28c512f86bb14a562d',1,'ArraySlice']]], - ['elements_156',['elements',['../de/d4e/classExtendedIOElement.html#a876a3612572c06ebe4a697ed273ea7f1',1,'ExtendedIOElement']]], - ['ema_157',['EMA',['../d7/d40/classEMA.html',1,'']]], - ['ema_2ecpp_158',['EMA.cpp',['../d9/d0a/EMA_8cpp.html',1,'']]], - ['ema_2ehpp_159',['EMA.hpp',['../d3/df0/EMA_8hpp.html',1,'']]], - ['ema_3c_20filtershiftfactor_2c_20filtertype_20_3e_160',['EMA< FilterShiftFactor, FilterType >',['../d7/d40/classEMA.html',1,'']]], - ['ema_5ff_161',['EMA_f',['../db/d6f/classEMA__f.html',1,'EMA_f'],['../db/d6f/classEMA__f.html#ad49ecf310d82070c95e8d798cb7e51ad',1,'EMA_f::EMA_f()']]], - ['enable_162',['enable',['../d5/de0/classUpdatable.html#a486f22824bd83c5308a0d70ffac6f758',1,'Updatable::enable()'],['../d5/de0/classUpdatable.html#aa412dd26665f540dac4f65e6fc47730f',1,'Updatable::enable(Updatable *element)'],['../d5/de0/classUpdatable.html#a4b25235ba3dcfb74aa42f2993a3cd415',1,'Updatable::enable(Updatable &element)'],['../d5/de0/classUpdatable.html#a2f775da7b162931d468d6d6b6950dfcf',1,'Updatable::enable(U(&array)[N])']]], - ['enablepin_163',['enablePin',['../d7/d8d/classAnalogMultiplex.html#a559afa2d89a827ab58baad7f444ff69d',1,'AnalogMultiplex']]], - ['end_164',['end',['../de/d4e/classExtendedIOElement.html#a59a46e64fcf3bddba754c70b4cba8ae9',1,'ExtendedIOElement::end()'],['../d7/d6a/structArray.html#a5994ad65dce0457b21adb6a10c8642dc',1,'Array::end()'],['../d7/d6a/structArray.html#a1a0a94a0e2e54e0097c07b5394196860',1,'Array::end() const'],['../df/de0/classArraySlice.html#a62469461ed7c932afba3808f4da0fe3d',1,'ArraySlice::end()'],['../dd/d16/classDoublyLinkedList.html#acad38d52497a975bfb6f2f6acd76631f',1,'DoublyLinkedList::end()'],['../dd/d16/classDoublyLinkedList.html#accf9a4bd0c34d4a5f6a7dab66ea10cdc',1,'DoublyLinkedList::end() const']]], - ['end_5fah_5fnamespace_165',['END_AH_NAMESPACE',['../dc/dc7/NamespaceSettings_8hpp.html#a03ed68e9e3d1bbe9a28fd924cb7260c1',1,'NamespaceSettings.hpp']]], - ['endl_166',['endl',['../d8/d4b/group__AH__PrintStream.html#gaae13bd0e8ea7184cf85b86bcd1a01e2d',1,'endl(Print &printer): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gaae13bd0e8ea7184cf85b86bcd1a01e2d',1,'endl(Print &printer): PrintStream.cpp']]], - ['error_167',['ERROR',['../d0/df7/group__AH__Error.html#ga7eae7037bf6cdc6bf5d46a11572194db',1,'Error.hpp']]], - ['error_2ecpp_168',['Error.cpp',['../da/d06/Error_8cpp.html',1,'']]], - ['error_2edox_169',['Error.dox',['../d4/d7a/Error_8dox.html',1,'']]], - ['error_2ehpp_170',['Error.hpp',['../d1/d93/Error_8hpp.html',1,'']]], - ['examples_2edox_171',['examples.dox',['../d9/d93/examples_8dox.html',1,'']]], - ['exit_2ecpp_172',['Exit.cpp',['../d6/df4/Exit_8cpp.html',1,'']]], - ['extendedinputoutput_2ecpp_173',['ExtendedInputOutput.cpp',['../d6/d3c/ExtendedInputOutput_8cpp.html',1,'']]], - ['extendedinputoutput_2ehpp_174',['ExtendedInputOutput.hpp',['../dd/ddf/ExtendedInputOutput_8hpp.html',1,'']]], - ['extendedioelement_175',['ExtendedIOElement',['../de/d4e/classExtendedIOElement.html',1,'ExtendedIOElement'],['../de/d4e/classExtendedIOElement.html#ab082f60c807354734c73413eb519f083',1,'ExtendedIOElement::ExtendedIOElement()']]], - ['extendedioelement_2ecpp_176',['ExtendedIOElement.cpp',['../da/d1f/ExtendedIOElement_8cpp.html',1,'']]], - ['extendedioelement_2ehpp_177',['ExtendedIOElement.hpp',['../d4/d57/ExtendedIOElement_8hpp.html',1,'']]], - ['extio_178',['ExtIO',['../d8/d3d/namespaceExtIO.html',1,'']]], - ['extio_2edox_179',['ExtIO.dox',['../d9/dc8/ExtIO_8dox.html',1,'']]] -]; diff --git a/docs/Doxygen/search/all_5.html b/docs/Doxygen/search/all_5.html deleted file mode 100644 index 60fa53e9e..000000000 --- a/docs/Doxygen/search/all_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/all_5.js b/docs/Doxygen/search/all_5.js deleted file mode 100644 index c12b3280e..000000000 --- a/docs/Doxygen/search/all_5.js +++ /dev/null @@ -1,24 +0,0 @@ -var searchData= -[ - ['filters_180',['Filters',['../dc/def/group__AH__Filters.html',1,'']]], - ['falling_181',['Falling',['../d1/d19/classButton.html#a5d74787dedbc4e11c1ab15bf487e61f8a746691be2cff34db1c8ed48b73305601',1,'Button']]], - ['fatal_5ferror_182',['FATAL_ERROR',['../d0/df7/group__AH__Error.html#ga3add19f1f413c0aabde3f5c6fe4230c6',1,'Error.hpp']]], - ['fatal_5ferrors_183',['FATAL_ERRORS',['../db/d02/Settings_8hpp.html#a5894a0b22947afb71dca51783e61ac2c',1,'Settings.hpp']]], - ['fatalerrorexit_184',['fatalErrorExit',['../d1/d93/Error_8hpp.html#a7ff220c57636b72ec9d8df676f72ef0e',1,'fatalErrorExit() __attribute__((noreturn)): Exit.cpp'],['../d6/df4/Exit_8cpp.html#a70341be23d4638984587786720541e43',1,'fatalErrorExit(): Exit.cpp']]], - ['fillarray_185',['fillArray',['../da/de8/group__AH__Containers.html#ga9637082562b5de1c3370f53ba840cb25',1,'ArrayHelpers.hpp']]], - ['filter_186',['filter',['../da/da7/classFilteredAnalog.html#ae8486f5860ef80680c3f712628837609',1,'FilteredAnalog::filter()'],['../d7/d40/classEMA.html#a2126afce1b045790750cef8d827ba5c5',1,'EMA::filter()'],['../db/d6f/classEMA__f.html#aacf6a331433a053f5e70f4f71aa87836',1,'EMA_f::filter()']]], - ['filtered_187',['filtered',['../d7/d40/classEMA.html#a6b00f9938ee2613e755889de3e734dd4',1,'EMA::filtered()'],['../db/d6f/classEMA__f.html#af2eed96d0424911b730d85f8304c47a2',1,'EMA_f::filtered()']]], - ['filtered_5finput_5fupdate_5finterval_188',['FILTERED_INPUT_UPDATE_INTERVAL',['../db/d02/Settings_8hpp.html#a888fcdd0f365245e3e32bb1144eb5fc8',1,'Settings.hpp']]], - ['filteredanalog_189',['FilteredAnalog',['../da/da7/classFilteredAnalog.html',1,'FilteredAnalog< Precision, FilterShiftFactor, FilterType, AnalogType, IncRes >'],['../da/da7/classFilteredAnalog.html#aec8b608b6272c8db4b6fa33e43484ece',1,'FilteredAnalog::FilteredAnalog()']]], - ['filteredanalog_2ecpp_190',['FilteredAnalog.cpp',['../dd/d47/FilteredAnalog_8cpp.html',1,'']]], - ['filteredanalog_2ehpp_191',['FilteredAnalog.hpp',['../d8/df3/FilteredAnalog_8hpp.html',1,'']]], - ['filters_2edox_192',['Filters.dox',['../dc/ddf/Filters_8dox.html',1,'']]], - ['first_193',['first',['../dd/d16/classDoublyLinkedList.html#a2addc5f5fab651284199528b83cd61c8',1,'DoublyLinkedList']]], - ['fixarduinomacros_2ehpp_194',['FixArduinoMacros.hpp',['../d6/d3b/FixArduinoMacros_8hpp.html',1,'']]], - ['fixedpointahalf_195',['fixedPointAHalf',['../d7/d40/classEMA.html#ad72e2362d836c7e013423cc3489635a8',1,'EMA']]], - ['flush_196',['flush',['../d8/d4b/group__AH__PrintStream.html#gad656b6d999d4a9c4ec16a7d7c9d6ab5e',1,'flush(Print &printer): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gad656b6d999d4a9c4ec16a7d7c9d6ab5e',1,'flush(Print &printer): PrintStream.cpp']]], - ['flush_5fon_5fevery_5fdebug_5fstatement_197',['FLUSH_ON_EVERY_DEBUG_STATEMENT',['../df/dee/Debug_8hpp.html#a7ff58a0631676f068e4db329a2ca8d28',1,'Debug.hpp']]], - ['formatprintstream_198',['formatPrintStream',['../da/d69/PrintStream_8cpp.html#aa9cd8589bac070bb2ab968b4f9c15231',1,'PrintStream.cpp']]], - ['frequency_199',['Frequency',['../d7/d90/classFrequency.html',1,'Frequency'],['../d7/d90/classFrequency.html#ababdd3bf7300f8e77a3d0f6c6fa8f261',1,'Frequency::Frequency()']]], - ['frequency_2ehpp_200',['Frequency.hpp',['../dc/d50/Frequency_8hpp.html',1,'']]] -]; diff --git a/docs/Doxygen/search/all_6.html b/docs/Doxygen/search/all_6.html deleted file mode 100644 index 718036313..000000000 --- a/docs/Doxygen/search/all_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/all_6.js b/docs/Doxygen/search/all_6.js deleted file mode 100644 index c5df92660..000000000 --- a/docs/Doxygen/search/all_6.js +++ /dev/null @@ -1,30 +0,0 @@ -var searchData= -[ - ['generatearray_201',['generateArray',['../da/de8/group__AH__Containers.html#gabd08306949ede9909fb0f3aca9d0d74a',1,'generateArray(G generator): ArrayHelpers.hpp'],['../da/de8/group__AH__Containers.html#ga4e07b33e52979d678830f6f78218607e',1,'generateArray(G generator) -> Array< decltype(generator()), N >: ArrayHelpers.hpp']]], - ['generateincrementalarray_202',['generateIncrementalArray',['../da/de8/group__AH__Containers.html#ga916ecc658d4308b2b4aa876a03bc5f2f',1,'ArrayHelpers.hpp']]], - ['get_203',['get',['../db/de9/classBitArray.html#a4130cd8787edaea5d864f9591413b1a5',1,'BitArray::get()'],['../d0/ddd/classUniquePtr.html#ac051b2568208e363ae2dffb23c0ad9ba',1,'UniquePtr::get()'],['../d0/ddd/classUniquePtr.html#ac2393e8bd15daa23d3cde726fd05fa78',1,'UniquePtr::get() const']]], - ['getall_204',['getAll',['../de/d4e/classExtendedIOElement.html#ab39c55f3dc8c6b76da5a2e38d3ce71eb',1,'ExtendedIOElement']]], - ['getbufferbit_205',['getBufferBit',['../db/de9/classBitArray.html#a9c7703ad078c4924116177d2462bbff6',1,'BitArray']]], - ['getbufferindex_206',['getBufferIndex',['../db/de9/classBitArray.html#a26f32dc0d06809fae90e2951554c04b8',1,'BitArray']]], - ['getbufferlength_207',['getBufferLength',['../db/de9/classBitArray.html#aa459ca81973d0b8b5d9d369574c8f79e',1,'BitArray']]], - ['getbuffermask_208',['getBufferMask',['../db/de9/classBitArray.html#a9fde85b6cab77cd2c00952e3beee8a40',1,'BitArray']]], - ['getbyte_209',['getByte',['../db/de9/classBitArray.html#ae44c8756fd88031343b799ac917dbaf0',1,'BitArray']]], - ['getdebouncetime_210',['getDebounceTime',['../d1/d19/classButton.html#abd2c7ce5bb0822e3a1a7b15da33bd3d4',1,'Button']]], - ['getend_211',['getEnd',['../de/d4e/classExtendedIOElement.html#ac1c5bf2e567333ac7a6f8b040d739b43',1,'ExtendedIOElement']]], - ['getfirst_212',['getFirst',['../dd/d16/classDoublyLinkedList.html#ac4e3e4821df6cd9a88971fd5580e5a43',1,'DoublyLinkedList']]], - ['getfloatvalue_213',['getFloatValue',['../da/da7/classFilteredAnalog.html#a8b6e5dccd615d65041ffc174d01cb9b8',1,'FilteredAnalog']]], - ['getinterval_214',['getInterval',['../dc/dea/classTimer.html#a47c3dbcbbdcc838df61aea8caf8a118e',1,'Timer']]], - ['getioelementofpin_215',['getIOElementOfPin',['../d8/d3d/namespaceExtIO.html#a61c05f198865505b4ecbeb9759a9aa77',1,'ExtIO']]], - ['getlast_216',['getLast',['../dd/d16/classDoublyLinkedList.html#a38ba5fe2a35b8052bdba6c2bd624c6c9',1,'DoublyLinkedList']]], - ['getlength_217',['getLength',['../de/d4e/classExtendedIOElement.html#a3df029350e2baa2e3fefd90ccf0432cd',1,'ExtendedIOElement']]], - ['getmode_218',['getMode',['../d1/d3e/classDotBarDisplayLEDs.html#add03bf21030c26bfffd733237b69411a',1,'DotBarDisplayLEDs']]], - ['getname_219',['getName',['../d1/d19/classButton.html#a6f271a6c38429ca0553c06cedbbcdd17',1,'Button']]], - ['getprevstate_220',['getPrevState',['../d8/d6c/classButtonMatrix.html#a62dac074b3767f9be91bc05f4e5a0638',1,'ButtonMatrix']]], - ['getrawvalue_221',['getRawValue',['../da/da7/classFilteredAnalog.html#a5a3e6c660c868d044afaeaf53e7872b3',1,'FilteredAnalog']]], - ['getstart_222',['getStart',['../de/d4e/classExtendedIOElement.html#a16be6556a97a7bf976eecb2ab51b4db2',1,'ExtendedIOElement']]], - ['getstate_223',['getState',['../d1/d19/classButton.html#aa6178f1d912f995cfa236990a731ea1e',1,'Button::getState()'],['../df/d38/classIncrementButton.html#a8e52bcaecc271b1b57c4608da2d4b11e',1,'IncrementButton::getState()'],['../d5/d20/classIncrementDecrementButtons.html#a8e52bcaecc271b1b57c4608da2d4b11e',1,'IncrementDecrementButtons::getState()']]], - ['getvalue_224',['getValue',['../d2/dcb/classHysteresis.html#aa4f4d200e8ddf64eed29dc2c80f9d307',1,'Hysteresis::getValue()'],['../da/da7/classFilteredAnalog.html#a8a4d365b8958084f9cb9176fe638bfae',1,'FilteredAnalog::getValue()']]], - ['green_225',['green',['../d8/db4/classShiftRegisterOutBase.html#a747ea2df45802236047707da53c83c67',1,'ShiftRegisterOutBase']]], - ['greenbit_226',['greenBit',['../d5/d45/structShiftRegisterOutRGB.html#a923cc98d65a21c97f8f9e31a36677b14',1,'ShiftRegisterOutRGB']]], - ['greenpins_227',['greenPins',['../d8/db4/classShiftRegisterOutBase.html#a7fce3d70b29b9701647c81baa7964079',1,'ShiftRegisterOutBase']]] -]; diff --git a/docs/Doxygen/search/all_7.html b/docs/Doxygen/search/all_7.html deleted file mode 100644 index ee6d2e4a5..000000000 --- a/docs/Doxygen/search/all_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/all_7.js b/docs/Doxygen/search/all_7.js deleted file mode 100644 index 686de544d..000000000 --- a/docs/Doxygen/search/all_7.js +++ /dev/null @@ -1,14 +0,0 @@ -var searchData= -[ - ['hardware_20utilities_228',['Hardware Utilities',['../d8/d53/group__AH__HardwareUtils.html',1,'']]], - ['hardware_2dtypes_2ehpp_229',['Hardware-Types.hpp',['../d4/d35/Hardware-Types_8hpp.html',1,'']]], - ['hardware_2edox_230',['Hardware.dox',['../d4/d45/Hardware_8dox.html',1,'']]], - ['has_5fanalog_5fread_5fresolution_231',['HAS_ANALOG_READ_RESOLUTION',['../d7/d7c/ADCConfig_8hpp.html#a4af2da2db9e536067c953baac53b70e6',1,'ADCConfig.hpp']]], - ['hertz_232',['hertz',['../d7/d90/classFrequency.html#a7fe9942aae73998b9b5b65367d16f472',1,'Frequency']]], - ['hex_233',['hex',['../d8/d4b/group__AH__PrintStream.html#gaa47b34b5f85fef7f8b050c0d0a715d2f',1,'hex(Print &printer): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gaa47b34b5f85fef7f8b050c0d0a715d2f',1,'hex(Print &printer): PrintStream.cpp']]], - ['high_234',['HIGH',['../dd/ddf/ExtendedInputOutput_8hpp.html#acecd29798f132930ae1bfbe527f41e8d',1,'ExtendedInputOutput.hpp']]], - ['hysteresis_235',['Hysteresis',['../d2/dcb/classHysteresis.html',1,'Hysteresis< BITS, T_in, T_out >'],['../da/da7/classFilteredAnalog.html#ac59ad53f58c22dda10715b40fcf441dc',1,'FilteredAnalog::hysteresis()']]], - ['hysteresis_2ecpp_236',['Hysteresis.cpp',['../dd/d40/Hysteresis_8cpp.html',1,'']]], - ['hysteresis_2ehpp_237',['Hysteresis.hpp',['../d3/d09/Hysteresis_8hpp.html',1,'']]], - ['hysteresis_3c_20adc_5fbits_2bincres_20_2d_20precision_2c_20analogtype_2c_20analogtype_20_3e_238',['Hysteresis< ADC_BITS+IncRes - Precision, AnalogType, AnalogType >',['../d2/dcb/classHysteresis.html',1,'']]] -]; diff --git a/docs/Doxygen/search/all_8.html b/docs/Doxygen/search/all_8.html deleted file mode 100644 index 7829aa40c..000000000 --- a/docs/Doxygen/search/all_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/all_8.js b/docs/Doxygen/search/all_8.js deleted file mode 100644 index 832b9182e..000000000 --- a/docs/Doxygen/search/all_8.js +++ /dev/null @@ -1,29 +0,0 @@ -var searchData= -[ - ['increasebitdepth_239',['increaseBitDepth',['../dd/d5e/group__AH__Math.html#ga46fa72568df66520decc1fd69b4d37be',1,'IncreaseBitDepth.hpp']]], - ['increasebitdepth_2ecpp_240',['IncreaseBitDepth.cpp',['../de/d9b/IncreaseBitDepth_8cpp.html',1,'']]], - ['increasebitdepth_2ehpp_241',['IncreaseBitDepth.hpp',['../d5/dee/IncreaseBitDepth_8hpp.html',1,'']]], - ['increasebitdepthimpl_242',['increaseBitDepthImpl',['../d5/dee/IncreaseBitDepth_8hpp.html#a6b57289740210e994ef084e3b620e902',1,'increaseBitDepthImpl(): IncreaseBitDepth.hpp'],['../d5/dee/IncreaseBitDepth_8hpp.html#a5b765f75de6e0e108893b447265568ca',1,'increaseBitDepthImpl(T_in in): IncreaseBitDepth.hpp'],['../d5/dee/IncreaseBitDepth_8hpp.html#a7ef664640695e1363e8d871303073eb2',1,'increaseBitDepthImpl(T_in in): IncreaseBitDepth.hpp']]], - ['increment_243',['Increment',['../df/d38/classIncrementButton.html#a5d74787dedbc4e11c1ab15bf487e61f8a0da20ccab743c7169b305055013d9bf3',1,'IncrementButton::Increment()'],['../d5/d20/classIncrementDecrementButtons.html#a5d74787dedbc4e11c1ab15bf487e61f8a0da20ccab743c7169b305055013d9bf3',1,'IncrementDecrementButtons::Increment()'],['../d5/d4a/classdetail_1_1Incrementor.html#aae161df163b048a3dd86d09214e0c3b9',1,'detail::Incrementor::increment()']]], - ['incrementbutton_244',['IncrementButton',['../df/d38/classIncrementButton.html',1,'IncrementButton'],['../d5/d20/classIncrementDecrementButtons.html#a26ff8759725d759a360f4ed6e81d1fe4',1,'IncrementDecrementButtons::incrementButton()'],['../df/d38/classIncrementButton.html#a1299f0d578092838e092dd6045762006',1,'IncrementButton::IncrementButton()']]], - ['incrementbutton_2ecpp_245',['IncrementButton.cpp',['../db/d9d/IncrementButton_8cpp.html',1,'']]], - ['incrementbutton_2ehpp_246',['IncrementButton.hpp',['../d5/d04/IncrementButton_8hpp.html',1,'']]], - ['incrementdecrementbuttons_247',['IncrementDecrementButtons',['../d5/d20/classIncrementDecrementButtons.html',1,'IncrementDecrementButtons'],['../d5/d20/classIncrementDecrementButtons.html#a169fb832f90b7d02106cf895e3c13f13',1,'IncrementDecrementButtons::IncrementDecrementButtons()']]], - ['incrementdecrementbuttons_2ecpp_248',['IncrementDecrementButtons.cpp',['../da/d66/IncrementDecrementButtons_8cpp.html',1,'']]], - ['incrementdecrementbuttons_2ehpp_249',['IncrementDecrementButtons.hpp',['../df/df5/IncrementDecrementButtons_8hpp.html',1,'']]], - ['incrementor_250',['Incrementor',['../d5/d4a/classdetail_1_1Incrementor.html',1,'Incrementor< T, V >'],['../d5/d4a/classdetail_1_1Incrementor.html#a5481dc3bb7d4149bce5951e582912639',1,'detail::Incrementor::Incrementor()']]], - ['init_251',['init',['../da/dd0/classMAX7219__Base.html#a02fd73d861ef2e4aabb38c0c9ff82947',1,'MAX7219_Base']]], - ['initial_252',['Initial',['../df/d38/classIncrementButton.html#a06fc87d81c62e9abb8790b6e5713c55ba3392b59c8aa0ec56670fbcd5638cbfde',1,'IncrementButton::Initial()'],['../d5/d20/classIncrementDecrementButtons.html#adf764cbdea00d65edcd07bb9953ad2b7a3392b59c8aa0ec56670fbcd5638cbfde',1,'IncrementDecrementButtons::Initial()']]], - ['input_253',['INPUT',['../dd/ddf/ExtendedInputOutput_8hpp.html#a1c022e5fb9141ce12c7c22a000ce732a',1,'ExtendedInputOutput.hpp']]], - ['input_5fpullup_254',['INPUT_PULLUP',['../dd/ddf/ExtendedInputOutput_8hpp.html#a7821f03e2c35ca4bf4a867e64994bcfd',1,'ExtendedInputOutput.hpp']]], - ['inrange_255',['inRange',['../d8/d3d/namespaceExtIO.html#aedf6005ecc64cea16059965b80ce5f85',1,'ExtIO']]], - ['insertbefore_256',['insertBefore',['../dd/d16/classDoublyLinkedList.html#acf4811805cad3ff26197d352e77a5984',1,'DoublyLinkedList::insertBefore(Node *toBeInserted, Node *before)'],['../dd/d16/classDoublyLinkedList.html#aee52709fe1679f32142402cea825a7f5',1,'DoublyLinkedList::insertBefore(Node &toBeInserted, Node &before)']]], - ['insertsorted_257',['insertSorted',['../dd/d16/classDoublyLinkedList.html#ad72e675f001fbacd813452efbd15a6f2',1,'DoublyLinkedList::insertSorted(Node *node, Compare cmp)'],['../dd/d16/classDoublyLinkedList.html#ab894c7e00c61dc14cb8bfed56aeed324',1,'DoublyLinkedList::insertSorted(Node *node)']]], - ['intensity_258',['INTENSITY',['../da/dd0/classMAX7219__Base.html#a1c8ebf3bac4b04528d30dc17eb0deb64',1,'MAX7219_Base']]], - ['interval_259',['interval',['../dc/dea/classTimer.html#aaaceac04637cd33a7f3fffdd1711e6c5',1,'Timer']]], - ['invert_260',['invert',['../d1/d19/classButton.html#a7fa1616cc61c19a5efcc863c950f7f30',1,'Button::invert()'],['../da/da7/classFilteredAnalog.html#a7fa1616cc61c19a5efcc863c950f7f30',1,'FilteredAnalog::invert()']]], - ['invertstate_261',['invertState',['../d1/d19/classButton.html#aa96c6f436045d358158cde8fac7cae44',1,'Button']]], - ['isenabled_262',['isEnabled',['../d5/de0/classUpdatable.html#a56722b6f1c22da04885bc9853148bb71',1,'Updatable']]], - ['iterator_263',['Iterator',['../d9/d1a/classArraySlice_1_1Iterator.html',1,'ArraySlice< T, N, Reverse, Const >::Iterator'],['../d9/d1a/classArraySlice_1_1Iterator.html#a85c519faf6acc81f7d56b31eb1c9d1cb',1,'ArraySlice::Iterator::Iterator()'],['../dd/d16/classDoublyLinkedList.html#a802b4d4a10fae183884ea91fca4005a1',1,'DoublyLinkedList::iterator()']]], - ['iterator_5fcategory_264',['iterator_category',['../d9/d1a/classArraySlice_1_1Iterator.html#a8806ca091813ced0b0658fedaa448357',1,'ArraySlice::Iterator::iterator_category()'],['../dd/d02/classDoublyLinkedList_1_1node__iterator.html#a13fe24ca0865b19fbff05ff095c4ffea',1,'DoublyLinkedList::node_iterator::iterator_category()'],['../d1/d4c/classDoublyLinkedList_1_1reverse__node__iterator.html#a13fe24ca0865b19fbff05ff095c4ffea',1,'DoublyLinkedList::reverse_node_iterator::iterator_category()']]] -]; diff --git a/docs/Doxygen/search/all_9.html b/docs/Doxygen/search/all_9.html deleted file mode 100644 index e4242c716..000000000 --- a/docs/Doxygen/search/all_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/all_9.js b/docs/Doxygen/search/all_9.js deleted file mode 100644 index f9e733c63..000000000 --- a/docs/Doxygen/search/all_9.js +++ /dev/null @@ -1,22 +0,0 @@ -var searchData= -[ - ['last_265',['last',['../dd/d16/classDoublyLinkedList.html#a16ac028724e4fd7016faa38928658477',1,'DoublyLinkedList']]], - ['latchpin_266',['latchPin',['../d8/db4/classShiftRegisterOutBase.html#a7d9f8a9622e636bd5a43af7babab0dee',1,'ShiftRegisterOutBase']]], - ['leadingzeros_267',['leadingzeros',['../d8/d4b/group__AH__PrintStream.html#gac1965a822d8334f9c97e598d36056dff',1,'leadingzeros(Print &printer): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gac1965a822d8334f9c97e598d36056dff',1,'leadingzeros(Print &printer): PrintStream.cpp']]], - ['leadingzerosprintstream_268',['leadingZerosPrintStream',['../da/d69/PrintStream_8cpp.html#ac1bd36282d0562d941f2512da9243042',1,'PrintStream.cpp']]], - ['ledpins_269',['ledPins',['../d2/d1b/classLEDs.html#a80a3e573dcc046bdb0c21a28313570f9',1,'LEDs']]], - ['leds_270',['LEDs',['../d2/d1b/classLEDs.html',1,'LEDs< N >'],['../d2/d1b/classLEDs.html#a91201de7a0ccf4e26184dfb9e37adecc',1,'LEDs::LEDs()']]], - ['leds_2ecpp_271',['LEDs.cpp',['../d7/dd4/LEDs_8cpp.html',1,'']]], - ['leds_2ehpp_272',['LEDs.hpp',['../d9/d4f/LEDs_8hpp.html',1,'']]], - ['length_273',['length',['../d7/d6a/structArray.html#a9d8e033f911e88ba181e3cfec4353a3d',1,'Array::length()'],['../de/d4e/classExtendedIOElement.html#a353dd034429707c99343a494aac0f31d',1,'ExtendedIOElement::length()'],['../d1/d13/classStaticSizeExtendedIOElement.html#aba6ca6dbf6cb35fd73f4f371b14e279b',1,'StaticSizeExtendedIOElement::length()']]], - ['linkedlist_2ecpp_274',['LinkedList.cpp',['../df/db8/LinkedList_8cpp.html',1,'']]], - ['linkedlist_2ehpp_275',['LinkedList.hpp',['../de/dd1/LinkedList_8hpp.html',1,'']]], - ['loadpin_276',['loadPin',['../da/dd0/classMAX7219__Base.html#a4b58daddccf28a52ecd600e8f6a56020',1,'MAX7219_Base']]], - ['long_5fpress_5fdelay_277',['LONG_PRESS_DELAY',['../db/d02/Settings_8hpp.html#ae45a88a68c9a82d85febda88f7ecf96d',1,'Settings.hpp']]], - ['long_5fpress_5frepeat_5fdelay_278',['LONG_PRESS_REPEAT_DELAY',['../db/d02/Settings_8hpp.html#a4c6482347c7ca829da34491dfb905773',1,'Settings.hpp']]], - ['longpress_279',['LongPress',['../df/d38/classIncrementButton.html#a06fc87d81c62e9abb8790b6e5713c55bade879c91413c9c7b60f9ca1fb92eb234',1,'IncrementButton::LongPress()'],['../d5/d20/classIncrementDecrementButtons.html#adf764cbdea00d65edcd07bb9953ad2b7ade879c91413c9c7b60f9ca1fb92eb234',1,'IncrementDecrementButtons::LongPress()']]], - ['longpressrepeat_280',['longPressRepeat',['../df/d38/classIncrementButton.html#a7d53db4cd24ecfba6d42ca4fddbad3d3',1,'IncrementButton::longPressRepeat()'],['../d5/d20/classIncrementDecrementButtons.html#a7d53db4cd24ecfba6d42ca4fddbad3d3',1,'IncrementDecrementButtons::longPressRepeat()']]], - ['longpressstate_281',['longPressState',['../df/d38/classIncrementButton.html#aa8172c07cea08f16277b0659c782357b',1,'IncrementButton::longPressState()'],['../d5/d20/classIncrementDecrementButtons.html#a4cf9424d6c2340ca6df61773cf4d2428',1,'IncrementDecrementButtons::longPressState()']]], - ['low_282',['LOW',['../dd/ddf/ExtendedInputOutput_8hpp.html#a948017cfe0ff222ceee310d1db10173d',1,'ExtendedInputOutput.hpp']]], - ['lowercase_283',['LOWERCASE',['../da/d69/PrintStream_8cpp.html#a6674af4819a4f85e8c40be5971746668af8ee0dcc4d45543df8763035c19ef2fc',1,'PrintStream.cpp']]] -]; diff --git a/docs/Doxygen/search/all_a.html b/docs/Doxygen/search/all_a.html deleted file mode 100644 index 47a4a78d2..000000000 --- a/docs/Doxygen/search/all_a.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/all_a.js b/docs/Doxygen/search/all_a.js deleted file mode 100644 index cea2ddcb2..000000000 --- a/docs/Doxygen/search/all_a.js +++ /dev/null @@ -1,35 +0,0 @@ -var searchData= -[ - ['math_20utilities_284',['Math Utilities',['../dd/d5e/group__AH__Math.html',1,'']]], - ['m_5fbase_285',['M_base',['../d3/d55/structSetbase.html#afb0976de86139aa215d620374e260b65',1,'Setbase']]], - ['m_5fbytesep_286',['M_bytesep',['../d5/d93/structSetbytesep.html#a4317dddd006fb401e44c3d68cf4a7443',1,'Setbytesep']]], - ['m_5fn_287',['M_n',['../d7/d70/structSetprecision.html#aa99b9e058a9d384b3496a9c30c0c28f5',1,'Setprecision']]], - ['makeunique_288',['MakeUnique',['../da/de8/group__AH__Containers.html#gabb4ce09bb1bbca704175a873b2a3f28a',1,'UniquePtr.hpp']]], - ['manipulator_289',['manipulator',['../d8/d4b/group__AH__PrintStream.html#gab82cf12919f956954b9bba423b696205',1,'PrintStream.hpp']]], - ['map_290',['map',['../da/da7/classFilteredAnalog.html#a55537d6de64435f495f9eaac3985d7e8',1,'FilteredAnalog']]], - ['mapfn_291',['mapFn',['../da/da7/classFilteredAnalog.html#ac0b34350a8c36183ef0611f470c594c0',1,'FilteredAnalog']]], - ['mappingfunction_292',['MappingFunction',['../da/da7/classFilteredAnalog.html#acebdd7d5e342b3080a731e8dd0a0738f',1,'FilteredAnalog']]], - ['margin_293',['margin',['../d2/dcb/classHysteresis.html#a60f481ee556174be7b3acfb02a6e53ca',1,'Hysteresis']]], - ['math_2edox_294',['Math.dox',['../d0/d81/Math_8dox.html',1,'']]], - ['max_295',['max',['../dd/d5e/group__AH__Math.html#ga9e95297ceced5af9c60b19932989502d',1,'MinMaxFix.hpp']]], - ['max7219_296',['MAX7219',['../dc/d19/classMAX7219.html',1,'MAX7219'],['../dc/d19/classMAX7219.html#a96e02b943424214530e1f369120f850f',1,'MAX7219::MAX7219()']]], - ['max7219_2ecpp_297',['MAX7219.cpp',['../d6/dc3/MAX7219_8cpp.html',1,'']]], - ['max7219_2ehpp_298',['MAX7219.hpp',['../d2/d25/MAX7219_8hpp.html',1,'']]], - ['max7219_5fbase_299',['MAX7219_Base',['../da/dd0/classMAX7219__Base.html',1,'MAX7219_Base'],['../da/dd0/classMAX7219__Base.html#aecdc7954ee8ac04343b4b8a5d9ef6c64',1,'MAX7219_Base::MAX7219_Base()']]], - ['max7219_5fbase_2ecpp_300',['MAX7219_Base.cpp',['../d8/d8b/MAX7219__Base_8cpp.html',1,'']]], - ['max7219_5fbase_2ehpp_301',['MAX7219_Base.hpp',['../d7/d13/MAX7219__Base_8hpp.html',1,'']]], - ['max7219sevensegmentdisplay_302',['MAX7219SevenSegmentDisplay',['../d4/d26/classMAX7219SevenSegmentDisplay.html',1,'MAX7219SevenSegmentDisplay'],['../d4/d26/classMAX7219SevenSegmentDisplay.html#a15e656e5392f7a6191411201dca132e9',1,'MAX7219SevenSegmentDisplay::MAX7219SevenSegmentDisplay()']]], - ['max7219sevensegmentdisplay_2ecpp_303',['MAX7219SevenSegmentDisplay.cpp',['../dc/d56/MAX7219SevenSegmentDisplay_8cpp.html',1,'']]], - ['max7219sevensegmentdisplay_2ehpp_304',['MAX7219SevenSegmentDisplay.hpp',['../d5/d0c/MAX7219SevenSegmentDisplay_8hpp.html',1,'']]], - ['max_5fin_305',['max_in',['../d2/dcb/classHysteresis.html#a32964102524c8f7f878be5daa02e1c47',1,'Hysteresis']]], - ['max_5fout_306',['max_out',['../d2/dcb/classHysteresis.html#a73cb90fdff9327a69c32e9e9c8e39d2a',1,'Hysteresis']]], - ['millismicrostimer_2ecpp_307',['MillisMicrosTimer.cpp',['../d3/d2b/MillisMicrosTimer_8cpp.html',1,'']]], - ['millismicrostimer_2ehpp_308',['MillisMicrosTimer.hpp',['../d1/dd0/MillisMicrosTimer_8hpp.html',1,'']]], - ['min_309',['min',['../dd/d5e/group__AH__Math.html#ga14defb38b6c00778e25b94ea91b0b4ac',1,'MinMaxFix.hpp']]], - ['minmaxfix_2ecpp_310',['MinMaxFix.cpp',['../d6/d9e/MinMaxFix_8cpp.html',1,'']]], - ['minmaxfix_2ehpp_311',['MinMaxFix.hpp',['../d7/d79/MinMaxFix_8hpp.html',1,'']]], - ['mode_312',['mode',['../d1/d3e/classDotBarDisplayLEDs.html#a5238ef04e9caeb86f50f51d775e16127',1,'DotBarDisplayLEDs']]], - ['movedown_313',['moveDown',['../dd/d16/classDoublyLinkedList.html#a9750fc672c95b807b56b12b0a65542f8',1,'DoublyLinkedList']]], - ['mux_5fdisabled_314',['MUX_DISABLED',['../d7/d8d/classAnalogMultiplex.html#a5c8583111be1c1c3fbb0e64eaf246bd0',1,'AnalogMultiplex']]], - ['mux_5fenabled_315',['MUX_ENABLED',['../d7/d8d/classAnalogMultiplex.html#aa9e0740b2ffd0812db9548c24f6f979b',1,'AnalogMultiplex']]] -]; diff --git a/docs/Doxygen/search/all_b.html b/docs/Doxygen/search/all_b.html deleted file mode 100644 index 1320a43f5..000000000 --- a/docs/Doxygen/search/all_b.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/all_b.js b/docs/Doxygen/search/all_b.js deleted file mode 100644 index 88363e4a5..000000000 --- a/docs/Doxygen/search/all_b.js +++ /dev/null @@ -1,19 +0,0 @@ -var searchData= -[ - ['namedvalue_316',['NAMEDVALUE',['../d4/da5/group__AH__Debug.html#ga35654913b4a1f9d9300f847fab14b3d3',1,'Debug.hpp']]], - ['namespacesettings_2ecpp_317',['NamespaceSettings.cpp',['../dc/dd6/NamespaceSettings_8cpp.html',1,'']]], - ['namespacesettings_2ehpp_318',['NamespaceSettings.hpp',['../dc/dc7/NamespaceSettings_8hpp.html',1,'']]], - ['next_319',['next',['../d4/d23/classDoublyLinkable.html#a00dd0a636d0c9134072b4bc7951d08c2',1,'DoublyLinkable']]], - ['nibble_5fto_5fhex_320',['nibble_to_hex',['../da/d69/PrintStream_8cpp.html#a7df4d5e824296b753f67be09e88593e3',1,'PrintStream.cpp']]], - ['no_5fpin_321',['NO_PIN',['../d4/d35/Hardware-Types_8hpp.html#a4a1c4604f2bf0c0c2fcfb0b1e0f91c25',1,'Hardware-Types.hpp']]], - ['noboolalpha_322',['noboolalpha',['../d8/d4b/group__AH__PrintStream.html#ga6f91d974c1da2e228efad12693a46386',1,'noboolalpha(Print &printer): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga6f91d974c1da2e228efad12693a46386',1,'noboolalpha(Print &printer): PrintStream.cpp']]], - ['node_323',['node',['../db/d52/classDoublyLinkedList_1_1node__iterator__base.html#a320fd40947b71565b239ec2bda243760',1,'DoublyLinkedList::node_iterator_base']]], - ['node_5fiterator_324',['node_iterator',['../dd/d02/classDoublyLinkedList_1_1node__iterator.html',1,'DoublyLinkedList< Node >::node_iterator< INode >'],['../dd/d02/classDoublyLinkedList_1_1node__iterator.html#ada137d965190b4d74fdd449a6e14abb8',1,'DoublyLinkedList::node_iterator::node_iterator()']]], - ['node_5fiterator_5fbase_325',['node_iterator_base',['../db/d52/classDoublyLinkedList_1_1node__iterator__base.html',1,'DoublyLinkedList< Node >::node_iterator_base< INode >'],['../db/d52/classDoublyLinkedList_1_1node__iterator__base.html#aa1e1021a3c378cae4c2ed20d079074f0',1,'DoublyLinkedList::node_iterator_base::node_iterator_base()']]], - ['noleadingzeros_326',['noleadingzeros',['../d8/d4b/group__AH__PrintStream.html#ga8c9f111e05c74acb9bdffce673ef5709',1,'noleadingzeros(Print &printer): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga8c9f111e05c74acb9bdffce673ef5709',1,'noleadingzeros(Print &printer): PrintStream.cpp']]], - ['normalupdatable_327',['NormalUpdatable',['../d5/db9/structNormalUpdatable.html',1,'']]], - ['noshowbase_328',['noshowbase',['../d8/d4b/group__AH__PrintStream.html#ga8ae8a20941a7cf9957efc590d5a56ef4',1,'noshowbase(Print &printer): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga8ae8a20941a7cf9957efc590d5a56ef4',1,'noshowbase(Print &printer): PrintStream.cpp']]], - ['nothing_329',['Nothing',['../df/d38/classIncrementButton.html#a5d74787dedbc4e11c1ab15bf487e61f8a0b44d4e916221e52c4ba47a8efb5e2fc',1,'IncrementButton::Nothing()'],['../d5/d20/classIncrementDecrementButtons.html#a5d74787dedbc4e11c1ab15bf487e61f8a0b44d4e916221e52c4ba47a8efb5e2fc',1,'IncrementDecrementButtons::Nothing()']]], - ['nouppercase_330',['nouppercase',['../d8/d4b/group__AH__PrintStream.html#gaff5eada882f71bd90e0de66c48faaeb3',1,'nouppercase(Print &printer): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gaff5eada882f71bd90e0de66c48faaeb3',1,'nouppercase(Print &printer): PrintStream.cpp']]], - ['numericchars_331',['NumericChars',['../d5/d0c/MAX7219SevenSegmentDisplay_8hpp.html#a22aef2ea85e50ea5193e012410dfb4b0',1,'MAX7219SevenSegmentDisplay.hpp']]] -]; diff --git a/docs/Doxygen/search/all_c.html b/docs/Doxygen/search/all_c.html deleted file mode 100644 index 32a3a1b8f..000000000 --- a/docs/Doxygen/search/all_c.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/all_c.js b/docs/Doxygen/search/all_c.js deleted file mode 100644 index 6cc8eef47..000000000 --- a/docs/Doxygen/search/all_c.js +++ /dev/null @@ -1,27 +0,0 @@ -var searchData= -[ - ['offset_332',['offset',['../d2/dcb/classHysteresis.html#a10f132094621f75f741b89d6ce038be9',1,'Hysteresis::offset()'],['../de/d4e/classExtendedIOElement.html#a7d439a6c37c0f2be13c119a42d450bb2',1,'ExtendedIOElement::offset()']]], - ['onbuttonchanged_333',['onButtonChanged',['../d8/d6c/classButtonMatrix.html#a2cadb550c55b9ee1f0362fc6ebf0ac8a',1,'ButtonMatrix']]], - ['operator_20array_3c_20t_2c_20n_20_3e_334',['operator Array< T, N >',['../df/de0/classArraySlice.html#a85540bd644d96e80370f2d5f735f172d',1,'ArraySlice']]], - ['operator_20bool_335',['operator bool',['../d0/ddd/classUniquePtr.html#a67b76affb3b5d35fa419ac234144038b',1,'UniquePtr::operator bool()'],['../dc/dea/classTimer.html#a9b3baad8c612d81b96e46f84d7e97580',1,'Timer::operator bool()']]], - ['operator_20unsigned_20long_336',['operator unsigned long',['../d7/d90/classFrequency.html#a8e155ade35aaef49414f915268ee195d',1,'Frequency']]], - ['operator_21_3d_337',['operator!=',['../d7/d6a/structArray.html#a5ca312d5c447ef9de4f3e2bae7426c82',1,'Array::operator!=()'],['../d9/d1a/classArraySlice_1_1Iterator.html#a1cd4233653c1f13cff58e58139e73c2f',1,'ArraySlice::Iterator::operator!=()'],['../db/d52/classDoublyLinkedList_1_1node__iterator__base.html#a672679d3f579f46f12db24e2a9705e34',1,'DoublyLinkedList::node_iterator_base::operator!=()'],['../da/de8/group__AH__Containers.html#ga1ef5e1a48076f38aeb11b10190eec198',1,'operator!=(ArraySlice< T1, N1, Reverse1, Const1 > a, ArraySlice< T2, N2, Reverse2, Const2 > b): Array.hpp'],['../da/de8/group__AH__Containers.html#ga5d0e99ddd5d0bb0ad06f29b060719709',1,'operator!=(const Array< T1, N1 > &a, ArraySlice< T2, N2, Reverse2, Const2 > b): Array.hpp'],['../da/de8/group__AH__Containers.html#gac5b048c809a3f87ed0ee7a4dc1522e3c',1,'operator!=(ArraySlice< T1, N1, Reverse1, Const1 > a, const Array< T2, N2 > &b): Array.hpp']]], - ['operator_28_29_338',['operator()',['../d5/d4a/classdetail_1_1Incrementor.html#aaba2db6079c528211c6b095cdb08fcf6',1,'detail::Incrementor::operator()()'],['../d7/d40/classEMA.html#aad711c5729d88de6e4c1f50f0a0b4de6',1,'EMA::operator()()'],['../db/d6f/classEMA__f.html#a08c804ae887b09bc9c12a6814c9ec50e',1,'EMA_f::operator()()']]], - ['operator_2a_339',['operator*',['../d9/d1a/classArraySlice_1_1Iterator.html#ab086ec1916db61d1ab56a801abca8d91',1,'ArraySlice::Iterator::operator*()'],['../db/d52/classDoublyLinkedList_1_1node__iterator__base.html#aa43114c1c29e69554982c9f8982a0820',1,'DoublyLinkedList::node_iterator_base::operator*()'],['../d0/ddd/classUniquePtr.html#af7f8c6b921dca2b94f6e7ee14e762770',1,'UniquePtr::operator*()'],['../d0/ddd/classUniquePtr.html#a540e5588dffde890174a282451f73fb9',1,'UniquePtr::operator*() const'],['../da/de8/group__AH__Containers.html#gae05240f5dd9331e9b8973876f1460a87',1,'operator*(ArraySlice< T1, N1, Reverse1, Const1 > a, T2 b): Array.hpp'],['../da/de8/group__AH__Containers.html#ga1c80a4dd08ce81e68b1f11779785d8b7',1,'operator*(const Array< T1, N1 > &a, T2 b): Array.hpp'],['../da/de8/group__AH__Containers.html#ga61b35a20cc3b709bb084bd85d737b97a',1,'operator*(T1 a, ArraySlice< T2, N2, Reverse2, Const2 > b): Array.hpp'],['../da/de8/group__AH__Containers.html#ga266b501c15d3402fa35f876d087ca3b8',1,'operator*(T1 a, const Array< T2, N2 > &b): Array.hpp']]], - ['operator_2a_3d_340',['operator*=',['../da/de8/group__AH__Containers.html#ga543f2d3a313cde5da776a6e3c6fe0c84',1,'operator*=(const ArraySlice< T1, N1, Reverse1, Const1 > &a, T2 b): Array.hpp'],['../da/de8/group__AH__Containers.html#ga37a28e43d2cecee277df750e3a06d933',1,'operator*=(Array< T1, N1 > &a, T2 b): Array.hpp']]], - ['operator_2b_341',['operator+',['../d9/d1a/classArraySlice_1_1Iterator.html#acca971baddfbaf992b357b0cc26e27ce',1,'ArraySlice::Iterator::operator+()'],['../da/de8/group__AH__Containers.html#gad957ff32abdac9e23c620d8e1ef3917f',1,'operator+(ArraySlice< T1, N1, Reverse1, Const1 > a, ArraySlice< T2, N2, Reverse2, Const2 > b): Array.hpp'],['../da/de8/group__AH__Containers.html#gac2d2fdc7148f0a2264af1d7873e75671',1,'operator+(const Array< T1, N1 > &a, const Array< T2, N2 > &b): Array.hpp']]], - ['operator_2b_2b_342',['operator++',['../d9/d1a/classArraySlice_1_1Iterator.html#aef12ef33726bc591f569f822c7b5ac41',1,'ArraySlice::Iterator::operator++()'],['../dd/d02/classDoublyLinkedList_1_1node__iterator.html#a07f248f1fb7ac39a1356a32b133cd7e9',1,'DoublyLinkedList::node_iterator::operator++()'],['../d1/d4c/classDoublyLinkedList_1_1reverse__node__iterator.html#a0424f362cd71a48fe442f9c866603f9d',1,'DoublyLinkedList::reverse_node_iterator::operator++()']]], - ['operator_2b_3d_343',['operator+=',['../da/de8/group__AH__Containers.html#ga256e0b52207c0d0046d14f3d1fca62bb',1,'operator+=(const ArraySlice< T1, N1, Reverse1, Const1 > &a, const ArraySlice< T2, N2, Reverse2, Const2 > &b): Array.hpp'],['../da/de8/group__AH__Containers.html#gacbd59aae6571e4769af3c32e6b93f41c',1,'operator+=(Array< T1, N1 > &a, const Array< T2, N2 > &b): Array.hpp']]], - ['operator_2d_344',['operator-',['../d9/d1a/classArraySlice_1_1Iterator.html#a64f3c17479ea105b93954a61d5d851e6',1,'ArraySlice::Iterator::operator-(Iterator rhs) const'],['../d9/d1a/classArraySlice_1_1Iterator.html#aa2aae37de5e7d1a04f186a6e36ccbb7e',1,'ArraySlice::Iterator::operator-(difference_type rhs) const'],['../da/de8/group__AH__Containers.html#ga684f0e78c6c771a98f7198e6c7ecb2a3',1,'operator-(ArraySlice< T1, N1, Reverse1, Const1 > a, ArraySlice< T2, N2, Reverse2, Const2 > b): Array.hpp'],['../da/de8/group__AH__Containers.html#gae0c80ca2f1f9a3dd17d85ccd79e0b696',1,'operator-(const Array< T1, N1 > &a, const Array< T2, N2 > &b): Array.hpp'],['../da/de8/group__AH__Containers.html#gacc2f020c702ecb15a6159ad224eaa683',1,'operator-(ArraySlice< T, N, Reverse, Const > a): Array.hpp'],['../da/de8/group__AH__Containers.html#ga3ee72fd9836670faac18a3051d3c8c0f',1,'operator-(const Array< T, N > &a): Array.hpp']]], - ['operator_2d_2d_345',['operator--',['../d9/d1a/classArraySlice_1_1Iterator.html#a34e5ed23ddc31b7d8d4bfb5bfacbaab6',1,'ArraySlice::Iterator::operator--()'],['../dd/d02/classDoublyLinkedList_1_1node__iterator.html#a46069da106166b03d9fdbfa12d71029e',1,'DoublyLinkedList::node_iterator::operator--()'],['../d1/d4c/classDoublyLinkedList_1_1reverse__node__iterator.html#ac7c0a827ddd55f27d235112e026cc82a',1,'DoublyLinkedList::reverse_node_iterator::operator--()']]], - ['operator_2d_3d_346',['operator-=',['../da/de8/group__AH__Containers.html#gaab1e92be4e590a31210a3c50a15f5ac6',1,'operator-=(const ArraySlice< T1, N1, Reverse1, Const1 > &a, const ArraySlice< T2, N2, Reverse2, Const2 > &b): Array.hpp'],['../da/de8/group__AH__Containers.html#gac61bc9f84282d80815a1e55bc9ad0086',1,'operator-=(Array< T1, N1 > &a, const Array< T2, N2 > &b): Array.hpp']]], - ['operator_2d_3e_347',['operator->',['../d0/ddd/classUniquePtr.html#af6e485beee07fd401de29c8cdf898c69',1,'UniquePtr::operator->()'],['../d0/ddd/classUniquePtr.html#a61f986d1655444750449ed13c40c9184',1,'UniquePtr::operator->() const']]], - ['operator_2f_348',['operator/',['../da/de8/group__AH__Containers.html#gad03301bb0682ccd12d1512a637bea9f1',1,'operator/(ArraySlice< T1, N1, Reverse1, Const1 > a, T2 b): Array.hpp'],['../da/de8/group__AH__Containers.html#ga8595483cba3ca0dedcfc7d62639fdbc5',1,'operator/(const Array< T1, N1 > &a, T2 b): Array.hpp']]], - ['operator_2f_3d_349',['operator/=',['../da/de8/group__AH__Containers.html#ga493cee7d284349d7bb7930a5924b4d77',1,'operator/=(const ArraySlice< T1, N1, Reverse1, Const1 > &a, T2 b): Array.hpp'],['../da/de8/group__AH__Containers.html#gaecf9cec09cb6b1daf4899053f90dfc20',1,'operator/=(Array< T1, N1 > &a, T2 b): Array.hpp']]], - ['operator_3c_350',['operator<',['../d9/d1a/classArraySlice_1_1Iterator.html#aa8304f4090897b0262fd7f97d13b8589',1,'ArraySlice::Iterator']]], - ['operator_3c_3c_351',['operator<<',['../d5/db6/ArrayHelpers_8hpp.html#a52ef59564017ff8fb10957c26c58b0db',1,'operator<<(Print &os, const AH::ArraySlice< T, N, Reverse, Const > &a): ArrayHelpers.hpp'],['../d5/db6/ArrayHelpers_8hpp.html#a9c834cf78018a1f6badb9fded544d3e0',1,'operator<<(Print &os, const AH::Array< T, N > &a): ArrayHelpers.hpp'],['../d8/d4b/group__AH__PrintStream.html#ga64b1b8497d66d4d85cc3908cfac827b5',1,'operator<<(Print &printer, const __FlashStringHelper *s): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga5527414c024fddf1fce6190623601f80',1,'operator<<(Print &printer, const String &s): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga842b80be9bc486e915c4b8c62fa818cb',1,'operator<<(Print &printer, const char s[]): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gac9013d198ba536b4b1cd22c374f8603a',1,'operator<<(Print &printer, char c): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gadebbaba10eeb805a0b4b9c454968d1f9',1,'operator<<(Print &printer, unsigned char i): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga5116ec6b4908a3a571278c6ed32e7693',1,'operator<<(Print &printer, int i): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gac93c94db784331d028ba9f0bec58f3e7',1,'operator<<(Print &printer, unsigned int i): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gab88df549b92b950346ca4b6a97031216',1,'operator<<(Print &printer, int8_t i): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga57bfabe8286b9f6938243b52a7779e86',1,'operator<<(Print &printer, long i): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gaa6cc568dec1935b6f2514f2287335800',1,'operator<<(Print &printer, unsigned long i): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gab523a51d3230f77857445589552f459d',1,'operator<<(Print &printer, double d): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga1ffa6bad6017c44f306903ffec337575',1,'operator<<(Print &printer, const Printable &p): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gacfb70bb3046cc98c296cef97e0b38026',1,'operator<<(Print &printer, bool b): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga36c3d007838c2df83b23486ab5e2d37c',1,'operator<<(Print &printer, manipulator pf): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gab4762462994e477eaafe571de577ca24',1,'operator<<(Print &printer, Setbase f): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gaf8b0703cb4ac7a624bb5b2cdabad6190',1,'operator<<(Print &printer, Setbytesep f): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga657a5f74c130e7703f429b377324a091',1,'operator<<(Print &printer, Setprecision f): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga64b1b8497d66d4d85cc3908cfac827b5',1,'operator<<(Print &printer, const __FlashStringHelper *s): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga5527414c024fddf1fce6190623601f80',1,'operator<<(Print &printer, const String &s): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga842b80be9bc486e915c4b8c62fa818cb',1,'operator<<(Print &printer, const char s[]): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gac9013d198ba536b4b1cd22c374f8603a',1,'operator<<(Print &printer, char c): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gadebbaba10eeb805a0b4b9c454968d1f9',1,'operator<<(Print &printer, unsigned char c): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga5116ec6b4908a3a571278c6ed32e7693',1,'operator<<(Print &printer, int i): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gac93c94db784331d028ba9f0bec58f3e7',1,'operator<<(Print &printer, unsigned int i): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gab88df549b92b950346ca4b6a97031216',1,'operator<<(Print &printer, int8_t i): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga57bfabe8286b9f6938243b52a7779e86',1,'operator<<(Print &printer, long i): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gaa6cc568dec1935b6f2514f2287335800',1,'operator<<(Print &printer, unsigned long i): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gab523a51d3230f77857445589552f459d',1,'operator<<(Print &printer, double d): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga1ffa6bad6017c44f306903ffec337575',1,'operator<<(Print &printer, const Printable &p): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gacfb70bb3046cc98c296cef97e0b38026',1,'operator<<(Print &printer, bool b): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga36c3d007838c2df83b23486ab5e2d37c',1,'operator<<(Print &printer, manipulator pf): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gab4762462994e477eaafe571de577ca24',1,'operator<<(Print &printer, Setbase f): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga657a5f74c130e7703f429b377324a091',1,'operator<<(Print &printer, Setprecision f): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gaf8b0703cb4ac7a624bb5b2cdabad6190',1,'operator<<(Print &printer, Setbytesep f): PrintStream.cpp']]], - ['operator_3d_352',['operator=',['../d0/ddd/classUniquePtr.html#adb39cd5bfc69f5090ca4e2615f74c4c2',1,'UniquePtr::operator=(const UniquePtr &)=delete'],['../d0/ddd/classUniquePtr.html#aef4436bd47b1118679bf1544876cb2b9',1,'UniquePtr::operator=(UniquePtr< T > &&r)']]], - ['operator_3d_3d_353',['operator==',['../d7/d6a/structArray.html#a3236075cc6f82b08fe9e78b564e4f68f',1,'Array::operator==()'],['../d9/d1a/classArraySlice_1_1Iterator.html#aa3af200fbb7ca45095328bb326695cd2',1,'ArraySlice::Iterator::operator==()'],['../da/de8/group__AH__Containers.html#ga90ff893e214031a13911b6e4248f0ac8',1,'operator==(ArraySlice< T1, N1, Reverse1, Const1 > a, ArraySlice< T2, N2, Reverse2, Const2 > b): Array.hpp'],['../da/de8/group__AH__Containers.html#ga624f8cf5a37c4ff8ead18122e099f908',1,'operator==(const Array< T1, N1 > &a, ArraySlice< T2, N2, Reverse2, Const2 > b): Array.hpp'],['../da/de8/group__AH__Containers.html#ga9922fb6f9f759e2e0e5b4efded6061c5',1,'operator==(ArraySlice< T1, N1, Reverse1, Const1 > a, const Array< T2, N2 > &b): Array.hpp']]], - ['operator_5b_5d_354',['operator[]',['../d7/d6a/structArray.html#a0decfd96492a17ed60a8a7af5145425f',1,'Array::operator[](size_t index)'],['../d7/d6a/structArray.html#a92afcec6ef2744a6362256565ca6055e',1,'Array::operator[](size_t index) const'],['../df/de0/classArraySlice.html#aa46b7e62e49cd65cb988608dcea404b5',1,'ArraySlice::operator[]()'],['../de/d4e/classExtendedIOElement.html#a85777f53430635019f2ec07e76dbddbb',1,'ExtendedIOElement::operator[]()']]], - ['output_355',['OUTPUT',['../dd/ddf/ExtendedInputOutput_8hpp.html#afe385e49d42243d0f7eee016aee5d7b9',1,'ExtendedInputOutput.hpp']]] -]; diff --git a/docs/Doxygen/search/all_d.html b/docs/Doxygen/search/all_d.html deleted file mode 100644 index a3860966d..000000000 --- a/docs/Doxygen/search/all_d.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/all_d.js b/docs/Doxygen/search/all_d.js deleted file mode 100644 index 33f993d02..000000000 --- a/docs/Doxygen/search/all_d.js +++ /dev/null @@ -1,29 +0,0 @@ -var searchData= -[ - ['printstream_356',['PrintStream',['../d8/d4b/group__AH__PrintStream.html',1,'']]], - ['p_357',['p',['../d0/ddd/classUniquePtr.html#a37743b6c834995caf2efd0896844fa74',1,'UniquePtr']]], - ['pin_358',['pin',['../d1/d19/classButton.html#ab322a42eb2d992af0fe951f228d8410b',1,'Button::pin()'],['../de/d4e/classExtendedIOElement.html#a32bdc98870117b27f2e8b1e157c79ea4',1,'ExtendedIOElement::pin()']]], - ['pin_5ft_359',['pin_t',['../d4/d35/Hardware-Types_8hpp.html#ae9cbfef0ba7a84ef222eff1fc509f88b',1,'Hardware-Types.hpp']]], - ['pinlist_360',['PinList',['../d4/d35/Hardware-Types_8hpp.html#a2cad4766e2eb5bb24649f97d53635b73',1,'Hardware-Types.hpp']]], - ['pinmode_361',['pinMode',['../d7/d8d/classAnalogMultiplex.html#ac242c17105b455c26871695b506226a9',1,'AnalogMultiplex::pinMode()'],['../de/d4e/classExtendedIOElement.html#ab72b3f2586f58ed91f7a2039cafdd89c',1,'ExtendedIOElement::pinMode()'],['../dc/d19/classMAX7219.html#a9c74624aa395cccd8a061d3f61fbdcf6',1,'MAX7219::pinMode()'],['../d8/db4/classShiftRegisterOutBase.html#a9c74624aa395cccd8a061d3f61fbdcf6',1,'ShiftRegisterOutBase::pinMode()'],['../d8/d3d/namespaceExtIO.html#a14f5d8ef18838978bf0c2df86f3cce25',1,'ExtIO::pinMode(pin_t pin, uint8_t mode)'],['../d8/d3d/namespaceExtIO.html#a20b75acbae873236abbd8e89079f2493',1,'ExtIO::pinMode(int pin, uint8_t mode)']]], - ['pins_362',['pins',['../d1/d13/classStaticSizeExtendedIOElement.html#a9db76a949dbd42494c35e82655f7defa',1,'StaticSizeExtendedIOElement']]], - ['pointer_363',['pointer',['../d9/d1a/classArraySlice_1_1Iterator.html#a10ebe0a2b5f7dceda6f042beb2ef2198',1,'ArraySlice::Iterator::pointer()'],['../dd/d02/classDoublyLinkedList_1_1node__iterator.html#a0b42c2b115077f26456b0086207dc114',1,'DoublyLinkedList::node_iterator::pointer()'],['../d1/d4c/classDoublyLinkedList_1_1reverse__node__iterator.html#a0b42c2b115077f26456b0086207dc114',1,'DoublyLinkedList::reverse_node_iterator::pointer()']]], - ['positiontobits_364',['positionToBits',['../d8/d6c/classButtonMatrix.html#ad87ce10adc151fc7ed0fddd21e9563fb',1,'ButtonMatrix']]], - ['precisionprintstream_365',['precisionPrintStream',['../da/d69/PrintStream_8cpp.html#ad0b67665a208d879d805bc8d0bdc3506',1,'PrintStream.cpp']]], - ['preparereading_366',['prepareReading',['../d7/d8d/classAnalogMultiplex.html#ad5798a8cedc5a75b987da0f5f0ca6076',1,'AnalogMultiplex']]], - ['pressed_367',['Pressed',['../d1/d19/classButton.html#a5d74787dedbc4e11c1ab15bf487e61f8a05f4abb2322aa023aba9570c327aff25',1,'Button']]], - ['prevbouncetime_368',['prevBounceTime',['../d1/d19/classButton.html#ab9c2c01614891d5d9b4e859f16075b30',1,'Button']]], - ['previnput_369',['prevInput',['../d1/d19/classButton.html#a883b0cf1dda8588777ae7724287d12fe',1,'Button']]], - ['previous_370',['previous',['../d4/d23/classDoublyLinkable.html#adbc3186d4d3faa0f9cd6c6492c5494df',1,'DoublyLinkable::previous()'],['../dc/dea/classTimer.html#ab6e03867f916dd6860f34c44b61f53dc',1,'Timer::previous()']]], - ['previousbouncetime_371',['previousBounceTime',['../d1/d19/classButton.html#a27d7b259b85b72a4e68fb86036e65b9c',1,'Button']]], - ['prevlevel_372',['prevLevel',['../d2/dcb/classHysteresis.html#a2131cc63eb3bb996deb8881d0a2a9dd1',1,'Hysteresis']]], - ['prevrefresh_373',['prevRefresh',['../d8/d6c/classButtonMatrix.html#a57103211dd8cea9970a10b6a99061331',1,'ButtonMatrix']]], - ['prevstates_374',['prevStates',['../d8/d6c/classButtonMatrix.html#a2400407b4bdaef76562435e88411ceae',1,'ButtonMatrix']]], - ['printbin_375',['printBin',['../da/d69/PrintStream_8cpp.html#a83e51d5a77350e2c6e7e6e82ec11dcca',1,'PrintStream.cpp']]], - ['printhex_376',['printHex',['../d4/d26/classMAX7219SevenSegmentDisplay.html#a7f957c2eb457f489eafbf718b9999e01',1,'MAX7219SevenSegmentDisplay::printHex()'],['../da/d69/PrintStream_8cpp.html#adb5b74280fd1d090bd20805a6d0ec6f2',1,'printHex(): PrintStream.cpp']]], - ['printintegral_377',['printIntegral',['../da/d69/PrintStream_8cpp.html#a505bb61b2f822982a09821e3d52cd424',1,'PrintStream.cpp']]], - ['printstream_2ecpp_378',['PrintStream.cpp',['../da/d69/PrintStream_8cpp.html',1,'']]], - ['printstream_2edox_379',['PrintStream.dox',['../d7/d66/PrintStream_8dox.html',1,'']]], - ['printstream_2ehpp_380',['PrintStream.hpp',['../dd/d80/PrintStream_8hpp.html',1,'']]], - ['ptr_381',['ptr',['../d9/d1a/classArraySlice_1_1Iterator.html#abf1aa9d0f834b189e83e5794a21ec37b',1,'ArraySlice::Iterator']]] -]; diff --git a/docs/Doxygen/search/all_e.html b/docs/Doxygen/search/all_e.html deleted file mode 100644 index 293161891..000000000 --- a/docs/Doxygen/search/all_e.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/all_e.js b/docs/Doxygen/search/all_e.js deleted file mode 100644 index 5c1eb40f8..000000000 --- a/docs/Doxygen/search/all_e.js +++ /dev/null @@ -1,18 +0,0 @@ -var searchData= -[ - ['rbegin_382',['rbegin',['../dd/d16/classDoublyLinkedList.html#acea44ed500a54b2bb93e16b86e81afa8',1,'DoublyLinkedList::rbegin()'],['../dd/d16/classDoublyLinkedList.html#af086cceac199bd735c7a97c2a8d7ed21',1,'DoublyLinkedList::rbegin() const']]], - ['readme_2emd_383',['README.md',['../da/ddd/README_8md.html',1,'']]], - ['red_384',['red',['../d8/db4/classShiftRegisterOutBase.html#a52c9d0b21c08dd325f4669ca4540e026',1,'ShiftRegisterOutBase']]], - ['redbit_385',['redBit',['../d5/d45/structShiftRegisterOutRGB.html#ab44c8fa701f3fe39fb5249c6bae04f8d',1,'ShiftRegisterOutRGB']]], - ['redpins_386',['redPins',['../d8/db4/classShiftRegisterOutBase.html#a2965856ddf9aafde39e8faf8f80d33d7',1,'ShiftRegisterOutBase']]], - ['reference_387',['reference',['../d9/d1a/classArraySlice_1_1Iterator.html#a0a0699997a16973611a3d8c255118019',1,'ArraySlice::Iterator::reference()'],['../dd/d02/classDoublyLinkedList_1_1node__iterator.html#a1cb518c14833569c92498bb062f6206f',1,'DoublyLinkedList::node_iterator::reference()'],['../d1/d4c/classDoublyLinkedList_1_1reverse__node__iterator.html#a1cb518c14833569c92498bb062f6206f',1,'DoublyLinkedList::reverse_node_iterator::reference()']]], - ['release_388',['release',['../d0/ddd/classUniquePtr.html#ab9b564b271e3d80c4adc1d923471f2ae',1,'UniquePtr']]], - ['released_389',['Released',['../d1/d19/classButton.html#a5d74787dedbc4e11c1ab15bf487e61f8ad9417ac74f0134b9577d1d85cf422c25',1,'Button']]], - ['remove_390',['remove',['../dd/d16/classDoublyLinkedList.html#a52e238d5c44ec02f6ce5b981d324ed4c',1,'DoublyLinkedList::remove(Node *node)'],['../dd/d16/classDoublyLinkedList.html#aa95fc3f616b3a1b4b2c79afe23146410',1,'DoublyLinkedList::remove(Node &node)']]], - ['rend_391',['rend',['../dd/d16/classDoublyLinkedList.html#a68c599ddcbfddc65170de524ac165e44',1,'DoublyLinkedList::rend()'],['../dd/d16/classDoublyLinkedList.html#a07da1fdc890b6949f1a20a1961c6fc44',1,'DoublyLinkedList::rend() const']]], - ['reset_392',['Reset',['../d5/d20/classIncrementDecrementButtons.html#a5d74787dedbc4e11c1ab15bf487e61f8a92793663441ced378f4676b8a6524385',1,'IncrementDecrementButtons::Reset()'],['../d0/ddd/classUniquePtr.html#abf01522ae69da4ba450bffa314bc439c',1,'UniquePtr::reset()']]], - ['reverse_5fiterator_393',['reverse_iterator',['../dd/d16/classDoublyLinkedList.html#a29f20337dc58a91f18fc6b966e5ee8c0',1,'DoublyLinkedList']]], - ['reverse_5fnode_5fiterator_394',['reverse_node_iterator',['../d1/d4c/classDoublyLinkedList_1_1reverse__node__iterator.html',1,'DoublyLinkedList< Node >::reverse_node_iterator< INode >'],['../d1/d4c/classDoublyLinkedList_1_1reverse__node__iterator.html#ae4aec55975300605e43a2d0d1833d290',1,'DoublyLinkedList::reverse_node_iterator::reverse_node_iterator()']]], - ['rising_395',['Rising',['../d1/d19/classButton.html#a5d74787dedbc4e11c1ab15bf487e61f8a6e520e0e7f14dd669c193c4f966da30c',1,'Button']]], - ['rowpins_396',['rowPins',['../d8/d6c/classButtonMatrix.html#a78f102fabc50104bd885ea077bcf8f8c',1,'ButtonMatrix']]] -]; diff --git a/docs/Doxygen/search/all_f.html b/docs/Doxygen/search/all_f.html deleted file mode 100644 index ca42a522f..000000000 --- a/docs/Doxygen/search/all_f.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/all_f.js b/docs/Doxygen/search/all_f.js deleted file mode 100644 index 1a7e0cf53..000000000 --- a/docs/Doxygen/search/all_f.js +++ /dev/null @@ -1,55 +0,0 @@ -var searchData= -[ - ['settings_397',['Settings',['../d4/dc6/group__AH__Settings.html',1,'']]], - ['safeindex_398',['safeIndex',['../db/de9/classBitArray.html#a5bbaf7ad03623987aa03ff6a303ecd3e',1,'BitArray']]], - ['scanlimit_399',['SCANLIMIT',['../da/dd0/classMAX7219__Base.html#ab98b9cc58b2d16fb6deccc2f3db1b40c',1,'MAX7219_Base']]], - ['send_400',['send',['../da/dd0/classMAX7219__Base.html#a3b696b4a472e9c4c8ac748231571eb89',1,'MAX7219_Base']]], - ['sendraw_401',['sendRaw',['../da/dd0/classMAX7219__Base.html#a02c392648ff5ed7a20c2d65aee768777',1,'MAX7219_Base']]], - ['set_402',['set',['../db/de9/classBitArray.html#a03f454ba9118dabc871ae3dc43c6813e',1,'BitArray::set(uint8_t bitIndex)'],['../db/de9/classBitArray.html#af46b5a583344475c83cb8f6da0d54265',1,'BitArray::set(uint8_t bitIndex, bool state)'],['../d2/d1b/classLEDs.html#af918f041a7389b7fe5322aa109977a9b',1,'LEDs::set()']]], - ['setbase_403',['Setbase',['../d3/d55/structSetbase.html',1,'Setbase'],['../d8/d4b/group__AH__PrintStream.html#gaee7a50f938e43275899e6a531bd69ce4',1,'setbase(uint8_t base): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gaee7a50f938e43275899e6a531bd69ce4',1,'setbase(uint8_t base): PrintStream.cpp']]], - ['setbytesep_404',['Setbytesep',['../d5/d93/structSetbytesep.html',1,'Setbytesep'],['../d8/d4b/group__AH__PrintStream.html#ga88e006aee1afa07615b3c00f7938d801',1,'setbytesep(char bytesep): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga88e006aee1afa07615b3c00f7938d801',1,'setbytesep(char bytesep): PrintStream.cpp']]], - ['setdebouncetime_405',['setDebounceTime',['../d1/d19/classButton.html#a4c842d71d208b8b1204fc6eb3799d4fd',1,'Button']]], - ['setintensity_406',['setIntensity',['../da/dd0/classMAX7219__Base.html#acd75d5bb7a523d22f348f4617e595d8b',1,'MAX7219_Base']]], - ['setinterval_407',['setInterval',['../dc/dea/classTimer.html#a74e6bf1a7e6209db803fe5ca30a5d4e6',1,'Timer']]], - ['setmode_408',['setMode',['../d1/d3e/classDotBarDisplayLEDs.html#a7acb8262e1b34ec0d41e6a80d3cc4e1c',1,'DotBarDisplayLEDs']]], - ['setmuxaddress_409',['setMuxAddress',['../d7/d8d/classAnalogMultiplex.html#af6fdf126c6e5ba7d52ee93e1c9724f8d',1,'AnalogMultiplex']]], - ['setprecision_410',['Setprecision',['../d7/d70/structSetprecision.html',1,'Setprecision'],['../d8/d4b/group__AH__PrintStream.html#gaf7cf4b0e6244f6fab7b1e15c2523e4e7',1,'setprecision(int n): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gaf7cf4b0e6244f6fab7b1e15c2523e4e7',1,'setprecision(int n): PrintStream.cpp']]], - ['setprevstate_411',['setPrevState',['../d8/d6c/classButtonMatrix.html#a21e0b2a81e51dba7661ea7128d9ee78d',1,'ButtonMatrix']]], - ['settings_412',['settings',['../da/dd0/classMAX7219__Base.html#abe759bf02debdd06813e7a7f800ea05e',1,'MAX7219_Base']]], - ['settings_2ecpp_413',['Settings.cpp',['../db/dd8/Settings_8cpp.html',1,'']]], - ['settings_2edox_414',['Settings.dox',['../df/d65/Settings_8dox.html',1,'']]], - ['settings_2ehpp_415',['Settings.hpp',['../db/d02/Settings_8hpp.html',1,'']]], - ['settingswrapper_2ecpp_416',['SettingsWrapper.cpp',['../d9/dcf/SettingsWrapper_8cpp.html',1,'']]], - ['settingswrapper_2ehpp_417',['SettingsWrapper.hpp',['../d2/dd5/SettingsWrapper_8hpp.html',1,'']]], - ['setupadc_418',['setupADC',['../da/da7/classFilteredAnalog.html#a3cec68e11b712453289f34d1634f86b8',1,'FilteredAnalog']]], - ['sevensegmentcharacters_419',['SevenSegmentCharacters',['../d5/d0c/MAX7219SevenSegmentDisplay_8hpp.html#a5a6ac1773492df06f2083501ada5e692',1,'MAX7219SevenSegmentDisplay.hpp']]], - ['shiftout_420',['shiftOut',['../d8/d3d/namespaceExtIO.html#a10983c6dc6781c3978dc0b91bf240fe1',1,'ExtIO::shiftOut(pin_t dataPin, pin_t clockPin, uint8_t bitOrder, uint8_t val)'],['../d8/d3d/namespaceExtIO.html#a3b005d8c772c9256ecb94e4748c8b895',1,'ExtIO::shiftOut(int dataPin, int clockPin, uint8_t bitOrder, uint8_t val)']]], - ['shiftregisterout_421',['ShiftRegisterOut',['../d1/d5c/classShiftRegisterOut.html',1,'ShiftRegisterOut< N >'],['../d1/d5c/classShiftRegisterOut.html#a6775fabb44f42b7d1c6170233c87921c',1,'ShiftRegisterOut::ShiftRegisterOut()']]], - ['shiftregisterout_2ecpp_422',['ShiftRegisterOut.cpp',['../d9/d35/ShiftRegisterOut_8cpp.html',1,'']]], - ['shiftregisterout_2ehpp_423',['ShiftRegisterOut.hpp',['../d0/db4/ShiftRegisterOut_8hpp.html',1,'']]], - ['shiftregisterout_2eipp_424',['ShiftRegisterOut.ipp',['../de/d95/ShiftRegisterOut_8ipp.html',1,'']]], - ['shiftregisteroutbase_425',['ShiftRegisterOutBase',['../d8/db4/classShiftRegisterOutBase.html',1,'ShiftRegisterOutBase< N >'],['../d8/db4/classShiftRegisterOutBase.html#a5ad543fc1bffd4013ad3496f2d072f5b',1,'ShiftRegisterOutBase::ShiftRegisterOutBase()']]], - ['shiftregisteroutbase_2ecpp_426',['ShiftRegisterOutBase.cpp',['../dd/d08/ShiftRegisterOutBase_8cpp.html',1,'']]], - ['shiftregisteroutbase_2ehpp_427',['ShiftRegisterOutBase.hpp',['../d8/d93/ShiftRegisterOutBase_8hpp.html',1,'']]], - ['shiftregisteroutbase_2eipp_428',['ShiftRegisterOutBase.ipp',['../d5/d47/ShiftRegisterOutBase_8ipp.html',1,'']]], - ['shiftregisteroutrgb_429',['ShiftRegisterOutRGB',['../d5/d45/structShiftRegisterOutRGB.html',1,'']]], - ['shiftregisteroutrgb_2ecpp_430',['ShiftRegisterOutRGB.cpp',['../db/d0b/ShiftRegisterOutRGB_8cpp.html',1,'']]], - ['shiftregisteroutrgb_2ehpp_431',['ShiftRegisterOutRGB.hpp',['../d1/d1f/ShiftRegisterOutRGB_8hpp.html',1,'']]], - ['showbase_432',['showbase',['../d8/d4b/group__AH__PrintStream.html#ga43ae2a66eb945be61773cbb24d9b6608',1,'showbase(Print &printer): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga43ae2a66eb945be61773cbb24d9b6608',1,'showbase(Print &printer): PrintStream.cpp']]], - ['showbaseprintstream_433',['showbasePrintStream',['../da/d69/PrintStream_8cpp.html#af3f3e169c625ed3418298a1795a6823b',1,'PrintStream.cpp']]], - ['shutdown_434',['SHUTDOWN',['../da/dd0/classMAX7219__Base.html#a81fe09c4404efb44e05fa13cf4e45e23',1,'MAX7219_Base']]], - ['slice_435',['slice',['../d7/d6a/structArray.html#a6c08a0b8e3c45b3d12a27e558e4d6c50',1,'Array::slice()'],['../d7/d6a/structArray.html#aad6cd36f3664de3d3e4ede6bb480896d',1,'Array::slice() const'],['../df/de0/classArraySlice.html#aecaa84bf9fb556811f8c970d596e7b7f',1,'ArraySlice::slice()']]], - ['spi_5fmax_5fspeed_436',['SPI_MAX_SPEED',['../db/d02/Settings_8hpp.html#a5b86686a1a39f3bd4c50998dc17706e6',1,'Settings.hpp']]], - ['spishiftregisterout_437',['SPIShiftRegisterOut',['../dd/d81/classSPIShiftRegisterOut.html',1,'SPIShiftRegisterOut< N >'],['../dd/d81/classSPIShiftRegisterOut.html#a3732a80bf2f4ebf4d0ac32a9d393fb73',1,'SPIShiftRegisterOut::SPIShiftRegisterOut()']]], - ['spishiftregisterout_2ecpp_438',['SPIShiftRegisterOut.cpp',['../d2/dde/SPIShiftRegisterOut_8cpp.html',1,'']]], - ['spishiftregisterout_2ehpp_439',['SPIShiftRegisterOut.hpp',['../d7/d88/SPIShiftRegisterOut_8hpp.html',1,'']]], - ['spishiftregisterout_2eipp_440',['SPIShiftRegisterOut.ipp',['../da/d45/SPIShiftRegisterOut_8ipp.html',1,'']]], - ['stabletime_441',['stableTime',['../d1/d19/classButton.html#a1cbdae7abfef90d54889e98b100f4d53',1,'Button::stableTime(unsigned long now) const'],['../d1/d19/classButton.html#adcebb54d1e901596c7ca14ac14aac43c',1,'Button::stableTime() const']]], - ['start_442',['start',['../de/d4e/classExtendedIOElement.html#a72d639edb9fa3781645cab09c2ee3dd3',1,'ExtendedIOElement']]], - ['state_443',['State',['../d1/d19/classButton.html#a5d74787dedbc4e11c1ab15bf487e61f8',1,'Button::State()'],['../df/d38/classIncrementButton.html#a5d74787dedbc4e11c1ab15bf487e61f8',1,'IncrementButton::State()'],['../d5/d20/classIncrementDecrementButtons.html#a5d74787dedbc4e11c1ab15bf487e61f8',1,'IncrementDecrementButtons::State()'],['../df/d38/classIncrementButton.html#a876b486d3a5241a126bd5751c5f70f79',1,'IncrementButton::state()'],['../d5/d20/classIncrementDecrementButtons.html#a876b486d3a5241a126bd5751c5f70f79',1,'IncrementDecrementButtons::state()']]], - ['staticsizeextendedioelement_444',['StaticSizeExtendedIOElement',['../d1/d13/classStaticSizeExtendedIOElement.html',1,'StaticSizeExtendedIOElement< N >'],['../d1/d13/classStaticSizeExtendedIOElement.html#abbbe5298f26889e0bffc0ab09e887aa4',1,'StaticSizeExtendedIOElement::StaticSizeExtendedIOElement()']]], - ['staticsizeextendedioelement_2ecpp_445',['StaticSizeExtendedIOElement.cpp',['../d2/dc9/StaticSizeExtendedIOElement_8cpp.html',1,'']]], - ['staticsizeextendedioelement_2ehpp_446',['StaticSizeExtendedIOElement.hpp',['../d2/d05/StaticSizeExtendedIOElement_8hpp.html',1,'']]], - ['staticsizeextendedioelement_3c_201_3c_3c_20n_20_3e_447',['StaticSizeExtendedIOElement< 1<< N >',['../d1/d13/classStaticSizeExtendedIOElement.html',1,'']]], - ['staticsizeextendedioelement_3c_208_20_2a8_20_3e_448',['StaticSizeExtendedIOElement< 8 *8 >',['../d1/d13/classStaticSizeExtendedIOElement.html',1,'']]] -]; diff --git a/docs/Doxygen/search/classes_0.html b/docs/Doxygen/search/classes_0.html deleted file mode 100644 index d585e6a9b..000000000 --- a/docs/Doxygen/search/classes_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/classes_0.js b/docs/Doxygen/search/classes_0.js deleted file mode 100644 index 087964acc..000000000 --- a/docs/Doxygen/search/classes_0.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['analogmultiplex_484',['AnalogMultiplex',['../d7/d8d/classAnalogMultiplex.html',1,'']]], - ['array_485',['Array',['../d7/d6a/structArray.html',1,'']]], - ['array_3c_20n_20_3e_486',['Array< N >',['../d7/d6a/structArray.html',1,'']]], - ['array_3c_20nb_5fcols_20_3e_487',['Array< nb_cols >',['../d7/d6a/structArray.html',1,'']]], - ['array_3c_20nb_5frows_20_3e_488',['Array< nb_rows >',['../d7/d6a/structArray.html',1,'']]], - ['array_3c_20pin_5ft_2c_20n_20_3e_489',['Array< pin_t, N >',['../d7/d6a/structArray.html',1,'']]], - ['arrayslice_490',['ArraySlice',['../df/de0/classArraySlice.html',1,'']]] -]; diff --git a/docs/Doxygen/search/classes_1.html b/docs/Doxygen/search/classes_1.html deleted file mode 100644 index baeb182b5..000000000 --- a/docs/Doxygen/search/classes_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/classes_1.js b/docs/Doxygen/search/classes_1.js deleted file mode 100644 index f15c5bd52..000000000 --- a/docs/Doxygen/search/classes_1.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['bitarray_491',['BitArray',['../db/de9/classBitArray.html',1,'']]], - ['bitarray_3c_208_20_2a8_20_3e_492',['BitArray< 8 *8 >',['../db/de9/classBitArray.html',1,'']]], - ['button_493',['Button',['../d1/d19/classButton.html',1,'']]], - ['buttonmatrix_494',['ButtonMatrix',['../d8/d6c/classButtonMatrix.html',1,'']]] -]; diff --git a/docs/Doxygen/search/classes_2.html b/docs/Doxygen/search/classes_2.html deleted file mode 100644 index d2672790c..000000000 --- a/docs/Doxygen/search/classes_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/classes_2.js b/docs/Doxygen/search/classes_2.js deleted file mode 100644 index 4c8d2755b..000000000 --- a/docs/Doxygen/search/classes_2.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['dotbardisplayleds_495',['DotBarDisplayLEDs',['../d1/d3e/classDotBarDisplayLEDs.html',1,'']]], - ['doublylinkable_496',['DoublyLinkable',['../d4/d23/classDoublyLinkable.html',1,'']]], - ['doublylinkable_3c_20extendedioelement_20_3e_497',['DoublyLinkable< ExtendedIOElement >',['../d4/d23/classDoublyLinkable.html',1,'']]], - ['doublylinkable_3c_20updatable_3c_20t_20_3e_20_3e_498',['DoublyLinkable< Updatable< T > >',['../d4/d23/classDoublyLinkable.html',1,'']]], - ['doublylinkedlist_499',['DoublyLinkedList',['../dd/d16/classDoublyLinkedList.html',1,'']]], - ['doublylinkedlist_3c_20extendedioelement_20_3e_500',['DoublyLinkedList< ExtendedIOElement >',['../dd/d16/classDoublyLinkedList.html',1,'']]], - ['doublylinkedlist_3c_20updatable_3c_20t_20_3e_20_3e_501',['DoublyLinkedList< Updatable< T > >',['../dd/d16/classDoublyLinkedList.html',1,'']]] -]; diff --git a/docs/Doxygen/search/classes_3.html b/docs/Doxygen/search/classes_3.html deleted file mode 100644 index 8a5cbe171..000000000 --- a/docs/Doxygen/search/classes_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/classes_3.js b/docs/Doxygen/search/classes_3.js deleted file mode 100644 index c226bfb6e..000000000 --- a/docs/Doxygen/search/classes_3.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['ema_502',['EMA',['../d7/d40/classEMA.html',1,'']]], - ['ema_3c_20filtershiftfactor_2c_20filtertype_20_3e_503',['EMA< FilterShiftFactor, FilterType >',['../d7/d40/classEMA.html',1,'']]], - ['ema_5ff_504',['EMA_f',['../db/d6f/classEMA__f.html',1,'']]], - ['extendedioelement_505',['ExtendedIOElement',['../de/d4e/classExtendedIOElement.html',1,'']]] -]; diff --git a/docs/Doxygen/search/classes_4.html b/docs/Doxygen/search/classes_4.html deleted file mode 100644 index 300b9abac..000000000 --- a/docs/Doxygen/search/classes_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/classes_4.js b/docs/Doxygen/search/classes_4.js deleted file mode 100644 index 8b9fc44c5..000000000 --- a/docs/Doxygen/search/classes_4.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['filteredanalog_506',['FilteredAnalog',['../da/da7/classFilteredAnalog.html',1,'']]], - ['frequency_507',['Frequency',['../d7/d90/classFrequency.html',1,'']]] -]; diff --git a/docs/Doxygen/search/classes_5.html b/docs/Doxygen/search/classes_5.html deleted file mode 100644 index e7afb2c3a..000000000 --- a/docs/Doxygen/search/classes_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/classes_5.js b/docs/Doxygen/search/classes_5.js deleted file mode 100644 index 8c9da9184..000000000 --- a/docs/Doxygen/search/classes_5.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['hysteresis_508',['Hysteresis',['../d2/dcb/classHysteresis.html',1,'']]], - ['hysteresis_3c_20adc_5fbits_2bincres_20_2d_20precision_2c_20analogtype_2c_20analogtype_20_3e_509',['Hysteresis< ADC_BITS+IncRes - Precision, AnalogType, AnalogType >',['../d2/dcb/classHysteresis.html',1,'']]] -]; diff --git a/docs/Doxygen/search/classes_6.html b/docs/Doxygen/search/classes_6.html deleted file mode 100644 index f397fd5a5..000000000 --- a/docs/Doxygen/search/classes_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/classes_6.js b/docs/Doxygen/search/classes_6.js deleted file mode 100644 index 43705ab57..000000000 --- a/docs/Doxygen/search/classes_6.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['incrementbutton_510',['IncrementButton',['../df/d38/classIncrementButton.html',1,'']]], - ['incrementdecrementbuttons_511',['IncrementDecrementButtons',['../d5/d20/classIncrementDecrementButtons.html',1,'']]], - ['incrementor_512',['Incrementor',['../d5/d4a/classdetail_1_1Incrementor.html',1,'detail']]], - ['iterator_513',['Iterator',['../d9/d1a/classArraySlice_1_1Iterator.html',1,'ArraySlice']]] -]; diff --git a/docs/Doxygen/search/classes_7.html b/docs/Doxygen/search/classes_7.html deleted file mode 100644 index 6453cb7fe..000000000 --- a/docs/Doxygen/search/classes_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/classes_7.js b/docs/Doxygen/search/classes_7.js deleted file mode 100644 index 8833a0350..000000000 --- a/docs/Doxygen/search/classes_7.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['leds_514',['LEDs',['../d2/d1b/classLEDs.html',1,'']]] -]; diff --git a/docs/Doxygen/search/classes_8.html b/docs/Doxygen/search/classes_8.html deleted file mode 100644 index f2f78e9fc..000000000 --- a/docs/Doxygen/search/classes_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/classes_8.js b/docs/Doxygen/search/classes_8.js deleted file mode 100644 index ef78955e1..000000000 --- a/docs/Doxygen/search/classes_8.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['max7219_515',['MAX7219',['../dc/d19/classMAX7219.html',1,'']]], - ['max7219_5fbase_516',['MAX7219_Base',['../da/dd0/classMAX7219__Base.html',1,'']]], - ['max7219sevensegmentdisplay_517',['MAX7219SevenSegmentDisplay',['../d4/d26/classMAX7219SevenSegmentDisplay.html',1,'']]] -]; diff --git a/docs/Doxygen/search/classes_9.html b/docs/Doxygen/search/classes_9.html deleted file mode 100644 index e4e148f03..000000000 --- a/docs/Doxygen/search/classes_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/classes_9.js b/docs/Doxygen/search/classes_9.js deleted file mode 100644 index c689bd66a..000000000 --- a/docs/Doxygen/search/classes_9.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['node_5fiterator_518',['node_iterator',['../dd/d02/classDoublyLinkedList_1_1node__iterator.html',1,'DoublyLinkedList']]], - ['node_5fiterator_5fbase_519',['node_iterator_base',['../db/d52/classDoublyLinkedList_1_1node__iterator__base.html',1,'DoublyLinkedList']]], - ['normalupdatable_520',['NormalUpdatable',['../d5/db9/structNormalUpdatable.html',1,'']]] -]; diff --git a/docs/Doxygen/search/classes_a.html b/docs/Doxygen/search/classes_a.html deleted file mode 100644 index 157ebcb74..000000000 --- a/docs/Doxygen/search/classes_a.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/classes_a.js b/docs/Doxygen/search/classes_a.js deleted file mode 100644 index 3e0708fdb..000000000 --- a/docs/Doxygen/search/classes_a.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['reverse_5fnode_5fiterator_521',['reverse_node_iterator',['../d1/d4c/classDoublyLinkedList_1_1reverse__node__iterator.html',1,'DoublyLinkedList']]] -]; diff --git a/docs/Doxygen/search/classes_b.html b/docs/Doxygen/search/classes_b.html deleted file mode 100644 index 02927f786..000000000 --- a/docs/Doxygen/search/classes_b.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/classes_b.js b/docs/Doxygen/search/classes_b.js deleted file mode 100644 index 8acb073fa..000000000 --- a/docs/Doxygen/search/classes_b.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['setbase_522',['Setbase',['../d3/d55/structSetbase.html',1,'']]], - ['setbytesep_523',['Setbytesep',['../d5/d93/structSetbytesep.html',1,'']]], - ['setprecision_524',['Setprecision',['../d7/d70/structSetprecision.html',1,'']]], - ['shiftregisterout_525',['ShiftRegisterOut',['../d1/d5c/classShiftRegisterOut.html',1,'']]], - ['shiftregisteroutbase_526',['ShiftRegisterOutBase',['../d8/db4/classShiftRegisterOutBase.html',1,'']]], - ['shiftregisteroutrgb_527',['ShiftRegisterOutRGB',['../d5/d45/structShiftRegisterOutRGB.html',1,'']]], - ['spishiftregisterout_528',['SPIShiftRegisterOut',['../dd/d81/classSPIShiftRegisterOut.html',1,'']]], - ['staticsizeextendedioelement_529',['StaticSizeExtendedIOElement',['../d1/d13/classStaticSizeExtendedIOElement.html',1,'']]], - ['staticsizeextendedioelement_3c_201_3c_3c_20n_20_3e_530',['StaticSizeExtendedIOElement< 1<< N >',['../d1/d13/classStaticSizeExtendedIOElement.html',1,'']]], - ['staticsizeextendedioelement_3c_208_20_2a8_20_3e_531',['StaticSizeExtendedIOElement< 8 *8 >',['../d1/d13/classStaticSizeExtendedIOElement.html',1,'']]] -]; diff --git a/docs/Doxygen/search/classes_c.html b/docs/Doxygen/search/classes_c.html deleted file mode 100644 index ab9f4049a..000000000 --- a/docs/Doxygen/search/classes_c.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/classes_c.js b/docs/Doxygen/search/classes_c.js deleted file mode 100644 index db5b42d21..000000000 --- a/docs/Doxygen/search/classes_c.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['timer_532',['Timer',['../dc/dea/classTimer.html',1,'']]] -]; diff --git a/docs/Doxygen/search/classes_d.html b/docs/Doxygen/search/classes_d.html deleted file mode 100644 index 7170da25b..000000000 --- a/docs/Doxygen/search/classes_d.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/classes_d.js b/docs/Doxygen/search/classes_d.js deleted file mode 100644 index 770d9b98c..000000000 --- a/docs/Doxygen/search/classes_d.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['uniqueptr_533',['UniquePtr',['../d0/ddd/classUniquePtr.html',1,'']]], - ['updatable_534',['Updatable',['../d5/de0/classUpdatable.html',1,'']]] -]; diff --git a/docs/Doxygen/search/close.png b/docs/Doxygen/search/close.png deleted file mode 100644 index 9342d3dfe..000000000 Binary files a/docs/Doxygen/search/close.png and /dev/null differ diff --git a/docs/Doxygen/search/defines_0.html b/docs/Doxygen/search/defines_0.html deleted file mode 100644 index 8fb07b8c8..000000000 --- a/docs/Doxygen/search/defines_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/defines_0.js b/docs/Doxygen/search/defines_0.js deleted file mode 100644 index e2e48974b..000000000 --- a/docs/Doxygen/search/defines_0.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['adc_5fresolution_954',['ADC_RESOLUTION',['../d7/d7c/ADCConfig_8hpp.html#a00978ca9e8220475258dcbbbb7d29129',1,'ADCConfig.hpp']]], - ['ah_5fdiagnostic_5fexternal_5fheader_955',['AH_DIAGNOSTIC_EXTERNAL_HEADER',['../d1/d65/Warnings_8hpp.html#a44dd04a1d1f97866e5b01c548f35fe5e',1,'Warnings.hpp']]], - ['ah_5fdiagnostic_5fpop_956',['AH_DIAGNOSTIC_POP',['../d1/d65/Warnings_8hpp.html#a4f088fb95f1d6dc4279357ca2a562cbe',1,'Warnings.hpp']]], - ['ah_5fdiagnostic_5fwerror_957',['AH_DIAGNOSTIC_WERROR',['../d1/d65/Warnings_8hpp.html#a9f2deeea1dd06b45ebc381da1633c7ee',1,'Warnings.hpp']]], - ['ah_5fext_5fpin_958',['AH_EXT_PIN',['../dd/ddf/ExtendedInputOutput_8hpp.html#a83aa0a0fed53945fc7fd8c66d373a436',1,'ExtendedInputOutput.hpp']]], - ['ah_5findividual_5fbutton_5finvert_959',['AH_INDIVIDUAL_BUTTON_INVERT',['../db/d02/Settings_8hpp.html#ac7d8f5c5d6672ffc748f2c614740d2d6',1,'Settings.hpp']]], - ['ah_5findividual_5fbutton_5finvert_5fstatic_960',['AH_INDIVIDUAL_BUTTON_INVERT_STATIC',['../d2/dd5/SettingsWrapper_8hpp.html#aaf9b2b6312ec507a3ad47a2c5f4748a2',1,'SettingsWrapper.hpp']]], - ['ah_5fis_5fempty_961',['AH_IS_EMPTY',['../d2/dd5/SettingsWrapper_8hpp.html#a04be36de00cd3bce8a6764d6b5b5f4c6',1,'SettingsWrapper.hpp']]], - ['ah_5fis_5fempty_5fhelper_962',['AH_IS_EMPTY_HELPER',['../d2/dd5/SettingsWrapper_8hpp.html#a707484720c54a77b6d54a9a78078579a',1,'SettingsWrapper.hpp']]], - ['ah_5fnamespace_5fname_963',['AH_NAMESPACE_NAME',['../dc/dc7/NamespaceSettings_8hpp.html#a6b56d72e5238e6495c46decbafa0d329',1,'NamespaceSettings.hpp']]] -]; diff --git a/docs/Doxygen/search/defines_1.html b/docs/Doxygen/search/defines_1.html deleted file mode 100644 index 2858dbe39..000000000 --- a/docs/Doxygen/search/defines_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/defines_1.js b/docs/Doxygen/search/defines_1.js deleted file mode 100644 index 458df8b12..000000000 --- a/docs/Doxygen/search/defines_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['begin_5fah_5fnamespace_964',['BEGIN_AH_NAMESPACE',['../dc/dc7/NamespaceSettings_8hpp.html#abe0f0e505619b6899c38363f4e42a272',1,'NamespaceSettings.hpp']]] -]; diff --git a/docs/Doxygen/search/defines_2.html b/docs/Doxygen/search/defines_2.html deleted file mode 100644 index 81824d5d7..000000000 --- a/docs/Doxygen/search/defines_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/defines_2.js b/docs/Doxygen/search/defines_2.js deleted file mode 100644 index c9253bbce..000000000 --- a/docs/Doxygen/search/defines_2.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['count_965',['COUNT',['../d7/d52/DebugVal_8hpp.html#adbcb2cf49651bf55398702c8e57b13fd',1,'DebugVal.hpp']]], - ['count_5fhelper_966',['COUNT_HELPER',['../d7/d52/DebugVal_8hpp.html#a3c4a20d343dd3badfcb32ad13e23011f',1,'DebugVal.hpp']]] -]; diff --git a/docs/Doxygen/search/defines_3.html b/docs/Doxygen/search/defines_3.html deleted file mode 100644 index e9d08d70c..000000000 --- a/docs/Doxygen/search/defines_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/defines_3.js b/docs/Doxygen/search/defines_3.js deleted file mode 100644 index ae17a20b5..000000000 --- a/docs/Doxygen/search/defines_3.js +++ /dev/null @@ -1,21 +0,0 @@ -var searchData= -[ - ['debug_5fendl_967',['DEBUG_ENDL',['../df/dee/Debug_8hpp.html#adfee4e127bcb4f8cd258a42e57358d25',1,'Debug.hpp']]], - ['debug_5ffunc_5flocation_968',['DEBUG_FUNC_LOCATION',['../df/dee/Debug_8hpp.html#a612bc94828e6e5e75f6ff978d6eb6f87',1,'Debug.hpp']]], - ['debug_5flocation_969',['DEBUG_LOCATION',['../df/dee/Debug_8hpp.html#a287b57d7cf8a3a20f97c91893d2ebace',1,'Debug.hpp']]], - ['debug_5fout_970',['DEBUG_OUT',['../db/d02/Settings_8hpp.html#a7cc5a6d57623c456857b1ba01ce919ee',1,'Settings.hpp']]], - ['debug_5fstr_971',['DEBUG_STR',['../df/dee/Debug_8hpp.html#a6b1af4db37be4dd296aaf199038b27e1',1,'Debug.hpp']]], - ['debug_5fstr_5fhelper_972',['DEBUG_STR_HELPER',['../df/dee/Debug_8hpp.html#a8a6e9a76d67fbd228ee6bb2075ef65ac',1,'Debug.hpp']]], - ['debugval1_973',['DEBUGVAL1',['../d7/d52/DebugVal_8hpp.html#a5776c70ca2658ee15615b5c0c73a171e',1,'DebugVal.hpp']]], - ['debugval10_974',['DEBUGVAL10',['../d7/d52/DebugVal_8hpp.html#a49db3554a4bc83f94c74f8b334076fd2',1,'DebugVal.hpp']]], - ['debugval2_975',['DEBUGVAL2',['../d7/d52/DebugVal_8hpp.html#a6fc3e1e5dcab2f24d0eaaf1da1e0e5cd',1,'DebugVal.hpp']]], - ['debugval3_976',['DEBUGVAL3',['../d7/d52/DebugVal_8hpp.html#a051e42e568345c608ac081fc9d1052cf',1,'DebugVal.hpp']]], - ['debugval4_977',['DEBUGVAL4',['../d7/d52/DebugVal_8hpp.html#a22dadc94492304ce1bab5216d3ef7187',1,'DebugVal.hpp']]], - ['debugval5_978',['DEBUGVAL5',['../d7/d52/DebugVal_8hpp.html#abdc1fc2e7d70f6aebb5423cc05416834',1,'DebugVal.hpp']]], - ['debugval6_979',['DEBUGVAL6',['../d7/d52/DebugVal_8hpp.html#a501316c3e96d55dc6813047eb52522bf',1,'DebugVal.hpp']]], - ['debugval7_980',['DEBUGVAL7',['../d7/d52/DebugVal_8hpp.html#a558b890ad95113d17efda500fa37440c',1,'DebugVal.hpp']]], - ['debugval8_981',['DEBUGVAL8',['../d7/d52/DebugVal_8hpp.html#a7546313a1fd730e316473bec21417a20',1,'DebugVal.hpp']]], - ['debugval9_982',['DEBUGVAL9',['../d7/d52/DebugVal_8hpp.html#a9b1bfddda2744c66706abe0d48ae2edb',1,'DebugVal.hpp']]], - ['debugvaln_983',['DEBUGVALN',['../d7/d52/DebugVal_8hpp.html#ac0b7a03fe30bf8f2d5f4ee004da31c77',1,'DebugVal.hpp']]], - ['debugvaln_5fhelper_984',['DEBUGVALN_HELPER',['../d7/d52/DebugVal_8hpp.html#a3bc78571bf359b550772523a1200a475',1,'DebugVal.hpp']]] -]; diff --git a/docs/Doxygen/search/defines_4.html b/docs/Doxygen/search/defines_4.html deleted file mode 100644 index d8b61bbfb..000000000 --- a/docs/Doxygen/search/defines_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/defines_4.js b/docs/Doxygen/search/defines_4.js deleted file mode 100644 index d44a2edb2..000000000 --- a/docs/Doxygen/search/defines_4.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['end_5fah_5fnamespace_985',['END_AH_NAMESPACE',['../dc/dc7/NamespaceSettings_8hpp.html#a03ed68e9e3d1bbe9a28fd924cb7260c1',1,'NamespaceSettings.hpp']]] -]; diff --git a/docs/Doxygen/search/defines_5.html b/docs/Doxygen/search/defines_5.html deleted file mode 100644 index 14637be62..000000000 --- a/docs/Doxygen/search/defines_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/defines_5.js b/docs/Doxygen/search/defines_5.js deleted file mode 100644 index 906f510cd..000000000 --- a/docs/Doxygen/search/defines_5.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['fatal_5ferrors_986',['FATAL_ERRORS',['../db/d02/Settings_8hpp.html#a5894a0b22947afb71dca51783e61ac2c',1,'Settings.hpp']]], - ['flush_5fon_5fevery_5fdebug_5fstatement_987',['FLUSH_ON_EVERY_DEBUG_STATEMENT',['../df/dee/Debug_8hpp.html#a7ff58a0631676f068e4db329a2ca8d28',1,'Debug.hpp']]] -]; diff --git a/docs/Doxygen/search/defines_6.html b/docs/Doxygen/search/defines_6.html deleted file mode 100644 index ad0d34c99..000000000 --- a/docs/Doxygen/search/defines_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/defines_6.js b/docs/Doxygen/search/defines_6.js deleted file mode 100644 index c1c32b8ed..000000000 --- a/docs/Doxygen/search/defines_6.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['has_5fanalog_5fread_5fresolution_988',['HAS_ANALOG_READ_RESOLUTION',['../d7/d7c/ADCConfig_8hpp.html#a4af2da2db9e536067c953baac53b70e6',1,'ADCConfig.hpp']]] -]; diff --git a/docs/Doxygen/search/defines_7.html b/docs/Doxygen/search/defines_7.html deleted file mode 100644 index 4e8e63d24..000000000 --- a/docs/Doxygen/search/defines_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/defines_7.js b/docs/Doxygen/search/defines_7.js deleted file mode 100644 index 889716c79..000000000 --- a/docs/Doxygen/search/defines_7.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['use_5fah_5fnamespace_989',['USE_AH_NAMESPACE',['../dc/dc7/NamespaceSettings_8hpp.html#a00f163a3376fd194033495f415535986',1,'NamespaceSettings.hpp']]], - ['use_5fconstexpr_5farray_5fhelpers_990',['USE_CONSTEXPR_ARRAY_HELPERS',['../d5/db6/ArrayHelpers_8hpp.html#addd42f8d7a7cb2605e50325b9c54fefa',1,'ArrayHelpers.hpp']]], - ['using_5fah_5fnamespace_991',['USING_AH_NAMESPACE',['../dc/dc7/NamespaceSettings_8hpp.html#a652d295f60f5f72e47f545429e4e1acc',1,'NamespaceSettings.hpp']]] -]; diff --git a/docs/Doxygen/search/enums_0.html b/docs/Doxygen/search/enums_0.html deleted file mode 100644 index ae7a88444..000000000 --- a/docs/Doxygen/search/enums_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/enums_0.js b/docs/Doxygen/search/enums_0.js deleted file mode 100644 index f85abd9dd..000000000 --- a/docs/Doxygen/search/enums_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['dotbarmode_937',['DotBarMode',['../d6/d3a/DotBarDisplayLEDs_8hpp.html#af626aa654815b2c30bbc674379e8807a',1,'DotBarDisplayLEDs.hpp']]] -]; diff --git a/docs/Doxygen/search/enums_1.html b/docs/Doxygen/search/enums_1.html deleted file mode 100644 index dfbb13a85..000000000 --- a/docs/Doxygen/search/enums_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/enums_1.js b/docs/Doxygen/search/enums_1.js deleted file mode 100644 index 5d49f5464..000000000 --- a/docs/Doxygen/search/enums_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['state_938',['State',['../d1/d19/classButton.html#a5d74787dedbc4e11c1ab15bf487e61f8',1,'Button::State()'],['../df/d38/classIncrementButton.html#a5d74787dedbc4e11c1ab15bf487e61f8',1,'IncrementButton::State()'],['../d5/d20/classIncrementDecrementButtons.html#a5d74787dedbc4e11c1ab15bf487e61f8',1,'IncrementDecrementButtons::State()']]] -]; diff --git a/docs/Doxygen/search/enumvalues_0.html b/docs/Doxygen/search/enumvalues_0.html deleted file mode 100644 index 1c0bbf934..000000000 --- a/docs/Doxygen/search/enumvalues_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/enumvalues_0.js b/docs/Doxygen/search/enumvalues_0.js deleted file mode 100644 index a06bbb379..000000000 --- a/docs/Doxygen/search/enumvalues_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['afterreset_939',['AfterReset',['../d5/d20/classIncrementDecrementButtons.html#adf764cbdea00d65edcd07bb9953ad2b7aaed1b2195f61c416fc4c072613d73099',1,'IncrementDecrementButtons']]] -]; diff --git a/docs/Doxygen/search/enumvalues_1.html b/docs/Doxygen/search/enumvalues_1.html deleted file mode 100644 index 070fd0b8b..000000000 --- a/docs/Doxygen/search/enumvalues_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/enumvalues_1.js b/docs/Doxygen/search/enumvalues_1.js deleted file mode 100644 index a1ecda959..000000000 --- a/docs/Doxygen/search/enumvalues_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['bar_940',['Bar',['../d6/d3a/DotBarDisplayLEDs_8hpp.html#af626aa654815b2c30bbc674379e8807aaddc35f88fa71b6ef142ae61f35364653',1,'DotBarDisplayLEDs.hpp']]] -]; diff --git a/docs/Doxygen/search/enumvalues_2.html b/docs/Doxygen/search/enumvalues_2.html deleted file mode 100644 index 25e9a370c..000000000 --- a/docs/Doxygen/search/enumvalues_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/enumvalues_2.js b/docs/Doxygen/search/enumvalues_2.js deleted file mode 100644 index 480ad8274..000000000 --- a/docs/Doxygen/search/enumvalues_2.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['decrement_941',['Decrement',['../d5/d20/classIncrementDecrementButtons.html#a5d74787dedbc4e11c1ab15bf487e61f8a1f0f66cdf67254886aed03e2a04193e8',1,'IncrementDecrementButtons']]], - ['dot_942',['Dot',['../d6/d3a/DotBarDisplayLEDs_8hpp.html#af626aa654815b2c30bbc674379e8807aaaf6c6cf7a454b4ef4a850ac4d960a2cc',1,'DotBarDisplayLEDs.hpp']]] -]; diff --git a/docs/Doxygen/search/enumvalues_3.html b/docs/Doxygen/search/enumvalues_3.html deleted file mode 100644 index 670eb93e9..000000000 --- a/docs/Doxygen/search/enumvalues_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/enumvalues_3.js b/docs/Doxygen/search/enumvalues_3.js deleted file mode 100644 index e72399eb7..000000000 --- a/docs/Doxygen/search/enumvalues_3.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['falling_943',['Falling',['../d1/d19/classButton.html#a5d74787dedbc4e11c1ab15bf487e61f8a746691be2cff34db1c8ed48b73305601',1,'Button']]] -]; diff --git a/docs/Doxygen/search/enumvalues_4.html b/docs/Doxygen/search/enumvalues_4.html deleted file mode 100644 index b96e21297..000000000 --- a/docs/Doxygen/search/enumvalues_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/enumvalues_4.js b/docs/Doxygen/search/enumvalues_4.js deleted file mode 100644 index 075d030b0..000000000 --- a/docs/Doxygen/search/enumvalues_4.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['increment_944',['Increment',['../df/d38/classIncrementButton.html#a5d74787dedbc4e11c1ab15bf487e61f8a0da20ccab743c7169b305055013d9bf3',1,'IncrementButton::Increment()'],['../d5/d20/classIncrementDecrementButtons.html#a5d74787dedbc4e11c1ab15bf487e61f8a0da20ccab743c7169b305055013d9bf3',1,'IncrementDecrementButtons::Increment()']]], - ['initial_945',['Initial',['../df/d38/classIncrementButton.html#a06fc87d81c62e9abb8790b6e5713c55ba3392b59c8aa0ec56670fbcd5638cbfde',1,'IncrementButton::Initial()'],['../d5/d20/classIncrementDecrementButtons.html#adf764cbdea00d65edcd07bb9953ad2b7a3392b59c8aa0ec56670fbcd5638cbfde',1,'IncrementDecrementButtons::Initial()']]] -]; diff --git a/docs/Doxygen/search/enumvalues_5.html b/docs/Doxygen/search/enumvalues_5.html deleted file mode 100644 index ebd7746f0..000000000 --- a/docs/Doxygen/search/enumvalues_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/enumvalues_5.js b/docs/Doxygen/search/enumvalues_5.js deleted file mode 100644 index e00268ced..000000000 --- a/docs/Doxygen/search/enumvalues_5.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['longpress_946',['LongPress',['../df/d38/classIncrementButton.html#a06fc87d81c62e9abb8790b6e5713c55bade879c91413c9c7b60f9ca1fb92eb234',1,'IncrementButton::LongPress()'],['../d5/d20/classIncrementDecrementButtons.html#adf764cbdea00d65edcd07bb9953ad2b7ade879c91413c9c7b60f9ca1fb92eb234',1,'IncrementDecrementButtons::LongPress()']]], - ['lowercase_947',['LOWERCASE',['../da/d69/PrintStream_8cpp.html#a6674af4819a4f85e8c40be5971746668af8ee0dcc4d45543df8763035c19ef2fc',1,'PrintStream.cpp']]] -]; diff --git a/docs/Doxygen/search/enumvalues_6.html b/docs/Doxygen/search/enumvalues_6.html deleted file mode 100644 index 9af68e04b..000000000 --- a/docs/Doxygen/search/enumvalues_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/enumvalues_6.js b/docs/Doxygen/search/enumvalues_6.js deleted file mode 100644 index 1af78daa9..000000000 --- a/docs/Doxygen/search/enumvalues_6.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['nothing_948',['Nothing',['../df/d38/classIncrementButton.html#a5d74787dedbc4e11c1ab15bf487e61f8a0b44d4e916221e52c4ba47a8efb5e2fc',1,'IncrementButton::Nothing()'],['../d5/d20/classIncrementDecrementButtons.html#a5d74787dedbc4e11c1ab15bf487e61f8a0b44d4e916221e52c4ba47a8efb5e2fc',1,'IncrementDecrementButtons::Nothing()']]] -]; diff --git a/docs/Doxygen/search/enumvalues_7.html b/docs/Doxygen/search/enumvalues_7.html deleted file mode 100644 index 068ae29fb..000000000 --- a/docs/Doxygen/search/enumvalues_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/enumvalues_7.js b/docs/Doxygen/search/enumvalues_7.js deleted file mode 100644 index 17ec32eea..000000000 --- a/docs/Doxygen/search/enumvalues_7.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['pressed_949',['Pressed',['../d1/d19/classButton.html#a5d74787dedbc4e11c1ab15bf487e61f8a05f4abb2322aa023aba9570c327aff25',1,'Button']]] -]; diff --git a/docs/Doxygen/search/enumvalues_8.html b/docs/Doxygen/search/enumvalues_8.html deleted file mode 100644 index 3a01daa84..000000000 --- a/docs/Doxygen/search/enumvalues_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/enumvalues_8.js b/docs/Doxygen/search/enumvalues_8.js deleted file mode 100644 index 70d90e373..000000000 --- a/docs/Doxygen/search/enumvalues_8.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['released_950',['Released',['../d1/d19/classButton.html#a5d74787dedbc4e11c1ab15bf487e61f8ad9417ac74f0134b9577d1d85cf422c25',1,'Button']]], - ['reset_951',['Reset',['../d5/d20/classIncrementDecrementButtons.html#a5d74787dedbc4e11c1ab15bf487e61f8a92793663441ced378f4676b8a6524385',1,'IncrementDecrementButtons']]], - ['rising_952',['Rising',['../d1/d19/classButton.html#a5d74787dedbc4e11c1ab15bf487e61f8a6e520e0e7f14dd669c193c4f966da30c',1,'Button']]] -]; diff --git a/docs/Doxygen/search/enumvalues_9.html b/docs/Doxygen/search/enumvalues_9.html deleted file mode 100644 index e67a0bf1d..000000000 --- a/docs/Doxygen/search/enumvalues_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/enumvalues_9.js b/docs/Doxygen/search/enumvalues_9.js deleted file mode 100644 index 312768600..000000000 --- a/docs/Doxygen/search/enumvalues_9.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['uppercase_953',['UPPERCASE',['../da/d69/PrintStream_8cpp.html#a6674af4819a4f85e8c40be5971746668a19d6b87b851ddfd4fdc4f182e2ae0617',1,'PrintStream.cpp']]] -]; diff --git a/docs/Doxygen/search/files_0.html b/docs/Doxygen/search/files_0.html deleted file mode 100644 index de151d538..000000000 --- a/docs/Doxygen/search/files_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/files_0.js b/docs/Doxygen/search/files_0.js deleted file mode 100644 index 8b4e5d874..000000000 --- a/docs/Doxygen/search/files_0.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['adcconfig_2ecpp_537',['ADCConfig.cpp',['../d1/d4a/ADCConfig_8cpp.html',1,'']]], - ['adcconfig_2ehpp_538',['ADCConfig.hpp',['../d7/d7c/ADCConfig_8hpp.html',1,'']]], - ['analogmultiplex_2ecpp_539',['AnalogMultiplex.cpp',['../de/d16/AnalogMultiplex_8cpp.html',1,'']]], - ['analogmultiplex_2ehpp_540',['AnalogMultiplex.hpp',['../d7/def/AnalogMultiplex_8hpp.html',1,'']]], - ['arduino_5fhelpers_2edox_541',['Arduino_Helpers.dox',['../d9/df7/Arduino__Helpers_8dox.html',1,'']]], - ['arduino_5fhelpers_2eh_542',['Arduino_Helpers.h',['../dc/de6/Arduino__Helpers_8h.html',1,'']]], - ['array_2ecpp_543',['Array.cpp',['../d1/d32/Array_8cpp.html',1,'']]], - ['array_2ehpp_544',['Array.hpp',['../de/d76/Array_8hpp.html',1,'']]], - ['arrayhelpers_2ecpp_545',['ArrayHelpers.cpp',['../db/d93/ArrayHelpers_8cpp.html',1,'']]], - ['arrayhelpers_2ehpp_546',['ArrayHelpers.hpp',['../d5/db6/ArrayHelpers_8hpp.html',1,'']]] -]; diff --git a/docs/Doxygen/search/files_1.html b/docs/Doxygen/search/files_1.html deleted file mode 100644 index 73e2c8bcf..000000000 --- a/docs/Doxygen/search/files_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/files_1.js b/docs/Doxygen/search/files_1.js deleted file mode 100644 index 8716ff1e2..000000000 --- a/docs/Doxygen/search/files_1.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['bitarray_2ecpp_547',['BitArray.cpp',['../d2/d56/BitArray_8cpp.html',1,'']]], - ['bitarray_2ehpp_548',['BitArray.hpp',['../d1/d40/BitArray_8hpp.html',1,'']]], - ['button_2ecpp_549',['Button.cpp',['../de/dd1/Button_8cpp.html',1,'']]], - ['button_2ehpp_550',['Button.hpp',['../d4/db3/Button_8hpp.html',1,'']]], - ['buttonmatrix_2ecpp_551',['ButtonMatrix.cpp',['../d9/db3/ButtonMatrix_8cpp.html',1,'']]], - ['buttonmatrix_2ehpp_552',['ButtonMatrix.hpp',['../d9/d4b/ButtonMatrix_8hpp.html',1,'']]], - ['buttonmatrix_2eipp_553',['ButtonMatrix.ipp',['../d5/d41/ButtonMatrix_8ipp.html',1,'']]] -]; diff --git a/docs/Doxygen/search/files_10.html b/docs/Doxygen/search/files_10.html deleted file mode 100644 index 2861ca169..000000000 --- a/docs/Doxygen/search/files_10.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/files_10.js b/docs/Doxygen/search/files_10.js deleted file mode 100644 index a8135ffd6..000000000 --- a/docs/Doxygen/search/files_10.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['warnings_2ehpp_634',['Warnings.hpp',['../d1/d65/Warnings_8hpp.html',1,'']]] -]; diff --git a/docs/Doxygen/search/files_2.html b/docs/Doxygen/search/files_2.html deleted file mode 100644 index 24cb5419a..000000000 --- a/docs/Doxygen/search/files_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/files_2.js b/docs/Doxygen/search/files_2.js deleted file mode 100644 index 369597968..000000000 --- a/docs/Doxygen/search/files_2.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['containers_2edox_554',['Containers.dox',['../d5/def/Containers_8dox.html',1,'']]] -]; diff --git a/docs/Doxygen/search/files_3.html b/docs/Doxygen/search/files_3.html deleted file mode 100644 index ef0b0ff72..000000000 --- a/docs/Doxygen/search/files_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/files_3.js b/docs/Doxygen/search/files_3.js deleted file mode 100644 index 32f3830f3..000000000 --- a/docs/Doxygen/search/files_3.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['debug_2ecpp_555',['Debug.cpp',['../df/d66/Debug_8cpp.html',1,'']]], - ['debug_2edox_556',['Debug.dox',['../df/d26/Debug_8dox.html',1,'']]], - ['debug_2ehpp_557',['Debug.hpp',['../df/dee/Debug_8hpp.html',1,'']]], - ['debug_2emd_558',['Debug.md',['../d3/dba/Debug_8md.html',1,'']]], - ['debugval_2ehpp_559',['DebugVal.hpp',['../d7/d52/DebugVal_8hpp.html',1,'']]], - ['dotbardisplayleds_2ecpp_560',['DotBarDisplayLEDs.cpp',['../de/da7/DotBarDisplayLEDs_8cpp.html',1,'']]], - ['dotbardisplayleds_2ehpp_561',['DotBarDisplayLEDs.hpp',['../d6/d3a/DotBarDisplayLEDs_8hpp.html',1,'']]] -]; diff --git a/docs/Doxygen/search/files_4.html b/docs/Doxygen/search/files_4.html deleted file mode 100644 index 324abe4f5..000000000 --- a/docs/Doxygen/search/files_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/files_4.js b/docs/Doxygen/search/files_4.js deleted file mode 100644 index d506d4a8a..000000000 --- a/docs/Doxygen/search/files_4.js +++ /dev/null @@ -1,15 +0,0 @@ -var searchData= -[ - ['ema_2ecpp_562',['EMA.cpp',['../d9/d0a/EMA_8cpp.html',1,'']]], - ['ema_2ehpp_563',['EMA.hpp',['../d3/df0/EMA_8hpp.html',1,'']]], - ['error_2ecpp_564',['Error.cpp',['../da/d06/Error_8cpp.html',1,'']]], - ['error_2edox_565',['Error.dox',['../d4/d7a/Error_8dox.html',1,'']]], - ['error_2ehpp_566',['Error.hpp',['../d1/d93/Error_8hpp.html',1,'']]], - ['examples_2edox_567',['examples.dox',['../d9/d93/examples_8dox.html',1,'']]], - ['exit_2ecpp_568',['Exit.cpp',['../d6/df4/Exit_8cpp.html',1,'']]], - ['extendedinputoutput_2ecpp_569',['ExtendedInputOutput.cpp',['../d6/d3c/ExtendedInputOutput_8cpp.html',1,'']]], - ['extendedinputoutput_2ehpp_570',['ExtendedInputOutput.hpp',['../dd/ddf/ExtendedInputOutput_8hpp.html',1,'']]], - ['extendedioelement_2ecpp_571',['ExtendedIOElement.cpp',['../da/d1f/ExtendedIOElement_8cpp.html',1,'']]], - ['extendedioelement_2ehpp_572',['ExtendedIOElement.hpp',['../d4/d57/ExtendedIOElement_8hpp.html',1,'']]], - ['extio_2edox_573',['ExtIO.dox',['../d9/dc8/ExtIO_8dox.html',1,'']]] -]; diff --git a/docs/Doxygen/search/files_5.html b/docs/Doxygen/search/files_5.html deleted file mode 100644 index 7d6881677..000000000 --- a/docs/Doxygen/search/files_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/files_5.js b/docs/Doxygen/search/files_5.js deleted file mode 100644 index 4e430661b..000000000 --- a/docs/Doxygen/search/files_5.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['filteredanalog_2ecpp_574',['FilteredAnalog.cpp',['../dd/d47/FilteredAnalog_8cpp.html',1,'']]], - ['filteredanalog_2ehpp_575',['FilteredAnalog.hpp',['../d8/df3/FilteredAnalog_8hpp.html',1,'']]], - ['filters_2edox_576',['Filters.dox',['../dc/ddf/Filters_8dox.html',1,'']]], - ['fixarduinomacros_2ehpp_577',['FixArduinoMacros.hpp',['../d6/d3b/FixArduinoMacros_8hpp.html',1,'']]], - ['frequency_2ehpp_578',['Frequency.hpp',['../dc/d50/Frequency_8hpp.html',1,'']]] -]; diff --git a/docs/Doxygen/search/files_6.html b/docs/Doxygen/search/files_6.html deleted file mode 100644 index cc06fb25e..000000000 --- a/docs/Doxygen/search/files_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/files_6.js b/docs/Doxygen/search/files_6.js deleted file mode 100644 index cdf28966c..000000000 --- a/docs/Doxygen/search/files_6.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['hardware_2dtypes_2ehpp_579',['Hardware-Types.hpp',['../d4/d35/Hardware-Types_8hpp.html',1,'']]], - ['hardware_2edox_580',['Hardware.dox',['../d4/d45/Hardware_8dox.html',1,'']]], - ['hysteresis_2ecpp_581',['Hysteresis.cpp',['../dd/d40/Hysteresis_8cpp.html',1,'']]], - ['hysteresis_2ehpp_582',['Hysteresis.hpp',['../d3/d09/Hysteresis_8hpp.html',1,'']]] -]; diff --git a/docs/Doxygen/search/files_7.html b/docs/Doxygen/search/files_7.html deleted file mode 100644 index 10c2046e3..000000000 --- a/docs/Doxygen/search/files_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/files_7.js b/docs/Doxygen/search/files_7.js deleted file mode 100644 index d5c5783c8..000000000 --- a/docs/Doxygen/search/files_7.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['increasebitdepth_2ecpp_583',['IncreaseBitDepth.cpp',['../de/d9b/IncreaseBitDepth_8cpp.html',1,'']]], - ['increasebitdepth_2ehpp_584',['IncreaseBitDepth.hpp',['../d5/dee/IncreaseBitDepth_8hpp.html',1,'']]], - ['incrementbutton_2ecpp_585',['IncrementButton.cpp',['../db/d9d/IncrementButton_8cpp.html',1,'']]], - ['incrementbutton_2ehpp_586',['IncrementButton.hpp',['../d5/d04/IncrementButton_8hpp.html',1,'']]], - ['incrementdecrementbuttons_2ecpp_587',['IncrementDecrementButtons.cpp',['../da/d66/IncrementDecrementButtons_8cpp.html',1,'']]], - ['incrementdecrementbuttons_2ehpp_588',['IncrementDecrementButtons.hpp',['../df/df5/IncrementDecrementButtons_8hpp.html',1,'']]] -]; diff --git a/docs/Doxygen/search/files_8.html b/docs/Doxygen/search/files_8.html deleted file mode 100644 index 6ee57c511..000000000 --- a/docs/Doxygen/search/files_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/files_8.js b/docs/Doxygen/search/files_8.js deleted file mode 100644 index c71f30149..000000000 --- a/docs/Doxygen/search/files_8.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['leds_2ecpp_589',['LEDs.cpp',['../d7/dd4/LEDs_8cpp.html',1,'']]], - ['leds_2ehpp_590',['LEDs.hpp',['../d9/d4f/LEDs_8hpp.html',1,'']]], - ['linkedlist_2ecpp_591',['LinkedList.cpp',['../df/db8/LinkedList_8cpp.html',1,'']]], - ['linkedlist_2ehpp_592',['LinkedList.hpp',['../de/dd1/LinkedList_8hpp.html',1,'']]] -]; diff --git a/docs/Doxygen/search/files_9.html b/docs/Doxygen/search/files_9.html deleted file mode 100644 index 5da3443a7..000000000 --- a/docs/Doxygen/search/files_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/files_9.js b/docs/Doxygen/search/files_9.js deleted file mode 100644 index 66755c99a..000000000 --- a/docs/Doxygen/search/files_9.js +++ /dev/null @@ -1,14 +0,0 @@ -var searchData= -[ - ['math_2edox_593',['Math.dox',['../d0/d81/Math_8dox.html',1,'']]], - ['max7219_2ecpp_594',['MAX7219.cpp',['../d6/dc3/MAX7219_8cpp.html',1,'']]], - ['max7219_2ehpp_595',['MAX7219.hpp',['../d2/d25/MAX7219_8hpp.html',1,'']]], - ['max7219_5fbase_2ecpp_596',['MAX7219_Base.cpp',['../d8/d8b/MAX7219__Base_8cpp.html',1,'']]], - ['max7219_5fbase_2ehpp_597',['MAX7219_Base.hpp',['../d7/d13/MAX7219__Base_8hpp.html',1,'']]], - ['max7219sevensegmentdisplay_2ecpp_598',['MAX7219SevenSegmentDisplay.cpp',['../dc/d56/MAX7219SevenSegmentDisplay_8cpp.html',1,'']]], - ['max7219sevensegmentdisplay_2ehpp_599',['MAX7219SevenSegmentDisplay.hpp',['../d5/d0c/MAX7219SevenSegmentDisplay_8hpp.html',1,'']]], - ['millismicrostimer_2ecpp_600',['MillisMicrosTimer.cpp',['../d3/d2b/MillisMicrosTimer_8cpp.html',1,'']]], - ['millismicrostimer_2ehpp_601',['MillisMicrosTimer.hpp',['../d1/dd0/MillisMicrosTimer_8hpp.html',1,'']]], - ['minmaxfix_2ecpp_602',['MinMaxFix.cpp',['../d6/d9e/MinMaxFix_8cpp.html',1,'']]], - ['minmaxfix_2ehpp_603',['MinMaxFix.hpp',['../d7/d79/MinMaxFix_8hpp.html',1,'']]] -]; diff --git a/docs/Doxygen/search/files_a.html b/docs/Doxygen/search/files_a.html deleted file mode 100644 index 118985d62..000000000 --- a/docs/Doxygen/search/files_a.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/files_a.js b/docs/Doxygen/search/files_a.js deleted file mode 100644 index e192568f3..000000000 --- a/docs/Doxygen/search/files_a.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['namespacesettings_2ecpp_604',['NamespaceSettings.cpp',['../dc/dd6/NamespaceSettings_8cpp.html',1,'']]], - ['namespacesettings_2ehpp_605',['NamespaceSettings.hpp',['../dc/dc7/NamespaceSettings_8hpp.html',1,'']]] -]; diff --git a/docs/Doxygen/search/files_b.html b/docs/Doxygen/search/files_b.html deleted file mode 100644 index 94b725443..000000000 --- a/docs/Doxygen/search/files_b.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/files_b.js b/docs/Doxygen/search/files_b.js deleted file mode 100644 index fa637bfc5..000000000 --- a/docs/Doxygen/search/files_b.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['printstream_2ecpp_606',['PrintStream.cpp',['../da/d69/PrintStream_8cpp.html',1,'']]], - ['printstream_2edox_607',['PrintStream.dox',['../d7/d66/PrintStream_8dox.html',1,'']]], - ['printstream_2ehpp_608',['PrintStream.hpp',['../dd/d80/PrintStream_8hpp.html',1,'']]] -]; diff --git a/docs/Doxygen/search/files_c.html b/docs/Doxygen/search/files_c.html deleted file mode 100644 index 8d175bc15..000000000 --- a/docs/Doxygen/search/files_c.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/files_c.js b/docs/Doxygen/search/files_c.js deleted file mode 100644 index 68c400297..000000000 --- a/docs/Doxygen/search/files_c.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['readme_2emd_609',['README.md',['../da/ddd/README_8md.html',1,'']]] -]; diff --git a/docs/Doxygen/search/files_d.html b/docs/Doxygen/search/files_d.html deleted file mode 100644 index c5132dd34..000000000 --- a/docs/Doxygen/search/files_d.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/files_d.js b/docs/Doxygen/search/files_d.js deleted file mode 100644 index 97f32fbae..000000000 --- a/docs/Doxygen/search/files_d.js +++ /dev/null @@ -1,21 +0,0 @@ -var searchData= -[ - ['settings_2ecpp_610',['Settings.cpp',['../db/dd8/Settings_8cpp.html',1,'']]], - ['settings_2edox_611',['Settings.dox',['../df/d65/Settings_8dox.html',1,'']]], - ['settings_2ehpp_612',['Settings.hpp',['../db/d02/Settings_8hpp.html',1,'']]], - ['settingswrapper_2ecpp_613',['SettingsWrapper.cpp',['../d9/dcf/SettingsWrapper_8cpp.html',1,'']]], - ['settingswrapper_2ehpp_614',['SettingsWrapper.hpp',['../d2/dd5/SettingsWrapper_8hpp.html',1,'']]], - ['shiftregisterout_2ecpp_615',['ShiftRegisterOut.cpp',['../d9/d35/ShiftRegisterOut_8cpp.html',1,'']]], - ['shiftregisterout_2ehpp_616',['ShiftRegisterOut.hpp',['../d0/db4/ShiftRegisterOut_8hpp.html',1,'']]], - ['shiftregisterout_2eipp_617',['ShiftRegisterOut.ipp',['../de/d95/ShiftRegisterOut_8ipp.html',1,'']]], - ['shiftregisteroutbase_2ecpp_618',['ShiftRegisterOutBase.cpp',['../dd/d08/ShiftRegisterOutBase_8cpp.html',1,'']]], - ['shiftregisteroutbase_2ehpp_619',['ShiftRegisterOutBase.hpp',['../d8/d93/ShiftRegisterOutBase_8hpp.html',1,'']]], - ['shiftregisteroutbase_2eipp_620',['ShiftRegisterOutBase.ipp',['../d5/d47/ShiftRegisterOutBase_8ipp.html',1,'']]], - ['shiftregisteroutrgb_2ecpp_621',['ShiftRegisterOutRGB.cpp',['../db/d0b/ShiftRegisterOutRGB_8cpp.html',1,'']]], - ['shiftregisteroutrgb_2ehpp_622',['ShiftRegisterOutRGB.hpp',['../d1/d1f/ShiftRegisterOutRGB_8hpp.html',1,'']]], - ['spishiftregisterout_2ecpp_623',['SPIShiftRegisterOut.cpp',['../d2/dde/SPIShiftRegisterOut_8cpp.html',1,'']]], - ['spishiftregisterout_2ehpp_624',['SPIShiftRegisterOut.hpp',['../d7/d88/SPIShiftRegisterOut_8hpp.html',1,'']]], - ['spishiftregisterout_2eipp_625',['SPIShiftRegisterOut.ipp',['../da/d45/SPIShiftRegisterOut_8ipp.html',1,'']]], - ['staticsizeextendedioelement_2ecpp_626',['StaticSizeExtendedIOElement.cpp',['../d2/dc9/StaticSizeExtendedIOElement_8cpp.html',1,'']]], - ['staticsizeextendedioelement_2ehpp_627',['StaticSizeExtendedIOElement.hpp',['../d2/d05/StaticSizeExtendedIOElement_8hpp.html',1,'']]] -]; diff --git a/docs/Doxygen/search/files_e.html b/docs/Doxygen/search/files_e.html deleted file mode 100644 index 01ff2259d..000000000 --- a/docs/Doxygen/search/files_e.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/files_e.js b/docs/Doxygen/search/files_e.js deleted file mode 100644 index 442183d62..000000000 --- a/docs/Doxygen/search/files_e.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['teensyusbtypes_2ehpp_628',['TeensyUSBTypes.hpp',['../d9/d98/TeensyUSBTypes_8hpp.html',1,'']]], - ['timing_2edox_629',['Timing.dox',['../d8/dd7/Timing_8dox.html',1,'']]] -]; diff --git a/docs/Doxygen/search/files_f.html b/docs/Doxygen/search/files_f.html deleted file mode 100644 index c4a4dcb14..000000000 --- a/docs/Doxygen/search/files_f.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/files_f.js b/docs/Doxygen/search/files_f.js deleted file mode 100644 index 57b4e9524..000000000 --- a/docs/Doxygen/search/files_f.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['uniqueptr_2ecpp_630',['UniquePtr.cpp',['../de/d47/UniquePtr_8cpp.html',1,'']]], - ['uniqueptr_2ehpp_631',['UniquePtr.hpp',['../de/d7e/UniquePtr_8hpp.html',1,'']]], - ['updatable_2ecpp_632',['Updatable.cpp',['../d6/dea/Updatable_8cpp.html',1,'']]], - ['updatable_2ehpp_633',['Updatable.hpp',['../d4/d93/Updatable_8hpp.html',1,'']]] -]; diff --git a/docs/Doxygen/search/functions_0.html b/docs/Doxygen/search/functions_0.html deleted file mode 100644 index 8a729f78c..000000000 --- a/docs/Doxygen/search/functions_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/functions_0.js b/docs/Doxygen/search/functions_0.js deleted file mode 100644 index 844e4f17c..000000000 --- a/docs/Doxygen/search/functions_0.js +++ /dev/null @@ -1,12 +0,0 @@ -var searchData= -[ - ['abs_5fdiff_635',['abs_diff',['../de/d76/Array_8hpp.html#ae5bf4063671aea64f62cbfeb1f5f63d6',1,'Array.hpp']]], - ['afterreading_636',['afterReading',['../d7/d8d/classAnalogMultiplex.html#a9958d9974fc696854a5b77db0201a075',1,'AnalogMultiplex']]], - ['analogmultiplex_637',['AnalogMultiplex',['../d7/d8d/classAnalogMultiplex.html#a0a2d2327d5aa0996c8a1009ce63a4737',1,'AnalogMultiplex']]], - ['analogread_638',['analogRead',['../d7/d8d/classAnalogMultiplex.html#a6e6cf5e65d0f38cba3839725bfaca7b5',1,'AnalogMultiplex::analogRead()'],['../de/d4e/classExtendedIOElement.html#a7dc0d012462169ef826dc7cfcbb5eb3e',1,'ExtendedIOElement::analogRead()'],['../dc/d19/classMAX7219.html#a95dfb56a8e54b9a627916371b91648f7',1,'MAX7219::analogRead()'],['../d8/db4/classShiftRegisterOutBase.html#a95dfb56a8e54b9a627916371b91648f7',1,'ShiftRegisterOutBase::analogRead()'],['../d8/d3d/namespaceExtIO.html#aa9e5896aa520b8b2d65e1828032ee6a2',1,'ExtIO::analogRead(pin_t pin)'],['../d8/d3d/namespaceExtIO.html#afc10d6ffc969685e9f11070f814234a0',1,'ExtIO::analogRead(int pin)']]], - ['analogwrite_639',['analogWrite',['../d7/d8d/classAnalogMultiplex.html#a251172dbebd68a9bf81f2ea0b47a2315',1,'AnalogMultiplex::analogWrite()'],['../de/d4e/classExtendedIOElement.html#a4c7700ad6cbe07d6f10e3cbfc545a9ba',1,'ExtendedIOElement::analogWrite()'],['../dc/d19/classMAX7219.html#a11243cbfdd8502261b8aca0e4b1ce829',1,'MAX7219::analogWrite()'],['../d8/db4/classShiftRegisterOutBase.html#a11243cbfdd8502261b8aca0e4b1ce829',1,'ShiftRegisterOutBase::analogWrite()'],['../d8/d3d/namespaceExtIO.html#a5aa3b4dbb8bfffdd022e1f5bb8dc5784',1,'ExtIO::analogWrite(pin_t pin, analog_t val)'],['../d8/d3d/namespaceExtIO.html#a91f6280a1573205c324783d55f91b0d2',1,'ExtIO::analogWrite(int pin, analog_t val)'],['../d8/d3d/namespaceExtIO.html#abc9bba50fc4f0e8c8e3ee16dde83c517',1,'ExtIO::analogWrite(int pin, int val)'],['../d8/d3d/namespaceExtIO.html#aa12648190e21d162949587c009ef294b',1,'ExtIO::analogWrite(pin_t pin, int val)']]], - ['append_640',['append',['../dd/d16/classDoublyLinkedList.html#a368e48ecd7bac79f14a42a0669574e38',1,'DoublyLinkedList::append(Node *node)'],['../dd/d16/classDoublyLinkedList.html#a90bb254293416d158c8d56006d97354c',1,'DoublyLinkedList::append(Node &node)']]], - ['apply_641',['apply',['../da/de8/group__AH__Containers.html#ga0895d71ba77dd8fa6640113b19d86c03',1,'ArrayHelpers.hpp']]], - ['arrayslice_642',['ArraySlice',['../df/de0/classArraySlice.html#a4d1735860de2456adfc31f3472b6d874',1,'ArraySlice']]], - ['asarray_643',['asArray',['../df/de0/classArraySlice.html#adb626672a33880a352b7a56edfb3d29f',1,'ArraySlice']]] -]; diff --git a/docs/Doxygen/search/functions_1.html b/docs/Doxygen/search/functions_1.html deleted file mode 100644 index d4929aaf1..000000000 --- a/docs/Doxygen/search/functions_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/functions_1.js b/docs/Doxygen/search/functions_1.js deleted file mode 100644 index dfa68af16..000000000 --- a/docs/Doxygen/search/functions_1.js +++ /dev/null @@ -1,14 +0,0 @@ -var searchData= -[ - ['barmode_644',['barMode',['../d1/d3e/classDotBarDisplayLEDs.html#afeeba1b73c4d56b72673288026516c29',1,'DotBarDisplayLEDs']]], - ['begin_645',['begin',['../d7/d6a/structArray.html#a23e2fdb99370f37cb764cac10378c721',1,'Array::begin()'],['../d7/d6a/structArray.html#a27772ca963c0c0a5a76988fb2f511473',1,'Array::begin() const'],['../df/de0/classArraySlice.html#a09dd208593b9721a30a83ed978ede577',1,'ArraySlice::begin()'],['../dd/d16/classDoublyLinkedList.html#ad69bd11391be1a1dba5c8202259664f8',1,'DoublyLinkedList::begin()'],['../dd/d16/classDoublyLinkedList.html#a29305669b60ca1680752e2fc3592ba99',1,'DoublyLinkedList::begin() const'],['../d5/de0/classUpdatable.html#aaf893c33f3c041e289a12c153dcc9789',1,'Updatable::begin()'],['../d1/d19/classButton.html#ab0bdf5cca484fb2ba637c39384b27fb2',1,'Button::begin()'],['../d8/d6c/classButtonMatrix.html#ab0bdf5cca484fb2ba637c39384b27fb2',1,'ButtonMatrix::begin()'],['../d7/d8d/classAnalogMultiplex.html#a7c3e14d99bd3dc0e3670d6956dafcaf2',1,'AnalogMultiplex::begin()'],['../de/d4e/classExtendedIOElement.html#aaf893c33f3c041e289a12c153dcc9789',1,'ExtendedIOElement::begin()'],['../dc/d19/classMAX7219.html#a7c3e14d99bd3dc0e3670d6956dafcaf2',1,'MAX7219::begin()'],['../d1/d5c/classShiftRegisterOut.html#a7c3e14d99bd3dc0e3670d6956dafcaf2',1,'ShiftRegisterOut::begin()'],['../dd/d81/classSPIShiftRegisterOut.html#a7c3e14d99bd3dc0e3670d6956dafcaf2',1,'SPIShiftRegisterOut::begin()'],['../df/d38/classIncrementButton.html#ab0bdf5cca484fb2ba637c39384b27fb2',1,'IncrementButton::begin()'],['../d5/d20/classIncrementDecrementButtons.html#ab0bdf5cca484fb2ba637c39384b27fb2',1,'IncrementDecrementButtons::begin()'],['../d2/d1b/classLEDs.html#ad82a5b04cc538aa3200ed2c11e9d37ea',1,'LEDs::begin()'],['../d4/d26/classMAX7219SevenSegmentDisplay.html#ab0bdf5cca484fb2ba637c39384b27fb2',1,'MAX7219SevenSegmentDisplay::begin()'],['../dc/dea/classTimer.html#ab0bdf5cca484fb2ba637c39384b27fb2',1,'Timer::begin()']]], - ['beginall_646',['beginAll',['../d5/de0/classUpdatable.html#a4f7077a56ec41a07f5a54dd8b3828984',1,'Updatable::beginAll()'],['../de/d4e/classExtendedIOElement.html#ac6e14454ba435e2e2ea0ce820173430b',1,'ExtendedIOElement::beginAll()']]], - ['bin_647',['bin',['../d8/d4b/group__AH__PrintStream.html#ga99e9817ede325b42677fc53cfb468b7f',1,'bin(Print &printer): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga99e9817ede325b42677fc53cfb468b7f',1,'bin(Print &printer): PrintStream.cpp']]], - ['bitstobitmask_648',['bitsToBitmask',['../d8/d6c/classButtonMatrix.html#a0e3aba825d6e3ca8a9d8b30db1e9f284',1,'ButtonMatrix']]], - ['bitstoindex_649',['bitsToIndex',['../d8/d6c/classButtonMatrix.html#ad6b42d38847e363b4c8c5952c73a0a08',1,'ButtonMatrix']]], - ['blue_650',['blue',['../d8/db4/classShiftRegisterOutBase.html#a35b0b219eacadf47985c9faf7b0d4d45',1,'ShiftRegisterOutBase']]], - ['bluepins_651',['bluePins',['../d8/db4/classShiftRegisterOutBase.html#a2669914fd96fa48f87d3bd6cb0759740',1,'ShiftRegisterOutBase']]], - ['boolalpha_652',['boolalpha',['../d8/d4b/group__AH__PrintStream.html#gaa88c44c66680f55fd42b3a19095aff3f',1,'boolalpha(Print &printer): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gaa88c44c66680f55fd42b3a19095aff3f',1,'boolalpha(Print &printer): PrintStream.cpp']]], - ['button_653',['Button',['../d1/d19/classButton.html#adf271b1be4c753b7f9ddf23e8f67c530',1,'Button::Button()'],['../d1/d19/classButton.html#a1ba44be4e4f304fca419fbf8215d2b92',1,'Button::Button(pin_t pin)']]], - ['buttonmatrix_654',['ButtonMatrix',['../d8/d6c/classButtonMatrix.html#a4f0c2abdbc67c9472606789380aba336',1,'ButtonMatrix']]] -]; diff --git a/docs/Doxygen/search/functions_10.html b/docs/Doxygen/search/functions_10.html deleted file mode 100644 index 839ba3308..000000000 --- a/docs/Doxygen/search/functions_10.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/functions_10.js b/docs/Doxygen/search/functions_10.js deleted file mode 100644 index 8dfdab8b1..000000000 --- a/docs/Doxygen/search/functions_10.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['timer_799',['Timer',['../dc/dea/classTimer.html#a601e4fc3c3d5fa54634192a88819ad5a',1,'Timer']]], - ['togglemode_800',['toggleMode',['../d1/d3e/classDotBarDisplayLEDs.html#a2ffa1ba1cd260f6e8ffd484452c3bab7',1,'DotBarDisplayLEDs']]] -]; diff --git a/docs/Doxygen/search/functions_11.html b/docs/Doxygen/search/functions_11.html deleted file mode 100644 index 9d548c4f0..000000000 --- a/docs/Doxygen/search/functions_11.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/functions_11.js b/docs/Doxygen/search/functions_11.js deleted file mode 100644 index adfb2ac40..000000000 --- a/docs/Doxygen/search/functions_11.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['uniqueptr_801',['UniquePtr',['../d0/ddd/classUniquePtr.html#a644a16aac250619a3134a57e6348f1ef',1,'UniquePtr::UniquePtr()=default'],['../d0/ddd/classUniquePtr.html#a51f3581b2281c6a684d46d27bf8abaae',1,'UniquePtr::UniquePtr(T *p)'],['../d0/ddd/classUniquePtr.html#aaef2e17f579f60d2fed8437412bc1b09',1,'UniquePtr::UniquePtr(const UniquePtr &)=delete'],['../d0/ddd/classUniquePtr.html#aa803d07d745f9c7d2639d289f21b97d6',1,'UniquePtr::UniquePtr(UniquePtr< U > &&r)']]], - ['updatable_802',['Updatable',['../d5/de0/classUpdatable.html#a87d2727bbd24a3064948a29b5e3bc79e',1,'Updatable']]], - ['update_803',['update',['../d5/de0/classUpdatable.html#a99b02345a8a15d3c5ea2844a2253f510',1,'Updatable::update()'],['../d2/dcb/classHysteresis.html#a131ea12643cc4dc7874f101f521f4324',1,'Hysteresis::update()'],['../d1/d19/classButton.html#a58595f333f45f8096d91bf42e8a760a2',1,'Button::update()'],['../d8/d6c/classButtonMatrix.html#ac5c54df7ed3b930268c8d7752c101725',1,'ButtonMatrix::update()'],['../d7/d8d/classAnalogMultiplex.html#a44137bb65de2396875934e48a6ee5099',1,'AnalogMultiplex::update()'],['../de/d4e/classExtendedIOElement.html#a99b02345a8a15d3c5ea2844a2253f510',1,'ExtendedIOElement::update()'],['../dc/d19/classMAX7219.html#a44137bb65de2396875934e48a6ee5099',1,'MAX7219::update()'],['../d1/d5c/classShiftRegisterOut.html#a44137bb65de2396875934e48a6ee5099',1,'ShiftRegisterOut::update()'],['../dd/d81/classSPIShiftRegisterOut.html#a44137bb65de2396875934e48a6ee5099',1,'SPIShiftRegisterOut::update()'],['../da/da7/classFilteredAnalog.html#aa2aac016e2bf7b5bd2b271786c2791aa',1,'FilteredAnalog::update()'],['../df/d38/classIncrementButton.html#ad3475e1e3dd2663470de0906a75ccf73',1,'IncrementButton::update()'],['../d5/d20/classIncrementDecrementButtons.html#ad3475e1e3dd2663470de0906a75ccf73',1,'IncrementDecrementButtons::update()']]], - ['updateall_804',['updateAll',['../d5/de0/classUpdatable.html#a44e05f733dace05adcf585b5a17be292',1,'Updatable']]], - ['updateimplementation_805',['updateImplementation',['../df/d38/classIncrementButton.html#aed6dd7ae138afdede444afa5832a1757',1,'IncrementButton::updateImplementation()'],['../d5/d20/classIncrementDecrementButtons.html#a53624594134ff1978bb74f6a9c0412fb',1,'IncrementDecrementButtons::updateImplementation()']]], - ['uppercase_806',['uppercase',['../d8/d4b/group__AH__PrintStream.html#ga2b44e6ada22b1b5a703617123ebd0598',1,'uppercase(Print &printer): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga2b44e6ada22b1b5a703617123ebd0598',1,'uppercase(Print &printer): PrintStream.cpp']]] -]; diff --git a/docs/Doxygen/search/functions_12.html b/docs/Doxygen/search/functions_12.html deleted file mode 100644 index 16f6ecceb..000000000 --- a/docs/Doxygen/search/functions_12.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/functions_12.js b/docs/Doxygen/search/functions_12.js deleted file mode 100644 index d016a9795..000000000 --- a/docs/Doxygen/search/functions_12.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['_7ebuttonmatrix_807',['~ButtonMatrix',['../d8/d6c/classButtonMatrix.html#a40a59c4c8c858fa54fd6b65e3d6430fd',1,'ButtonMatrix']]], - ['_7edoublylinkable_808',['~DoublyLinkable',['../d4/d23/classDoublyLinkable.html#a52e45d1ee1c4822cf1f133920fbfab62',1,'DoublyLinkable']]], - ['_7eextendedioelement_809',['~ExtendedIOElement',['../de/d4e/classExtendedIOElement.html#afb3e78caecbc529d44030584ba09d284',1,'ExtendedIOElement']]], - ['_7euniqueptr_810',['~UniquePtr',['../d0/ddd/classUniquePtr.html#abe23dfe2f820469d701ff9474260fd84',1,'UniquePtr']]], - ['_7eupdatable_811',['~Updatable',['../d5/de0/classUpdatable.html#aff29d399f9c2bc6901821811df949712',1,'Updatable']]] -]; diff --git a/docs/Doxygen/search/functions_2.html b/docs/Doxygen/search/functions_2.html deleted file mode 100644 index 07e3fdad4..000000000 --- a/docs/Doxygen/search/functions_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/functions_2.js b/docs/Doxygen/search/functions_2.js deleted file mode 100644 index 4f44c7b0d..000000000 --- a/docs/Doxygen/search/functions_2.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['cat_655',['cat',['../da/de8/group__AH__Containers.html#gaad0d1453702ba4ea1c2e3f4281029377',1,'ArrayHelpers.hpp']]], - ['clear_656',['clear',['../db/de9/classBitArray.html#a24366860e599d2f82b6befd11bf3dac8',1,'BitArray::clear()'],['../d2/d1b/classLEDs.html#af5c47848fb7a20923270eaee20472f47',1,'LEDs::clear(uint8_t index) const'],['../d2/d1b/classLEDs.html#adf1d9633e64d0de6a36e0af17ccd8163',1,'LEDs::clear() const'],['../da/dd0/classMAX7219__Base.html#ac8bb3912a3ce86b15842e79d0b421204',1,'MAX7219_Base::clear()']]], - ['copyas_657',['copyAs',['../da/de8/group__AH__Containers.html#gafabc9f5a80a8d4c068141c62de619714',1,'ArrayHelpers.hpp']]], - ['couldcontain_658',['couldContain',['../dd/d16/classDoublyLinkedList.html#a07505b9229f646d1f819acee79aded6d',1,'DoublyLinkedList']]], - ['cslice_659',['cslice',['../d7/d6a/structArray.html#a095474b2ffde5d8acd7c8979107671ab',1,'Array']]] -]; diff --git a/docs/Doxygen/search/functions_3.html b/docs/Doxygen/search/functions_3.html deleted file mode 100644 index 40bd389ee..000000000 --- a/docs/Doxygen/search/functions_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/functions_3.js b/docs/Doxygen/search/functions_3.js deleted file mode 100644 index b257ec440..000000000 --- a/docs/Doxygen/search/functions_3.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['dec_660',['dec',['../d8/d4b/group__AH__PrintStream.html#gaa46b20141a495c428e33bcdcbf63c04e',1,'dec(Print &printer): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gaa46b20141a495c428e33bcdcbf63c04e',1,'dec(Print &printer): PrintStream.cpp']]], - ['digitalread_661',['digitalRead',['../d7/d8d/classAnalogMultiplex.html#a06c8be051c17288bea66f7fd94d352b1',1,'AnalogMultiplex::digitalRead()'],['../de/d4e/classExtendedIOElement.html#afa50a5106cba6e0dc7822fb8cd73f737',1,'ExtendedIOElement::digitalRead()'],['../dc/d19/classMAX7219.html#a06c8be051c17288bea66f7fd94d352b1',1,'MAX7219::digitalRead()'],['../d8/db4/classShiftRegisterOutBase.html#a06c8be051c17288bea66f7fd94d352b1',1,'ShiftRegisterOutBase::digitalRead()'],['../d8/d3d/namespaceExtIO.html#aecc9c66e459fa540ac06ada7f25f0b96',1,'ExtIO::digitalRead(pin_t pin)'],['../d8/d3d/namespaceExtIO.html#ae1e3d979645a535a8ce49f935392d8bc',1,'ExtIO::digitalRead(int pin)']]], - ['digitalwrite_662',['digitalWrite',['../d7/d8d/classAnalogMultiplex.html#af873c712ef239ca96d8369c66d823a29',1,'AnalogMultiplex::digitalWrite()'],['../de/d4e/classExtendedIOElement.html#a7bea30a74383ad0a10a24fb0c8cc5a05',1,'ExtendedIOElement::digitalWrite()'],['../dc/d19/classMAX7219.html#a7b4fdbf457a991d88b4f7cf765a64b5e',1,'MAX7219::digitalWrite()'],['../d8/db4/classShiftRegisterOutBase.html#a7b4fdbf457a991d88b4f7cf765a64b5e',1,'ShiftRegisterOutBase::digitalWrite()'],['../d8/d3d/namespaceExtIO.html#aafb55ff1ef70b0086bfa19406c1d076a',1,'ExtIO::digitalWrite(pin_t pin, uint8_t val)'],['../d8/d3d/namespaceExtIO.html#a01431c91530865557cbbd074bbe84a95',1,'ExtIO::digitalWrite(int pin, uint8_t val)']]], - ['disable_663',['disable',['../d5/de0/classUpdatable.html#a8cfbbe53c1cf6e3054736daea3044c0f',1,'Updatable::disable()'],['../d5/de0/classUpdatable.html#ac5cc10f3a68b6aa83bf1e99a1dd3264a',1,'Updatable::disable(Updatable< T > *element)'],['../d5/de0/classUpdatable.html#a82391f3239c38c964bf03011e4e9720d',1,'Updatable::disable(Updatable< T > &element)'],['../d5/de0/classUpdatable.html#ac05c991ba1ef6cb7363a44e2232119f0',1,'Updatable::disable(U(&array)[N])']]], - ['display_664',['display',['../d1/d3e/classDotBarDisplayLEDs.html#a56b50eafe5ba3a58be19a3691882fa57',1,'DotBarDisplayLEDs::display(uint8_t value) const'],['../d1/d3e/classDotBarDisplayLEDs.html#a1c653b463a49e26299ab95904372641a',1,'DotBarDisplayLEDs::display(float value) const'],['../d4/d26/classMAX7219SevenSegmentDisplay.html#a8a53cdf32432d6839387b6d65d9d7495',1,'MAX7219SevenSegmentDisplay::display(long number, uint8_t startDigit=0, uint8_t endDigit=7)'],['../d4/d26/classMAX7219SevenSegmentDisplay.html#a229ef78cca4de59ab26db2acd5901b83',1,'MAX7219SevenSegmentDisplay::display(const char *text, uint8_t startPos=0)'],['../d4/d26/classMAX7219SevenSegmentDisplay.html#a667ad7e72427719c28e594a4539c4279',1,'MAX7219SevenSegmentDisplay::display(const uint8_t(&characters)[N], uint8_t startPos=0)']]], - ['displaydot_665',['displayDot',['../d2/d1b/classLEDs.html#a6476e67a08f1e9bc02c9958bab7bffb8',1,'LEDs']]], - ['displayrange_666',['displayRange',['../d2/d1b/classLEDs.html#a052ced8e2541ff4c155cbc511417ac4e',1,'LEDs']]], - ['distribute_667',['distribute',['../da/de8/group__AH__Containers.html#ga3def1b1b33c33994b36460d66b76ba72',1,'distribute(const ArraySlice< T1, N1, Reverse1, Const1 > &a, const ArraySlice< T2, N2, Reverse2, Const2 > &b): ArrayHelpers.hpp'],['../da/de8/group__AH__Containers.html#ga46326ad9f44882cf0619e570ee2b93f6',1,'distribute(const ArraySlice< T1, N1, Reverse1, Const1 > &a, const Array< T2, N2 > &b): ArrayHelpers.hpp'],['../da/de8/group__AH__Containers.html#ga434ebddb16f9fa34339dc68026fa6d90',1,'distribute(const Array< T1, N1 > &a, const ArraySlice< T2, N2, Reverse2, Const2 > &b): ArrayHelpers.hpp'],['../da/de8/group__AH__Containers.html#ga3f6de536d5a3a88afee2397343328945',1,'distribute(const Array< T1, N1 > &a, const Array< T2, N2 > &b): ArrayHelpers.hpp']]], - ['dotbardisplayleds_668',['DotBarDisplayLEDs',['../d1/d3e/classDotBarDisplayLEDs.html#aea5c06eb888dad499891ae2cdd379b10',1,'DotBarDisplayLEDs']]], - ['dotmode_669',['dotMode',['../d1/d3e/classDotBarDisplayLEDs.html#afea99f014e9f1bfc928e6190d736dd3f',1,'DotBarDisplayLEDs']]] -]; diff --git a/docs/Doxygen/search/functions_4.html b/docs/Doxygen/search/functions_4.html deleted file mode 100644 index 8a4df4cdc..000000000 --- a/docs/Doxygen/search/functions_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/functions_4.js b/docs/Doxygen/search/functions_4.js deleted file mode 100644 index 5d1a6ec8a..000000000 --- a/docs/Doxygen/search/functions_4.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['ema_5ff_670',['EMA_f',['../db/d6f/classEMA__f.html#ad49ecf310d82070c95e8d798cb7e51ad',1,'EMA_f']]], - ['enable_671',['enable',['../d5/de0/classUpdatable.html#a486f22824bd83c5308a0d70ffac6f758',1,'Updatable::enable()'],['../d5/de0/classUpdatable.html#aa412dd26665f540dac4f65e6fc47730f',1,'Updatable::enable(Updatable *element)'],['../d5/de0/classUpdatable.html#a4b25235ba3dcfb74aa42f2993a3cd415',1,'Updatable::enable(Updatable &element)'],['../d5/de0/classUpdatable.html#a2f775da7b162931d468d6d6b6950dfcf',1,'Updatable::enable(U(&array)[N])']]], - ['end_672',['end',['../d7/d6a/structArray.html#a5994ad65dce0457b21adb6a10c8642dc',1,'Array::end()'],['../d7/d6a/structArray.html#a1a0a94a0e2e54e0097c07b5394196860',1,'Array::end() const'],['../df/de0/classArraySlice.html#a62469461ed7c932afba3808f4da0fe3d',1,'ArraySlice::end()'],['../dd/d16/classDoublyLinkedList.html#acad38d52497a975bfb6f2f6acd76631f',1,'DoublyLinkedList::end()'],['../dd/d16/classDoublyLinkedList.html#accf9a4bd0c34d4a5f6a7dab66ea10cdc',1,'DoublyLinkedList::end() const']]], - ['endl_673',['endl',['../d8/d4b/group__AH__PrintStream.html#gaae13bd0e8ea7184cf85b86bcd1a01e2d',1,'endl(Print &printer): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gaae13bd0e8ea7184cf85b86bcd1a01e2d',1,'endl(Print &printer): PrintStream.cpp']]], - ['extendedioelement_674',['ExtendedIOElement',['../de/d4e/classExtendedIOElement.html#ab082f60c807354734c73413eb519f083',1,'ExtendedIOElement']]] -]; diff --git a/docs/Doxygen/search/functions_5.html b/docs/Doxygen/search/functions_5.html deleted file mode 100644 index 2b983b214..000000000 --- a/docs/Doxygen/search/functions_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/functions_5.js b/docs/Doxygen/search/functions_5.js deleted file mode 100644 index 809978699..000000000 --- a/docs/Doxygen/search/functions_5.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['fatalerrorexit_675',['fatalErrorExit',['../d1/d93/Error_8hpp.html#a7ff220c57636b72ec9d8df676f72ef0e',1,'fatalErrorExit() __attribute__((noreturn)): Exit.cpp'],['../d6/df4/Exit_8cpp.html#a70341be23d4638984587786720541e43',1,'fatalErrorExit(): Exit.cpp']]], - ['fillarray_676',['fillArray',['../da/de8/group__AH__Containers.html#ga9637082562b5de1c3370f53ba840cb25',1,'ArrayHelpers.hpp']]], - ['filter_677',['filter',['../d7/d40/classEMA.html#a2126afce1b045790750cef8d827ba5c5',1,'EMA::filter()'],['../db/d6f/classEMA__f.html#aacf6a331433a053f5e70f4f71aa87836',1,'EMA_f::filter()']]], - ['filteredanalog_678',['FilteredAnalog',['../da/da7/classFilteredAnalog.html#aec8b608b6272c8db4b6fa33e43484ece',1,'FilteredAnalog']]], - ['flush_679',['flush',['../d8/d4b/group__AH__PrintStream.html#gad656b6d999d4a9c4ec16a7d7c9d6ab5e',1,'flush(Print &printer): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gad656b6d999d4a9c4ec16a7d7c9d6ab5e',1,'flush(Print &printer): PrintStream.cpp']]], - ['frequency_680',['Frequency',['../d7/d90/classFrequency.html#ababdd3bf7300f8e77a3d0f6c6fa8f261',1,'Frequency']]] -]; diff --git a/docs/Doxygen/search/functions_6.html b/docs/Doxygen/search/functions_6.html deleted file mode 100644 index f7d283d10..000000000 --- a/docs/Doxygen/search/functions_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/functions_6.js b/docs/Doxygen/search/functions_6.js deleted file mode 100644 index 8f885e27d..000000000 --- a/docs/Doxygen/search/functions_6.js +++ /dev/null @@ -1,29 +0,0 @@ -var searchData= -[ - ['generatearray_681',['generateArray',['../da/de8/group__AH__Containers.html#gabd08306949ede9909fb0f3aca9d0d74a',1,'generateArray(G generator): ArrayHelpers.hpp'],['../da/de8/group__AH__Containers.html#ga4e07b33e52979d678830f6f78218607e',1,'generateArray(G generator) -> Array< decltype(generator()), N >: ArrayHelpers.hpp']]], - ['generateincrementalarray_682',['generateIncrementalArray',['../da/de8/group__AH__Containers.html#ga916ecc658d4308b2b4aa876a03bc5f2f',1,'ArrayHelpers.hpp']]], - ['get_683',['get',['../db/de9/classBitArray.html#a4130cd8787edaea5d864f9591413b1a5',1,'BitArray::get()'],['../d0/ddd/classUniquePtr.html#ac051b2568208e363ae2dffb23c0ad9ba',1,'UniquePtr::get()'],['../d0/ddd/classUniquePtr.html#ac2393e8bd15daa23d3cde726fd05fa78',1,'UniquePtr::get() const']]], - ['getall_684',['getAll',['../de/d4e/classExtendedIOElement.html#ab39c55f3dc8c6b76da5a2e38d3ce71eb',1,'ExtendedIOElement']]], - ['getbufferbit_685',['getBufferBit',['../db/de9/classBitArray.html#a9c7703ad078c4924116177d2462bbff6',1,'BitArray']]], - ['getbufferindex_686',['getBufferIndex',['../db/de9/classBitArray.html#a26f32dc0d06809fae90e2951554c04b8',1,'BitArray']]], - ['getbufferlength_687',['getBufferLength',['../db/de9/classBitArray.html#aa459ca81973d0b8b5d9d369574c8f79e',1,'BitArray']]], - ['getbuffermask_688',['getBufferMask',['../db/de9/classBitArray.html#a9fde85b6cab77cd2c00952e3beee8a40',1,'BitArray']]], - ['getbyte_689',['getByte',['../db/de9/classBitArray.html#ae44c8756fd88031343b799ac917dbaf0',1,'BitArray']]], - ['getdebouncetime_690',['getDebounceTime',['../d1/d19/classButton.html#abd2c7ce5bb0822e3a1a7b15da33bd3d4',1,'Button']]], - ['getend_691',['getEnd',['../de/d4e/classExtendedIOElement.html#ac1c5bf2e567333ac7a6f8b040d739b43',1,'ExtendedIOElement']]], - ['getfirst_692',['getFirst',['../dd/d16/classDoublyLinkedList.html#ac4e3e4821df6cd9a88971fd5580e5a43',1,'DoublyLinkedList']]], - ['getfloatvalue_693',['getFloatValue',['../da/da7/classFilteredAnalog.html#a8b6e5dccd615d65041ffc174d01cb9b8',1,'FilteredAnalog']]], - ['getinterval_694',['getInterval',['../dc/dea/classTimer.html#a47c3dbcbbdcc838df61aea8caf8a118e',1,'Timer']]], - ['getioelementofpin_695',['getIOElementOfPin',['../d8/d3d/namespaceExtIO.html#a61c05f198865505b4ecbeb9759a9aa77',1,'ExtIO']]], - ['getlast_696',['getLast',['../dd/d16/classDoublyLinkedList.html#a38ba5fe2a35b8052bdba6c2bd624c6c9',1,'DoublyLinkedList']]], - ['getlength_697',['getLength',['../de/d4e/classExtendedIOElement.html#a3df029350e2baa2e3fefd90ccf0432cd',1,'ExtendedIOElement']]], - ['getmode_698',['getMode',['../d1/d3e/classDotBarDisplayLEDs.html#add03bf21030c26bfffd733237b69411a',1,'DotBarDisplayLEDs']]], - ['getname_699',['getName',['../d1/d19/classButton.html#a6f271a6c38429ca0553c06cedbbcdd17',1,'Button']]], - ['getprevstate_700',['getPrevState',['../d8/d6c/classButtonMatrix.html#a62dac074b3767f9be91bc05f4e5a0638',1,'ButtonMatrix']]], - ['getrawvalue_701',['getRawValue',['../da/da7/classFilteredAnalog.html#a5a3e6c660c868d044afaeaf53e7872b3',1,'FilteredAnalog']]], - ['getstart_702',['getStart',['../de/d4e/classExtendedIOElement.html#a16be6556a97a7bf976eecb2ab51b4db2',1,'ExtendedIOElement']]], - ['getstate_703',['getState',['../d1/d19/classButton.html#aa6178f1d912f995cfa236990a731ea1e',1,'Button::getState()'],['../df/d38/classIncrementButton.html#a8e52bcaecc271b1b57c4608da2d4b11e',1,'IncrementButton::getState()'],['../d5/d20/classIncrementDecrementButtons.html#a8e52bcaecc271b1b57c4608da2d4b11e',1,'IncrementDecrementButtons::getState()']]], - ['getvalue_704',['getValue',['../d2/dcb/classHysteresis.html#aa4f4d200e8ddf64eed29dc2c80f9d307',1,'Hysteresis::getValue()'],['../da/da7/classFilteredAnalog.html#a8a4d365b8958084f9cb9176fe638bfae',1,'FilteredAnalog::getValue()']]], - ['green_705',['green',['../d8/db4/classShiftRegisterOutBase.html#a747ea2df45802236047707da53c83c67',1,'ShiftRegisterOutBase']]], - ['greenpins_706',['greenPins',['../d8/db4/classShiftRegisterOutBase.html#a7fce3d70b29b9701647c81baa7964079',1,'ShiftRegisterOutBase']]] -]; diff --git a/docs/Doxygen/search/functions_7.html b/docs/Doxygen/search/functions_7.html deleted file mode 100644 index a74fe44aa..000000000 --- a/docs/Doxygen/search/functions_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/functions_7.js b/docs/Doxygen/search/functions_7.js deleted file mode 100644 index 8b43fabd7..000000000 --- a/docs/Doxygen/search/functions_7.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['hex_707',['hex',['../d8/d4b/group__AH__PrintStream.html#gaa47b34b5f85fef7f8b050c0d0a715d2f',1,'hex(Print &printer): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gaa47b34b5f85fef7f8b050c0d0a715d2f',1,'hex(Print &printer): PrintStream.cpp']]] -]; diff --git a/docs/Doxygen/search/functions_8.html b/docs/Doxygen/search/functions_8.html deleted file mode 100644 index 75fc0bea7..000000000 --- a/docs/Doxygen/search/functions_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/functions_8.js b/docs/Doxygen/search/functions_8.js deleted file mode 100644 index e9f6c59ab..000000000 --- a/docs/Doxygen/search/functions_8.js +++ /dev/null @@ -1,15 +0,0 @@ -var searchData= -[ - ['increasebitdepth_708',['increaseBitDepth',['../dd/d5e/group__AH__Math.html#ga46fa72568df66520decc1fd69b4d37be',1,'IncreaseBitDepth.hpp']]], - ['increasebitdepthimpl_709',['increaseBitDepthImpl',['../d5/dee/IncreaseBitDepth_8hpp.html#a5b765f75de6e0e108893b447265568ca',1,'increaseBitDepthImpl(T_in in): IncreaseBitDepth.hpp'],['../d5/dee/IncreaseBitDepth_8hpp.html#a7ef664640695e1363e8d871303073eb2',1,'increaseBitDepthImpl(T_in in): IncreaseBitDepth.hpp']]], - ['incrementbutton_710',['IncrementButton',['../df/d38/classIncrementButton.html#a1299f0d578092838e092dd6045762006',1,'IncrementButton']]], - ['incrementdecrementbuttons_711',['IncrementDecrementButtons',['../d5/d20/classIncrementDecrementButtons.html#a169fb832f90b7d02106cf895e3c13f13',1,'IncrementDecrementButtons']]], - ['incrementor_712',['Incrementor',['../d5/d4a/classdetail_1_1Incrementor.html#a5481dc3bb7d4149bce5951e582912639',1,'detail::Incrementor']]], - ['init_713',['init',['../da/dd0/classMAX7219__Base.html#a02fd73d861ef2e4aabb38c0c9ff82947',1,'MAX7219_Base']]], - ['inrange_714',['inRange',['../d8/d3d/namespaceExtIO.html#aedf6005ecc64cea16059965b80ce5f85',1,'ExtIO']]], - ['insertbefore_715',['insertBefore',['../dd/d16/classDoublyLinkedList.html#acf4811805cad3ff26197d352e77a5984',1,'DoublyLinkedList::insertBefore(Node *toBeInserted, Node *before)'],['../dd/d16/classDoublyLinkedList.html#aee52709fe1679f32142402cea825a7f5',1,'DoublyLinkedList::insertBefore(Node &toBeInserted, Node &before)']]], - ['insertsorted_716',['insertSorted',['../dd/d16/classDoublyLinkedList.html#ad72e675f001fbacd813452efbd15a6f2',1,'DoublyLinkedList::insertSorted(Node *node, Compare cmp)'],['../dd/d16/classDoublyLinkedList.html#ab894c7e00c61dc14cb8bfed56aeed324',1,'DoublyLinkedList::insertSorted(Node *node)']]], - ['invert_717',['invert',['../d1/d19/classButton.html#a7fa1616cc61c19a5efcc863c950f7f30',1,'Button::invert()'],['../da/da7/classFilteredAnalog.html#a7fa1616cc61c19a5efcc863c950f7f30',1,'FilteredAnalog::invert()']]], - ['isenabled_718',['isEnabled',['../d5/de0/classUpdatable.html#a56722b6f1c22da04885bc9853148bb71',1,'Updatable']]], - ['iterator_719',['Iterator',['../d9/d1a/classArraySlice_1_1Iterator.html#a85c519faf6acc81f7d56b31eb1c9d1cb',1,'ArraySlice::Iterator']]] -]; diff --git a/docs/Doxygen/search/functions_9.html b/docs/Doxygen/search/functions_9.html deleted file mode 100644 index 7541c9e3e..000000000 --- a/docs/Doxygen/search/functions_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/functions_9.js b/docs/Doxygen/search/functions_9.js deleted file mode 100644 index c1a562189..000000000 --- a/docs/Doxygen/search/functions_9.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['leadingzeros_720',['leadingzeros',['../d8/d4b/group__AH__PrintStream.html#gac1965a822d8334f9c97e598d36056dff',1,'leadingzeros(Print &printer): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gac1965a822d8334f9c97e598d36056dff',1,'leadingzeros(Print &printer): PrintStream.cpp']]], - ['leds_721',['LEDs',['../d2/d1b/classLEDs.html#a91201de7a0ccf4e26184dfb9e37adecc',1,'LEDs']]], - ['length_722',['length',['../d1/d13/classStaticSizeExtendedIOElement.html#aba6ca6dbf6cb35fd73f4f371b14e279b',1,'StaticSizeExtendedIOElement']]] -]; diff --git a/docs/Doxygen/search/functions_a.html b/docs/Doxygen/search/functions_a.html deleted file mode 100644 index 5a5be6300..000000000 --- a/docs/Doxygen/search/functions_a.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/functions_a.js b/docs/Doxygen/search/functions_a.js deleted file mode 100644 index d0301c99f..000000000 --- a/docs/Doxygen/search/functions_a.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['makeunique_723',['MakeUnique',['../da/de8/group__AH__Containers.html#gabb4ce09bb1bbca704175a873b2a3f28a',1,'UniquePtr.hpp']]], - ['map_724',['map',['../da/da7/classFilteredAnalog.html#a55537d6de64435f495f9eaac3985d7e8',1,'FilteredAnalog']]], - ['max_725',['max',['../dd/d5e/group__AH__Math.html#ga9e95297ceced5af9c60b19932989502d',1,'MinMaxFix.hpp']]], - ['max7219_726',['MAX7219',['../dc/d19/classMAX7219.html#a96e02b943424214530e1f369120f850f',1,'MAX7219']]], - ['max7219_5fbase_727',['MAX7219_Base',['../da/dd0/classMAX7219__Base.html#aecdc7954ee8ac04343b4b8a5d9ef6c64',1,'MAX7219_Base']]], - ['max7219sevensegmentdisplay_728',['MAX7219SevenSegmentDisplay',['../d4/d26/classMAX7219SevenSegmentDisplay.html#a15e656e5392f7a6191411201dca132e9',1,'MAX7219SevenSegmentDisplay']]], - ['min_729',['min',['../dd/d5e/group__AH__Math.html#ga14defb38b6c00778e25b94ea91b0b4ac',1,'MinMaxFix.hpp']]], - ['movedown_730',['moveDown',['../dd/d16/classDoublyLinkedList.html#a9750fc672c95b807b56b12b0a65542f8',1,'DoublyLinkedList']]] -]; diff --git a/docs/Doxygen/search/functions_b.html b/docs/Doxygen/search/functions_b.html deleted file mode 100644 index fc2d5aa4e..000000000 --- a/docs/Doxygen/search/functions_b.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/functions_b.js b/docs/Doxygen/search/functions_b.js deleted file mode 100644 index e077a7134..000000000 --- a/docs/Doxygen/search/functions_b.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['nibble_5fto_5fhex_731',['nibble_to_hex',['../da/d69/PrintStream_8cpp.html#a7df4d5e824296b753f67be09e88593e3',1,'PrintStream.cpp']]], - ['noboolalpha_732',['noboolalpha',['../d8/d4b/group__AH__PrintStream.html#ga6f91d974c1da2e228efad12693a46386',1,'noboolalpha(Print &printer): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga6f91d974c1da2e228efad12693a46386',1,'noboolalpha(Print &printer): PrintStream.cpp']]], - ['node_5fiterator_733',['node_iterator',['../dd/d02/classDoublyLinkedList_1_1node__iterator.html#ada137d965190b4d74fdd449a6e14abb8',1,'DoublyLinkedList::node_iterator']]], - ['node_5fiterator_5fbase_734',['node_iterator_base',['../db/d52/classDoublyLinkedList_1_1node__iterator__base.html#aa1e1021a3c378cae4c2ed20d079074f0',1,'DoublyLinkedList::node_iterator_base']]], - ['noleadingzeros_735',['noleadingzeros',['../d8/d4b/group__AH__PrintStream.html#ga8c9f111e05c74acb9bdffce673ef5709',1,'noleadingzeros(Print &printer): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga8c9f111e05c74acb9bdffce673ef5709',1,'noleadingzeros(Print &printer): PrintStream.cpp']]], - ['noshowbase_736',['noshowbase',['../d8/d4b/group__AH__PrintStream.html#ga8ae8a20941a7cf9957efc590d5a56ef4',1,'noshowbase(Print &printer): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga8ae8a20941a7cf9957efc590d5a56ef4',1,'noshowbase(Print &printer): PrintStream.cpp']]], - ['nouppercase_737',['nouppercase',['../d8/d4b/group__AH__PrintStream.html#gaff5eada882f71bd90e0de66c48faaeb3',1,'nouppercase(Print &printer): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gaff5eada882f71bd90e0de66c48faaeb3',1,'nouppercase(Print &printer): PrintStream.cpp']]] -]; diff --git a/docs/Doxygen/search/functions_c.html b/docs/Doxygen/search/functions_c.html deleted file mode 100644 index a1a143781..000000000 --- a/docs/Doxygen/search/functions_c.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/functions_c.js b/docs/Doxygen/search/functions_c.js deleted file mode 100644 index 2a806f1f0..000000000 --- a/docs/Doxygen/search/functions_c.js +++ /dev/null @@ -1,25 +0,0 @@ -var searchData= -[ - ['onbuttonchanged_738',['onButtonChanged',['../d8/d6c/classButtonMatrix.html#a2cadb550c55b9ee1f0362fc6ebf0ac8a',1,'ButtonMatrix']]], - ['operator_20array_3c_20t_2c_20n_20_3e_739',['operator Array< T, N >',['../df/de0/classArraySlice.html#a85540bd644d96e80370f2d5f735f172d',1,'ArraySlice']]], - ['operator_20bool_740',['operator bool',['../d0/ddd/classUniquePtr.html#a67b76affb3b5d35fa419ac234144038b',1,'UniquePtr::operator bool()'],['../dc/dea/classTimer.html#a9b3baad8c612d81b96e46f84d7e97580',1,'Timer::operator bool()']]], - ['operator_20unsigned_20long_741',['operator unsigned long',['../d7/d90/classFrequency.html#a8e155ade35aaef49414f915268ee195d',1,'Frequency']]], - ['operator_21_3d_742',['operator!=',['../d7/d6a/structArray.html#a5ca312d5c447ef9de4f3e2bae7426c82',1,'Array::operator!=()'],['../d9/d1a/classArraySlice_1_1Iterator.html#a1cd4233653c1f13cff58e58139e73c2f',1,'ArraySlice::Iterator::operator!=()'],['../db/d52/classDoublyLinkedList_1_1node__iterator__base.html#a672679d3f579f46f12db24e2a9705e34',1,'DoublyLinkedList::node_iterator_base::operator!=()'],['../da/de8/group__AH__Containers.html#ga1ef5e1a48076f38aeb11b10190eec198',1,'operator!=(ArraySlice< T1, N1, Reverse1, Const1 > a, ArraySlice< T2, N2, Reverse2, Const2 > b): Array.hpp'],['../da/de8/group__AH__Containers.html#ga5d0e99ddd5d0bb0ad06f29b060719709',1,'operator!=(const Array< T1, N1 > &a, ArraySlice< T2, N2, Reverse2, Const2 > b): Array.hpp'],['../da/de8/group__AH__Containers.html#gac5b048c809a3f87ed0ee7a4dc1522e3c',1,'operator!=(ArraySlice< T1, N1, Reverse1, Const1 > a, const Array< T2, N2 > &b): Array.hpp']]], - ['operator_28_29_743',['operator()',['../d5/d4a/classdetail_1_1Incrementor.html#aaba2db6079c528211c6b095cdb08fcf6',1,'detail::Incrementor::operator()()'],['../d7/d40/classEMA.html#aad711c5729d88de6e4c1f50f0a0b4de6',1,'EMA::operator()()'],['../db/d6f/classEMA__f.html#a08c804ae887b09bc9c12a6814c9ec50e',1,'EMA_f::operator()()']]], - ['operator_2a_744',['operator*',['../d9/d1a/classArraySlice_1_1Iterator.html#ab086ec1916db61d1ab56a801abca8d91',1,'ArraySlice::Iterator::operator*()'],['../db/d52/classDoublyLinkedList_1_1node__iterator__base.html#aa43114c1c29e69554982c9f8982a0820',1,'DoublyLinkedList::node_iterator_base::operator*()'],['../d0/ddd/classUniquePtr.html#af7f8c6b921dca2b94f6e7ee14e762770',1,'UniquePtr::operator*()'],['../d0/ddd/classUniquePtr.html#a540e5588dffde890174a282451f73fb9',1,'UniquePtr::operator*() const'],['../da/de8/group__AH__Containers.html#gae05240f5dd9331e9b8973876f1460a87',1,'operator*(ArraySlice< T1, N1, Reverse1, Const1 > a, T2 b): Array.hpp'],['../da/de8/group__AH__Containers.html#ga1c80a4dd08ce81e68b1f11779785d8b7',1,'operator*(const Array< T1, N1 > &a, T2 b): Array.hpp'],['../da/de8/group__AH__Containers.html#ga61b35a20cc3b709bb084bd85d737b97a',1,'operator*(T1 a, ArraySlice< T2, N2, Reverse2, Const2 > b): Array.hpp'],['../da/de8/group__AH__Containers.html#ga266b501c15d3402fa35f876d087ca3b8',1,'operator*(T1 a, const Array< T2, N2 > &b): Array.hpp']]], - ['operator_2a_3d_745',['operator*=',['../da/de8/group__AH__Containers.html#ga543f2d3a313cde5da776a6e3c6fe0c84',1,'operator*=(const ArraySlice< T1, N1, Reverse1, Const1 > &a, T2 b): Array.hpp'],['../da/de8/group__AH__Containers.html#ga37a28e43d2cecee277df750e3a06d933',1,'operator*=(Array< T1, N1 > &a, T2 b): Array.hpp']]], - ['operator_2b_746',['operator+',['../d9/d1a/classArraySlice_1_1Iterator.html#acca971baddfbaf992b357b0cc26e27ce',1,'ArraySlice::Iterator::operator+()'],['../da/de8/group__AH__Containers.html#gad957ff32abdac9e23c620d8e1ef3917f',1,'operator+(ArraySlice< T1, N1, Reverse1, Const1 > a, ArraySlice< T2, N2, Reverse2, Const2 > b): Array.hpp'],['../da/de8/group__AH__Containers.html#gac2d2fdc7148f0a2264af1d7873e75671',1,'operator+(const Array< T1, N1 > &a, const Array< T2, N2 > &b): Array.hpp']]], - ['operator_2b_2b_747',['operator++',['../d9/d1a/classArraySlice_1_1Iterator.html#aef12ef33726bc591f569f822c7b5ac41',1,'ArraySlice::Iterator::operator++()'],['../dd/d02/classDoublyLinkedList_1_1node__iterator.html#a07f248f1fb7ac39a1356a32b133cd7e9',1,'DoublyLinkedList::node_iterator::operator++()'],['../d1/d4c/classDoublyLinkedList_1_1reverse__node__iterator.html#a0424f362cd71a48fe442f9c866603f9d',1,'DoublyLinkedList::reverse_node_iterator::operator++()']]], - ['operator_2b_3d_748',['operator+=',['../da/de8/group__AH__Containers.html#ga256e0b52207c0d0046d14f3d1fca62bb',1,'operator+=(const ArraySlice< T1, N1, Reverse1, Const1 > &a, const ArraySlice< T2, N2, Reverse2, Const2 > &b): Array.hpp'],['../da/de8/group__AH__Containers.html#gacbd59aae6571e4769af3c32e6b93f41c',1,'operator+=(Array< T1, N1 > &a, const Array< T2, N2 > &b): Array.hpp']]], - ['operator_2d_749',['operator-',['../d9/d1a/classArraySlice_1_1Iterator.html#a64f3c17479ea105b93954a61d5d851e6',1,'ArraySlice::Iterator::operator-(Iterator rhs) const'],['../d9/d1a/classArraySlice_1_1Iterator.html#aa2aae37de5e7d1a04f186a6e36ccbb7e',1,'ArraySlice::Iterator::operator-(difference_type rhs) const'],['../da/de8/group__AH__Containers.html#ga684f0e78c6c771a98f7198e6c7ecb2a3',1,'operator-(ArraySlice< T1, N1, Reverse1, Const1 > a, ArraySlice< T2, N2, Reverse2, Const2 > b): Array.hpp'],['../da/de8/group__AH__Containers.html#gae0c80ca2f1f9a3dd17d85ccd79e0b696',1,'operator-(const Array< T1, N1 > &a, const Array< T2, N2 > &b): Array.hpp'],['../da/de8/group__AH__Containers.html#gacc2f020c702ecb15a6159ad224eaa683',1,'operator-(ArraySlice< T, N, Reverse, Const > a): Array.hpp'],['../da/de8/group__AH__Containers.html#ga3ee72fd9836670faac18a3051d3c8c0f',1,'operator-(const Array< T, N > &a): Array.hpp']]], - ['operator_2d_2d_750',['operator--',['../d9/d1a/classArraySlice_1_1Iterator.html#a34e5ed23ddc31b7d8d4bfb5bfacbaab6',1,'ArraySlice::Iterator::operator--()'],['../dd/d02/classDoublyLinkedList_1_1node__iterator.html#a46069da106166b03d9fdbfa12d71029e',1,'DoublyLinkedList::node_iterator::operator--()'],['../d1/d4c/classDoublyLinkedList_1_1reverse__node__iterator.html#ac7c0a827ddd55f27d235112e026cc82a',1,'DoublyLinkedList::reverse_node_iterator::operator--()']]], - ['operator_2d_3d_751',['operator-=',['../da/de8/group__AH__Containers.html#gaab1e92be4e590a31210a3c50a15f5ac6',1,'operator-=(const ArraySlice< T1, N1, Reverse1, Const1 > &a, const ArraySlice< T2, N2, Reverse2, Const2 > &b): Array.hpp'],['../da/de8/group__AH__Containers.html#gac61bc9f84282d80815a1e55bc9ad0086',1,'operator-=(Array< T1, N1 > &a, const Array< T2, N2 > &b): Array.hpp']]], - ['operator_2d_3e_752',['operator->',['../d0/ddd/classUniquePtr.html#af6e485beee07fd401de29c8cdf898c69',1,'UniquePtr::operator->()'],['../d0/ddd/classUniquePtr.html#a61f986d1655444750449ed13c40c9184',1,'UniquePtr::operator->() const']]], - ['operator_2f_753',['operator/',['../da/de8/group__AH__Containers.html#gad03301bb0682ccd12d1512a637bea9f1',1,'operator/(ArraySlice< T1, N1, Reverse1, Const1 > a, T2 b): Array.hpp'],['../da/de8/group__AH__Containers.html#ga8595483cba3ca0dedcfc7d62639fdbc5',1,'operator/(const Array< T1, N1 > &a, T2 b): Array.hpp']]], - ['operator_2f_3d_754',['operator/=',['../da/de8/group__AH__Containers.html#ga493cee7d284349d7bb7930a5924b4d77',1,'operator/=(const ArraySlice< T1, N1, Reverse1, Const1 > &a, T2 b): Array.hpp'],['../da/de8/group__AH__Containers.html#gaecf9cec09cb6b1daf4899053f90dfc20',1,'operator/=(Array< T1, N1 > &a, T2 b): Array.hpp']]], - ['operator_3c_755',['operator<',['../d9/d1a/classArraySlice_1_1Iterator.html#aa8304f4090897b0262fd7f97d13b8589',1,'ArraySlice::Iterator']]], - ['operator_3c_3c_756',['operator<<',['../d5/db6/ArrayHelpers_8hpp.html#a52ef59564017ff8fb10957c26c58b0db',1,'operator<<(Print &os, const AH::ArraySlice< T, N, Reverse, Const > &a): ArrayHelpers.hpp'],['../d5/db6/ArrayHelpers_8hpp.html#a9c834cf78018a1f6badb9fded544d3e0',1,'operator<<(Print &os, const AH::Array< T, N > &a): ArrayHelpers.hpp'],['../d8/d4b/group__AH__PrintStream.html#ga64b1b8497d66d4d85cc3908cfac827b5',1,'operator<<(Print &printer, const __FlashStringHelper *s): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga5527414c024fddf1fce6190623601f80',1,'operator<<(Print &printer, const String &s): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga842b80be9bc486e915c4b8c62fa818cb',1,'operator<<(Print &printer, const char s[]): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gac9013d198ba536b4b1cd22c374f8603a',1,'operator<<(Print &printer, char c): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gadebbaba10eeb805a0b4b9c454968d1f9',1,'operator<<(Print &printer, unsigned char i): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga5116ec6b4908a3a571278c6ed32e7693',1,'operator<<(Print &printer, int i): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gac93c94db784331d028ba9f0bec58f3e7',1,'operator<<(Print &printer, unsigned int i): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gab88df549b92b950346ca4b6a97031216',1,'operator<<(Print &printer, int8_t i): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga57bfabe8286b9f6938243b52a7779e86',1,'operator<<(Print &printer, long i): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gaa6cc568dec1935b6f2514f2287335800',1,'operator<<(Print &printer, unsigned long i): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gab523a51d3230f77857445589552f459d',1,'operator<<(Print &printer, double d): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga1ffa6bad6017c44f306903ffec337575',1,'operator<<(Print &printer, const Printable &p): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gacfb70bb3046cc98c296cef97e0b38026',1,'operator<<(Print &printer, bool b): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga36c3d007838c2df83b23486ab5e2d37c',1,'operator<<(Print &printer, manipulator pf): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gab4762462994e477eaafe571de577ca24',1,'operator<<(Print &printer, Setbase f): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gaf8b0703cb4ac7a624bb5b2cdabad6190',1,'operator<<(Print &printer, Setbytesep f): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga657a5f74c130e7703f429b377324a091',1,'operator<<(Print &printer, Setprecision f): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga64b1b8497d66d4d85cc3908cfac827b5',1,'operator<<(Print &printer, const __FlashStringHelper *s): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga5527414c024fddf1fce6190623601f80',1,'operator<<(Print &printer, const String &s): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga842b80be9bc486e915c4b8c62fa818cb',1,'operator<<(Print &printer, const char s[]): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gac9013d198ba536b4b1cd22c374f8603a',1,'operator<<(Print &printer, char c): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gadebbaba10eeb805a0b4b9c454968d1f9',1,'operator<<(Print &printer, unsigned char c): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga5116ec6b4908a3a571278c6ed32e7693',1,'operator<<(Print &printer, int i): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gac93c94db784331d028ba9f0bec58f3e7',1,'operator<<(Print &printer, unsigned int i): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gab88df549b92b950346ca4b6a97031216',1,'operator<<(Print &printer, int8_t i): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga57bfabe8286b9f6938243b52a7779e86',1,'operator<<(Print &printer, long i): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gaa6cc568dec1935b6f2514f2287335800',1,'operator<<(Print &printer, unsigned long i): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gab523a51d3230f77857445589552f459d',1,'operator<<(Print &printer, double d): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga1ffa6bad6017c44f306903ffec337575',1,'operator<<(Print &printer, const Printable &p): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gacfb70bb3046cc98c296cef97e0b38026',1,'operator<<(Print &printer, bool b): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga36c3d007838c2df83b23486ab5e2d37c',1,'operator<<(Print &printer, manipulator pf): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gab4762462994e477eaafe571de577ca24',1,'operator<<(Print &printer, Setbase f): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga657a5f74c130e7703f429b377324a091',1,'operator<<(Print &printer, Setprecision f): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gaf8b0703cb4ac7a624bb5b2cdabad6190',1,'operator<<(Print &printer, Setbytesep f): PrintStream.cpp']]], - ['operator_3d_757',['operator=',['../d0/ddd/classUniquePtr.html#adb39cd5bfc69f5090ca4e2615f74c4c2',1,'UniquePtr::operator=(const UniquePtr &)=delete'],['../d0/ddd/classUniquePtr.html#aef4436bd47b1118679bf1544876cb2b9',1,'UniquePtr::operator=(UniquePtr< T > &&r)']]], - ['operator_3d_3d_758',['operator==',['../d7/d6a/structArray.html#a3236075cc6f82b08fe9e78b564e4f68f',1,'Array::operator==()'],['../d9/d1a/classArraySlice_1_1Iterator.html#aa3af200fbb7ca45095328bb326695cd2',1,'ArraySlice::Iterator::operator==()'],['../da/de8/group__AH__Containers.html#ga90ff893e214031a13911b6e4248f0ac8',1,'operator==(ArraySlice< T1, N1, Reverse1, Const1 > a, ArraySlice< T2, N2, Reverse2, Const2 > b): Array.hpp'],['../da/de8/group__AH__Containers.html#ga624f8cf5a37c4ff8ead18122e099f908',1,'operator==(const Array< T1, N1 > &a, ArraySlice< T2, N2, Reverse2, Const2 > b): Array.hpp'],['../da/de8/group__AH__Containers.html#ga9922fb6f9f759e2e0e5b4efded6061c5',1,'operator==(ArraySlice< T1, N1, Reverse1, Const1 > a, const Array< T2, N2 > &b): Array.hpp']]], - ['operator_5b_5d_759',['operator[]',['../d7/d6a/structArray.html#a0decfd96492a17ed60a8a7af5145425f',1,'Array::operator[](size_t index)'],['../d7/d6a/structArray.html#a92afcec6ef2744a6362256565ca6055e',1,'Array::operator[](size_t index) const'],['../df/de0/classArraySlice.html#aa46b7e62e49cd65cb988608dcea404b5',1,'ArraySlice::operator[]()'],['../de/d4e/classExtendedIOElement.html#a85777f53430635019f2ec07e76dbddbb',1,'ExtendedIOElement::operator[]()']]] -]; diff --git a/docs/Doxygen/search/functions_d.html b/docs/Doxygen/search/functions_d.html deleted file mode 100644 index 4375535f3..000000000 --- a/docs/Doxygen/search/functions_d.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/functions_d.js b/docs/Doxygen/search/functions_d.js deleted file mode 100644 index 9ffafe214..000000000 --- a/docs/Doxygen/search/functions_d.js +++ /dev/null @@ -1,12 +0,0 @@ -var searchData= -[ - ['pin_760',['pin',['../de/d4e/classExtendedIOElement.html#a32bdc98870117b27f2e8b1e157c79ea4',1,'ExtendedIOElement']]], - ['pinmode_761',['pinMode',['../d7/d8d/classAnalogMultiplex.html#ac242c17105b455c26871695b506226a9',1,'AnalogMultiplex::pinMode()'],['../de/d4e/classExtendedIOElement.html#ab72b3f2586f58ed91f7a2039cafdd89c',1,'ExtendedIOElement::pinMode()'],['../dc/d19/classMAX7219.html#a9c74624aa395cccd8a061d3f61fbdcf6',1,'MAX7219::pinMode()'],['../d8/db4/classShiftRegisterOutBase.html#a9c74624aa395cccd8a061d3f61fbdcf6',1,'ShiftRegisterOutBase::pinMode()'],['../d8/d3d/namespaceExtIO.html#a14f5d8ef18838978bf0c2df86f3cce25',1,'ExtIO::pinMode(pin_t pin, uint8_t mode)'],['../d8/d3d/namespaceExtIO.html#a20b75acbae873236abbd8e89079f2493',1,'ExtIO::pinMode(int pin, uint8_t mode)']]], - ['pins_762',['pins',['../d1/d13/classStaticSizeExtendedIOElement.html#a9db76a949dbd42494c35e82655f7defa',1,'StaticSizeExtendedIOElement']]], - ['positiontobits_763',['positionToBits',['../d8/d6c/classButtonMatrix.html#ad87ce10adc151fc7ed0fddd21e9563fb',1,'ButtonMatrix']]], - ['preparereading_764',['prepareReading',['../d7/d8d/classAnalogMultiplex.html#ad5798a8cedc5a75b987da0f5f0ca6076',1,'AnalogMultiplex']]], - ['previousbouncetime_765',['previousBounceTime',['../d1/d19/classButton.html#a27d7b259b85b72a4e68fb86036e65b9c',1,'Button']]], - ['printbin_766',['printBin',['../da/d69/PrintStream_8cpp.html#a83e51d5a77350e2c6e7e6e82ec11dcca',1,'PrintStream.cpp']]], - ['printhex_767',['printHex',['../d4/d26/classMAX7219SevenSegmentDisplay.html#a7f957c2eb457f489eafbf718b9999e01',1,'MAX7219SevenSegmentDisplay::printHex()'],['../da/d69/PrintStream_8cpp.html#adb5b74280fd1d090bd20805a6d0ec6f2',1,'printHex(): PrintStream.cpp']]], - ['printintegral_768',['printIntegral',['../da/d69/PrintStream_8cpp.html#a505bb61b2f822982a09821e3d52cd424',1,'PrintStream.cpp']]] -]; diff --git a/docs/Doxygen/search/functions_e.html b/docs/Doxygen/search/functions_e.html deleted file mode 100644 index 0f2054469..000000000 --- a/docs/Doxygen/search/functions_e.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/functions_e.js b/docs/Doxygen/search/functions_e.js deleted file mode 100644 index 14a271168..000000000 --- a/docs/Doxygen/search/functions_e.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['rbegin_769',['rbegin',['../dd/d16/classDoublyLinkedList.html#acea44ed500a54b2bb93e16b86e81afa8',1,'DoublyLinkedList::rbegin()'],['../dd/d16/classDoublyLinkedList.html#af086cceac199bd735c7a97c2a8d7ed21',1,'DoublyLinkedList::rbegin() const']]], - ['red_770',['red',['../d8/db4/classShiftRegisterOutBase.html#a52c9d0b21c08dd325f4669ca4540e026',1,'ShiftRegisterOutBase']]], - ['redpins_771',['redPins',['../d8/db4/classShiftRegisterOutBase.html#a2965856ddf9aafde39e8faf8f80d33d7',1,'ShiftRegisterOutBase']]], - ['release_772',['release',['../d0/ddd/classUniquePtr.html#ab9b564b271e3d80c4adc1d923471f2ae',1,'UniquePtr']]], - ['remove_773',['remove',['../dd/d16/classDoublyLinkedList.html#a52e238d5c44ec02f6ce5b981d324ed4c',1,'DoublyLinkedList::remove(Node *node)'],['../dd/d16/classDoublyLinkedList.html#aa95fc3f616b3a1b4b2c79afe23146410',1,'DoublyLinkedList::remove(Node &node)']]], - ['rend_774',['rend',['../dd/d16/classDoublyLinkedList.html#a68c599ddcbfddc65170de524ac165e44',1,'DoublyLinkedList::rend()'],['../dd/d16/classDoublyLinkedList.html#a07da1fdc890b6949f1a20a1961c6fc44',1,'DoublyLinkedList::rend() const']]], - ['reset_775',['reset',['../d0/ddd/classUniquePtr.html#abf01522ae69da4ba450bffa314bc439c',1,'UniquePtr']]], - ['reverse_5fnode_5fiterator_776',['reverse_node_iterator',['../d1/d4c/classDoublyLinkedList_1_1reverse__node__iterator.html#ae4aec55975300605e43a2d0d1833d290',1,'DoublyLinkedList::reverse_node_iterator']]] -]; diff --git a/docs/Doxygen/search/functions_f.html b/docs/Doxygen/search/functions_f.html deleted file mode 100644 index 0dc9f86c7..000000000 --- a/docs/Doxygen/search/functions_f.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/functions_f.js b/docs/Doxygen/search/functions_f.js deleted file mode 100644 index 74f725158..000000000 --- a/docs/Doxygen/search/functions_f.js +++ /dev/null @@ -1,25 +0,0 @@ -var searchData= -[ - ['safeindex_777',['safeIndex',['../db/de9/classBitArray.html#a5bbaf7ad03623987aa03ff6a303ecd3e',1,'BitArray']]], - ['send_778',['send',['../da/dd0/classMAX7219__Base.html#a3b696b4a472e9c4c8ac748231571eb89',1,'MAX7219_Base']]], - ['sendraw_779',['sendRaw',['../da/dd0/classMAX7219__Base.html#a02c392648ff5ed7a20c2d65aee768777',1,'MAX7219_Base']]], - ['set_780',['set',['../db/de9/classBitArray.html#a03f454ba9118dabc871ae3dc43c6813e',1,'BitArray::set(uint8_t bitIndex)'],['../db/de9/classBitArray.html#af46b5a583344475c83cb8f6da0d54265',1,'BitArray::set(uint8_t bitIndex, bool state)'],['../d2/d1b/classLEDs.html#af918f041a7389b7fe5322aa109977a9b',1,'LEDs::set()']]], - ['setbase_781',['setbase',['../d8/d4b/group__AH__PrintStream.html#gaee7a50f938e43275899e6a531bd69ce4',1,'setbase(uint8_t base): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gaee7a50f938e43275899e6a531bd69ce4',1,'setbase(uint8_t base): PrintStream.cpp']]], - ['setbytesep_782',['setbytesep',['../d8/d4b/group__AH__PrintStream.html#ga88e006aee1afa07615b3c00f7938d801',1,'setbytesep(char bytesep): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga88e006aee1afa07615b3c00f7938d801',1,'setbytesep(char bytesep): PrintStream.cpp']]], - ['setdebouncetime_783',['setDebounceTime',['../d1/d19/classButton.html#a4c842d71d208b8b1204fc6eb3799d4fd',1,'Button']]], - ['setintensity_784',['setIntensity',['../da/dd0/classMAX7219__Base.html#acd75d5bb7a523d22f348f4617e595d8b',1,'MAX7219_Base']]], - ['setinterval_785',['setInterval',['../dc/dea/classTimer.html#a74e6bf1a7e6209db803fe5ca30a5d4e6',1,'Timer']]], - ['setmode_786',['setMode',['../d1/d3e/classDotBarDisplayLEDs.html#a7acb8262e1b34ec0d41e6a80d3cc4e1c',1,'DotBarDisplayLEDs']]], - ['setmuxaddress_787',['setMuxAddress',['../d7/d8d/classAnalogMultiplex.html#af6fdf126c6e5ba7d52ee93e1c9724f8d',1,'AnalogMultiplex']]], - ['setprecision_788',['setprecision',['../d8/d4b/group__AH__PrintStream.html#gaf7cf4b0e6244f6fab7b1e15c2523e4e7',1,'setprecision(int n): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#gaf7cf4b0e6244f6fab7b1e15c2523e4e7',1,'setprecision(int n): PrintStream.cpp']]], - ['setprevstate_789',['setPrevState',['../d8/d6c/classButtonMatrix.html#a21e0b2a81e51dba7661ea7128d9ee78d',1,'ButtonMatrix']]], - ['setupadc_790',['setupADC',['../da/da7/classFilteredAnalog.html#a3cec68e11b712453289f34d1634f86b8',1,'FilteredAnalog']]], - ['shiftout_791',['shiftOut',['../d8/d3d/namespaceExtIO.html#a10983c6dc6781c3978dc0b91bf240fe1',1,'ExtIO::shiftOut(pin_t dataPin, pin_t clockPin, uint8_t bitOrder, uint8_t val)'],['../d8/d3d/namespaceExtIO.html#a3b005d8c772c9256ecb94e4748c8b895',1,'ExtIO::shiftOut(int dataPin, int clockPin, uint8_t bitOrder, uint8_t val)']]], - ['shiftregisterout_792',['ShiftRegisterOut',['../d1/d5c/classShiftRegisterOut.html#a6775fabb44f42b7d1c6170233c87921c',1,'ShiftRegisterOut']]], - ['shiftregisteroutbase_793',['ShiftRegisterOutBase',['../d8/db4/classShiftRegisterOutBase.html#a5ad543fc1bffd4013ad3496f2d072f5b',1,'ShiftRegisterOutBase']]], - ['showbase_794',['showbase',['../d8/d4b/group__AH__PrintStream.html#ga43ae2a66eb945be61773cbb24d9b6608',1,'showbase(Print &printer): PrintStream.cpp'],['../d8/d4b/group__AH__PrintStream.html#ga43ae2a66eb945be61773cbb24d9b6608',1,'showbase(Print &printer): PrintStream.cpp']]], - ['slice_795',['slice',['../d7/d6a/structArray.html#a6c08a0b8e3c45b3d12a27e558e4d6c50',1,'Array::slice()'],['../d7/d6a/structArray.html#aad6cd36f3664de3d3e4ede6bb480896d',1,'Array::slice() const'],['../df/de0/classArraySlice.html#aecaa84bf9fb556811f8c970d596e7b7f',1,'ArraySlice::slice()']]], - ['spishiftregisterout_796',['SPIShiftRegisterOut',['../dd/d81/classSPIShiftRegisterOut.html#a3732a80bf2f4ebf4d0ac32a9d393fb73',1,'SPIShiftRegisterOut']]], - ['stabletime_797',['stableTime',['../d1/d19/classButton.html#a1cbdae7abfef90d54889e98b100f4d53',1,'Button::stableTime(unsigned long now) const'],['../d1/d19/classButton.html#adcebb54d1e901596c7ca14ac14aac43c',1,'Button::stableTime() const']]], - ['staticsizeextendedioelement_798',['StaticSizeExtendedIOElement',['../d1/d13/classStaticSizeExtendedIOElement.html#abbbe5298f26889e0bffc0ab09e887aa4',1,'StaticSizeExtendedIOElement']]] -]; diff --git a/docs/Doxygen/search/groups_0.html b/docs/Doxygen/search/groups_0.html deleted file mode 100644 index 49412e82c..000000000 --- a/docs/Doxygen/search/groups_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/groups_0.js b/docs/Doxygen/search/groups_0.js deleted file mode 100644 index 255b02868..000000000 --- a/docs/Doxygen/search/groups_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['containers_992',['Containers',['../da/de8/group__AH__Containers.html',1,'']]] -]; diff --git a/docs/Doxygen/search/groups_1.html b/docs/Doxygen/search/groups_1.html deleted file mode 100644 index 8e3ac9614..000000000 --- a/docs/Doxygen/search/groups_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/groups_1.js b/docs/Doxygen/search/groups_1.js deleted file mode 100644 index 8787f7ca2..000000000 --- a/docs/Doxygen/search/groups_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['debug_993',['Debug',['../d4/da5/group__AH__Debug.html',1,'']]] -]; diff --git a/docs/Doxygen/search/groups_2.html b/docs/Doxygen/search/groups_2.html deleted file mode 100644 index 9c467003b..000000000 --- a/docs/Doxygen/search/groups_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/groups_2.js b/docs/Doxygen/search/groups_2.js deleted file mode 100644 index e65118fa3..000000000 --- a/docs/Doxygen/search/groups_2.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['error_994',['Error',['../d0/df7/group__AH__Error.html',1,'']]], - ['extended_20input_2foutput_995',['Extended Input/Output',['../db/dd3/group__AH__ExtIO.html',1,'']]] -]; diff --git a/docs/Doxygen/search/groups_3.html b/docs/Doxygen/search/groups_3.html deleted file mode 100644 index 8eb56c9d5..000000000 --- a/docs/Doxygen/search/groups_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/groups_3.js b/docs/Doxygen/search/groups_3.js deleted file mode 100644 index d8bff2f8a..000000000 --- a/docs/Doxygen/search/groups_3.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['filters_996',['Filters',['../dc/def/group__AH__Filters.html',1,'']]] -]; diff --git a/docs/Doxygen/search/groups_4.html b/docs/Doxygen/search/groups_4.html deleted file mode 100644 index 42b55679a..000000000 --- a/docs/Doxygen/search/groups_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/groups_4.js b/docs/Doxygen/search/groups_4.js deleted file mode 100644 index ac03046d3..000000000 --- a/docs/Doxygen/search/groups_4.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['hardware_20utilities_997',['Hardware Utilities',['../d8/d53/group__AH__HardwareUtils.html',1,'']]] -]; diff --git a/docs/Doxygen/search/groups_5.html b/docs/Doxygen/search/groups_5.html deleted file mode 100644 index 8d01ff108..000000000 --- a/docs/Doxygen/search/groups_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/groups_5.js b/docs/Doxygen/search/groups_5.js deleted file mode 100644 index 0e7d76e9c..000000000 --- a/docs/Doxygen/search/groups_5.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['math_20utilities_998',['Math Utilities',['../dd/d5e/group__AH__Math.html',1,'']]] -]; diff --git a/docs/Doxygen/search/groups_6.html b/docs/Doxygen/search/groups_6.html deleted file mode 100644 index 4989cbcb1..000000000 --- a/docs/Doxygen/search/groups_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/groups_6.js b/docs/Doxygen/search/groups_6.js deleted file mode 100644 index 3bb897109..000000000 --- a/docs/Doxygen/search/groups_6.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['printstream_999',['PrintStream',['../d8/d4b/group__AH__PrintStream.html',1,'']]] -]; diff --git a/docs/Doxygen/search/groups_7.html b/docs/Doxygen/search/groups_7.html deleted file mode 100644 index c51bb3d72..000000000 --- a/docs/Doxygen/search/groups_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/groups_7.js b/docs/Doxygen/search/groups_7.js deleted file mode 100644 index af115159f..000000000 --- a/docs/Doxygen/search/groups_7.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['settings_1000',['Settings',['../d4/dc6/group__AH__Settings.html',1,'']]] -]; diff --git a/docs/Doxygen/search/groups_8.html b/docs/Doxygen/search/groups_8.html deleted file mode 100644 index a533f144c..000000000 --- a/docs/Doxygen/search/groups_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/groups_8.js b/docs/Doxygen/search/groups_8.js deleted file mode 100644 index 87e6c89ed..000000000 --- a/docs/Doxygen/search/groups_8.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['timing_1001',['Timing',['../d1/df1/group__AH__Timing.html',1,'']]] -]; diff --git a/docs/Doxygen/search/mag_sel.png b/docs/Doxygen/search/mag_sel.png deleted file mode 100644 index 39c0ed52a..000000000 Binary files a/docs/Doxygen/search/mag_sel.png and /dev/null differ diff --git a/docs/Doxygen/search/namespaces_0.html b/docs/Doxygen/search/namespaces_0.html deleted file mode 100644 index 93c99f9db..000000000 --- a/docs/Doxygen/search/namespaces_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/namespaces_0.js b/docs/Doxygen/search/namespaces_0.js deleted file mode 100644 index b8b658281..000000000 --- a/docs/Doxygen/search/namespaces_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['detail_535',['detail',['../dd/d39/namespacedetail.html',1,'']]] -]; diff --git a/docs/Doxygen/search/namespaces_1.html b/docs/Doxygen/search/namespaces_1.html deleted file mode 100644 index fed914cd7..000000000 --- a/docs/Doxygen/search/namespaces_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/namespaces_1.js b/docs/Doxygen/search/namespaces_1.js deleted file mode 100644 index 072b8a127..000000000 --- a/docs/Doxygen/search/namespaces_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['extio_536',['ExtIO',['../d8/d3d/namespaceExtIO.html',1,'']]] -]; diff --git a/docs/Doxygen/search/nomatches.html b/docs/Doxygen/search/nomatches.html deleted file mode 100644 index 437732089..000000000 --- a/docs/Doxygen/search/nomatches.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - -
    -
    No Matches
    -
    - - diff --git a/docs/Doxygen/search/pages_0.html b/docs/Doxygen/search/pages_0.html deleted file mode 100644 index 32cbf4980..000000000 --- a/docs/Doxygen/search/pages_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/pages_0.js b/docs/Doxygen/search/pages_0.js deleted file mode 100644 index 7bc9c608b..000000000 --- a/docs/Doxygen/search/pages_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['debug_1002',['Debug',['../de/daf/md_pages_Debug.html',1,'']]] -]; diff --git a/docs/Doxygen/search/pages_1.html b/docs/Doxygen/search/pages_1.html deleted file mode 100644 index 86c9cd3a2..000000000 --- a/docs/Doxygen/search/pages_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/pages_1.js b/docs/Doxygen/search/pages_1.js deleted file mode 100644 index 8ab82d20c..000000000 --- a/docs/Doxygen/search/pages_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['todo_20list_1003',['Todo List',['../dd/da0/todo.html',1,'']]] -]; diff --git a/docs/Doxygen/search/search.css b/docs/Doxygen/search/search.css deleted file mode 100644 index 4f6fb5b63..000000000 --- a/docs/Doxygen/search/search.css +++ /dev/null @@ -1,271 +0,0 @@ -/*---------------- Search Box */ - -#FSearchBox { - float: left; -} - -#MSearchBox { - white-space : nowrap; - float: none; - margin-top: 8px; - right: 0px; - width: 170px; - height: 24px; - z-index: 102; -} - -#MSearchBox .left -{ - display:block; - position:absolute; - left:10px; - width:20px; - height:19px; - background:url('search_l.png') no-repeat; - background-position:right; -} - -#MSearchSelect { - display:block; - position:absolute; - width:20px; - height:19px; -} - -.left #MSearchSelect { - left:4px; -} - -.right #MSearchSelect { - right:5px; -} - -#MSearchField { - display:block; - position:absolute; - height:19px; - background:url('search_m.png') repeat-x; - border:none; - width:115px; - margin-left:20px; - padding-left:4px; - color: #909090; - outline: none; - font: 9pt Arial, Verdana, sans-serif; - -webkit-border-radius: 0px; -} - -#FSearchBox #MSearchField { - margin-left:15px; -} - -#MSearchBox .right { - display:block; - position:absolute; - right:10px; - top:8px; - width:20px; - height:19px; - background:url('search_r.png') no-repeat; - background-position:left; -} - -#MSearchClose { - display: none; - position: absolute; - top: 4px; - background : none; - border: none; - margin: 0px 4px 0px 0px; - padding: 0px 0px; - outline: none; -} - -.left #MSearchClose { - left: 6px; -} - -.right #MSearchClose { - right: 2px; -} - -.MSearchBoxActive #MSearchField { - color: #000000; -} - -/*---------------- Search filter selection */ - -#MSearchSelectWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #96A7C8; - background-color: #F9FAFC; - z-index: 10001; - padding-top: 4px; - padding-bottom: 4px; - -moz-border-radius: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -} - -.SelectItem { - font: 8pt Arial, Verdana, sans-serif; - padding-left: 2px; - padding-right: 12px; - border: 0px; -} - -span.SelectionMark { - margin-right: 4px; - font-family: monospace; - outline-style: none; - text-decoration: none; -} - -a.SelectItem { - display: block; - outline-style: none; - color: #000000; - text-decoration: none; - padding-left: 6px; - padding-right: 12px; -} - -a.SelectItem:focus, -a.SelectItem:active { - color: #000000; - outline-style: none; - text-decoration: none; -} - -a.SelectItem:hover { - color: #FFFFFF; - background-color: #455A84; - outline-style: none; - text-decoration: none; - cursor: pointer; - display: block; -} - -/*---------------- Search results window */ - -iframe#MSearchResults { - width: 60ex; - height: 15em; -} - -#MSearchResultsWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #000; - background-color: #EFF1F6; - z-index:10000; -} - -/* ----------------------------------- */ - - -#SRIndex { - clear:both; - padding-bottom: 15px; -} - -.SREntry { - font-size: 10pt; - padding-left: 1ex; -} - -.SRPage .SREntry { - font-size: 8pt; - padding: 1px 5px; -} - -body.SRPage { - margin: 5px 2px; -} - -.SRChildren { - padding-left: 3ex; padding-bottom: .5em -} - -.SRPage .SRChildren { - display: none; -} - -.SRSymbol { - font-weight: bold; - color: #4A618F; - font-family: Arial, Verdana, sans-serif; - text-decoration: none; - outline: none; -} - -a.SRScope { - display: block; - color: #4A618F; - font-family: Arial, Verdana, sans-serif; - text-decoration: none; - outline: none; -} - -a.SRSymbol:focus, a.SRSymbol:active, -a.SRScope:focus, a.SRScope:active { - text-decoration: underline; -} - -span.SRScope { - padding-left: 4px; -} - -.SRPage .SRStatus { - padding: 2px 5px; - font-size: 8pt; - font-style: italic; -} - -.SRResult { - display: none; -} - -DIV.searchresults { - margin-left: 10px; - margin-right: 10px; -} - -/*---------------- External search page results */ - -.searchresult { - background-color: #F1F3F7; -} - -.pages b { - color: white; - padding: 5px 5px 3px 5px; - background-image: url("../tab_a.png"); - background-repeat: repeat-x; - text-shadow: 0 1px 1px #000000; -} - -.pages { - line-height: 17px; - margin-left: 4px; - text-decoration: none; -} - -.hl { - font-weight: bold; -} - -#searchresults { - margin-bottom: 20px; -} - -.searchpages { - margin-top: 10px; -} - diff --git a/docs/Doxygen/search/search.js b/docs/Doxygen/search/search.js deleted file mode 100644 index a554ab9cb..000000000 --- a/docs/Doxygen/search/search.js +++ /dev/null @@ -1,814 +0,0 @@ -/* - @licstart The following is the entire license notice for the - JavaScript code in this file. - - Copyright (C) 1997-2017 by Dimitri van Heesch - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - @licend The above is the entire license notice - for the JavaScript code in this file - */ -function convertToId(search) -{ - var result = ''; - for (i=0;i do a search - { - this.Search(); - } - } - - this.OnSearchSelectKey = function(evt) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==40 && this.searchIndex0) // Up - { - this.searchIndex--; - this.OnSelectItem(this.searchIndex); - } - else if (e.keyCode==13 || e.keyCode==27) - { - this.OnSelectItem(this.searchIndex); - this.CloseSelectionWindow(); - this.DOMSearchField().focus(); - } - return false; - } - - // --------- Actions - - // Closes the results window. - this.CloseResultsWindow = function() - { - this.DOMPopupSearchResultsWindow().style.display = 'none'; - this.DOMSearchClose().style.display = 'none'; - this.Activate(false); - } - - this.CloseSelectionWindow = function() - { - this.DOMSearchSelectWindow().style.display = 'none'; - } - - // Performs a search. - this.Search = function() - { - this.keyTimeout = 0; - - // strip leading whitespace - var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); - - var code = searchValue.toLowerCase().charCodeAt(0); - var idxChar = searchValue.substr(0, 1).toLowerCase(); - if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair - { - idxChar = searchValue.substr(0, 2); - } - - var resultsPage; - var resultsPageWithSearch; - var hasResultsPage; - - var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); - if (idx!=-1) - { - var hexCode=idx.toString(16); - resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; - resultsPageWithSearch = resultsPage+'?'+escape(searchValue); - hasResultsPage = true; - } - else // nothing available for this search term - { - resultsPage = this.resultsPath + '/nomatches.html'; - resultsPageWithSearch = resultsPage; - hasResultsPage = false; - } - - window.frames.MSearchResults.location = resultsPageWithSearch; - var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); - - if (domPopupSearchResultsWindow.style.display!='block') - { - var domSearchBox = this.DOMSearchBox(); - this.DOMSearchClose().style.display = 'inline'; - if (this.insideFrame) - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - domPopupSearchResultsWindow.style.position = 'relative'; - domPopupSearchResultsWindow.style.display = 'block'; - var width = document.body.clientWidth - 8; // the -8 is for IE :-( - domPopupSearchResultsWindow.style.width = width + 'px'; - domPopupSearchResults.style.width = width + 'px'; - } - else - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; - var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; - domPopupSearchResultsWindow.style.display = 'block'; - left -= domPopupSearchResults.offsetWidth; - domPopupSearchResultsWindow.style.top = top + 'px'; - domPopupSearchResultsWindow.style.left = left + 'px'; - } - } - - this.lastSearchValue = searchValue; - this.lastResultsPage = resultsPage; - } - - // -------- Activation Functions - - // Activates or deactivates the search panel, resetting things to - // their default values if necessary. - this.Activate = function(isActive) - { - if (isActive || // open it - this.DOMPopupSearchResultsWindow().style.display == 'block' - ) - { - this.DOMSearchBox().className = 'MSearchBoxActive'; - - var searchField = this.DOMSearchField(); - - if (searchField.value == this.searchLabel) // clear "Search" term upon entry - { - searchField.value = ''; - this.searchActive = true; - } - } - else if (!isActive) // directly remove the panel - { - this.DOMSearchBox().className = 'MSearchBoxInactive'; - this.DOMSearchField().value = this.searchLabel; - this.searchActive = false; - this.lastSearchValue = '' - this.lastResultsPage = ''; - } - } -} - -// ----------------------------------------------------------------------- - -// The class that handles everything on the search results page. -function SearchResults(name) -{ - // The number of matches from the last run of . - this.lastMatchCount = 0; - this.lastKey = 0; - this.repeatOn = false; - - // Toggles the visibility of the passed element ID. - this.FindChildElement = function(id) - { - var parentElement = document.getElementById(id); - var element = parentElement.firstChild; - - while (element && element!=parentElement) - { - if (element.nodeName == 'DIV' && element.className == 'SRChildren') - { - return element; - } - - if (element.nodeName == 'DIV' && element.hasChildNodes()) - { - element = element.firstChild; - } - else if (element.nextSibling) - { - element = element.nextSibling; - } - else - { - do - { - element = element.parentNode; - } - while (element && element!=parentElement && !element.nextSibling); - - if (element && element!=parentElement) - { - element = element.nextSibling; - } - } - } - } - - this.Toggle = function(id) - { - var element = this.FindChildElement(id); - if (element) - { - if (element.style.display == 'block') - { - element.style.display = 'none'; - } - else - { - element.style.display = 'block'; - } - } - } - - // Searches for the passed string. If there is no parameter, - // it takes it from the URL query. - // - // Always returns true, since other documents may try to call it - // and that may or may not be possible. - this.Search = function(search) - { - if (!search) // get search word from URL - { - search = window.location.search; - search = search.substring(1); // Remove the leading '?' - search = unescape(search); - } - - search = search.replace(/^ +/, ""); // strip leading spaces - search = search.replace(/ +$/, ""); // strip trailing spaces - search = search.toLowerCase(); - search = convertToId(search); - - var resultRows = document.getElementsByTagName("div"); - var matches = 0; - - var i = 0; - while (i < resultRows.length) - { - var row = resultRows.item(i); - if (row.className == "SRResult") - { - var rowMatchName = row.id.toLowerCase(); - rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' - - if (search.length<=rowMatchName.length && - rowMatchName.substr(0, search.length)==search) - { - row.style.display = 'block'; - matches++; - } - else - { - row.style.display = 'none'; - } - } - i++; - } - document.getElementById("Searching").style.display='none'; - if (matches == 0) // no results - { - document.getElementById("NoMatches").style.display='block'; - } - else // at least one result - { - document.getElementById("NoMatches").style.display='none'; - } - this.lastMatchCount = matches; - return true; - } - - // return the first item with index index or higher that is visible - this.NavNext = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index++; - } - return focusItem; - } - - this.NavPrev = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index--; - } - return focusItem; - } - - this.ProcessKeys = function(e) - { - if (e.type == "keydown") - { - this.repeatOn = false; - this.lastKey = e.keyCode; - } - else if (e.type == "keypress") - { - if (!this.repeatOn) - { - if (this.lastKey) this.repeatOn = true; - return false; // ignore first keypress after keydown - } - } - else if (e.type == "keyup") - { - this.lastKey = 0; - this.repeatOn = false; - } - return this.lastKey!=0; - } - - this.Nav = function(evt,itemIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - var newIndex = itemIndex-1; - var focusItem = this.NavPrev(newIndex); - if (focusItem) - { - var child = this.FindChildElement(focusItem.parentNode.parentNode.id); - if (child && child.style.display == 'block') // children visible - { - var n=0; - var tmpElem; - while (1) // search for last child - { - tmpElem = document.getElementById('Item'+newIndex+'_c'+n); - if (tmpElem) - { - focusItem = tmpElem; - } - else // found it! - { - break; - } - n++; - } - } - } - if (focusItem) - { - focusItem.focus(); - } - else // return focus to search field - { - parent.document.getElementById("MSearchField").focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = itemIndex+1; - var focusItem; - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem && elem.style.display == 'block') // children visible - { - focusItem = document.getElementById('Item'+itemIndex+'_c0'); - } - if (!focusItem) focusItem = this.NavNext(newIndex); - if (focusItem) focusItem.focus(); - } - else if (this.lastKey==39) // Right - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'block'; - } - else if (this.lastKey==37) // Left - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'none'; - } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; - } - - this.NavChild = function(evt,itemIndex,childIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - if (childIndex>0) - { - var newIndex = childIndex-1; - document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); - } - else // already at first child, jump to parent - { - document.getElementById('Item'+itemIndex).focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = childIndex+1; - var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); - if (!elem) // last child, jump to parent next parent - { - elem = this.NavNext(itemIndex+1); - } - if (elem) - { - elem.focus(); - } - } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; - } -} - -function setKeyActions(elem,action) -{ - elem.setAttribute('onkeydown',action); - elem.setAttribute('onkeypress',action); - elem.setAttribute('onkeyup',action); -} - -function setClassAttr(elem,attr) -{ - elem.setAttribute('class',attr); - elem.setAttribute('className',attr); -} - -function createResults() -{ - var results = document.getElementById("SRResults"); - for (var e=0; e - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/typedefs_0.js b/docs/Doxygen/search/typedefs_0.js deleted file mode 100644 index 423c554f3..000000000 --- a/docs/Doxygen/search/typedefs_0.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['analog_5ffilter_5ftype_914',['ANALOG_FILTER_TYPE',['../db/d02/Settings_8hpp.html#ae42145751d1331f921750738659d5d6b',1,'Settings.hpp']]], - ['analog_5ft_915',['analog_t',['../d4/d35/Hardware-Types_8hpp.html#a30fffbcff933a72fdd7bfc161d386bef',1,'Hardware-Types.hpp']]], - ['array2d_916',['Array2D',['../da/de8/group__AH__Containers.html#ga65347c7f97dc7e8e602fb77ac735f585',1,'Array.hpp']]] -]; diff --git a/docs/Doxygen/search/typedefs_1.html b/docs/Doxygen/search/typedefs_1.html deleted file mode 100644 index 0cfdad74f..000000000 --- a/docs/Doxygen/search/typedefs_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/typedefs_1.js b/docs/Doxygen/search/typedefs_1.js deleted file mode 100644 index 7003a8c6a..000000000 --- a/docs/Doxygen/search/typedefs_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['bitorder_5ft_917',['BitOrder_t',['../d1/d5c/classShiftRegisterOut.html#a9c89f2b0981844ec80c88f4696425867',1,'ShiftRegisterOut::BitOrder_t()'],['../d8/db4/classShiftRegisterOutBase.html#a43d3c7f80d4a67d87c13e7222466fe28',1,'ShiftRegisterOutBase::BitOrder_t()'],['../dd/d81/classSPIShiftRegisterOut.html#a9c89f2b0981844ec80c88f4696425867',1,'SPIShiftRegisterOut::BitOrder_t()']]] -]; diff --git a/docs/Doxygen/search/typedefs_2.html b/docs/Doxygen/search/typedefs_2.html deleted file mode 100644 index d633f0cef..000000000 --- a/docs/Doxygen/search/typedefs_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/typedefs_2.js b/docs/Doxygen/search/typedefs_2.js deleted file mode 100644 index c55f8b5ad..000000000 --- a/docs/Doxygen/search/typedefs_2.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['cd74hc4051_918',['CD74HC4051',['../db/dd3/group__AH__ExtIO.html#ga3ab4921db62494df27df05daf4b11e70',1,'AnalogMultiplex.hpp']]], - ['cd74hc4067_919',['CD74HC4067',['../db/dd3/group__AH__ExtIO.html#ga76abe1cbb481b44875fb5e08da186ad0',1,'AnalogMultiplex.hpp']]], - ['const_5fiterator_920',['const_iterator',['../dd/d16/classDoublyLinkedList.html#a63727293e4b2d482e37cded1a5c30483',1,'DoublyLinkedList']]], - ['const_5freverse_5fiterator_921',['const_reverse_iterator',['../dd/d16/classDoublyLinkedList.html#a858c22bc6707c956dff7ed4838eb6450',1,'DoublyLinkedList']]] -]; diff --git a/docs/Doxygen/search/typedefs_3.html b/docs/Doxygen/search/typedefs_3.html deleted file mode 100644 index 6a6421d3d..000000000 --- a/docs/Doxygen/search/typedefs_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/typedefs_3.js b/docs/Doxygen/search/typedefs_3.js deleted file mode 100644 index 972bb128a..000000000 --- a/docs/Doxygen/search/typedefs_3.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['difference_5ftype_922',['difference_type',['../d9/d1a/classArraySlice_1_1Iterator.html#ace405568d0b2f3fad4990044252c7732',1,'ArraySlice::Iterator::difference_type()'],['../dd/d02/classDoublyLinkedList_1_1node__iterator.html#ac153ebd21c9ff887d3db629171e6bf80',1,'DoublyLinkedList::node_iterator::difference_type()'],['../d1/d4c/classDoublyLinkedList_1_1reverse__node__iterator.html#ac153ebd21c9ff887d3db629171e6bf80',1,'DoublyLinkedList::reverse_node_iterator::difference_type()']]] -]; diff --git a/docs/Doxygen/search/typedefs_4.html b/docs/Doxygen/search/typedefs_4.html deleted file mode 100644 index 517e61d34..000000000 --- a/docs/Doxygen/search/typedefs_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/typedefs_4.js b/docs/Doxygen/search/typedefs_4.js deleted file mode 100644 index 39f91edc7..000000000 --- a/docs/Doxygen/search/typedefs_4.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['elementptrtype_923',['ElementPtrType',['../df/de0/classArraySlice.html#a7887797978015583bedc5d864f3d2889',1,'ArraySlice']]], - ['elementreftype_924',['ElementRefType',['../df/de0/classArraySlice.html#a5037ddd33d843c28c512f86bb14a562d',1,'ArraySlice']]] -]; diff --git a/docs/Doxygen/search/typedefs_5.html b/docs/Doxygen/search/typedefs_5.html deleted file mode 100644 index ea1e3be76..000000000 --- a/docs/Doxygen/search/typedefs_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/typedefs_5.js b/docs/Doxygen/search/typedefs_5.js deleted file mode 100644 index 250c98af9..000000000 --- a/docs/Doxygen/search/typedefs_5.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['iterator_925',['iterator',['../dd/d16/classDoublyLinkedList.html#a802b4d4a10fae183884ea91fca4005a1',1,'DoublyLinkedList']]], - ['iterator_5fcategory_926',['iterator_category',['../d9/d1a/classArraySlice_1_1Iterator.html#a8806ca091813ced0b0658fedaa448357',1,'ArraySlice::Iterator::iterator_category()'],['../dd/d02/classDoublyLinkedList_1_1node__iterator.html#a13fe24ca0865b19fbff05ff095c4ffea',1,'DoublyLinkedList::node_iterator::iterator_category()'],['../d1/d4c/classDoublyLinkedList_1_1reverse__node__iterator.html#a13fe24ca0865b19fbff05ff095c4ffea',1,'DoublyLinkedList::reverse_node_iterator::iterator_category()']]] -]; diff --git a/docs/Doxygen/search/typedefs_6.html b/docs/Doxygen/search/typedefs_6.html deleted file mode 100644 index ad90ec22e..000000000 --- a/docs/Doxygen/search/typedefs_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/typedefs_6.js b/docs/Doxygen/search/typedefs_6.js deleted file mode 100644 index 86ee0830e..000000000 --- a/docs/Doxygen/search/typedefs_6.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['manipulator_927',['manipulator',['../d8/d4b/group__AH__PrintStream.html#gab82cf12919f956954b9bba423b696205',1,'PrintStream.hpp']]], - ['mappingfunction_928',['MappingFunction',['../da/da7/classFilteredAnalog.html#acebdd7d5e342b3080a731e8dd0a0738f',1,'FilteredAnalog']]] -]; diff --git a/docs/Doxygen/search/typedefs_7.html b/docs/Doxygen/search/typedefs_7.html deleted file mode 100644 index ea605fab9..000000000 --- a/docs/Doxygen/search/typedefs_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/typedefs_7.js b/docs/Doxygen/search/typedefs_7.js deleted file mode 100644 index 6d2eccbdd..000000000 --- a/docs/Doxygen/search/typedefs_7.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['pin_5ft_929',['pin_t',['../d4/d35/Hardware-Types_8hpp.html#ae9cbfef0ba7a84ef222eff1fc509f88b',1,'Hardware-Types.hpp']]], - ['pinlist_930',['PinList',['../d4/d35/Hardware-Types_8hpp.html#a2cad4766e2eb5bb24649f97d53635b73',1,'Hardware-Types.hpp']]], - ['pointer_931',['pointer',['../d9/d1a/classArraySlice_1_1Iterator.html#a10ebe0a2b5f7dceda6f042beb2ef2198',1,'ArraySlice::Iterator::pointer()'],['../dd/d02/classDoublyLinkedList_1_1node__iterator.html#a0b42c2b115077f26456b0086207dc114',1,'DoublyLinkedList::node_iterator::pointer()'],['../d1/d4c/classDoublyLinkedList_1_1reverse__node__iterator.html#a0b42c2b115077f26456b0086207dc114',1,'DoublyLinkedList::reverse_node_iterator::pointer()']]] -]; diff --git a/docs/Doxygen/search/typedefs_8.html b/docs/Doxygen/search/typedefs_8.html deleted file mode 100644 index afb18b101..000000000 --- a/docs/Doxygen/search/typedefs_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/typedefs_8.js b/docs/Doxygen/search/typedefs_8.js deleted file mode 100644 index e8f0ca1b6..000000000 --- a/docs/Doxygen/search/typedefs_8.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['reference_932',['reference',['../d9/d1a/classArraySlice_1_1Iterator.html#a0a0699997a16973611a3d8c255118019',1,'ArraySlice::Iterator::reference()'],['../dd/d02/classDoublyLinkedList_1_1node__iterator.html#a1cb518c14833569c92498bb062f6206f',1,'DoublyLinkedList::node_iterator::reference()'],['../d1/d4c/classDoublyLinkedList_1_1reverse__node__iterator.html#a1cb518c14833569c92498bb062f6206f',1,'DoublyLinkedList::reverse_node_iterator::reference()']]], - ['reverse_5fiterator_933',['reverse_iterator',['../dd/d16/classDoublyLinkedList.html#a29f20337dc58a91f18fc6b966e5ee8c0',1,'DoublyLinkedList']]] -]; diff --git a/docs/Doxygen/search/typedefs_9.html b/docs/Doxygen/search/typedefs_9.html deleted file mode 100644 index cb4a0e549..000000000 --- a/docs/Doxygen/search/typedefs_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/typedefs_9.js b/docs/Doxygen/search/typedefs_9.js deleted file mode 100644 index 7d290116b..000000000 --- a/docs/Doxygen/search/typedefs_9.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['timefunction_934',['timefunction',['../d1/dd0/MillisMicrosTimer_8hpp.html#a4086ab91003e2f23ab3d8d590d6f2fe3',1,'MillisMicrosTimer.hpp']]], - ['type_935',['type',['../d7/d6a/structArray.html#a834c467da58ea1d81821952d3c473b64',1,'Array']]] -]; diff --git a/docs/Doxygen/search/typedefs_a.html b/docs/Doxygen/search/typedefs_a.html deleted file mode 100644 index d17d6cc2b..000000000 --- a/docs/Doxygen/search/typedefs_a.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/typedefs_a.js b/docs/Doxygen/search/typedefs_a.js deleted file mode 100644 index 1a24607c5..000000000 --- a/docs/Doxygen/search/typedefs_a.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['value_5ftype_936',['value_type',['../d9/d1a/classArraySlice_1_1Iterator.html#afb9ded5f49336ae503bb9f2035ea902b',1,'ArraySlice::Iterator::value_type()'],['../dd/d02/classDoublyLinkedList_1_1node__iterator.html#ac5d0adbe71d37d9dad7e72fd26b163a6',1,'DoublyLinkedList::node_iterator::value_type()'],['../d1/d4c/classDoublyLinkedList_1_1reverse__node__iterator.html#ac5d0adbe71d37d9dad7e72fd26b163a6',1,'DoublyLinkedList::reverse_node_iterator::value_type()']]] -]; diff --git a/docs/Doxygen/search/variables_0.html b/docs/Doxygen/search/variables_0.html deleted file mode 100644 index a2a3ae625..000000000 --- a/docs/Doxygen/search/variables_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/variables_0.js b/docs/Doxygen/search/variables_0.js deleted file mode 100644 index fd6df05ec..000000000 --- a/docs/Doxygen/search/variables_0.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['adc_5fbits_812',['ADC_BITS',['../db/d02/Settings_8hpp.html#a8db0fcdeeb644f813c9b29211ce0a1ae',1,'Settings.hpp']]], - ['addresspins_813',['addressPins',['../d7/d8d/classAnalogMultiplex.html#a1944405e0abd4d8f5b8bc34c392d2338',1,'AnalogMultiplex']]], - ['alpha_814',['alpha',['../db/d6f/classEMA__f.html#ab1551d8043c2aa4410fb7dbb1fe3be7b',1,'EMA_f']]], - ['alphachars_815',['AlphaChars',['../d5/d0c/MAX7219SevenSegmentDisplay_8hpp.html#a421add2f41548ad816d5d9bb028cfa6f',1,'MAX7219SevenSegmentDisplay.hpp']]], - ['analog_5ffilter_5fshift_5ffactor_816',['ANALOG_FILTER_SHIFT_FACTOR',['../db/d02/Settings_8hpp.html#a74cef1adb51d95add8b2bea344b6c755',1,'Settings.hpp']]], - ['analogpin_817',['analogPin',['../d7/d8d/classAnalogMultiplex.html#a66f65580427e2512fca5f49b4742f5d8',1,'AnalogMultiplex::analogPin()'],['../da/da7/classFilteredAnalog.html#a66f65580427e2512fca5f49b4742f5d8',1,'FilteredAnalog::analogPin()']]], - ['array_818',['array',['../df/de0/classArraySlice.html#a42d993c77e4cebbfa52f41b61f78185e',1,'ArraySlice']]] -]; diff --git a/docs/Doxygen/search/variables_1.html b/docs/Doxygen/search/variables_1.html deleted file mode 100644 index b243c4237..000000000 --- a/docs/Doxygen/search/variables_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/variables_1.js b/docs/Doxygen/search/variables_1.js deleted file mode 100644 index 1bbba1257..000000000 --- a/docs/Doxygen/search/variables_1.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['bitorder_819',['bitOrder',['../d8/db4/classShiftRegisterOutBase.html#a4e460a68da9f4a4878ea5bf65fdcaedc',1,'ShiftRegisterOutBase']]], - ['bluebit_820',['blueBit',['../d5/d45/structShiftRegisterOutRGB.html#acfafcd5d8289f6ffc9ad09cb6ad5aadc',1,'ShiftRegisterOutRGB']]], - ['boolalphaprintstream_821',['boolalphaPrintStream',['../da/d69/PrintStream_8cpp.html#ac031ea43b717d6e00396a00c3caef6f2',1,'PrintStream.cpp']]], - ['buffer_822',['buffer',['../db/de9/classBitArray.html#a6a292007425eb6c5d4eb7d5eb2d1e0ed',1,'BitArray::buffer()'],['../dc/d19/classMAX7219.html#aa34c8c6d924621c8ccc675ae399b2733',1,'MAX7219::buffer()'],['../d8/db4/classShiftRegisterOutBase.html#a52f28b99ebaf530ae5b8219ccc6f4f81',1,'ShiftRegisterOutBase::buffer()']]], - ['bufferlength_823',['bufferLength',['../db/de9/classBitArray.html#a9d55ac509c001d869fee5a71a4302a0e',1,'BitArray']]], - ['button_824',['button',['../df/d38/classIncrementButton.html#aa56e877ca6a7524cf1e891c7435c3ace',1,'IncrementButton']]], - ['button_5fdebounce_5ftime_825',['BUTTON_DEBOUNCE_TIME',['../db/d02/Settings_8hpp.html#a838b0bb32d176701ae1362e3188c578d',1,'Settings.hpp']]], - ['byteseparatorprintstream_826',['byteSeparatorPrintStream',['../da/d69/PrintStream_8cpp.html#a643fcf8db7c14c0dc68d6ae017366506',1,'PrintStream.cpp']]] -]; diff --git a/docs/Doxygen/search/variables_10.html b/docs/Doxygen/search/variables_10.html deleted file mode 100644 index 65dd8af3d..000000000 --- a/docs/Doxygen/search/variables_10.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/variables_10.js b/docs/Doxygen/search/variables_10.js deleted file mode 100644 index bc91b5f5c..000000000 --- a/docs/Doxygen/search/variables_10.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['tmp_5fhigh_907',['tmp_HIGH',['../dd/d39/namespacedetail.html#a17ae6be1564c38e079bb4a295b34bc47',1,'detail']]], - ['tmp_5finput_908',['tmp_INPUT',['../dd/d39/namespacedetail.html#a648e0ebad7ea7f24f5101e57974018a7',1,'detail']]], - ['tmp_5finput_5fpullup_909',['tmp_INPUT_PULLUP',['../dd/d39/namespacedetail.html#ad5527335766c12876614ea8b2e2a49ab',1,'detail']]], - ['tmp_5flow_910',['tmp_LOW',['../dd/d39/namespacedetail.html#ad8bcc703d4f97453fb09f43e41be9c08',1,'detail']]], - ['tmp_5foutput_911',['tmp_OUTPUT',['../dd/d39/namespacedetail.html#acf75d554e4ca4a4379dcd5c93b3743d5',1,'detail']]] -]; diff --git a/docs/Doxygen/search/variables_11.html b/docs/Doxygen/search/variables_11.html deleted file mode 100644 index f95ad58aa..000000000 --- a/docs/Doxygen/search/variables_11.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/variables_11.js b/docs/Doxygen/search/variables_11.js deleted file mode 100644 index e44fbfed4..000000000 --- a/docs/Doxygen/search/variables_11.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['updatables_912',['updatables',['../d5/de0/classUpdatable.html#a3e1d4cf193404475766f612eeab8f087',1,'Updatable']]] -]; diff --git a/docs/Doxygen/search/variables_12.html b/docs/Doxygen/search/variables_12.html deleted file mode 100644 index aa74a8d61..000000000 --- a/docs/Doxygen/search/variables_12.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/variables_12.js b/docs/Doxygen/search/variables_12.js deleted file mode 100644 index c79e59f6f..000000000 --- a/docs/Doxygen/search/variables_12.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['value_913',['value',['../d5/d4a/classdetail_1_1Incrementor.html#a4fc7f59e3113e19697159919a5aad095',1,'detail::Incrementor']]] -]; diff --git a/docs/Doxygen/search/variables_2.html b/docs/Doxygen/search/variables_2.html deleted file mode 100644 index 647df20ff..000000000 --- a/docs/Doxygen/search/variables_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/variables_2.js b/docs/Doxygen/search/variables_2.js deleted file mode 100644 index 6e58a876b..000000000 --- a/docs/Doxygen/search/variables_2.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['caseprintstream_827',['casePrintStream',['../da/d69/PrintStream_8cpp.html#a0ea54e5be4d1c162631f25acd0d1d6c9',1,'PrintStream.cpp']]], - ['clockpin_828',['clockPin',['../d1/d5c/classShiftRegisterOut.html#a3ca3c75ca8158615f33839b0e154c15d',1,'ShiftRegisterOut']]], - ['colpins_829',['colPins',['../d8/d6c/classButtonMatrix.html#a9ac5156794b322950acdc745de570aac',1,'ButtonMatrix']]] -]; diff --git a/docs/Doxygen/search/variables_3.html b/docs/Doxygen/search/variables_3.html deleted file mode 100644 index 9dc9b89ed..000000000 --- a/docs/Doxygen/search/variables_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/variables_3.js b/docs/Doxygen/search/variables_3.js deleted file mode 100644 index 138de6f6c..000000000 --- a/docs/Doxygen/search/variables_3.js +++ /dev/null @@ -1,12 +0,0 @@ -var searchData= -[ - ['data_830',['data',['../d7/d6a/structArray.html#a6896f24464ed35248eb0bc5cf32e8616',1,'Array']]], - ['datapin_831',['dataPin',['../d1/d5c/classShiftRegisterOut.html#a5a57853673d4bc52ccaa55936237fa1c',1,'ShiftRegisterOut']]], - ['debouncedstate_832',['debouncedState',['../d1/d19/classButton.html#ae33604ae5a1dfe1ed92f33733414cb45',1,'Button']]], - ['debouncetime_833',['debounceTime',['../d1/d19/classButton.html#afff06ce15647fe4cfea1c11dcc235858',1,'Button']]], - ['decodemode_834',['DECODEMODE',['../da/dd0/classMAX7219__Base.html#a904324e8c5b7efbdc44f1d860ec06508',1,'MAX7219_Base']]], - ['decrementbutton_835',['decrementButton',['../d5/d20/classIncrementDecrementButtons.html#ae8d30a93ba09e5497dd479a0a9022c31',1,'IncrementDecrementButtons']]], - ['defaultbaudrate_836',['defaultBaudRate',['../db/d02/Settings_8hpp.html#ac1052a84bab455c13aac40a30d8cb4ba',1,'Settings.hpp']]], - ['dirty_837',['dirty',['../d8/db4/classShiftRegisterOutBase.html#ad25edacba00e4d0666a9959053b7cc10',1,'ShiftRegisterOutBase']]], - ['displaytest_838',['DISPLAYTEST',['../da/dd0/classMAX7219__Base.html#a8c8d383fac4673529d409feefb108e13',1,'MAX7219_Base']]] -]; diff --git a/docs/Doxygen/search/variables_4.html b/docs/Doxygen/search/variables_4.html deleted file mode 100644 index 78cc2c709..000000000 --- a/docs/Doxygen/search/variables_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/variables_4.js b/docs/Doxygen/search/variables_4.js deleted file mode 100644 index c2fa3eb41..000000000 --- a/docs/Doxygen/search/variables_4.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['elements_839',['elements',['../de/d4e/classExtendedIOElement.html#a876a3612572c06ebe4a697ed273ea7f1',1,'ExtendedIOElement']]], - ['enablepin_840',['enablePin',['../d7/d8d/classAnalogMultiplex.html#a559afa2d89a827ab58baad7f444ff69d',1,'AnalogMultiplex']]], - ['end_841',['end',['../de/d4e/classExtendedIOElement.html#a59a46e64fcf3bddba754c70b4cba8ae9',1,'ExtendedIOElement']]] -]; diff --git a/docs/Doxygen/search/variables_5.html b/docs/Doxygen/search/variables_5.html deleted file mode 100644 index dfa355882..000000000 --- a/docs/Doxygen/search/variables_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/variables_5.js b/docs/Doxygen/search/variables_5.js deleted file mode 100644 index 970cae881..000000000 --- a/docs/Doxygen/search/variables_5.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['filter_842',['filter',['../da/da7/classFilteredAnalog.html#ae8486f5860ef80680c3f712628837609',1,'FilteredAnalog']]], - ['filtered_843',['filtered',['../d7/d40/classEMA.html#a6b00f9938ee2613e755889de3e734dd4',1,'EMA::filtered()'],['../db/d6f/classEMA__f.html#af2eed96d0424911b730d85f8304c47a2',1,'EMA_f::filtered()']]], - ['filtered_5finput_5fupdate_5finterval_844',['FILTERED_INPUT_UPDATE_INTERVAL',['../db/d02/Settings_8hpp.html#a888fcdd0f365245e3e32bb1144eb5fc8',1,'Settings.hpp']]], - ['first_845',['first',['../dd/d16/classDoublyLinkedList.html#a2addc5f5fab651284199528b83cd61c8',1,'DoublyLinkedList']]], - ['fixedpointahalf_846',['fixedPointAHalf',['../d7/d40/classEMA.html#ad72e2362d836c7e013423cc3489635a8',1,'EMA']]], - ['formatprintstream_847',['formatPrintStream',['../da/d69/PrintStream_8cpp.html#aa9cd8589bac070bb2ab968b4f9c15231',1,'PrintStream.cpp']]] -]; diff --git a/docs/Doxygen/search/variables_6.html b/docs/Doxygen/search/variables_6.html deleted file mode 100644 index cd462bde7..000000000 --- a/docs/Doxygen/search/variables_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/variables_6.js b/docs/Doxygen/search/variables_6.js deleted file mode 100644 index 7edc9cc9c..000000000 --- a/docs/Doxygen/search/variables_6.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['greenbit_848',['greenBit',['../d5/d45/structShiftRegisterOutRGB.html#a923cc98d65a21c97f8f9e31a36677b14',1,'ShiftRegisterOutRGB']]] -]; diff --git a/docs/Doxygen/search/variables_7.html b/docs/Doxygen/search/variables_7.html deleted file mode 100644 index 47994b80f..000000000 --- a/docs/Doxygen/search/variables_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/variables_7.js b/docs/Doxygen/search/variables_7.js deleted file mode 100644 index 854335cd8..000000000 --- a/docs/Doxygen/search/variables_7.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['hertz_849',['hertz',['../d7/d90/classFrequency.html#a7fe9942aae73998b9b5b65367d16f472',1,'Frequency']]], - ['high_850',['HIGH',['../dd/ddf/ExtendedInputOutput_8hpp.html#acecd29798f132930ae1bfbe527f41e8d',1,'ExtendedInputOutput.hpp']]], - ['hysteresis_851',['hysteresis',['../da/da7/classFilteredAnalog.html#ac59ad53f58c22dda10715b40fcf441dc',1,'FilteredAnalog']]] -]; diff --git a/docs/Doxygen/search/variables_8.html b/docs/Doxygen/search/variables_8.html deleted file mode 100644 index a50ee8f56..000000000 --- a/docs/Doxygen/search/variables_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/variables_8.js b/docs/Doxygen/search/variables_8.js deleted file mode 100644 index ce6b6a8d2..000000000 --- a/docs/Doxygen/search/variables_8.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['increasebitdepthimpl_852',['increaseBitDepthImpl',['../d5/dee/IncreaseBitDepth_8hpp.html#a6b57289740210e994ef084e3b620e902',1,'IncreaseBitDepth.hpp']]], - ['increment_853',['increment',['../d5/d4a/classdetail_1_1Incrementor.html#aae161df163b048a3dd86d09214e0c3b9',1,'detail::Incrementor']]], - ['incrementbutton_854',['incrementButton',['../d5/d20/classIncrementDecrementButtons.html#a26ff8759725d759a360f4ed6e81d1fe4',1,'IncrementDecrementButtons']]], - ['input_855',['INPUT',['../dd/ddf/ExtendedInputOutput_8hpp.html#a1c022e5fb9141ce12c7c22a000ce732a',1,'ExtendedInputOutput.hpp']]], - ['input_5fpullup_856',['INPUT_PULLUP',['../dd/ddf/ExtendedInputOutput_8hpp.html#a7821f03e2c35ca4bf4a867e64994bcfd',1,'ExtendedInputOutput.hpp']]], - ['intensity_857',['INTENSITY',['../da/dd0/classMAX7219__Base.html#a1c8ebf3bac4b04528d30dc17eb0deb64',1,'MAX7219_Base']]], - ['interval_858',['interval',['../dc/dea/classTimer.html#aaaceac04637cd33a7f3fffdd1711e6c5',1,'Timer']]], - ['invertstate_859',['invertState',['../d1/d19/classButton.html#aa96c6f436045d358158cde8fac7cae44',1,'Button']]] -]; diff --git a/docs/Doxygen/search/variables_9.html b/docs/Doxygen/search/variables_9.html deleted file mode 100644 index 82db8aedc..000000000 --- a/docs/Doxygen/search/variables_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/variables_9.js b/docs/Doxygen/search/variables_9.js deleted file mode 100644 index 62d4c8de2..000000000 --- a/docs/Doxygen/search/variables_9.js +++ /dev/null @@ -1,14 +0,0 @@ -var searchData= -[ - ['last_860',['last',['../dd/d16/classDoublyLinkedList.html#a16ac028724e4fd7016faa38928658477',1,'DoublyLinkedList']]], - ['latchpin_861',['latchPin',['../d8/db4/classShiftRegisterOutBase.html#a7d9f8a9622e636bd5a43af7babab0dee',1,'ShiftRegisterOutBase']]], - ['leadingzerosprintstream_862',['leadingZerosPrintStream',['../da/d69/PrintStream_8cpp.html#ac1bd36282d0562d941f2512da9243042',1,'PrintStream.cpp']]], - ['ledpins_863',['ledPins',['../d2/d1b/classLEDs.html#a80a3e573dcc046bdb0c21a28313570f9',1,'LEDs']]], - ['length_864',['length',['../d7/d6a/structArray.html#a9d8e033f911e88ba181e3cfec4353a3d',1,'Array::length()'],['../de/d4e/classExtendedIOElement.html#a353dd034429707c99343a494aac0f31d',1,'ExtendedIOElement::length()']]], - ['loadpin_865',['loadPin',['../da/dd0/classMAX7219__Base.html#a4b58daddccf28a52ecd600e8f6a56020',1,'MAX7219_Base']]], - ['long_5fpress_5fdelay_866',['LONG_PRESS_DELAY',['../db/d02/Settings_8hpp.html#ae45a88a68c9a82d85febda88f7ecf96d',1,'Settings.hpp']]], - ['long_5fpress_5frepeat_5fdelay_867',['LONG_PRESS_REPEAT_DELAY',['../db/d02/Settings_8hpp.html#a4c6482347c7ca829da34491dfb905773',1,'Settings.hpp']]], - ['longpressrepeat_868',['longPressRepeat',['../df/d38/classIncrementButton.html#a7d53db4cd24ecfba6d42ca4fddbad3d3',1,'IncrementButton::longPressRepeat()'],['../d5/d20/classIncrementDecrementButtons.html#a7d53db4cd24ecfba6d42ca4fddbad3d3',1,'IncrementDecrementButtons::longPressRepeat()']]], - ['longpressstate_869',['longPressState',['../df/d38/classIncrementButton.html#aa8172c07cea08f16277b0659c782357b',1,'IncrementButton::longPressState()'],['../d5/d20/classIncrementDecrementButtons.html#a4cf9424d6c2340ca6df61773cf4d2428',1,'IncrementDecrementButtons::longPressState()']]], - ['low_870',['LOW',['../dd/ddf/ExtendedInputOutput_8hpp.html#a948017cfe0ff222ceee310d1db10173d',1,'ExtendedInputOutput.hpp']]] -]; diff --git a/docs/Doxygen/search/variables_a.html b/docs/Doxygen/search/variables_a.html deleted file mode 100644 index fd8f0d751..000000000 --- a/docs/Doxygen/search/variables_a.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/variables_a.js b/docs/Doxygen/search/variables_a.js deleted file mode 100644 index 5bf91e225..000000000 --- a/docs/Doxygen/search/variables_a.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['m_5fbase_871',['M_base',['../d3/d55/structSetbase.html#afb0976de86139aa215d620374e260b65',1,'Setbase']]], - ['m_5fbytesep_872',['M_bytesep',['../d5/d93/structSetbytesep.html#a4317dddd006fb401e44c3d68cf4a7443',1,'Setbytesep']]], - ['m_5fn_873',['M_n',['../d7/d70/structSetprecision.html#aa99b9e058a9d384b3496a9c30c0c28f5',1,'Setprecision']]], - ['mapfn_874',['mapFn',['../da/da7/classFilteredAnalog.html#ac0b34350a8c36183ef0611f470c594c0',1,'FilteredAnalog']]], - ['margin_875',['margin',['../d2/dcb/classHysteresis.html#a60f481ee556174be7b3acfb02a6e53ca',1,'Hysteresis']]], - ['max_5fin_876',['max_in',['../d2/dcb/classHysteresis.html#a32964102524c8f7f878be5daa02e1c47',1,'Hysteresis']]], - ['max_5fout_877',['max_out',['../d2/dcb/classHysteresis.html#a73cb90fdff9327a69c32e9e9c8e39d2a',1,'Hysteresis']]], - ['mode_878',['mode',['../d1/d3e/classDotBarDisplayLEDs.html#a5238ef04e9caeb86f50f51d775e16127',1,'DotBarDisplayLEDs']]], - ['mux_5fdisabled_879',['MUX_DISABLED',['../d7/d8d/classAnalogMultiplex.html#a5c8583111be1c1c3fbb0e64eaf246bd0',1,'AnalogMultiplex']]], - ['mux_5fenabled_880',['MUX_ENABLED',['../d7/d8d/classAnalogMultiplex.html#aa9e0740b2ffd0812db9548c24f6f979b',1,'AnalogMultiplex']]] -]; diff --git a/docs/Doxygen/search/variables_b.html b/docs/Doxygen/search/variables_b.html deleted file mode 100644 index 577a4b71c..000000000 --- a/docs/Doxygen/search/variables_b.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/variables_b.js b/docs/Doxygen/search/variables_b.js deleted file mode 100644 index 3153e8c2a..000000000 --- a/docs/Doxygen/search/variables_b.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['next_881',['next',['../d4/d23/classDoublyLinkable.html#a00dd0a636d0c9134072b4bc7951d08c2',1,'DoublyLinkable']]], - ['no_5fpin_882',['NO_PIN',['../d4/d35/Hardware-Types_8hpp.html#a4a1c4604f2bf0c0c2fcfb0b1e0f91c25',1,'Hardware-Types.hpp']]], - ['node_883',['node',['../db/d52/classDoublyLinkedList_1_1node__iterator__base.html#a320fd40947b71565b239ec2bda243760',1,'DoublyLinkedList::node_iterator_base']]], - ['numericchars_884',['NumericChars',['../d5/d0c/MAX7219SevenSegmentDisplay_8hpp.html#a22aef2ea85e50ea5193e012410dfb4b0',1,'MAX7219SevenSegmentDisplay.hpp']]] -]; diff --git a/docs/Doxygen/search/variables_c.html b/docs/Doxygen/search/variables_c.html deleted file mode 100644 index 0b92edbbb..000000000 --- a/docs/Doxygen/search/variables_c.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/variables_c.js b/docs/Doxygen/search/variables_c.js deleted file mode 100644 index 2d707c836..000000000 --- a/docs/Doxygen/search/variables_c.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['offset_885',['offset',['../d2/dcb/classHysteresis.html#a10f132094621f75f741b89d6ce038be9',1,'Hysteresis::offset()'],['../de/d4e/classExtendedIOElement.html#a7d439a6c37c0f2be13c119a42d450bb2',1,'ExtendedIOElement::offset()']]], - ['output_886',['OUTPUT',['../dd/ddf/ExtendedInputOutput_8hpp.html#afe385e49d42243d0f7eee016aee5d7b9',1,'ExtendedInputOutput.hpp']]] -]; diff --git a/docs/Doxygen/search/variables_d.html b/docs/Doxygen/search/variables_d.html deleted file mode 100644 index 8b53e6043..000000000 --- a/docs/Doxygen/search/variables_d.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/variables_d.js b/docs/Doxygen/search/variables_d.js deleted file mode 100644 index 60e965d17..000000000 --- a/docs/Doxygen/search/variables_d.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['p_887',['p',['../d0/ddd/classUniquePtr.html#a37743b6c834995caf2efd0896844fa74',1,'UniquePtr']]], - ['pin_888',['pin',['../d1/d19/classButton.html#ab322a42eb2d992af0fe951f228d8410b',1,'Button']]], - ['precisionprintstream_889',['precisionPrintStream',['../da/d69/PrintStream_8cpp.html#ad0b67665a208d879d805bc8d0bdc3506',1,'PrintStream.cpp']]], - ['prevbouncetime_890',['prevBounceTime',['../d1/d19/classButton.html#ab9c2c01614891d5d9b4e859f16075b30',1,'Button']]], - ['previnput_891',['prevInput',['../d1/d19/classButton.html#a883b0cf1dda8588777ae7724287d12fe',1,'Button']]], - ['previous_892',['previous',['../d4/d23/classDoublyLinkable.html#adbc3186d4d3faa0f9cd6c6492c5494df',1,'DoublyLinkable::previous()'],['../dc/dea/classTimer.html#ab6e03867f916dd6860f34c44b61f53dc',1,'Timer::previous()']]], - ['prevlevel_893',['prevLevel',['../d2/dcb/classHysteresis.html#a2131cc63eb3bb996deb8881d0a2a9dd1',1,'Hysteresis']]], - ['prevrefresh_894',['prevRefresh',['../d8/d6c/classButtonMatrix.html#a57103211dd8cea9970a10b6a99061331',1,'ButtonMatrix']]], - ['prevstates_895',['prevStates',['../d8/d6c/classButtonMatrix.html#a2400407b4bdaef76562435e88411ceae',1,'ButtonMatrix']]], - ['ptr_896',['ptr',['../d9/d1a/classArraySlice_1_1Iterator.html#abf1aa9d0f834b189e83e5794a21ec37b',1,'ArraySlice::Iterator']]] -]; diff --git a/docs/Doxygen/search/variables_e.html b/docs/Doxygen/search/variables_e.html deleted file mode 100644 index abb7aa17f..000000000 --- a/docs/Doxygen/search/variables_e.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/variables_e.js b/docs/Doxygen/search/variables_e.js deleted file mode 100644 index 5c146a1cc..000000000 --- a/docs/Doxygen/search/variables_e.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['redbit_897',['redBit',['../d5/d45/structShiftRegisterOutRGB.html#ab44c8fa701f3fe39fb5249c6bae04f8d',1,'ShiftRegisterOutRGB']]], - ['rowpins_898',['rowPins',['../d8/d6c/classButtonMatrix.html#a78f102fabc50104bd885ea077bcf8f8c',1,'ButtonMatrix']]] -]; diff --git a/docs/Doxygen/search/variables_f.html b/docs/Doxygen/search/variables_f.html deleted file mode 100644 index 5458b9461..000000000 --- a/docs/Doxygen/search/variables_f.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/Doxygen/search/variables_f.js b/docs/Doxygen/search/variables_f.js deleted file mode 100644 index a3ca53917..000000000 --- a/docs/Doxygen/search/variables_f.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['scanlimit_899',['SCANLIMIT',['../da/dd0/classMAX7219__Base.html#ab98b9cc58b2d16fb6deccc2f3db1b40c',1,'MAX7219_Base']]], - ['settings_900',['settings',['../da/dd0/classMAX7219__Base.html#abe759bf02debdd06813e7a7f800ea05e',1,'MAX7219_Base']]], - ['sevensegmentcharacters_901',['SevenSegmentCharacters',['../d5/d0c/MAX7219SevenSegmentDisplay_8hpp.html#a5a6ac1773492df06f2083501ada5e692',1,'MAX7219SevenSegmentDisplay.hpp']]], - ['showbaseprintstream_902',['showbasePrintStream',['../da/d69/PrintStream_8cpp.html#af3f3e169c625ed3418298a1795a6823b',1,'PrintStream.cpp']]], - ['shutdown_903',['SHUTDOWN',['../da/dd0/classMAX7219__Base.html#a81fe09c4404efb44e05fa13cf4e45e23',1,'MAX7219_Base']]], - ['spi_5fmax_5fspeed_904',['SPI_MAX_SPEED',['../db/d02/Settings_8hpp.html#a5b86686a1a39f3bd4c50998dc17706e6',1,'Settings.hpp']]], - ['start_905',['start',['../de/d4e/classExtendedIOElement.html#a72d639edb9fa3781645cab09c2ee3dd3',1,'ExtendedIOElement']]], - ['state_906',['state',['../df/d38/classIncrementButton.html#a876b486d3a5241a126bd5751c5f70f79',1,'IncrementButton::state()'],['../d5/d20/classIncrementDecrementButtons.html#a876b486d3a5241a126bd5751c5f70f79',1,'IncrementDecrementButtons::state()']]] -]; diff --git a/docs/Doxygen/splitbar.png b/docs/Doxygen/splitbar.png deleted file mode 100644 index 79c85bac3..000000000 Binary files a/docs/Doxygen/splitbar.png and /dev/null differ diff --git a/docs/Doxygen/sync_off.png b/docs/Doxygen/sync_off.png deleted file mode 100644 index c8806d6db..000000000 Binary files a/docs/Doxygen/sync_off.png and /dev/null differ diff --git a/docs/Doxygen/sync_on.png b/docs/Doxygen/sync_on.png deleted file mode 100644 index 8a6cead2c..000000000 Binary files a/docs/Doxygen/sync_on.png and /dev/null differ diff --git a/docs/Doxygen/tab_a.png b/docs/Doxygen/tab_a.png deleted file mode 100644 index 485edfd2e..000000000 Binary files a/docs/Doxygen/tab_a.png and /dev/null differ diff --git a/docs/Doxygen/tab_b.png b/docs/Doxygen/tab_b.png deleted file mode 100644 index a8e119ef4..000000000 Binary files a/docs/Doxygen/tab_b.png and /dev/null differ diff --git a/docs/Doxygen/tab_h.png b/docs/Doxygen/tab_h.png deleted file mode 100644 index 47723dc33..000000000 Binary files a/docs/Doxygen/tab_h.png and /dev/null differ diff --git a/docs/Doxygen/tab_s.png b/docs/Doxygen/tab_s.png deleted file mode 100644 index 56496009b..000000000 Binary files a/docs/Doxygen/tab_s.png and /dev/null differ diff --git a/docs/Doxygen/tabs.css b/docs/Doxygen/tabs.css deleted file mode 100644 index 85a0cd5b5..000000000 --- a/docs/Doxygen/tabs.css +++ /dev/null @@ -1 +0,0 @@ -.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace!important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0!important;-webkit-border-radius:0;border-radius:0!important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px!important;-webkit-border-radius:5px;border-radius:5px!important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0!important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px!important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} \ No newline at end of file diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..61de26a3d --- /dev/null +++ b/docs/README.md @@ -0,0 +1,4 @@ +Documentation for the [**Arduino Filters**](https://github.com/tttapa/Arduino-Filters) library. + +- [master](https://tttapa.github.io/Arduino-Filters/Doxygen/index.html) +- [1.0.0](https://tttapa.github.io/Arduino-Filters/1.0.0/Doxygen/index.html) \ No newline at end of file diff --git a/doxygen/Doxyfile b/doxygen/Doxyfile index 20b882b96..0210e7548 100644 --- a/doxygen/Doxyfile +++ b/doxygen/Doxyfile @@ -1,4 +1,4 @@ -# Doxyfile 1.8.16 +# Doxyfile 1.9.4 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -12,6 +12,15 @@ # For lists, items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (\" \"). +# +# Note: +# +# Use doxygen to compare the used configuration file with the template +# configuration file: +# doxygen -x [configFile] +# Use doxygen to compare the used configuration file with the template +# configuration file without replacing the environment variables: +# doxygen -x_noenv [configFile] #--------------------------------------------------------------------------- # Project related configuration options @@ -32,19 +41,19 @@ DOXYFILE_ENCODING = UTF-8 # title of most generated pages and in a few other places. # The default value is: My Project. -PROJECT_NAME = "Arduino Helpers" +PROJECT_NAME = "Arduino Filters" # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 1.0.0 +PROJECT_NUMBER = master # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a # quick idea about the purpose of the project. Keep the description short. -PROJECT_BRIEF = "Utility library for Arduino" +PROJECT_BRIEF = "Filter library for Arduino" # With the PROJECT_LOGO tag one can specify a logo or an icon that is included # in the documentation. The maximum height of the logo should not exceed 55 @@ -60,16 +69,28 @@ PROJECT_LOGO = OUTPUT_DIRECTORY = -# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- -# directories (in 2 levels) under the output directory of each output format and -# will distribute the generated files over these directories. Enabling this +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096 +# sub-directories (in 2 levels) under the output directory of each output format +# and will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where # putting all generated files in the same directory would otherwise causes -# performance problems for the file system. +# performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to +# control the number of sub-directories. # The default value is: NO. CREATE_SUBDIRS = YES +# Controls the number of sub-directories that will be created when +# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every +# level increment doubles the number of directories, resulting in 4096 +# directories at level 8 which is the default and also the maximum value. The +# sub-directories are organized in 2 levels, the first level always has a fixed +# numer of 16 directories. +# Minimum value: 0, maximum value: 8, default value: 8. +# This tag requires that the tag CREATE_SUBDIRS is set to YES. + +CREATE_SUBDIRS_LEVEL = 8 + # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII # characters to appear in the names of generated files. If set to NO, non-ASCII # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode @@ -81,26 +102,18 @@ ALLOW_UNICODE_NAMES = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, -# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), -# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, -# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), -# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, -# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, -# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, -# Ukrainian and Vietnamese. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian, +# Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English +# (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek, +# Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with +# English messages), Korean, Korean-en (Korean with English messages), Latvian, +# Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, +# Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, +# Swedish, Turkish, Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English -# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all generated output in the proper direction. -# Possible values are: None, LTR, RTL and Context. -# The default value is: None. - -OUTPUT_TEXT_DIRECTION = None - # If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. @@ -169,7 +182,7 @@ STRIP_FROM_PATH = # specify the list of include paths that are normally passed to the compiler # using the -I flag. -STRIP_FROM_INC_PATH = +STRIP_FROM_INC_PATH = ../src # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but # less readable) file names. This can be useful is your file systems doesn't @@ -217,6 +230,14 @@ QT_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO +# By default Python docstrings are displayed as preformatted text and doxygen's +# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the +# doxygen's special commands can be used and the contents of the docstring +# documentation blocks is shown as doxygen documentation. +# The default value is: YES. + +PYTHON_DOCSTRING = YES + # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # documentation from any documented member that it re-implements. # The default value is: YES. @@ -240,25 +261,19 @@ TAB_SIZE = 4 # the documentation. An alias has the form: # name=value # For example adding -# "sideeffect=@par Side Effects:\n" +# "sideeffect=@par Side Effects:^^" # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading -# "Side Effects:". You can put \n's in the value part of an alias to insert -# newlines (in the resulting output). You can put ^^ in the value part of an -# alias to insert a newline as if a physical newline was in the original file. -# When you need a literal { or } or , in the value part of an alias you have to -# escape them by means of a backslash (\), this can lead to conflicts with the -# commands \{ and \} for these it is advised to use the version @{ and @} or use -# a double escape (\\{ and \\}) +# "Side Effects:". Note that you cannot put \n's in the value part of an alias +# to insert newlines (in the resulting output). You can put ^^ in the value part +# of an alias to insert a newline as if a physical newline was in the original +# file. When you need a literal { or } or , in the value part of an alias you +# have to escape them by means of a backslash (\), this can lead to conflicts +# with the commands \{ and \} for these it is advised to use the version @{ and +# @} or use a double escape (\\{ and \\}) ALIASES = "boards=\par Boards:^^" -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding "class=itcl::class" -# will allow you to use the command class in the itcl::class meaning. - -TCL_SUBST = - # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For # instance, some of the names that are used will be different. The list of all @@ -299,19 +314,22 @@ OPTIMIZE_OUTPUT_SLICE = NO # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, -# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: +# language is one of the parsers supported by doxygen: IDL, Java, JavaScript, +# Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice, +# VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: # FortranFree, unknown formatted Fortran: Fortran. In the later case the parser # tries to guess whether the code is fixed or free formatted code, this is the -# default for Fortran type files), VHDL, tcl. For instance to make doxygen treat -# .inc files as Fortran files (default is PHP), and .f files as C (default is -# Fortran), use: inc=Fortran f=C. +# default for Fortran type files). For instance to make doxygen treat .inc files +# as Fortran files (default is PHP), and .f files as C (default is Fortran), +# use: inc=Fortran f=C. # # Note: For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. +# the files are not read by doxygen. When specifying no_extension you should add +# * to the FILE_PATTERNS. +# +# Note see also the list of default file extension mappings. EXTENSION_MAPPING = ino=C++ @@ -398,7 +416,7 @@ GROUP_NESTED_COMPOUNDS = NO # \nosubgrouping command. # The default value is: YES. -SUBGROUPING = YES +SUBGROUPING = NO # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions # are shown inside the group in which they are included (e.g. using \ingroup) @@ -445,6 +463,19 @@ TYPEDEF_HIDES_STRUCT = NO LOOKUP_CACHE_SIZE = 0 +# The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use +# during processing. When set to 0 doxygen will based this on the number of +# cores available in the system. You can set it explicitly to a value larger +# than 0 to get more control over the balance between CPU load and processing +# speed. At this moment only the input processing can be done using multiple +# threads. Since this is still an experimental feature the default is set to 1, +# which effectively disables parallel processing. Please report any issues you +# encounter. Generating dot graphs in parallel is controlled by the +# DOT_NUM_THREADS setting. +# Minimum value: 0, maximum value: 32, default value: 1. + +NUM_PROC_THREADS = 1 + #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- @@ -508,6 +539,13 @@ EXTRACT_LOCAL_METHODS = NO EXTRACT_ANON_NSPACES = NO +# If this flag is set to YES, the name of an unnamed parameter in a declaration +# will be determined by the corresponding definition. By default unnamed +# parameters remain unnamed in the output. +# The default value is: YES. + +RESOLVE_UNNAMED_PARAMS = YES + # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all # undocumented members inside documented classes or files. If set to NO these # members will be included in the various overviews, but no documentation @@ -525,8 +563,8 @@ HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO, these declarations will be -# included in the documentation. +# declarations. If set to NO, these declarations will be included in the +# documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = YES @@ -545,11 +583,18 @@ HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO -# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES, upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# (including Cygwin) ands Mac users are advised to set this option to NO. +# With the correct setting of option CASE_SENSE_NAMES doxygen will better be +# able to match the capabilities of the underlying filesystem. In case the +# filesystem is case sensitive (i.e. it supports files in the same directory +# whose names only differ in casing), the option must be set to YES to properly +# deal with such files in case they appear in the input. For filesystems that +# are not case sensitive the option should be set to NO to properly deal with +# output files written for symbols that only differ in casing, such as for two +# classes, one named CLASS and the other named Class, and to also support +# references to files without having to specify the exact matching casing. On +# Windows (including Cygwin) and MacOS, users should typically set this option +# to NO, whereas on Linux or other Unix flavors it should typically be set to +# YES. # The default value is: system dependent. CASE_SENSE_NAMES = YES @@ -568,6 +613,12 @@ HIDE_SCOPE_NAMES = YES HIDE_COMPOUND_REFERENCE= NO +# If the SHOW_HEADERFILE tag is set to YES then the documentation for a class +# will show which file needs to be included to use the class. +# The default value is: YES. + +SHOW_HEADERFILE = YES + # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. @@ -651,7 +702,7 @@ STRICT_PROTO_MATCHING = YES # list. This list is created by putting \todo commands in the documentation. # The default value is: YES. -GENERATE_TODOLIST = YES +GENERATE_TODOLIST = NO # The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test # list. This list is created by putting \test commands in the documentation. @@ -670,13 +721,13 @@ GENERATE_BUGLIST = YES # the documentation. # The default value is: YES. -GENERATE_DEPRECATEDLIST= YES +GENERATE_DEPRECATEDLIST= NO # The ENABLED_SECTIONS tag can be used to enable conditional documentation # sections, marked by \if ... \endif and \cond # ... \endcond blocks. -ENABLED_SECTIONS = AH_MAIN_LIBRARY +ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the # initial value of a variable or macro / define can have for it to appear in the @@ -725,13 +776,14 @@ FILE_VERSION_FILTER = # output files in an output format independent way. To create the layout file # that represents doxygen's defaults, run doxygen with the -l option. You can # optionally specify a file name after the option, if omitted DoxygenLayout.xml -# will be used as the name of the layout file. +# will be used as the name of the layout file. See also section "Changing the +# layout of pages" for information. # # Note that if you run doxygen from a directory containing a file called # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. -LAYOUT_FILE = +LAYOUT_FILE = DoxygenLayout.xml # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib @@ -771,24 +823,35 @@ WARNINGS = YES WARN_IF_UNDOCUMENTED = YES # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some parameters -# in a documented function, or documenting parameters that don't exist or using -# markup commands wrongly. +# potential errors in the documentation, such as documenting some parameters in +# a documented function twice, or documenting parameters that don't exist or +# using markup commands wrongly. # The default value is: YES. WARN_IF_DOC_ERROR = YES +# If WARN_IF_INCOMPLETE_DOC is set to YES, doxygen will warn about incomplete +# function parameter documentation. If set to NO, doxygen will accept that some +# parameters have no documentation without warning. +# The default value is: YES. + +WARN_IF_INCOMPLETE_DOC = YES + # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return -# value. If set to NO, doxygen will only warn about wrong or incomplete -# parameter documentation, but not about the absence of documentation. If -# EXTRACT_ALL is set to YES then this flag will automatically be disabled. +# value. If set to NO, doxygen will only warn about wrong parameter +# documentation, but not about the absence of documentation. If EXTRACT_ALL is +# set to YES then this flag will automatically be disabled. See also +# WARN_IF_INCOMPLETE_DOC # The default value is: NO. WARN_NO_PARAMDOC = NO # If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when -# a warning is encountered. +# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS +# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but +# at the end of the doxygen process doxygen will return with a non-zero status. +# Possible values are: NO, YES and FAIL_ON_WARNINGS. # The default value is: NO. WARN_AS_ERROR = NO @@ -799,13 +862,27 @@ WARN_AS_ERROR = NO # and the warning text. Optionally the format may contain $version, which will # be replaced by the version of the file (if it could be obtained via # FILE_VERSION_FILTER) +# See also: WARN_LINE_FORMAT # The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" +# In the $text part of the WARN_FORMAT command it is possible that a reference +# to a more specific place is given. To make it easier to jump to this place +# (outside of doxygen) the user can define a custom "cut" / "paste" string. +# Example: +# WARN_LINE_FORMAT = "'vi $file +$line'" +# See also: WARN_FORMAT +# The default value is: at line $line of file $file. + +WARN_LINE_FORMAT = "at line $line of file $file" + # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard -# error (stderr). +# error (stderr). In case the file specified cannot be opened for writing the +# warning and error messages are written to standard error. When as file - is +# specified the warning and error messages are written to standard output +# (stdout). WARN_LOGFILE = @@ -819,16 +896,15 @@ WARN_LOGFILE = # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. -INPUT = "../examples/examples.dox" \ - "../src/" \ - "../README.md" \ - "pages/Debug.md" +INPUT = ../examples/examples.dox \ + ../src/ \ + ../README.md # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: https://www.gnu.org/software/libiconv/) for the list of -# possible encodings. +# documentation (see: +# https://www.gnu.org/software/libiconv/) for the list of possible encodings. # The default value is: UTF-8. INPUT_ENCODING = UTF-8 @@ -841,11 +917,15 @@ INPUT_ENCODING = UTF-8 # need to set EXTENSION_MAPPING for the extension otherwise the files are not # read by doxygen. # +# Note the list of default checked file patterns might differ from the list of +# default file extension mappings. +# # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, -# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, -# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, -# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice. +# *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, +# *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C +# comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, +# *.vhdl, *.ucf, *.qsf and *.ice. FILE_PATTERNS = *.cpp \ *.h \ @@ -867,7 +947,7 @@ RECURSIVE = YES # Note that relative paths are relative to the directory from which doxygen is # run. -EXCLUDE = "../src/AH/STL/Fallback" +EXCLUDE = ../src/AH/STL/Fallback # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded @@ -883,24 +963,24 @@ EXCLUDE_SYMLINKS = NO # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories for example use the pattern */test/* -EXCLUDE_PATTERNS = "*/src/AH/STL/README.md" +EXCLUDE_PATTERNS = */src/AH/STL/README.md # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test +# ANamespace::AClass, ANamespace::*Test # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories use the pattern */test/* -EXCLUDE_SYMBOLS = "_*" +EXCLUDE_SYMBOLS = _* # The EXAMPLE_PATH tag can be used to specify one or more files or directories # that contain example code fragments that are included (see the \include # command). -EXAMPLE_PATH = "../examples" +EXAMPLE_PATH = ../examples # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and @@ -920,7 +1000,7 @@ EXAMPLE_RECURSIVE = YES # that contain images that are to be included in the documentation (see the # \image command). -IMAGE_PATH = "images" +IMAGE_PATH = images ../python # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program @@ -976,7 +1056,7 @@ FILTER_SOURCE_PATTERNS = # (index.html). This can be useful if you have a project on for instance GitHub # and want to reuse the introduction page also for the doxygen output. -USE_MDFILE_AS_MAINPAGE = "../README.md" +USE_MDFILE_AS_MAINPAGE = ../README.md #--------------------------------------------------------------------------- # Configuration options related to source browsing @@ -1075,13 +1155,6 @@ VERBATIM_HEADERS = YES ALPHABETICAL_INDEX = YES -# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in -# which the alphabetical index list will be split. -# Minimum value: 1, maximum value: 20, default value: 5. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -COLS_IN_ALPHA_INDEX = 5 - # In case all classes in a project start with a common prefix, all classes will # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag # can be used to specify a prefix (or a list of prefixes) that should be ignored @@ -1105,7 +1178,7 @@ GENERATE_HTML = YES # The default directory is: html. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_OUTPUT = "../docs/Doxygen" +HTML_OUTPUT = ../docs/Doxygen # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each # generated HTML page (for example: .htm, .php, .asp). @@ -1132,7 +1205,7 @@ HTML_FILE_EXTENSION = .html # of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_HEADER = +HTML_HEADER = header.html # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each # generated HTML page. If the tag is left blank doxygen will generate a standard @@ -1167,7 +1240,7 @@ HTML_STYLESHEET = # list). For an example see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_EXTRA_STYLESHEET = "custom_stylesheet.css" +HTML_EXTRA_STYLESHEET = custom_stylesheet.css # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note @@ -1177,11 +1250,11 @@ HTML_EXTRA_STYLESHEET = "custom_stylesheet.css" # files will be copied as-is; there are no commands or markers available. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_EXTRA_FILES = +HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to -# this color. Hue is specified as an angle on a colorwheel, see +# this color. Hue is specified as an angle on a color-wheel, see # https://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. @@ -1191,7 +1264,7 @@ HTML_EXTRA_FILES = HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors -# in the HTML output. For a value of 0 the output will use grayscales only. A +# in the HTML output. For a value of 0 the output will use gray-scales only. A # value of 255 will produce the most vivid colors. # Minimum value: 0, maximum value: 255, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1220,9 +1293,9 @@ HTML_TIMESTAMP = NO # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML # documentation will contain a main index with vertical navigation menus that -# are dynamically created via Javascript. If disabled, the navigation index will +# are dynamically created via JavaScript. If disabled, the navigation index will # consists of multiple levels of tabs that are statically embedded in every HTML -# page. Disable this option to support browsers that do not have Javascript, +# page. Disable this option to support browsers that do not have JavaScript, # like the Qt help browser. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1235,7 +1308,7 @@ HTML_DYNAMIC_MENUS = YES # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_DYNAMIC_SECTIONS = NO +HTML_DYNAMIC_SECTIONS = YES # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand @@ -1252,10 +1325,11 @@ HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: https://developer.apple.com/xcode/), introduced with OSX -# 10.5 (Leopard). To create a documentation set, doxygen will generate a -# Makefile in the HTML output directory. Running make will produce the docset in -# that directory and running make install will install the docset in +# environment (see: +# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To +# create a documentation set, doxygen will generate a Makefile in the HTML +# output directory. Running make will produce the docset in that directory and +# running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at # startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy # genXcode/_index.html for more information. @@ -1272,6 +1346,13 @@ GENERATE_DOCSET = NO DOCSET_FEEDNAME = "Doxygen generated docs" +# This tag determines the URL of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDURL = + # This tag specifies a string that should uniquely identify the documentation # set bundle. This should be a reverse domain-name style string, e.g. # com.mycompany.MyDocSet. Doxygen will append .docset to the name. @@ -1297,8 +1378,12 @@ DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on -# Windows. +# on Windows. In the beginning of 2021 Microsoft took the original page, with +# a.o. the download links, offline the HTML help workshop was already many years +# in maintenance mode). You can download the HTML help workshop from the web +# archives at Installation executable (see: +# http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo +# ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe). # # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML @@ -1328,7 +1413,7 @@ CHM_FILE = HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated -# (YES) or that it should be included in the master .chm file (NO). +# (YES) or that it should be included in the main .chm file (NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. @@ -1373,7 +1458,8 @@ QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace -# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). +# (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1381,8 +1467,8 @@ QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual- -# folders). +# Folders (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1390,16 +1476,16 @@ QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom -# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- -# filters). +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- -# filters). +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = @@ -1411,9 +1497,9 @@ QHP_CUST_FILTER_ATTRS = QHP_SECT_FILTER_ATTRS = -# The QHG_LOCATION tag can be used to specify the location of Qt's -# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the -# generated .qhp file. +# The QHG_LOCATION tag can be used to specify the location (absolute path +# including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to +# run qhelpgenerator on the generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = @@ -1456,16 +1542,28 @@ DISABLE_INDEX = NO # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the # HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can -# further fine-tune the look of the index. As an example, the default style -# sheet generated by doxygen has an example that shows how to put an image at -# the root of the tree instead of the PROJECT_NAME. Since the tree basically has -# the same information as the tab index, you could consider setting -# DISABLE_INDEX to YES when enabling this option. +# further fine tune the look of the index (see "Fine-tuning the output"). As an +# example, the default style sheet generated by doxygen has an example that +# shows how to put an image at the root of the tree instead of the PROJECT_NAME. +# Since the tree basically has the same information as the tab index, you could +# consider setting DISABLE_INDEX to YES when enabling this option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = NO +# When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the +# FULL_SIDEBAR option determines if the side bar is limited to only the treeview +# area (value NO) or if it should extend to the full height of the window (value +# YES). Setting this to YES gives a layout similar to +# https://docs.readthedocs.io with more room for contents, but less room for the +# project logo, title, and description. If either GENERATE_TREEVIEW or +# DISABLE_INDEX is set to NO, this option has no effect. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FULL_SIDEBAR = NO + # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. # @@ -1490,6 +1588,24 @@ TREEVIEW_WIDTH = 250 EXT_LINKS_IN_WINDOW = NO +# If the OBFUSCATE_EMAILS tag is set to YES, doxygen will obfuscate email +# addresses. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +OBFUSCATE_EMAILS = YES + +# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg +# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see +# https://inkscape.org) to generate formulas as SVG images instead of PNGs for +# the HTML output. These images will generally look nicer at scaled resolutions. +# Possible values are: png (the default) and svg (looks nicer but requires the +# pdf2svg or inkscape tool). +# The default value is: png. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FORMULA_FORMAT = png + # Use this tag to change the font size of LaTeX formulas included as images in # the HTML documentation. When you change the font size after a successful # doxygen run you need to manually remove any form_*.png images from the HTML @@ -1510,8 +1626,14 @@ FORMULA_FONTSIZE = 10 FORMULA_TRANSPARENT = YES +# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands +# to create new LaTeX commands to be used in formulas as building blocks. See +# the section "Including formulas" for details. + +FORMULA_MACROFILE = + # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# https://www.mathjax.org) which uses client side Javascript for the rendering +# https://www.mathjax.org) which uses client side JavaScript for the rendering # instead of using pre-rendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path @@ -1521,11 +1643,29 @@ FORMULA_TRANSPARENT = YES USE_MATHJAX = YES +# With MATHJAX_VERSION it is possible to specify the MathJax version to be used. +# Note that the different versions of MathJax have different requirements with +# regards to the different settings, so it is possible that also other MathJax +# settings have to be changed when switching between the different MathJax +# versions. +# Possible values are: MathJax_2 and MathJax_3. +# The default value is: MathJax_2. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_VERSION = MathJax_2 + # When MathJax is enabled you can set the default output format to be used for -# the MathJax output. See the MathJax site (see: -# http://docs.mathjax.org/en/latest/output.html) for more details. +# the MathJax output. For more details about the output format see MathJax +# version 2 (see: +# http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3 +# (see: +# http://docs.mathjax.org/en/latest/web/components/output.html). # Possible values are: HTML-CSS (which is slower, but has the best -# compatibility), NativeMML (i.e. MathML) and SVG. +# compatibility. This is the name for Mathjax version 2, for MathJax version 3 +# this will be translated into chtml), NativeMML (i.e. MathML. Only supported +# for NathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This +# is the name for Mathjax version 3, for MathJax version 2 this will be +# translated into HTML-CSS) and SVG. # The default value is: HTML-CSS. # This tag requires that the tag USE_MATHJAX is set to YES. @@ -1538,22 +1678,29 @@ MATHJAX_FORMAT = SVG # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of -# MathJax from https://www.mathjax.org before deployment. -# The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/. +# MathJax from https://www.mathjax.org before deployment. The default value is: +# - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2 +# - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3 # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = /MathJax # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example +# for MathJax version 2 (see +# https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions): # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# For example for MathJax version 3 (see +# http://docs.mathjax.org/en/latest/input/tex/extensions/index.html): +# MATHJAX_EXTENSIONS = ams # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site -# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# (see: +# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. @@ -1581,7 +1728,7 @@ MATHJAX_CODEFILE = SEARCHENGINE = YES # When the SERVER_BASED_SEARCH tag is enabled the search engine will be -# implemented using a web server instead of a web client using Javascript. There +# implemented using a web server instead of a web client using JavaScript. There # are two flavors of web server based searching depending on the EXTERNAL_SEARCH # setting. When disabled, doxygen will generate a PHP script for searching and # an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing @@ -1600,7 +1747,8 @@ SERVER_BASED_SEARCH = NO # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: https://xapian.org/). +# Xapian (see: +# https://xapian.org/). # # See the section "External Indexing and Searching" for details. # The default value is: NO. @@ -1613,8 +1761,9 @@ EXTERNAL_SEARCH = NO # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: https://xapian.org/). See the section "External Indexing and -# Searching" for details. +# Xapian (see: +# https://xapian.org/). See the section "External Indexing and Searching" for +# details. # This tag requires that the tag SEARCHENGINE is set to YES. SEARCHENGINE_URL = @@ -1723,29 +1872,31 @@ PAPER_TYPE = a4 EXTRA_PACKAGES = -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the -# generated LaTeX document. The header should contain everything until the first -# chapter. If it is left blank doxygen will generate a standard header. See -# section "Doxygen usage" for information on how to let doxygen write the -# default header to a separate file. +# The LATEX_HEADER tag can be used to specify a user-defined LaTeX header for +# the generated LaTeX document. The header should contain everything until the +# first chapter. If it is left blank doxygen will generate a standard header. It +# is highly recommended to start with a default header using +# doxygen -w latex new_header.tex new_footer.tex new_stylesheet.sty +# and then modify the file new_header.tex. See also section "Doxygen usage" for +# information on how to generate the default header that doxygen normally uses. # -# Note: Only use a user-defined header if you know what you are doing! The -# following commands have a special meaning inside the header: $title, -# $datetime, $date, $doxygenversion, $projectname, $projectnumber, -# $projectbrief, $projectlogo. Doxygen will replace $title with the empty -# string, for the replacement values of the other commands the user is referred -# to HTML_HEADER. +# Note: Only use a user-defined header if you know what you are doing! +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. The following +# commands have a special meaning inside the header (and footer): For a +# description of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_HEADER = -# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the -# generated LaTeX document. The footer should contain everything after the last -# chapter. If it is left blank doxygen will generate a standard footer. See +# The LATEX_FOOTER tag can be used to specify a user-defined LaTeX footer for +# the generated LaTeX document. The footer should contain everything after the +# last chapter. If it is left blank doxygen will generate a standard footer. See # LATEX_HEADER for more information on how to generate a default footer and what -# special commands can be used inside the footer. -# -# Note: Only use a user-defined footer if you know what you are doing! +# special commands can be used inside the footer. See also section "Doxygen +# usage" for information on how to generate the default footer that doxygen +# normally uses. Note: Only use a user-defined footer if you know what you are +# doing! # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_FOOTER = @@ -1778,9 +1929,11 @@ LATEX_EXTRA_FILES = PDF_HYPERLINKS = YES -# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate -# the PDF file directly from the LaTeX files. Set this option to YES, to get a -# higher quality PDF documentation. +# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as +# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX +# files. Set this option to YES, to get a higher quality PDF documentation. +# +# See also section LATEX_CMD_NAME for selecting the engine. # The default value is: YES. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1788,8 +1941,7 @@ USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode # command to the generated LaTeX files. This will instruct LaTeX to keep running -# if errors occur, instead of asking the user for help. This option is also used -# when generating formulas in HTML. +# if errors occur, instead of asking the user for help. # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1802,16 +1954,6 @@ LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO -# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source -# code with syntax highlighting in the LaTeX output. -# -# Note that which sources are shown also depends on other settings such as -# SOURCE_BROWSER. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_SOURCE_CODE = NO - # The LATEX_BIB_STYLE tag can be used to specify the style to use for the # bibliography, e.g. plainnat, or ieeetr. See # https://en.wikipedia.org/wiki/BibTeX and \cite for more info. @@ -1892,16 +2034,6 @@ RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = -# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code -# with syntax highlighting in the RTF output. -# -# Note that which sources are shown also depends on other settings such as -# SOURCE_BROWSER. -# The default value is: NO. -# This tag requires that the tag GENERATE_RTF is set to YES. - -RTF_SOURCE_CODE = NO - #--------------------------------------------------------------------------- # Configuration options related to the man page output #--------------------------------------------------------------------------- @@ -1998,15 +2130,6 @@ GENERATE_DOCBOOK = NO DOCBOOK_OUTPUT = docbook -# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the -# program listings (including syntax highlighting and cross-referencing -# information) to the DOCBOOK output. Note that enabling this will significantly -# increase the size of the DOCBOOK output. -# The default value is: NO. -# This tag requires that the tag GENERATE_DOCBOOK is set to YES. - -DOCBOOK_PROGRAMLISTING = NO - #--------------------------------------------------------------------------- # Configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- @@ -2093,7 +2216,8 @@ SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by the -# preprocessor. +# preprocessor. Note that the INCLUDE_PATH is not recursive, so the setting of +# RECURSIVE has no effect here. # This tag requires that the tag SEARCH_INCLUDES is set to YES. INCLUDE_PATH = @@ -2116,7 +2240,6 @@ INCLUDE_FILE_PATTERNS = *.h \ # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. PREDEFINED = ARDUINO \ - DEBUG_OUT=Serial \ CORE_TEENSY \ TEENSYDUINO \ USE_MIDI_USB_INTERFACE \ @@ -2136,7 +2259,6 @@ PREDEFINED = ARDUINO \ AH_DIAGNOSTIC_POP=; \ AH_DIAGNOSTIC_EXTERNAL_HEADER=; - # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this # tag can be used to specify a list of macro names that should be expanded. The # macro definition that is found in the sources will be used. Use the PREDEFINED @@ -2206,15 +2328,6 @@ EXTERNAL_PAGES = YES # Configuration options related to the dot tool #--------------------------------------------------------------------------- -# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram -# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to -# NO turns the diagrams off. Note that this option also works with HAVE_DOT -# disabled, but it is recommended to install and use dot, since it yields more -# powerful graphs. -# The default value is: YES. - -CLASS_DIAGRAMS = YES - # You can include diagrams made with dia in doxygen documentation. Doxygen will # then run dia to produce the diagram and insert it in the documentation. The # DIA_PATH tag allows you to specify the directory where the dia binary resides. @@ -2271,11 +2384,14 @@ DOT_FONTSIZE = 10 DOT_FONTPATH = -# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for -# each documented class showing the direct and indirect inheritance relations. -# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO. +# If the CLASS_GRAPH tag is set to YES (or GRAPH) then doxygen will generate a +# graph for each documented class showing the direct and indirect inheritance +# relations. In case HAVE_DOT is set as well dot will be used to draw the graph, +# otherwise the built-in generator will be used. If the CLASS_GRAPH tag is set +# to TEXT the direct and indirect inheritance relations will be shown as texts / +# links. +# Possible values are: NO, YES, TEXT and GRAPH. # The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. CLASS_GRAPH = YES @@ -2289,7 +2405,8 @@ CLASS_GRAPH = YES COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for -# groups, showing the direct groups dependencies. +# groups, showing the direct groups dependencies. See also the chapter Grouping +# in the manual. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2312,10 +2429,32 @@ UML_LOOK = YES # but if the number exceeds 15, the total amount of fields shown is limited to # 10. # Minimum value: 0, maximum value: 100, default value: 10. -# This tag requires that the tag HAVE_DOT is set to YES. +# This tag requires that the tag UML_LOOK is set to YES. UML_LIMIT_NUM_FIELDS = 100 +# If the DOT_UML_DETAILS tag is set to NO, doxygen will show attributes and +# methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS +# tag is set to YES, doxygen will add type and arguments for attributes and +# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, doxygen +# will not generate fields with class member information in the UML graphs. The +# class diagrams will look similar to the default class diagrams but using UML +# notation for the relationships. +# Possible values are: NO, YES and NONE. +# The default value is: NO. +# This tag requires that the tag UML_LOOK is set to YES. + +DOT_UML_DETAILS = NO + +# The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters +# to display on a single line. If the actual line length exceeds this threshold +# significantly it will wrapped across multiple lines. Some heuristics are apply +# to avoid ugly line breaks. +# Minimum value: 0, maximum value: 1000, default value: 17. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_WRAP_THRESHOLD = 17 + # If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and # collaboration graphs will show the relations between templates and their # instances. @@ -2382,6 +2521,13 @@ GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES +# The DIR_GRAPH_MAX_DEPTH tag can be used to limit the maximum number of levels +# of child directories generated in directory dependency graphs by dot. +# Minimum value: 1, maximum value: 25, default value: 1. +# This tag requires that the tag DIRECTORY_GRAPH is set to YES. + +DIR_GRAPH_MAX_DEPTH = 1 + # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. For an explanation of the image formats see the section # output formats in the documentation of the dot tool (Graphviz (see: @@ -2435,10 +2581,10 @@ MSCFILE_DIRS = DIAFILE_DIRS = # When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the -# path where java can find the plantuml.jar file. If left blank, it is assumed -# PlantUML is not used or called during a preprocessing step. Doxygen will -# generate a warning when it encounters a \startuml command in this case and -# will not generate output for the diagram. +# path where java can find the plantuml.jar file or to the filename of jar file +# to be used. If left blank, it is assumed PlantUML is not used or called during +# a preprocessing step. Doxygen will generate a warning when it encounters a +# \startuml command in this case and will not generate output for the diagram. PLANTUML_JAR_PATH = @@ -2500,14 +2646,18 @@ DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page # explaining the meaning of the various boxes and arrows in the dot generated # graphs. +# Note: This tag requires that UML_LOOK isn't set, i.e. the doxygen internal +# graphical representation for inheritance and collaboration diagrams is used. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. GENERATE_LEGEND = YES -# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot +# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate # files that are used to generate the various graphs. +# +# Note: This setting is not only used for dot files but also for msc temporary +# files. # The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. DOT_CLEANUP = YES diff --git a/doxygen/DoxygenLayout.xml b/doxygen/DoxygenLayout.xml new file mode 100644 index 000000000..efaafcf5d --- /dev/null +++ b/doxygen/DoxygenLayout.xml @@ -0,0 +1,240 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen/custom_stylesheet.css b/doxygen/custom_stylesheet.css index 8fad23a83..1617d6a72 100644 --- a/doxygen/custom_stylesheet.css +++ b/doxygen/custom_stylesheet.css @@ -9,6 +9,9 @@ img.xbm { -ms-interpolation-mode:nearest-neighbor; /* IE8+ */ border: 1px solid #CCC; } +img.inline { + vertical-align: text-bottom; +} div.image { text-align: initial; } @@ -31,9 +34,63 @@ div.memproto, div.memdoc, div.directory, div.dyncontent { body { background-color: #DDD; width: 100%; + font-family: 'Roboto', 'sans-serif'; + font-weight: 300; +} +body, table, div, p, dl { + font-weight: 300; +} +h1, h2, h3, h4, h5, +h2.groupheader, .title, #projectname { + font-family: 'Roboto', 'sans-serif'; + font-weight: 300; +} +h2, h2.groupheader, .title, #projectname { + font-weight: 300; +} +h3, h4, h5 { + font-weight: 300; +} +div.contents > div.textblock > h1 { + border-bottom: 1px solid #c8d0e2; + padding-bottom: 5px; + margin-top: 1em; + font-size: 1.8em; +} +div.contents > div.textblock > hr { + margin-right: 15px; /* To match width of doxygen headers and code blocks */ +} +.title { + font-size: 2em; +} +span.mono { + font-family: monospace; +} +/* These were originally "bold" which is too bold */ +b, dt, caption, div.groupHeader, td.indexkey, th.dirtab, +.memproto, dl.reflist dt, +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname, +.icon, dl.citelist dt, .inherit_header, +#powerTip div.ttname a, #powerTip div.ttname { + font-weight: 500; } -* { - max-width: 100%; +a.el { + font-weight: 500; +} +.mdescLeft, .mdescRight { + color: #444; +} +/* span.permalink { + padding: 0 0.4em; + opacity: 0.6; + transition: opacity 0.15s; +} +.memtitle:hover span.permalink { + opacity: 1; +} */ +.compoundTemplParams { + color: #3C4F74; + font-size: inherit; } iframe { max-width: initial; @@ -41,13 +98,12 @@ iframe { #MSearchField { max-width: initial; } -body > div.header, div.PageDoc > div.header { +body > div.header, div > div.header { max-width: 1100px; box-sizing: border-box; margin: auto; padding: 0.8em 2.5em 0.6em 2.5em; box-shadow: 1px 0px 5px #555; - border-bottom: solid white 5px; } div.ingroups { font-size: initial; @@ -68,6 +124,11 @@ address.footer * { address.footer > small { padding: 0.6em; } +address.footer img.footer { + height: 2em; + vertical-align: middle; + padding-bottom: 0.25em; +} div#top { /* position: sticky; */ top: 0; @@ -82,11 +143,28 @@ body > div.header { left: 0; width: 100%; } -ul.sm-dox { +.sm-dox { background-color: #dde; background-image: none; box-shadow: 0px 1px 2px #458; } +.sm-dox a, .sm-dox a:focus, .sm-dox a:active, .sm-dox a:hover, .sm-dox a.highlighted { + background-image: none; + border-right: 0.5px solid #78A; + border-bottom: 0.5px solid #78A; + margin-bottom: -1px; + /* box-shadow: 0px 1px 2px #458; */ +} +.sm-dox>li:first-child>a, .sm-dox>li:first-child>:not(ul) a { + border-radius: 0; +} +.sm-dox a:hover { + color: #283a5d; + text-shadow: 0 3px 6px white; +} +li#searchBoxPos2 { + margin-left: 1em; +} div.navpath > ul { background-color: #dde; background-image: none; @@ -95,38 +173,157 @@ div.navpath > ul { z-index: 101; position: relative; } +#main-nav ul { + padding-left: 0; +} +.directory td { + vertical-align: text-bottom; +} .directory td > .el { display: inline-block; - padding: 0.4em 0.5em 0.4em 0; } -.directory td.desc { - padding: 0.4em 0.5em 0.4em 0.5em; +.directory td.desc, .directory td.entry { + padding: 0.6em 0.5em 0.6em 0.8em; +} +.markdownTable tr:last-child td { + border-bottom: 1px solid #334262; } -h2.memtitle, .memproto { +/* Hide the "Detailed description" header */ +div.contents a#details + h2.groupheader { + display: none; +} +h2.memtitle, .memproto, .fieldtable th, .reflist dt { background-color: #dde; background-image: none; - border-radius: 0; +} +h2.memtitle { + border-radius: 0.4em 0.4em 0 0; +} +.memproto { + border-radius: 0 0.4em 0 0; +} +table.fieldtable { + border-radius: 0.4em; +} +.fieldtable th { + font-size: 1.1em; +} +span.mlabel { + font-size: 0.9em; } .memdoc { - border-radius: 0; + border-radius: 0 0 0.4em 0.4em; } -#MSearchResultsWindow { - margin-top: 8px; +.reflist dt { + border-radius: 0.4em 0.4em 0 0; } + +/* A bit more space in lists on related pages */ +div.textblock li { + margin: 0.4em 0; +} + code { background-color: #f4f4ff; - padding: 0 1px; + border-radius: 6px; + padding: .1em .3em; +} +div.fragment { + padding: 0.6em; + border-radius: 0.6em; +} +div.line { + line-height: 1.25; +} +div#powerTip { + margin-top: 0.5em; +} + +span.preprocessor { + color: #af00db; + color: #a31515; +} +span.comment { + color: #008000; +} +span.stringliteral { + color: #a31515; +} +span.charliteral { + color: #a31515; +} +span.keywordflow { + color: #0000ff; + color: #af00db; +} +span.keywordtype { + color: #2b91af; + color: #0000ff; +} +span.keyword { + color: #0000ff; +} +div.line a.code.hl_function, +div.line a.code.hl_interface { + color: #795e26; +} +div.line a.code.hl_define { + color: #0000ff; +} +div.line a.code.hl_class, +div.line a.code.hl_union, +div.line a.code.hl_struct, +div.line a.code.hl_typedef, +div.line a.code.hl_enumeration { + color: #2b91af; +} +div.line a.code.hl_enumvalue { + color: #1C71BE; +} +span.preprocessor a, +span.preprocessor a.code { + color: #a31515; + text-decoration: underline; +} +div.line a.code.hl_namespace { + color: #af00db; +} +div.line a.code.hl_variable { + color: #001080; +} +div.line a.code:hover { + filter: brightness(120%); +} +span.lineno { + background-color: inherit; + color: #626670; + border-right: 1px solid #777; +} +span.lineno a { + background-color: #F4F4F4; +} + +blockquote.doxtable { + padding: 0.5em 1em; + margin-top: 1em; + margin-bottom: 1em; +} +blockquote.doxtable > p:first-child { + margin-top: 0; +} +blockquote.doxtable > p:last-child { + margin-bottom: 0; } /* --------------------- */ /* Portrait and Landscape */ -@media only screen and (max-width: 900px) /* and (orientation : portrait) */ { +@media only screen and (max-width: 767px) /* and (orientation : portrait) */ { div#top { position: relative; } - #side-nav { display: none; } - #nav-path { display: none; } + /* #side-nav { display: none; } */ + /* #nav-path { display: none; } */ body { overflow-x: hidden; } @@ -152,15 +349,22 @@ code { line-height: 2.4; } .sm-dox a:hover { - background-image: url(tab_a.png); + /* background-image: url(tab_a.png); */ background-repeat: repeat-x; color: white; text-shadow: initial; } + .sm-dox>li:first-child>a, .sm-dox>li:first-child>:not(ul) a { + border-top: 0.5px solid #78A; + } .sm-dox li>a span.sub-arrow:before { display: block; content: '+'; } + .sm-dox a, .sm-dox a:focus, .sm-dox a:active, .sm-dox a:hover, + .sm-dox a.highlighted { + border-right: none; + } .sm-dox li { border-bottom: 1px solid #ccd; } @@ -183,12 +387,12 @@ code { font-size: 11px; } - div.contents p, + div.contents p:not([class]), div.dyncontent, div.textblock, table.memberdecls, div.memitem, - div.contents p *, + div.contents p:not([class]) *, div.dyncontent *, table.memberdecls *, div.memitem * { @@ -217,4 +421,48 @@ code { td.memSeparator { line-height: 1px; } -} \ No newline at end of file +} + +/* ---- Start search box ---- */ + +iframe#MSearchResults { + height: auto; + width: 100%; + max-width: 25em; + margin-left: auto; + margin-right: 0; + display: block; + resize: vertical; +} +#MSearchResultsWindow { + position: relative; + border: none; + z-index: 10000; + width: 100% !important; + top: 0 !important; + left: 0 !important; + box-shadow: inset #778 1px 0px 4px 0px; +} +.SRResult { + margin-left: auto; + margin-right: 0; + max-width: 25em; +} + +/* #MSearchResultsWindow { + border: 1px solid #96A7C8; + background-color: #F9FAFC; + border-radius: 0 0 4px 4px; + border-top: none; + margin-top: 7px; + box-shadow: 1px 1px 2px 0px #777; +} + +@media only screen and (max-width: 767px) { + #MSearchResultsWindow { + border-radius: 0; + margin-top: 0; + } +} */ + +/* ---- End search box ---- */ \ No newline at end of file diff --git a/doxygen/header.html b/doxygen/header.html new file mode 100644 index 000000000..0e8bc99d6 --- /dev/null +++ b/doxygen/header.html @@ -0,0 +1,74 @@ + + + + + + + + +$projectname: $title +$title + + + + + + + + +$treeview +$search +$mathjax + + +$extrastylesheet + + + + +
    + + + +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    $projectname $projectnumber +
    +
    $projectbrief
    +
    +
    $projectbrief
    +
    $searchbox
    $searchbox
    +
    + + diff --git a/doxygen/images/50Hz-notch.png b/doxygen/images/50Hz-notch.png new file mode 100644 index 000000000..1d1125f8a Binary files /dev/null and b/doxygen/images/50Hz-notch.png differ diff --git a/doxygen/pages/Debug.md b/doxygen/pages/Debug.md index 066d1959e..ae19e7659 100644 --- a/doxygen/pages/Debug.md +++ b/doxygen/pages/Debug.md @@ -1,13 +1,13 @@ # Debug @see Module @ref AH_Debug for more information. -@see @ref Debug.ino for example usage. +@see @ref Debug.ino "examples/Arduino-Helpers/Debug" for example usage. ## Adding a 'Debug' menu in the Arduino IDE If you are going to be debugging a lot, it might be useful to just add a menu option in the IDE to disable/enable debugging. -This can be easily done by editing the `boards.txt` file. +This can be done relatively easily by editing the `boards.txt` file. Open the `boards.txt` file of the board you are using. If you're using version 1.8.x of the Arduino IDE, it'll be located in @@ -39,7 +39,11 @@ uno.build.extra_flags={build.debug_output} ``` If your board already has an `extra_flags` entry, just add -` {build.debug_output}` to the end (separated by a space). +` {build.debug_output}` to the end (separated by a space). For example: + +``` +leonardo.build.extra_flags={build.usb_flags} {build.debug_output} +``` A complete list of all the AVR boards and their added debug options can be found [**here**](https://github.com/tttapa/Arduino-Helpers/blob/master/docs/extra/boards.txt.example). diff --git a/doxygen/scripts/examples.py b/doxygen/scripts/examples.py index 18fb01434..c0d46ef40 100755 --- a/doxygen/scripts/examples.py +++ b/doxygen/scripts/examples.py @@ -7,6 +7,7 @@ dirnm = os.path.dirname(os.path.realpath(__file__)) doxydir = join(dirnm, '..') +exclude = re.compile(r'(examples/Arduino-Helpers/(?!Hardware/1\.FilteredAnalog))|(examples/test/)') template = """\ /** @@ -47,6 +48,9 @@ def stripQuotes(string): output = "" for root, dirs, files in os.walk(exampledir): + if exclude is not None and re.search(exclude, root) is not None: + print('Excluding', root) + continue print('Scanning', root) for file in sorted(files): if file.endswith('.ino'): diff --git a/examples/.clang-format b/examples/.clang-format index f763968de..2fa7d6e43 100644 --- a/examples/.clang-format +++ b/examples/.clang-format @@ -91,9 +91,8 @@ AlwaysBreakTemplateDeclarations: true PenaltyReturnTypeOnItsOwnLine: 60 PointerAlignment: Right RawStringFormats: - - Delimiter: pb - Language: TextProto - BasedOnStyle: google + - Language: TextProto + - BasedOnStyle: google ReflowComments: false SortIncludes: true SortUsingDeclarations: true diff --git a/examples/Arduino-Helpers/Debug/Debug/Debug.ino b/examples/Arduino-Helpers/Debug/Debug/Debug.ino index 970b5cfc6..acc44b3a4 100644 --- a/examples/Arduino-Helpers/Debug/Debug/Debug.ino +++ b/examples/Arduino-Helpers/Debug/Debug/Debug.ino @@ -2,12 +2,14 @@ * This examples shows how use the debug macros for printing different kinds of * debugging information * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 + * @boards AVR, AVR USB, Nano Every, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 * * Behavior * -------- * - * - Enable debugging in `src/AH/Settings/Settings.hpp`. + * - Enable debugging by defining the @ref DEBUG_OUT macro in + * `src/AH/Settings/Settings.hpp` or enable debugging globally as explained + * [here](@ref md_pages_Debug) * - Upload the sketch to the Arduino, and open the Serial Monitor * (`CTRL+Shift+M`) * - Every five seconds, debugging information is printed, for example: @@ -25,7 +27,8 @@ * ~~~ * * @see @ref md_pages_Debug for instructions on how to add an option in the - * Arduino IDE to easily enable and disable debugging. + * Arduino IDE to easily enable and disable debugging globally without + * editing the settings file. * * Written by PieterP, 2018-07-31 * https://github.com/tttapa/Arduino-Helpers diff --git a/examples/Arduino-Helpers/Hardware/1.FilteredAnalog-Advanced/1.FilteredAnalog-Advanced.ino b/examples/Arduino-Helpers/Hardware/1.FilteredAnalog-Advanced/1.FilteredAnalog-Advanced.ino new file mode 100644 index 000000000..4be676e08 --- /dev/null +++ b/examples/Arduino-Helpers/Hardware/1.FilteredAnalog-Advanced/1.FilteredAnalog-Advanced.ino @@ -0,0 +1,86 @@ +/** + * This examples shows how to filter an analog input, so you can get the + * position of a knob or fader without noise. + * + * @boards AVR, AVR USB, Nano Every, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 + * + * Connections + * ----------- + * + * - A0: wiper of a potentiometer + * + * Connect the left terminal of the potentiometer to ground, and the right one + * to VCC. + * + * Behavior + * -------- + * + * - Upload the sketch to the Arduino, and open the Serial Monitor + * (`CTRL+Shift+M`) + * - When you turn the potentiometer, you should see the position of the + * potentiometer being printed as a number between 0 and 1023. + * - The analog input is filtered, so there shouldn't be any noise on the + * position. If there is, check your wiring, and make sure that the resistance + * of the potentiometer isn't too high (10 kΩ is ideal). + * + * A simpler version of this example can be found in + * @ref 1.FilteredAnalog.ino. + * + * Written by PieterP, 2019-10-10 + * https://github.com/tttapa/Arduino-Filters + */ + +// Include the library +#include + +#include +#include + +// Create a filtered analog object on pin A0: +FilteredAnalog<10, // Output precision in bits + 2, // The amount of filtering + uint16_t, // The integer type for the filter calculations + analog_t // The integer type for the upscaled analog values + > + analog = A0; + +// If you want more filtering, you can increase the filter shift factor. +// The number of bits required for the intermediate calculations increases if +// you do so, so you have to use a larger type as well. +FilteredAnalog<10, // Output precision in bits + 6, // The amount of filtering + uint32_t // The integer type for the filter calculations + > + moreFiltering = A0; + +// If you don't care about the specific settings, and just want a +// default that works, you can use the following: +FilteredAnalog<> simpleAnalog = A0; + +void setup() { + Serial.begin(115200); + while (!Serial); + // Select the correct ADC resolution + FilteredAnalog<>::setupADC(); + // If you want, you can add mapping functions to invert the input, for example + analog.invert(); + // Initialize the filter to whatever the value on the input is right now + // (otherwise, the filter is initialized to zero and you get transients) + analog.resetToCurrentValue(); +} + +void loop() { + // Read the analog input every millisecond, and print if the value has changed + static Timer timer = 1; // ms + if (timer && analog.update()) + Serial.println(analog.getValue()); + + // Explanation: + // + // analog.update() reads the analog input, applies the filters, + // saves the value, and returns true if the value has changed. + // You can then retreive the new value using analog.getValue(). + // + // Timer is just a "Blink Without Delay" wrapper, it returns true + // every time the specified amount of time has passed. +} diff --git a/examples/Arduino-Helpers/Hardware/1.FilteredAnalog/1.FilteredAnalog.ino b/examples/Arduino-Helpers/Hardware/1.FilteredAnalog/1.FilteredAnalog.ino index e1db9e567..9f09322c4 100644 --- a/examples/Arduino-Helpers/Hardware/1.FilteredAnalog/1.FilteredAnalog.ino +++ b/examples/Arduino-Helpers/Hardware/1.FilteredAnalog/1.FilteredAnalog.ino @@ -2,7 +2,7 @@ * This examples shows how to filter an analog input, so you can get the * position of a knob or fader without noise. * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 + * @boards AVR, AVR USB, Nano Every, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 * * Connections * ----------- @@ -23,45 +23,31 @@ * position. If there is, check your wiring, and make sure that the resistance * of the potentiometer isn't too high (10 kΩ is ideal). * + * The example @ref 1.FilteredAnalog-Advanced.ino has more information about the + * parameters you can pass to the FilteredAnalog class to tweak the filters, + * increase the resolution, etc. + * * Written by PieterP, 2019-10-10 - * https://github.com/tttapa/Arduino-Helpers + * https://github.com/tttapa/Arduino-Filters */ // Include the library -#include +#include #include #include -// Create a filtered analog object on pin A0: -FilteredAnalog<10, // Output precision in bits - 2, // The amount of filtering - uint16_t, // The integer type for the filter calculations - analog_t // The integer type for the upscaled analog values - > - analog = A0; - -// If you want more filtering, you can increase the filter shift factor. -// The number of bits required for the intermediate calculations increases if -// you do so, so you have to use a larger type as well. -FilteredAnalog<10, // Output precision in bits - 6, // The amount of filtering - uint32_t // The integer type for the filter calculations - > - moreFiltering = A0; - -// If you don't care about the specific settings, and just want a -// default that works, you can use the following: -FilteredAnalog<> simpleAnalog = A0; +// Create a filtered analog object on pin A0, with the default settings: +FilteredAnalog<> analog = A0; void setup() { Serial.begin(115200); - while (!Serial) - ; + while (!Serial); // Select the correct ADC resolution - FilteredAnalog<>::setupADC(); - // If you want, you can add mapping functions to invert the input, for example - analog.invert(); + analog.setupADC(); + // Initialize the filter to whatever the value on the input is right now + // (otherwise, the filter is initialized to zero and you get transients) + analog.resetToCurrentValue(); } void loop() { @@ -69,13 +55,13 @@ void loop() { static Timer timer = 1; // ms if (timer && analog.update()) Serial.println(analog.getValue()); - - // Explanation: - // - // analog.update() reads the analog input, applies the filters, - // saves the value, and returns true if the value has changed. - // You can then retreive the new value using analog.getValue(). - // - // Timer is just a "Blink Without Delay" wrapper, it returns true - // every time the specified amount of time has passed. } + +// Explanation: +// +// analog.update() reads the analog input, applies the filters, +// saves the value, and returns true if the value has changed. +// You can then retreive the new value using analog.getValue(). +// +// Timer is just a "Blink Without Delay" wrapper, it returns true +// every time the specified amount of time has passed. diff --git a/examples/Arduino-Helpers/Hardware/2.Button/2.Button.ino b/examples/Arduino-Helpers/Hardware/2.Button/2.Button.ino index 1d842a955..5c2a68c59 100644 --- a/examples/Arduino-Helpers/Hardware/2.Button/2.Button.ino +++ b/examples/Arduino-Helpers/Hardware/2.Button/2.Button.ino @@ -1,7 +1,7 @@ /** * This examples shows how to use the debounced Button class to toggle an LED. * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 + * @boards AVR, AVR USB, Nano Every, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 * * Connections * ----------- @@ -26,7 +26,7 @@ #include // Create a Button object that reads a push button connected to pin 2: -Button pushbutton = {2}; +Button pushbutton {2}; // The pin with the LED connected: const pin_t ledPin = LED_BUILTIN; @@ -43,7 +43,8 @@ void loop() { // Read the digital input, debounce the signal, and check the state of // the button: if (pushbutton.update() == Button::Falling) { - ledState = !ledState; // Invert the state of the LED - digitalWrite(ledPin, ledState); // Update the LED with the new state + ledState = !ledState; // Invert the state of the LED + // Update the LED with the new state + digitalWrite(ledPin, ledState ? HIGH : LOW); } } diff --git a/examples/Arduino-Helpers/Hardware/3.MultiPurposeButton/3.MultiPurposeButton.ino b/examples/Arduino-Helpers/Hardware/3.MultiPurposeButton/3.MultiPurposeButton.ino new file mode 100644 index 000000000..0b380d97c --- /dev/null +++ b/examples/Arduino-Helpers/Hardware/3.MultiPurposeButton/3.MultiPurposeButton.ino @@ -0,0 +1,60 @@ +/** + * This examples shows how to use the MultiPurposeButton class to detect + * different kinds of push button events. + * + * @boards AVR, AVR USB, Nano Every, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 + * + * Connections + * ----------- + * + * - 2: Momentary push button (other pin to ground) + * + * The internal pull-up resistor will be enabled. + * + * Behavior + * -------- + * + * - Short presses, long presses, multiple presses, etc. are printed to the + * Serial monitor. + * + * Written by PieterP, 2022-05-07 + * https://github.com/tttapa/Arduino-Helpers + */ + +#include // https://github.com/tttapa/Arduino-Helpers + +#include + +// Create a Button object that reads a push button connected to pin 2: +MultiPurposeButton btn{2}; + +void setup() { + Serial.begin(115200); + btn.setLongPressDelay(1000); + btn.setMultiPressDelay(400); + btn.begin(); +} + +void loop() { + auto longPressTime = btn.getLongPressedTime(); + switch (btn.update()) { + case btn.None: break; + case btn.PressStart: Serial << "Pressed" << endl; break; + case btn.ShortPressRelease: + Serial << "Released after short press" << endl; + break; + case btn.LongPress: Serial << "Long press" << endl; break; + case btn.LongPressRelease: + Serial << "Released after long press (" << longPressTime << " ms)" + << endl; + break; + case btn.MultiPress: + Serial << "Consecutive presses: " << btn.getCurrentMultiPressCount() + 1 + << endl; + break; + case btn.MultiPressDone: + Serial << "Counted " << btn.getMultiPressCount() + 1 + << " consecutive presses" << endl; + break; + } +} diff --git a/examples/Arduino-Helpers/Hardware/Blink-Frequency-Buttons/Blink-Frequency-Buttons.ino b/examples/Arduino-Helpers/Hardware/Blink-Frequency-Buttons/Blink-Frequency-Buttons.ino index ae3245f13..5f7c12723 100644 --- a/examples/Arduino-Helpers/Hardware/Blink-Frequency-Buttons/Blink-Frequency-Buttons.ino +++ b/examples/Arduino-Helpers/Hardware/Blink-Frequency-Buttons/Blink-Frequency-Buttons.ino @@ -2,7 +2,7 @@ * This examples shows how to use two push buttons to set the frequency at which * an LED blinks. * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 + * @boards AVR, AVR USB, Nano Every, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 * * Connections * ----------- @@ -36,7 +36,7 @@ const unsigned long minInterval = 100; // ms const unsigned long defaultInterval = 500; // ms const int intervalDelta = 100; // ms -IncrementDecrementButtons buttons = {2, 3}; +IncrementDecrementButtons buttons {2, 3}; Timer timer = defaultInterval; void setup() { @@ -48,15 +48,21 @@ void setup() { void loop() { // toggle the LED when the given number of milliseconds have passed if (timer) - digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); + digitalWrite(LED_BUILTIN, digitalRead(LED_BUILTIN) ? LOW : HIGH); // read the buttons, and change interval accordingly switch (buttons.update()) { - case IncrementDecrementButtons::Increment: - timer.setInterval(max(timer.getInterval() - intervalDelta, minInterval)); + case IncrementDecrementButtons::IncrementShort: + case IncrementDecrementButtons::IncrementLong: + case IncrementDecrementButtons::IncrementHold: + timer.setInterval( + AH::max(timer.getInterval() - intervalDelta, minInterval)); break; - case IncrementDecrementButtons::Decrement: - timer.setInterval(min(timer.getInterval() + intervalDelta, maxInterval)); + case IncrementDecrementButtons::DecrementShort: + case IncrementDecrementButtons::DecrementLong: + case IncrementDecrementButtons::DecrementHold: + timer.setInterval( + AH::min(timer.getInterval() + intervalDelta, maxInterval)); break; case IncrementDecrementButtons::Reset: timer.setInterval(defaultInterval); diff --git a/examples/Arduino-Helpers/Hardware/Extended Input & Output/1. Input/1. Multiplexers/1.AnalogReadSerial/1.AnalogReadSerial.ino b/examples/Arduino-Helpers/Hardware/Extended Input & Output/1. Input/1. Multiplexers/1.AnalogReadSerial/1.AnalogReadSerial.ino index 98b0a2d74..f3c9844d0 100644 --- a/examples/Arduino-Helpers/Hardware/Extended Input & Output/1. Input/1. Multiplexers/1.AnalogReadSerial/1.AnalogReadSerial.ino +++ b/examples/Arduino-Helpers/Hardware/Extended Input & Output/1. Input/1. Multiplexers/1.AnalogReadSerial/1.AnalogReadSerial.ino @@ -2,7 +2,7 @@ * This is an example of the AnalogMultiplex class. It prints the values of all * 16 inputs of a multiplexers to the serial monitor. * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 + * @boards AVR, AVR USB, Nano Every, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 * * Connections * ----------- @@ -38,14 +38,14 @@ #include // Instantiate a multiplexer -CD74HC4067 mux = { +CD74HC4067 mux { A0, // analog pin {3, 4, 5, 6}, // Address pins S0, S1, S2, S3 // 7, // Optionally, specify the enable pin }; // Alternatively, if you have a 3-bit mux: -// CD74HC4051 mux = { +// CD74HC4051 mux { // A0, // {3, 4, 5}, // // 7, // Optional @@ -64,7 +64,7 @@ void loop() { Serial.println(); } -// Or if you're a cool kid, use a range-based for loop +// A more fancy approach could be to use a range-based for loop void loop2() { for (pin_t pin : mux.pins()) { Serial.print(analogRead(pin)); diff --git a/examples/Arduino-Helpers/Hardware/Extended Input & Output/1. Input/1. Multiplexers/2.DigitalReadSerial/2.DigitalReadSerial.ino b/examples/Arduino-Helpers/Hardware/Extended Input & Output/1. Input/1. Multiplexers/2.DigitalReadSerial/2.DigitalReadSerial.ino index e1b70fd48..45ce72d83 100644 --- a/examples/Arduino-Helpers/Hardware/Extended Input & Output/1. Input/1. Multiplexers/2.DigitalReadSerial/2.DigitalReadSerial.ino +++ b/examples/Arduino-Helpers/Hardware/Extended Input & Output/1. Input/1. Multiplexers/2.DigitalReadSerial/2.DigitalReadSerial.ino @@ -2,7 +2,7 @@ * This is an example of the AnalogMultiplex class. It prints the states of all * 16 switches connected to a multiplexers to the serial monitor. * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 + * @boards AVR, AVR USB, Nano Every, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 * * Connections * ----------- @@ -40,14 +40,14 @@ #include // Instantiate a multiplexer -CD74HC4067 mux = { +CD74HC4067 mux { 2, // input pin {3, 4, 5, 6}, // Address pins S0, S1, S2, S3 // 7, // Optionally, specify the enable pin }; // Alternatively, if you have a 3-bit mux: -// CD74HC4051 mux = { +// CD74HC4051 mux { // 2, // {3, 4, 5}, // // 7, // Optional @@ -68,7 +68,7 @@ void loop() { Serial.println(); } -// Or if you're a cool kid, use a range-based for loop +// A more fancy approach could be to use a range-based for loop void loop2() { for (pin_t pin : mux.pins()) { Serial.print(digitalRead(pin)); diff --git a/examples/Arduino-Helpers/Hardware/Extended Input & Output/1. Input/1. Multiplexers/3.FilteredAnalogReadSerial/3.FilteredAnalogReadSerial.ino b/examples/Arduino-Helpers/Hardware/Extended Input & Output/1. Input/1. Multiplexers/3.FilteredAnalogReadSerial/3.FilteredAnalogReadSerial.ino new file mode 100644 index 000000000..a544df4fd --- /dev/null +++ b/examples/Arduino-Helpers/Hardware/Extended Input & Output/1. Input/1. Multiplexers/3.FilteredAnalogReadSerial/3.FilteredAnalogReadSerial.ino @@ -0,0 +1,75 @@ +/** + * This is an example of the AnalogMultiplex and the FilteredAnalog classes. + * It prints the filtered values of all 16 inputs of a multiplexers to the + * serial monitor. + * + * @boards AVR, AVR USB, Nano Every, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 + * + * Connections + * ----------- + * + * - A0: CD74HC4067 signal pin ("common input/output") + * - 3: CD74HC4067 address pin S0 + * - 4: CD74HC4067 address pin S1 + * - 5: CD74HC4067 address pin S2 + * - 6: CD74HC4067 address pin S3 + * + * Optionally you can connect the enable pin as well, this is useful + * if you want to use multiple multiplexers with the same address + * lines and the same analog input. Otherwise, just connect the enable + * pin to ground. + * + * If you are using a 3-bit multiplexer, like the CD74HC4051, you can + * uncomment the code specific to this multiplexer, and use only three + * address pins. + * + * Behavior + * -------- + * + * Connect some potentiometers or other analog sensors to the 16 inputs + * of the multiplexer, and open the serial monitor (CTRL+SHIFT+M) or the + * serial plotter (CTRL+SHIFT+L). You should see all 16 signals printed + * or plotted. + * + * Written by Pieter P, 09-04-2019 + * https://github.com/tttapa/Arduino-Helpers + */ + +#include // Include the Arduino Helpers library + +#include +#include +#include // copyAs<> + +// Instantiate a multiplexer +CD74HC4067 mux { + A0, // analog pin + {3, 4, 5, 6}, // Address pins S0, S1, S2, S3 + // 7, // Optionally, specify the enable pin +}; + +// Alternatively, if you have a 3-bit mux: +// CD74HC4051 mux { +// A0, +// {3, 4, 5}, +// // 7, // Optional +// }; + +// Convert the list of pins of the multiplexer to an array +// of FilteredAnalog objects. +auto filteredAnalogs = copyAs>(mux.pins()); + +void setup() { + Serial.begin(115200); + mux.begin(); // Initialize multiplexer +} + +void loop() { + // Loop over all FilteredAnalog objects in the array + for (auto &analog : filteredAnalogs) { + analog.update(); // actually read the analog value and filter it + Serial.print(analog.getValue()); + Serial.print('\t'); + } + Serial.println(); +} diff --git a/examples/Arduino-Helpers/Hardware/Extended Input & Output/2. Output/1. Shift Registers/1.SPI-Blink/1.SPI-Blink.ino b/examples/Arduino-Helpers/Hardware/Extended Input & Output/2. Output/1. Shift Registers/1.SPI-Blink/1.SPI-Blink.ino index 5a8600d4f..502dc131d 100644 --- a/examples/Arduino-Helpers/Hardware/Extended Input & Output/2. Output/1. Shift Registers/1.SPI-Blink/1.SPI-Blink.ino +++ b/examples/Arduino-Helpers/Hardware/Extended Input & Output/2. Output/1. Shift Registers/1.SPI-Blink/1.SPI-Blink.ino @@ -2,7 +2,7 @@ * This example demonstrates the use of shift registers as if they were just * normal IO pins. The SPI interface is used because it's easy and fast. * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 + * @boards AVR, AVR USB, Nano Every, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 * * Connections * ----------- @@ -33,7 +33,7 @@ using namespace ExtIO; // Bring the ExtIO pin functions into your sketch // Instantiate a shift register with the SPI slave select pin as latch pin, most // significant bit first, and a total of 8 outputs. -SPIShiftRegisterOut<8> sreg = {SS, MSBFIRST}; +SPIShiftRegisterOut<8> sreg {SPI, SS, MSBFIRST}; const pin_t ledPin = sreg.pin(0); // first pin of the shift register diff --git a/examples/Arduino-Helpers/Hardware/Extended Input & Output/2. Output/1. Shift Registers/2.BitBang-Blink/2.BitBang-Blink.ino b/examples/Arduino-Helpers/Hardware/Extended Input & Output/2. Output/1. Shift Registers/2.BitBang-Blink/2.BitBang-Blink.ino index 970ac46c4..8dfd7e9eb 100644 --- a/examples/Arduino-Helpers/Hardware/Extended Input & Output/2. Output/1. Shift Registers/2.BitBang-Blink/2.BitBang-Blink.ino +++ b/examples/Arduino-Helpers/Hardware/Extended Input & Output/2. Output/1. Shift Registers/2.BitBang-Blink/2.BitBang-Blink.ino @@ -3,7 +3,7 @@ * normal IO pins. This version uses bit-banging to drive the shift register. * You should probably be using the SPI version instead. * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 + * @boards AVR, AVR USB, Nano Every, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 * * Connections * ----------- @@ -38,7 +38,7 @@ const pin_t clockPin = 13; // Pin connected to SH_CP of 74HC595 // Instantiate a shift register on the correct pins, most significant bit first, // and a total of 8 outputs. -ShiftRegisterOut<8> sreg = {dataPin, clockPin, latchPin, MSBFIRST}; +ShiftRegisterOut<8> sreg {dataPin, clockPin, latchPin, MSBFIRST}; const pin_t ledPin = sreg.pin(0); // first pin of the shift register diff --git a/examples/Arduino-Helpers/Hardware/Extended Input & Output/2. Output/1. Shift Registers/2.RGB-LED-Chaser/2.RGB-LED-Chaser.ino b/examples/Arduino-Helpers/Hardware/Extended Input & Output/2. Output/1. Shift Registers/2.RGB-LED-Chaser/2.RGB-LED-Chaser.ino index dbef46305..d950ec439 100644 --- a/examples/Arduino-Helpers/Hardware/Extended Input & Output/2. Output/1. Shift Registers/2.RGB-LED-Chaser/2.RGB-LED-Chaser.ino +++ b/examples/Arduino-Helpers/Hardware/Extended Input & Output/2. Output/1. Shift Registers/2.RGB-LED-Chaser/2.RGB-LED-Chaser.ino @@ -3,7 +3,7 @@ * library. It creates light effects using three 8-bit shift registers and some * RGB LEDs. * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 + * @boards AVR, AVR USB, Nano Every, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 * * Connections * ----------- @@ -73,7 +73,7 @@ const uint8_t ShiftRegisterOutRGB::blueBit = 2; // Create a new shift register output connected to pins 11, 13 and 10, // shift the data out with the most significant bit first. // There are 24 (= 3×8) outputs in total. -SPIShiftRegisterOut<24> sreg = {SS, MSBFIRST}; +SPIShiftRegisterOut<24> sreg {SPI, SS, MSBFIRST}; void setup() { // Initialize the shift registers diff --git a/examples/Arduino-Helpers/Hardware/Extended Input & Output/2. Output/2. MAX7219/1.MAX7219-Blink/1.MAX7219-Blink.ino b/examples/Arduino-Helpers/Hardware/Extended Input & Output/2. Output/2. MAX7219/1.MAX7219-Blink/1.MAX7219-Blink.ino new file mode 100644 index 000000000..603fe3dd9 --- /dev/null +++ b/examples/Arduino-Helpers/Hardware/Extended Input & Output/2. Output/2. MAX7219/1.MAX7219-Blink/1.MAX7219-Blink.ino @@ -0,0 +1,51 @@ +/** + * This example demonstrates the use of MAX7219 LED outputs as if they were just + * normal IO pins, using `digitalWrite`. + * + * @boards AVR, AVR USB, Nano Every, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 + * + * Connections + * ----------- + * + * - SS: MAX7219 CS + * - MOSI: MAX7219 DIN + * - SCK: MAX7219 CLK + * + * Behavior + * -------- + * + * This sketch will blink the first and the last LEDs once a second, in an + * alternating pattern. + * + * Written by PieterP, 2020-03-24 + * https://github.com/tttapa/Arduino-Helpers + */ + +#include // Include the Arduino Helpers library. +#include + +using namespace ExtIO; // Bring the ExtIO pin functions into your sketch + +// Instantiate a MAX7219 with the SPI slave select pin as latch pin +// There's just 1 MAX7219 in the chain, if you have more of them daisy-chained +// together, you can increase the template argument (between angled brackets) +MAX7219<1> max7219 {SPI, SS}; + +const pin_t ledPin1 = max7219.pin(0); // first LED of the MAX7219 +const pin_t ledPin2 = max7219.pin(63); // last LED of the MAX7219 + +void setup() { + max7219.begin(); // Initialize the shift registers + pinMode(ledPin1, OUTPUT); // You don't even need this line, since + pinMode(ledPin2, OUTPUT); // since the MAX7219's pins are always outputs +} + +void loop() { + // Toggle the state of the LEDs every 1/2 second + digitalWrite(ledPin1, HIGH); + digitalWrite(ledPin2, LOW); + delay(500); + digitalWrite(ledPin1, LOW); + digitalWrite(ledPin2, HIGH); + delay(500); +} diff --git a/examples/Arduino-Helpers/Hardware/Extended Input & Output/3. In&Out/MCP23017/MCP23017.ino b/examples/Arduino-Helpers/Hardware/Extended Input & Output/3. In&Out/MCP23017/MCP23017.ino new file mode 100644 index 000000000..43ca542d6 --- /dev/null +++ b/examples/Arduino-Helpers/Hardware/Extended Input & Output/3. In&Out/MCP23017/MCP23017.ino @@ -0,0 +1,64 @@ +/** + * This example demonstrates the use of MCP23017 IO expanders as if they were + * just normal IO pins. + * + * @boards AVR, AVR USB, Nano Every, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 + * + * Connections + * ----------- + * + * - SDA: MCP23017 SDA + * - SCK: MCP23017 SCK + * - 2: MCP23017 INT A or INT B + * + * Connect an LED (and series resistor) between pin GPA0 of the MCP and ground. + * Connect a push button between pin GPB0 of the MCP and ground. The internal + * pull-up resistor will be used. + * + * Tie the three address lines of the MCP to ground. + * + * Behavior + * -------- + * + * When the push button is pressed, the LED turns on. + * + * Written by PieterP, 2020-11-20 + * https://github.com/tttapa/Arduino-Helpers + */ + +#include +#include +#include + +using namespace ExtIO; // Use the extended input/output functions + +using WireType = decltype(Wire); // The type of the I²C driver to use +MCP23017 mcp { + Wire, // The I²C driver to use + 0x0, // The I²C address offset (depends on the state of the address pins) + 2, // Optional: interrupt pin to detect input changes +}; + +pin_t ledPin = mcp.pinA(0); // GPIOA0 +pin_t buttonPin = mcp.pinB(0); // GPIOB0 + +void setup() { + Wire.begin(); // Initialize the I²C interface + Wire.setClock(800000); // Faster I²C clock + mcp.begin(); // Initialize the MCP23017 + + pinMode(ledPin, OUTPUT); + pinMode(buttonPin, INPUT_PULLUP); +} + +void loop() { + auto buttonState = digitalRead(buttonPin); + digitalWrite(ledPin, buttonState ? LOW : HIGH); +} + +// Note: +// The “interrupt” pin is not used to trigger an actual interrupt on the +// microcontroller. It is just used to check whether any of the inputs of +// the MCP23017 changed without having to do an I²C transaction. Using this +// pin can speed up your code, but it's not necessary, you can leave it out +// in the MCP23017 construction at the top of the sketch. diff --git a/examples/Arduino-Helpers/Hardware/Extended Input & Output/3. In&Out/Toggle-LEDs/Toggle-LEDs.ino b/examples/Arduino-Helpers/Hardware/Extended Input & Output/3. In&Out/Toggle-LEDs/Toggle-LEDs.ino index 3c4275a58..f1e482355 100644 --- a/examples/Arduino-Helpers/Hardware/Extended Input & Output/3. In&Out/Toggle-LEDs/Toggle-LEDs.ino +++ b/examples/Arduino-Helpers/Hardware/Extended Input & Output/3. In&Out/Toggle-LEDs/Toggle-LEDs.ino @@ -2,7 +2,7 @@ * This example demonstrates the use of push buttons and LEDs and how to use * shift registers and analog multiplexers to save pins. * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 + * @boards AVR, AVR USB, Nano Every, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 * * Connections * ----------- @@ -43,20 +43,21 @@ */ #include // Include the Arduino Helpers library. + #include #include #include #include // Instantiate a multiplexer -CD74HC4067 mux = { +CD74HC4067 mux { 2, // input pin {3, 4, 5, 6}, // Address pins S0, S1, S2, S3 // 7, // Optionally, specify the enable pin }; // Alternatively, if you have a 3-bit mux: -// CD74HC4051 mux = { +// CD74HC4051 mux { // 2, // {3, 4, 5}, // // 7, // Optional @@ -64,7 +65,7 @@ CD74HC4067 mux = { // Instantiate a shift register with the SPI slave select pin as latch pin, most // significant bit first, and a total of 16 outputs. -SPIShiftRegisterOut sreg = {SS, MSBFIRST}; +SPIShiftRegisterOut sreg {SPI, SS, MSBFIRST}; // Instantiate an array of momentary push buttons. // It generates an array of Buttons on pins: @@ -83,5 +84,5 @@ void setup() { // Initialize everything void loop() { // Check if a button is pressed, if so toggle the LED for (uint8_t i = 0; i < mux.length(); ++i) if (buttons[i].update() == Button::Falling) - sreg.digitalWrite(i, !sreg.digitalRead(i)); + sreg.digitalWrite(i, sreg.digitalRead(i) ? LOW : HIGH); } diff --git a/examples/Arduino-Helpers/Hardware/MCP23017-Encoders/MCP23017-Encoders-Interrupts/MCP23017-Encoders-Interrupts.ino b/examples/Arduino-Helpers/Hardware/MCP23017-Encoders/MCP23017-Encoders-Interrupts/MCP23017-Encoders-Interrupts.ino new file mode 100644 index 000000000..33c201bc7 --- /dev/null +++ b/examples/Arduino-Helpers/Hardware/MCP23017-Encoders/MCP23017-Encoders-Interrupts/MCP23017-Encoders-Interrupts.ino @@ -0,0 +1,96 @@ +/** + * This example demonstrates the use of MCP23017 I²C port expanders with rotary + * encoders, using hardware interrupts so you don't miss any pulses. + * + * @boards Teensy 3.x + * + * This only works on Teensy boards, and maybe on other ARM boards. + * I've tested it using a Teensy 3.2 and a Teensy 4.0. + * + * AVR boards (Arduino Uno, Mega, etc.) don't support I²C inside of interrupt + * service routines, so there's no way to read the state of the MCP23017 + * inside of an ISR. + * The same goes for ESP32 and ESP8266, although there may be ways around + * this by using alternative I²C drivers or by using FreeRTOS features. + * + * Connections + * ----------- + * + * - SDA: MCP23017 SDA + * - SCL: MCP23017 SCL + * - 12: MCP23017 INTA or INTB + * + * Connect up to 8 encoders to the MCP23017's GPIO pins: + * the first encoder connects to GPIO A0 and A1, the second encoder connects to + * GPIO A2 and A3, ..., the eighth encoder connects to GPIO B6 and B7. + * Connect the "common" pins of the encoders to ground. + * The built-in pull-up resistors of the MCP23017 will be enabled. + * + * Make sure that the reset and address pins are all configured correctly + * (reset to Vcc; A0, A1 and A2 to ground). + * + * If you need more than one MCP23017 with encoders, you can connect their + * interrupt pins together. This does result in higher latency, because on + * average, half of the total number of MCP23017s have to be polled, which is + * relatively slow, and might lead to missed pulses when using a large number + * of encoders. + * + * Behavior + * -------- + * + * When the position of one of the encoders changes, it is printed to the Serial + * monitor. + * + * The interrupt pin of the MCP23017 triggers a hardware interrupt on the + * Arduino. This means that you don't have to manually poll the encoders all + * the time. + * + * Written by PieterP, 2020-04-06 + * https://github.com/tttapa/Arduino-Helpers + */ + +#include + +#include +#include + +#include + +using WireType = decltype(Wire); // The type of I²C driver to use +using EncoderPositionType = int32_t; // The type for saving encoder positions +constexpr bool IntSafe = true; // Make it safe to call `update` in an ISR +using MCPEncoderType = MCP23017Encoders; + +const uint8_t interrupt_pin = 12; + +MCPEncoderType enc {Wire, 0x0, interrupt_pin}; +// │ │ └─ Interrupt pin +// │ └────── Address offset +// └──────────── I²C interface + +void isr() { + enc.update(); // Read the state of the encoders and update the positions +} + +void setup() { + Serial.begin(115200); + Wire.begin(); // Must be called before enc.begin() + Wire.setClock(800000); + enc.begin(); // Initialize the MCP23017 + attachInterrupt(digitalPinToInterrupt(interrupt_pin), isr, LOW); +} + +void loop() { + // No `enc.update()` here, everything happens inside of the ISR + + // Save the previous positions + static EncoderPositionType prevPositions[8] {}; + // Check if an encoder position changed and print it + for (uint8_t i = 0; i < 8; ++i) { + auto newPosition = enc.read(i); + if (newPosition != prevPositions[i]) { + Serial << '[' << i << "] " << newPosition << endl; + prevPositions[i] = newPosition; + } + } +} diff --git a/examples/Arduino-Helpers/Hardware/MCP23017-Encoders/MCP23017-Encoders-No-Interrupts/MCP23017-Encoders-No-Interrupts.ino b/examples/Arduino-Helpers/Hardware/MCP23017-Encoders/MCP23017-Encoders-No-Interrupts/MCP23017-Encoders-No-Interrupts.ino new file mode 100644 index 000000000..0a16fad9c --- /dev/null +++ b/examples/Arduino-Helpers/Hardware/MCP23017-Encoders/MCP23017-Encoders-No-Interrupts/MCP23017-Encoders-No-Interrupts.ino @@ -0,0 +1,85 @@ +/** + * This example demonstrates the use of MCP23017 I²C port expanders with rotary + * encoders. + * + * @boards AVR, AVR USB, Nano Every, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 + * + * Connections + * ----------- + * + * - SDA: MCP23017 SDA + * - SCL: MCP23017 SCL + * - 12: MCP23017 INTA or INTB + * + * Connect up to 8 encoders to the MCP23017's GPIO pins: + * the first encoder connects to GPIO A0 and A1, the second encoder connects to + * GPIO A2 and A3, ..., the eighth encoder connects to GPIO B6 and B7. + * Connect the "common" pins of the encoders to ground. + * The built-in pull-up resistors of the MCP23017 will be enabled. + * + * Make sure that the reset and address pins are all configured correctly + * (reset to Vcc; A0, A1 and A2 to ground). + * + * If you need more than one MCP23017 with encoders, you can connect their + * interrupt pins together. This does result in higher latency, because on + * average, half of the total number of MCP23017s have to be polled, which is + * relatively slow, and might lead to missed pulses when using a large number + * of encoders. + * + * Behavior + * -------- + * + * When the position of one of the encoders changes, it is printed to the Serial + * monitor. + * + * Cautions + * -------- + * + * The interrupt pin of the MCP23017 doesn't trigger a hardware interrupt on the + * Arduino. It's used only to determine whether the Arduino should read the GPIO + * registers from the MCP23017. + * If the update function isn't called often enough, you will miss encoder + * pulses, and the position will be incorrect. + * It's very important to keep your main loop free from any code that blocks for + * more than a couple of hundreds of microseconds. + * + * Written by PieterP, 2020-04-06 + * https://github.com/tttapa/Arduino-Helpers + */ + +#include + +#include +#include + +#include + +using WireType = decltype(Wire); // The type of I²C driver to use +using EncoderPositionType = int32_t; // The type for saving encoder positions +using MCPEncoderType = MCP23017Encoders; + +MCPEncoderType enc {Wire, 0x0, 12}; +// │ │ └─ Interrupt pin +// │ └────── Address offset +// └──────────── I²C interface + +void setup() { + Serial.begin(115200); + Wire.begin(); // Must be called before enc.begin() + Wire.setClock(800000); + enc.begin(); // Initialize the MCP23017 +} + +void loop() { + enc.update(); // Read the state of the encoders and update the positions + + // Save the previous positions + static EncoderPositionType prevPositions[8] {}; + // Check if an encoder position changed and print it + for (uint8_t i = 0; i < 8; ++i) { + if (enc.read(i) != prevPositions[i]) { + Serial << '[' << i << "] " << enc.read(i) << endl; + prevPositions[i] = enc.read(i); + } + } +} diff --git a/examples/Arduino-Helpers/Hardware/Pin-Change-Interrupt-Encoders/Pin-Change-Interrupt-Encoders.ino b/examples/Arduino-Helpers/Hardware/Pin-Change-Interrupt-Encoders/Pin-Change-Interrupt-Encoders.ino new file mode 100644 index 000000000..cfcb2c9a0 --- /dev/null +++ b/examples/Arduino-Helpers/Hardware/Pin-Change-Interrupt-Encoders/Pin-Change-Interrupt-Encoders.ino @@ -0,0 +1,81 @@ +/** + * This example reads multiple encoders using pin change interrupts, on an + * Arduino Uno or Nano. + * + * @boards AVR + * + * The ATmega328P microcontroller only has two interrupt pins (2 and 3), so if + * you want to use more than two interrupt-driven encoders, you'll either have + * to use a timer interrupt to continuously poll the encoders, or use the chip's + * pin change interrupts. This example demonstrates the latter. + * + * @see @ref Timer-Interrupt-Encoders.ino + * + * Familiarity with [direct port manipulation](https://www.arduino.cc/en/Reference/PortManipulation) + * is assumed. + * + * Connections + * ----------- + * + * Connect three encoders to the pins of port C as follows: + * + * - A0: pin A of encoder #0 + * - A1: pin B of encoder #0 + * - A2: pin A of encoder #1 + * - A3: pin B of encoder #1 + * - A4: pin A of encoder #2 + * - A5: pin B of encoder #2 + * + * Connect the common pins to ground, the internal pull-up resistors will be + * enabled. + * + * Behavior + * -------- + * + * When the position of one of the encoders changes, it is printed to the Serial + * monitor. + * + * Written by PieterP, 2021-08-11 + * https://github.com/tttapa/Arduino-Helpers + */ + +#include +#include + +// The number of encoders to read: +constexpr uint8_t num_enc = 3; +// Mask the bottom 6 bits of the GPIO registers (2 pins × 3 encoders). +// This determines which pins are used: +const uint8_t pin_mask = 0x3F; +// The actual encoder object that keeps track of the encoder state: +RegisterEncoders encoders; +// AVR uses 8-bit GPIO registers, so the register type is uint8_t. +// Then we specify the number of encoders, the position type, +// and whether the encoders should be interrupt-safe: since we'll +// be calling `encoders.update()` in an interrupt handler, it is +// important that this is set to true. + +// Pin change interrupt handler that reads the pins and updates the state: +ISR (PCINT1_vect) { encoders.update(PINC & pin_mask); } // read port C + +void setup() { + PCMSK1 |= pin_mask; // enable pin change interrupt for given pins in port C + DDRC &= ~pin_mask; // input mode for port C + PORTC |= pin_mask; // enable pull-up resistors for port C + PCICR |= 1 << 1; // enable pin change interrupt for port C + Serial.begin(115200); +} + +void loop() { + // The previous position of each encoder, to detect changes: + static int32_t prevPos[num_enc] {}; + + // Read the encoder positions and print if they changed: + for (uint8_t i = 0; i < num_enc; ++i) { + int32_t newPos = encoders[i].read(); + if (newPos != prevPos[i]) { + Serial << '[' << i << "] " << newPos << endl; + prevPos[i] = newPos; + } + } +} diff --git a/examples/Arduino-Helpers/Hardware/Timer-Interrupt-Encoders/Timer-Interrupt-Encoders.ino b/examples/Arduino-Helpers/Hardware/Timer-Interrupt-Encoders/Timer-Interrupt-Encoders.ino new file mode 100644 index 000000000..0b949e5a8 --- /dev/null +++ b/examples/Arduino-Helpers/Hardware/Timer-Interrupt-Encoders/Timer-Interrupt-Encoders.ino @@ -0,0 +1,84 @@ +/** + * This example reads multiple encoders using a timer interrupt, on an + * Arduino Uno or Nano. + * + * @boards AVR + * + * The ATmega328P microcontroller only has two interrupt pins (2 and 3), so if + * you want to use more than two interrupt-driven encoders, you'll either have + * to use a timer interrupt to continuously poll the encoders, or use the chip's + * pin change interrupts. This example demonstrates the former. + * + * @see @ref Pin-Change-Interrupt-Encoders.ino + * + * Familiarity with [direct port manipulation](https://www.arduino.cc/en/Reference/PortManipulation) + * is assumed. + * + * Connections + * ----------- + * + * Connect three encoders to the pins of port C as follows: + * + * - A0: pin A of encoder #0 + * - A1: pin B of encoder #0 + * - A2: pin A of encoder #1 + * - A3: pin B of encoder #1 + * - A4: pin A of encoder #2 + * - A5: pin B of encoder #2 + * + * Connect the common pins to ground, the internal pull-up resistors will be + * enabled. + * + * Behavior + * -------- + * + * When the position of one of the encoders changes, it is printed to the Serial + * monitor. + * + * Written by PieterP, 2021-08-11 + * https://github.com/tttapa/Arduino-Helpers + */ + +#include +#include +#include "TimerHelpers.hpp" + +// The number of encoders to read: +constexpr uint8_t num_enc = 3; +// Mask the bottom 6 bits of the GPIO registers (2 pins × 3 encoders). +// This determines which pins are used: +const uint8_t pin_mask = 0x3F; +// The actual encoder object that keeps track of the encoder state: +RegisterEncoders encoders; +// AVR uses 8-bit GPIO registers, so the register type is uint8_t. +// Then we specify the number of encoders, the position type, +// and whether the encoders should be interrupt-safe: since we'll +// be calling `encoders.update()` in an interrupt handler, it is +// important that this is set to true. + +// Timer interrupt handler that reads the pins and updates the state: +ISR (TIMER2_COMPA_vect) { encoders.update(PINC & pin_mask); } // read port C + +void setup() { + DDRC &= ~pin_mask; // input mode for port C + PORTC |= pin_mask; // enable pull-up resistors for port C + setTimer2Prescaler(Timer2Prescaler::S8); + setTimer2WGMode(Timer2WGMode::CTC); + OCR2A = 250 - 1; // 8 kHz poll rate (if FCPU = 16'000'000) + bitSet(TIMSK2, OCIE2A); // Timer2 Compare A Match Interrupt Enable + Serial.begin(115200); +} + +void loop() { + // The previous position of each encoder, to detect changes: + static int32_t prevPos[num_enc] {}; + + // Read the encoder positions and print if they changed: + for (uint8_t i = 0; i < num_enc; ++i) { + int32_t newPos = encoders[i].read(); + if (newPos != prevPos[i]) { + Serial << '[' << i << "] " << newPos << endl; + prevPos[i] = newPos; + } + } +} diff --git a/examples/Arduino-Helpers/Hardware/Timer-Interrupt-Encoders/TimerHelpers.hpp b/examples/Arduino-Helpers/Hardware/Timer-Interrupt-Encoders/TimerHelpers.hpp new file mode 100644 index 000000000..8689e3d90 --- /dev/null +++ b/examples/Arduino-Helpers/Hardware/Timer-Interrupt-Encoders/TimerHelpers.hpp @@ -0,0 +1,53 @@ +#pragma once + +/// Timer 2 clock select (Table 17-9). +enum class Timer2Prescaler : uint8_t { + None = 0b000, + S1 = 0b001, + S8 = 0b010, + S32 = 0b011, + S64 = 0b100, + S128 = 0b101, + S256 = 0b110, + S1024 = 0b111, + Invalid = 0xFF, +}; + +/// Convert the prescaler factor to the correct bit pattern to write to the +/// TCCR0B register (Table 17-9). +constexpr inline Timer2Prescaler factorToTimer2Prescaler(uint16_t factor) { + return factor == 1 ? Timer2Prescaler::S1 + : factor == 8 ? Timer2Prescaler::S8 + : factor == 32 ? Timer2Prescaler::S32 + : factor == 64 ? Timer2Prescaler::S64 + : factor == 128 ? Timer2Prescaler::S128 + : factor == 256 ? Timer2Prescaler::S256 + : factor == 1024 ? Timer2Prescaler::S1024 + : Timer2Prescaler::Invalid; +} + +/// Timer 2 waveform generation mode (Table 17-8). +enum class Timer2WGMode : uint8_t { + Normal = 0b000, + PWM = 0b001, + CTC = 0b010, + FastPWM = 0b011, + PWM_OCRA = 0b101, + FastPWM_OCRA = 0b111, +}; + +/// Set the clock source/prescaler of Timer2 (Table 17-9). +inline void setTimer2Prescaler(Timer2Prescaler ps) { + if (ps == Timer2Prescaler::Invalid) + return; + bitWrite(TCCR2B, CS22, (static_cast(ps) >> 2) & 1); + bitWrite(TCCR2B, CS21, (static_cast(ps) >> 1) & 1); + bitWrite(TCCR2B, CS20, (static_cast(ps) >> 0) & 1); +} + +/// Set the wavefrom generation mode of Timer2 (Table 17-8). +inline void setTimer2WGMode(Timer2WGMode mode) { + bitWrite(TCCR2B, WGM22, (static_cast(mode) >> 2) & 1); + bitWrite(TCCR2A, WGM21, (static_cast(mode) >> 1) & 1); + bitWrite(TCCR2A, WGM20, (static_cast(mode) >> 0) & 1); +} diff --git a/examples/Arduino-Helpers/Math/Quaternion/Quaternion.ino b/examples/Arduino-Helpers/Math/Quaternion/Quaternion.ino new file mode 100644 index 000000000..7b5c551a2 --- /dev/null +++ b/examples/Arduino-Helpers/Math/Quaternion/Quaternion.ino @@ -0,0 +1,40 @@ +/** + * Simple Quaternion test. + * + * @boards AVR, AVR USB, Nano Every, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 + * + * Written by PieterP, 2020-03-24 + * https://github.com/tttapa/Arduino-Helpers + */ + +#include + +#include +#include + +bool close(float actual, float expected, float atol) { + return std::abs(actual - expected) <= atol; +} + +void setup() { + Serial.begin(115200); + + Vec3f vector {-0.414578098794425, 0.829156197588850, 0.375000000000000}; + Quaternion result = Quaternion::fromDirection(vector); + Quaternion expected {0.829156197588850, -0.5, -0.25, 0.0}; + float atol = 1e-7; + + Serial << setprecision(7) << "Result = " << result << endl; + + Serial << boolalpha; + Serial << close(result.w, expected.w, atol) << endl; + Serial << close(result.x, expected.x, atol) << endl; + Serial << close(result.y, expected.y, atol) << endl; + Serial << close(result.z, expected.z, atol) << endl; + + // Make sure it satisfies the definition of `fromDirection()`. + Vec3f diff = result.rotate({0, 0, 1}) - vector.normalized(); + Serial << close(diff.norm(), 0, atol) << endl; +} + +void loop() {} \ No newline at end of file diff --git a/examples/Arduino-Helpers/STL/ArraySort/ArraySort.ino b/examples/Arduino-Helpers/STL/ArraySort/ArraySort.ino index d26d0e3e3..3c5537383 100644 --- a/examples/Arduino-Helpers/STL/ArraySort/ArraySort.ino +++ b/examples/Arduino-Helpers/STL/ArraySort/ArraySort.ino @@ -1,7 +1,7 @@ /** * Example of using the standard library algorithms. * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 + * @boards AVR, AVR USB, Nano Every, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 * * This sketch creates an array with an unordered sequence of 10 numbers. * It prints the array, and then creates a reverse view on the 6 elements in the @@ -33,7 +33,7 @@ void setup() { while (!Serial) ; - Array array = {3, 5, 9, 2, 1, 8, 6, 4, 7, 0}; + Array array {3, 5, 9, 2, 1, 8, 6, 4, 7, 0}; Serial << "Before sorting: " << array << endl; diff --git a/examples/Arduino-Helpers/STL/Complex/Complex.ino b/examples/Arduino-Helpers/STL/Complex/Complex.ino index 604c86c77..6e8848eed 100644 --- a/examples/Arduino-Helpers/STL/Complex/Complex.ino +++ b/examples/Arduino-Helpers/STL/Complex/Complex.ino @@ -1,7 +1,7 @@ /** * Example of using the standard library complex numbers. * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 + * @boards AVR, AVR USB, Nano Every, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 * * **Output** * ~~~ @@ -22,7 +22,7 @@ void setup() { ; // Create a complex number - std::complex c = 2i; + std::complex c{0, 2}; // Print the square root Serial << "√(2i) = " << std::sqrt(c) << endl; diff --git a/examples/Arduino-Helpers/STL/CountPressedButtons/CountPressedButtons.ino b/examples/Arduino-Helpers/STL/CountPressedButtons/CountPressedButtons.ino index 1cb248dff..05bfcc3cf 100644 --- a/examples/Arduino-Helpers/STL/CountPressedButtons/CountPressedButtons.ino +++ b/examples/Arduino-Helpers/STL/CountPressedButtons/CountPressedButtons.ino @@ -1,7 +1,7 @@ /** * Example of using the standard library algorithms and the Button class. * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 + * @boards AVR, AVR USB, Nano Every, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 * * This sketch reads a number of push buttons or switches, and uses the standard * library algorithms to count how many of them are pressed. @@ -17,7 +17,7 @@ #include // std::accumulate // An array of debounced buttons connected to the given pins -Button buttons[] = { +Button buttons[] { 2, 3, 4, 5, 6, 7, 8, 9, }; diff --git a/examples/Arduino-Helpers/STL/Numeric/Numeric.ino b/examples/Arduino-Helpers/STL/Numeric/Numeric.ino index 8e350feec..3e791af3b 100644 --- a/examples/Arduino-Helpers/STL/Numeric/Numeric.ino +++ b/examples/Arduino-Helpers/STL/Numeric/Numeric.ino @@ -1,7 +1,7 @@ /** * Example of using the standard library numeric functions. * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 + * @boards AVR, AVR USB, Nano Every, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 * * This sketch creates an incremental array using the iota function, then * computes the inner product of the vector with itself, and uses that to diff --git a/examples/Arduino-Helpers/Timing/BlinkWithoutDelay-Timer/BlinkWithoutDelay-Timer.ino b/examples/Arduino-Helpers/Timing/BlinkWithoutDelay-Timer/BlinkWithoutDelay-Timer.ino index 414f7e5c2..adc3bbd04 100644 --- a/examples/Arduino-Helpers/Timing/BlinkWithoutDelay-Timer/BlinkWithoutDelay-Timer.ino +++ b/examples/Arduino-Helpers/Timing/BlinkWithoutDelay-Timer/BlinkWithoutDelay-Timer.ino @@ -2,7 +2,7 @@ * This examples shows how use the Timer class to blink an LED every * second, in a non-blocking fashion (without using delay). * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 + * @boards AVR, AVR USB, Nano Every, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 * * Behavior * -------- @@ -24,6 +24,6 @@ void setup() { void loop() { if (timer) { - digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); + digitalWrite(LED_BUILTIN, digitalRead(LED_BUILTIN) ? LOW : HIGH); } } diff --git a/examples/Filters/Butterworth/Butterworth.ino b/examples/Filters/Butterworth/Butterworth.ino new file mode 100644 index 000000000..90274e6ef --- /dev/null +++ b/examples/Filters/Butterworth/Butterworth.ino @@ -0,0 +1,37 @@ +/** + * Example of Butterworth filter. + * + * @boards AVR, AVR USB, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 + * + * @see + * + * Written by PieterP, 2019-11-12 + * https://github.com/tttapa/Arduino-Filters + */ + +#include + +#include +#include + +void setup() { + Serial.begin(115200); +} + +// Sampling frequency +const double f_s = 100; // Hz +// Cut-off frequency (-3 dB) +const double f_c = 25; // Hz +// Normalized cut-off frequency +const double f_n = 2 * f_c / f_s; + +// Sample timer +Timer timer = std::round(1e6 / f_s); + +// Sixth-order Butterworth filter +auto filter = butter<6>(f_n); + +void loop() { + if (timer) + Serial.println(filter(analogRead(A0))); +} \ No newline at end of file diff --git a/examples/Filters/FIRNotch/FIRNotch.ino b/examples/Filters/FIRNotch/FIRNotch.ino new file mode 100644 index 000000000..3bdf2979a --- /dev/null +++ b/examples/Filters/FIRNotch/FIRNotch.ino @@ -0,0 +1,49 @@ +/** + * Example of 50 Hz (+harmonics) notch filter. + * + * @boards AVR, AVR USB, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 + * + * @see + * + * Be careful when selecting a sampling frequency that's a multiple of 50 Hz, as + * this will alias 50 Hz harmonics to 0 Hz (DC), and this might introduce a more + * or less constant error to your measurements. + * It's best to add an analog anti-aliasing filter as well. + * + * ![Filtered mains power noise signal (blue is unfilterd, red is filtered)](50Hz-notch.png) + * + * Written by PieterP, 2019-11-22 + * https://github.com/tttapa/Arduino-Filters + */ + +#include + +#include +#include + +void setup() { + Serial.begin(1e6); +} + +// Sampling frequency +const double f_s = 250; // Hz +// Notch frequency (-∞ dB) +const double f_c = 50; // Hz +// Normalized notch frequency +const double f_n = 2 * f_c / f_s; + +// Sample timer +Timer timer = std::round(1e6 / f_s); + +// Very simple Finite Impulse Response notch filter +auto filter1 = simpleNotchFIR(f_n); // fundamental +auto filter2 = simpleNotchFIR(2 * f_n); // second harmonic + +void loop() { + if (timer) { + auto raw = analogRead(A0); + Serial.print(raw); + Serial.print('\t'); + Serial.println(filter2(filter1(raw))); + } +} diff --git a/examples/Filters/MedianFilter/MedianFilter.ino b/examples/Filters/MedianFilter/MedianFilter.ino new file mode 100644 index 000000000..cb9f7c51d --- /dev/null +++ b/examples/Filters/MedianFilter/MedianFilter.ino @@ -0,0 +1,31 @@ +/** + * Example of median filter. + * + * @boards AVR, AVR USB, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 + * + * Written by PieterP, 2019-11-16 + * https://github.com/tttapa/Arduino-Filters + */ + +#include + +#include // std::round +#include // Timer +#include // MedianFilter + +void setup() { + Serial.begin(115200); +} + +// Sampling frequency +const double f_s = 100; // Hz + +// Sample timer +Timer timer = std::round(1e6 / f_s); +// Median filter of length 10, initialized with a value of 512. +MedianFilter<10, uint16_t> medfilt = {512}; + +void loop() { + if (timer) // returns true once every 10 ms, determines sampling frequency + Serial.println(medfilt(analogRead(A0))); +} \ No newline at end of file diff --git a/examples/Filters/SimpleMovingAverage/SimpleMovingAverage.ino b/examples/Filters/SimpleMovingAverage/SimpleMovingAverage.ino new file mode 100644 index 000000000..577089a80 --- /dev/null +++ b/examples/Filters/SimpleMovingAverage/SimpleMovingAverage.ino @@ -0,0 +1,58 @@ +/** + * Example of a Simple Moving Average (SMA, also known as Running Average) + * filter. + * + * @boards AVR, AVR USB, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 + * + * Written by PieterP, 2020-01-07 + * https://github.com/tttapa/Arduino-Filters + */ + +#include + +#include // std::round +#include // Timer +#include // SMA (Simple Moving Average) + +void setup() { + Serial.begin(115200); +} + +// Sampling frequency +const double f_s = 100; // Hz + +// Sample timer +Timer timer = std::round(1e6 / f_s); +// Simple Moving Average filter of length 10, initialized with a value of 512. +SMA<10> average = {512}; + +void loop() { + if (timer) // returns true once every 10 ms, determines sampling frequency + Serial.println(average(analogRead(A0))); +} + +// By default, SMA uses `uint16_t` as the type for the input and output values, +// and `uint32_t` for the accumulator (the sum of previous inputs). +// This works fine for most use cases, but you can specifically set the types +// as well. The first type is the type of the in- and outputs, and the second +// type is the type of the accumulator. +// +// For example: +// +// SMA<10, uint32_t, uint64_t> // for very large inputs (larger than 65,535) +// SMA<10, int16_t, int32_t> // for inputs that can go negative +// SMA<10, float, float> // for decimal (floating point) values +// SMA<10, uint16_t, uint16_t> // for small input values and short averages +// +// Some important things to note: +// - Unsigned integer types are slightly faster than signed integer types +// - Integer types are significantly faster than floating point types. +// Since most sensors and ADCs return an integer, it's often a good idea to +// filter the raw integer measurement, before converting it to a floating +// point number (e.g. voltage or temperature). +// - The accumulator has to be large enough to fit N times the maximum input +// value. If your maximum input value is 1023 (e.g. from analogRead), and if +// the accumulator type is `uint16_t`, as in the last example above, the +// maximum length N of the SMA will be ⌊(2¹⁶ - 1) / 1023⌋ = 64. +// Alternatively, analogRead returns a 10-bit number, so the maximum length +// is 2¹⁶⁻¹⁰ = 2⁶ = 64, which is the same result as before. \ No newline at end of file diff --git a/examples/examples.dox b/examples/examples.dox index 5d9ad2d46..9423dcda6 100644 --- a/examples/examples.dox +++ b/examples/examples.dox @@ -1,184 +1,38 @@ /** - * @example "BlinkWithoutDelay-Timer.ino" + * @example "1.FilteredAnalog-Advanced.ino" * - * BlinkWithoutDelay-Timer - * ======================= + * 1.FilteredAnalog-Advanced + * ========================= * - * This examples shows how use the Timer class to blink an LED every - * second, in a non-blocking fashion (without using delay). - * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 - * - * Behavior - * -------- - * - * Blinks the built-in LED every second. - * - * Written by PieterP, 2019-12-06 - * https://github.com/tttapa/Arduino-Helpers - */ - -/** - * @example "CountPressedButtons.ino" - * - * CountPressedButtons - * =================== - * - * Example of using the standard library algorithms and the Button class. - * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 - * - * This sketch reads a number of push buttons or switches, and uses the standard - * library algorithms to count how many of them are pressed. - * - * The internal pull-up resistors are enabled and the switches are debounced. - * - * Written by PieterP, 2019-11-24 - * https://github.com/tttapa/Arduino-Helpers - */ - -/** - * @example "Complex.ino" - * - * Complex - * ======= - * - * Example of using the standard library complex numbers. - * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 - * - * **Output** - * ~~~ - * √(2i) = (1.00,1.00) - * ~~~ - * - * Written by PieterP, 2019-11-14 - * https://github.com/tttapa/Arduino-Helpers - */ - -/** - * @example "Numeric.ino" + * This examples shows how to filter an analog input, so you can get the + * position of a knob or fader without noise. * - * Numeric - * ======= - * - * Example of using the standard library numeric functions. - * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 - * - * This sketch creates an incremental array using the iota function, then - * computes the inner product of the vector with itself, and uses that to - * calculate the norm of the vector. - * - * **Output** - * ~~~ - * v = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - * 〈v, v〉 = 385 - * ‖v‖ = 19.6214160 - * ~~~ - * - * Written by PieterP, 2019-11-18 - * https://github.com/tttapa/Arduino-Helpers - */ - -/** - * @example "ArraySort.ino" + * @boards AVR, AVR USB, Nano Every, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 * - * ArraySort - * ========= - * - * Example of using the standard library algorithms. - * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 - * - * This sketch creates an array with an unordered sequence of 10 numbers. - * It prints the array, and then creates a reverse view on the 6 elements in the - * middle of the array and sorts it. - * The resulting array has the same elements in the 4 outermost places, but the - * 6 elements in the middle have been sorted in reverse order. - * - * **Output** - * ~~~ - * Before sorting: 3, 5, 9, 2, 1, 8, 6, 4, 7, 0 - * Sorting ├─────────────────┤ in ascending order - * After sorting: 3, 5, 1, 2, 4, 6, 8, 9, 7, 0 - * Sorting ├─────────────────┤ in descending order - * After sorting: 3, 5, 9, 8, 6, 4, 2, 1, 7, 0 - * ~~~ - * - * Written by PieterP, 2019-11-12 - * https://github.com/tttapa/Arduino-Helpers - */ - -/** - * @example "Debug.ino" + * Connections + * ----------- * - * Debug - * ===== - * - * This examples shows how use the debug macros for printing different kinds of - * debugging information + * - A0: wiper of a potentiometer * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 + * Connect the left terminal of the potentiometer to ground, and the right one + * to VCC. * * Behavior * -------- * - * - Enable debugging in `src/AH/Settings/Settings.hpp`. * - Upload the sketch to the Arduino, and open the Serial Monitor * (`CTRL+Shift+M`) - * - Every five seconds, debugging information is printed, for example: - * - * ~~~ - * This is the result of `DEBUG` - * [/home/pieter/GitHub/Arduino-Debugging/Example/Example.ino:12]: This is the result of `DEBUGREF` - * [void loop() @ line 13]: This is the result of `DEBUGFN` - * [0:2:11.085]: This is the result of `DEBUGTIME` - * a = 1, b = 2, c = 3 - * log10(1000) - 2 = 1.00 - * millis() = 131085 - * Serial.read() = -1 - * [int someFunction(int) @ line 26]: parameter = 42 - * ~~~ - * - * @see @ref md_pages_Debug for instructions on how to add an option in the - * Arduino IDE to easily enable and disable debugging. - * - * Written by PieterP, 2018-07-31 - * https://github.com/tttapa/Arduino-Helpers - */ - -/** - * @example "Blink-Frequency-Buttons.ino" - * - * Blink-Frequency-Buttons - * ======================= - * - * This examples shows how to use two push buttons to set the frequency at which - * an LED blinks. - * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 - * - * Connections - * ----------- - * - * - 2: Momentary push button (other pin to ground) - * - 3: Momentary push button (other pin to ground) - * - * The internal pull-up resistors will be enabled. - * - * Behavior - * -------- + * - When you turn the potentiometer, you should see the position of the + * potentiometer being printed as a number between 0 and 1023. + * - The analog input is filtered, so there shouldn't be any noise on the + * position. If there is, check your wiring, and make sure that the resistance + * of the potentiometer isn't too high (10 kΩ is ideal). * - * - If you press the first push button, the LED blinks faster. - * - If you press the second push button, the LED blinks slower. - * - You can press and hold one of the push buttons to change the frequency by - * multiple steps. - * - If you press both buttons at the same time, the frequency is reset to the - * initial default frequency. + * A simpler version of this example can be found in + * @ref 1.FilteredAnalog.ino. * - * Written by PieterP, 2019-12-10 - * https://github.com/tttapa/Arduino-Helpers + * Written by PieterP, 2019-10-10 + * https://github.com/tttapa/Arduino-Filters */ /** @@ -190,7 +44,7 @@ * This examples shows how to filter an analog input, so you can get the * position of a knob or fader without noise. * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 + * @boards AVR, AVR USB, Nano Every, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 * * Connections * ----------- @@ -211,305 +65,79 @@ * position. If there is, check your wiring, and make sure that the resistance * of the potentiometer isn't too high (10 kΩ is ideal). * - * Written by PieterP, 2019-10-10 - * https://github.com/tttapa/Arduino-Helpers - */ - -/** - * @example "2.Button.ino" - * - * 2.Button - * ======== - * - * This examples shows how to use the debounced Button class to toggle an LED. - * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 - * - * Connections - * ----------- - * - * - 2: Momentary push button (other pin to ground) - * - * The internal pull-up resistor will be enabled. - * - * Behavior - * -------- - * - * - If you press the push button once, the built-in LED is turned on. - * - If you press the button again, the LED is turned off again. - * - * Written by PieterP, 2019-11-22 - * https://github.com/tttapa/Arduino-Helpers - */ - -/** - * @example "2.RGB-LED-Chaser.ino" - * - * 2.RGB-LED-Chaser - * ================ - * - * This is an example of the ShiftRegisterOut class of the Control Surface - * library. It creates light effects using three 8-bit shift registers and some - * RGB LEDs. - * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 - * - * Connections - * ----------- - * - * Connect three daisy-chained shift registers to the SPI pins. - * Connect 8 RGB LEDs (+ current limiting resistors) to the outputs of the shift - * registers. - * - * ``` - * SCK >───────────┬──────────────────────┬──────────────────────┐ - * ┏━━━━━━━┷━━━━━━━┓ ┏━━━━━━━┷━━━━━━━┓ ┏━━━━━━━┷━━━━━━━┓ - * ┃ SH_CP ┃ ┃ SH_CP ┃ ┃ SH_CP ┃ - * MOSI >───┨ DS Q7S ┠──────┨ DS Q7S ┠──────┨ DS Q7S ┃ - * ┃ ST_CP ┃ ┃ ST_CP ┃ ┃ ST_CP ┃ - * ┗━━━━━━━┯━━━━━━━┛ ┗━━━━━━━┯━━━━━━━┛ ┗━━━━━━━┯━━━━━━━┛ - * SS >───────────┴──────────────────────┴──────────────────────┘ - * ``` - * Remember to connect the enable pin of the shift register to ground and the - * master reset pin to Vcc in order to enable it. - * - * The order of the colors doesn't matter. You can change them in software using - * the `ShiftRegisterOutRGB::redBit`, `ShiftRegisterOutRGB::greenBit` and - * `ShiftRegisterOutRGB::blueBit` constants. - * - * If you wired the LEDs as RGB (red first, then green and then blue), the red - * bit is 0, the green bit is 1 and the blue bit is 2. - * If you wired the LEDs as BGR (blue first, then green and then red), the red - * bit is 2, the green bit is 1 and the blue bit is 0. - * Other combinations are possible as well. - * - * Behavior - * -------- - * - * This example will turn on all red LEDs one by one, then turn them off one by - * one, next, it will turn on and off all green LEDs in the same manner, and - * finally the same for the blue LEDs. This is repeated indefinitely. - * - * Demo - * ---- - * - * @htmlonly - * - * @endhtmlonly - * - * Written by Pieter P, 2018-07-13 - * https://github.com/tttapa/Arduino-Helpers - */ - -/** - * @example "2.BitBang-Blink.ino" - * - * 2.BitBang-Blink - * =============== - * - * This example demonstrates the use of shift registers as if they were just - * normal IO pins. This version uses bit-banging to drive the shift register. - * You should probably be using the SPI version instead. - * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 - * - * Connections - * ----------- - * - * - 10: 74HC595 ST_CP - * - 11: 74HC595 DS - * - 13: 74HC595 SH_CP - * - * Connect an LED (and series resistor) between the first output of the - * shift register and ground. - * - * Remember to connect the enable pin the shift register to ground and the - * master reset pin to Vcc in order to enable it. - * - * Behavior - * -------- - * - * This sketch will blink the LED once a second. + * The example @ref 1.FilteredAnalog-Advanced.ino has more information about the + * parameters you can pass to the FilteredAnalog class to tweak the filters, + * increase the resolution, etc. * - * Written by PieterP, 2018-09-01 - * https://github.com/tttapa/Arduino-Helpers + * Written by PieterP, 2019-10-10 + * https://github.com/tttapa/Arduino-Filters */ /** - * @example "1.SPI-Blink.ino" + * @example "SimpleMovingAverage.ino" * - * 1.SPI-Blink - * =========== + * SimpleMovingAverage + * =================== * - * This example demonstrates the use of shift registers as if they were just - * normal IO pins. The SPI interface is used because it's easy and fast. - * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 - * - * Connections - * ----------- - * - * - SS: 74HC595 ST_CP - * - MOSI: 74HC595 DS - * - SCK: 74HC595 SH_CP + * Example of a Simple Moving Average (SMA, also known as Running Average) + * filter. * - * Connect an LED (and series resistor) between the first output of the - * shift register and ground. + * @boards AVR, AVR USB, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 * - * Remember to connect the enable pin of the shift register to ground and the - * master reset pin to Vcc in order to enable it. - * - * Behavior - * -------- - * - * This sketch will blink the LED once a second. - * - * Written by PieterP, 2018-09-01 - * https://github.com/tttapa/Arduino-Helpers + * Written by PieterP, 2020-01-07 + * https://github.com/tttapa/Arduino-Filters */ /** - * @example "Toggle-LEDs.ino" + * @example "Butterworth.ino" * - * Toggle-LEDs + * Butterworth * =========== * - * This example demonstrates the use of push buttons and LEDs and how to use - * shift registers and analog multiplexers to save pins. + * Example of Butterworth filter. * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 + * @boards AVR, AVR USB, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 * - * Connections - * ----------- - * - * - SS: 74HC595 ST_CP - * - MOSI: 74HC595 DS - * - SCK: 74HC595 SH_CP - * - 2: 74HC4067 A (COM OUT/IN) - * - 3: 74HC4067 S0 - * - 4: 74HC4067 S1 - * - 5: 74HC4067 S2 - * - 6: 74HC4067 S3 - * - * Connect 16 momentary push buttons between the input pins of the - * multiplexer and ground. - * The internal pull-up resistor for the buttons will be enabled automatically, - * so no external resistors are necessary. - * - * Connect 16 LEDs (and series resistors) between the eight outputs of the - * two shift registers and ground. - * - * Remember to connect the enable pins of both the multiplexer and the shift - * registers to ground in order to enable them. Also connect the master reset - * pin of the shift registers to Vcc. - * Connect the serial data output of the first shift register (QH' or Q7S) to - * the serial input of the second shift register. + * @see * - * Behavior - * -------- - * - * Pressing the first button will turn on the first LED. Pressing it again will - * turn it off again. - * Pressing the second button will turn on the second LED. Pressing it again - * will turn it off again, and so on. - * - * Written by PieterP, 2018-08-28 - * https://github.com/tttapa/Arduino-Helpers + * Written by PieterP, 2019-11-12 + * https://github.com/tttapa/Arduino-Filters */ /** - * @example "1.AnalogReadSerial.ino" + * @example "MedianFilter.ino" * - * 1.AnalogReadSerial - * ================== + * MedianFilter + * ============ * - * This is an example of the AnalogMultiplex class. It prints the values of all - * 16 inputs of a multiplexers to the serial monitor. + * Example of median filter. * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 + * @boards AVR, AVR USB, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 * - * Connections - * ----------- - * - * - A0: CD74HC4067 signal pin ("common input/output") - * - 3: CD74HC4067 address pin S0 - * - 4: CD74HC4067 address pin S1 - * - 5: CD74HC4067 address pin S2 - * - 6: CD74HC4067 address pin S3 - * - * Optionally you can connect the enable pin as well, this is useful - * if you want to use multiple multiplexers with the same address - * lines and the same analog input. Otherwise, just connect the enable - * pin to ground. - * - * If you are using a 3-bit multiplexer, like the CD74HC4051, you can - * uncomment the code specific to this multiplexer, and use only three - * address pins. - * - * Behavior - * -------- - * - * Connect some potentiometers or other analog sensors to the 16 inputs - * of the multiplexer, and open the serial monitor (CTRL+SHIFT+M) or the - * serial plotter (CTRL+SHIFT+L). You should see all 16 signals printed - * or plotted. - * - * Written by Pieter P, 31-01-2019 - * https://github.com/tttapa/Arduino-Helpers + * Written by PieterP, 2019-11-16 + * https://github.com/tttapa/Arduino-Filters */ /** - * @example "2.DigitalReadSerial.ino" + * @example "FIRNotch.ino" * - * 2.DigitalReadSerial - * =================== + * FIRNotch + * ======== * - * This is an example of the AnalogMultiplex class. It prints the states of all - * 16 switches connected to a multiplexers to the serial monitor. - * - * @boards AVR, AVR USB, Nano 33, Due, Teensy 3.x, ESP8266, ESP32 + * Example of 50 Hz (+harmonics) notch filter. * - * Connections - * ----------- + * @boards AVR, AVR USB, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 * - * - 2: CD74HC4067 signal pin ("common input/output") - * - 3: CD74HC4067 address pin S0 - * - 4: CD74HC4067 address pin S1 - * - 5: CD74HC4067 address pin S2 - * - 6: CD74HC4067 address pin S3 - * - * Optionally you can connect the enable pin as well, this is useful - * if you want to use multiple multiplexers with the same address - * lines and the same analog input. Otherwise, just connect the enable - * pin to ground. - * - * If you are using a 3-bit multiplexer, like the CD74HC4051, you can - * uncomment the code specific to this multiplexer, and use only three - * address pins. - * - * Connect a switch or push button between each input pin of the multiplexer and - * ground. A pull-up resistor is not necessary, because we'll use the internal - * one. - * - * Behavior - * -------- + * @see * - * Open the serial monitor (CTRL+SHIFT+M) or the serial plotter (CTRL+SHIFT+L), - * and press some buttons, you should see all 16 signals printed or plotted. + * Be careful when selecting a sampling frequency that's a multiple of 50 Hz, as + * this will alias 50 Hz harmonics to 0 Hz (DC), and this might introduce a more + * or less constant error to your measurements. + * It's best to add an analog anti-aliasing filter as well. * - * Written by Pieter P, 2019-08-08 - * https://github.com/tttapa/Arduino-Helpers - */ - -/** - * @example "STL-test.ino" + * ![Filtered mains power noise signal (blue is unfilterd, red is filtered)](50Hz-notch.png) * - * STL-test - * ======== - * - * @boards AVR, AVR USB, Nano 33, Teensy 3.x, ESP8266, ESP32 + * Written by PieterP, 2019-11-22 + * https://github.com/tttapa/Arduino-Filters */ diff --git a/examples/test/ExtIO-pin-test/ExtIO-pin-test.ino b/examples/test/ExtIO-pin-test/ExtIO-pin-test.ino new file mode 100644 index 000000000..ed025182c --- /dev/null +++ b/examples/test/ExtIO-pin-test/ExtIO-pin-test.ino @@ -0,0 +1,19 @@ +/** + * An int literal as argument or constants like LED_BUILTIN should not result + * in ambiguous overload selection. + * + * @boards AVR, AVR USB, Nano 33 IoT, Nano 33 BLE, Teensy 3.x, ESP8266, ESP32 + */ + +#include + +#include + +using namespace ExtIO; + +void setup() { + pinMode(13, OUTPUT); + pinMode(LED_BUILTIN, OUTPUT); +} + +void loop() {} \ No newline at end of file diff --git a/examples/test/Filter-Performance-Test/Filter-Performance-Test.ino b/examples/test/Filter-Performance-Test/Filter-Performance-Test.ino new file mode 100644 index 000000000..c087773ba --- /dev/null +++ b/examples/test/Filter-Performance-Test/Filter-Performance-Test.ino @@ -0,0 +1,217 @@ +/** + * Performance test for different filters. + * + * @boards AVR, AVR USB, Nano 33 IoT, Nano 33 BLE, Due, Teensy 3.x, ESP8266, ESP32 + * + * Written by PieterP, 2019-11-26 + * https://github.com/tttapa/Arduino-Helpers + */ + +#include + +#include +#include +#include +#include +#include +#include +#include + +constexpr uint8_t data_length = 100; +constexpr unsigned int iterations = 100; + +void setup() { + Serial.begin(115200); + while(!Serial); + std::array data; + std::generate(std::begin(data), std::end(data), + []{ return analogRead(A0); }); + { + Serial << F("EMA (K = 4)") << endl; + EMA<4, uint16_t> ema; + auto startTime = micros(); + + for (unsigned int i = 0; i < iterations; ++i) + for (uint8_t j = 0; j < data_length; ++j) + data[j] = ema(data[j]); + + auto stopTime = micros(); + Serial << (1e6 * data_length * iterations) / (stopTime - startTime) + << F(" filter operations per second") << endl << endl; + } + { + Serial << F("EMA (K = 6)") << endl; + EMA<6, uint16_t> ema; + auto startTime = micros(); + + for (unsigned int i = 0; i < iterations; ++i) + for (uint8_t j = 0; j < data_length; ++j) + data[j] = ema(data[j]); + + auto stopTime = micros(); + Serial << (1e6 * data_length * iterations) / (stopTime - startTime) + << F(" filter operations per second") << endl << endl; + } + { + Serial << F("EMA (K = 8)") << endl; + EMA<8, uint16_t> ema; + auto startTime = micros(); + + for (unsigned int i = 0; i < iterations; ++i) + for (uint8_t j = 0; j < data_length; ++j) + data[j] = ema(data[j]); + + auto stopTime = micros(); + Serial << (1e6 * data_length * iterations) / (stopTime - startTime) + << F(" filter operations per second") << endl << endl; + } + { + Serial << F("SMA (N = 16)") << endl; + SMA<16, uint16_t, uint16_t> sma; + auto startTime = micros(); + + for (unsigned int i = 0; i < iterations; ++i) + for (uint8_t j = 0; j < data_length; ++j) + data[j] = sma(data[j]); + + auto stopTime = micros(); + Serial << (1e6 * data_length * iterations) / (stopTime - startTime) + << F(" filter operations per second") << endl << endl; + } + { + Serial << F("SMA (N = 10)") << endl; + SMA<10, uint16_t, uint16_t> sma; + auto startTime = micros(); + + for (unsigned int i = 0; i < iterations; ++i) + for (uint8_t j = 0; j < data_length; ++j) + data[j] = sma(data[j]); + + auto stopTime = micros(); + Serial << (1e6 * data_length * iterations) / (stopTime - startTime) + << F(" filter operations per second") << endl << endl; + } + { + Serial << F("SMA (N = 100)") << endl; + SMA<100, uint16_t, uint16_t> sma; + auto startTime = micros(); + + for (unsigned int i = 0; i < iterations; ++i) + for (uint8_t j = 0; j < data_length; ++j) + data[j] = sma(data[j]); + + auto stopTime = micros(); + Serial << (1e6 * data_length * iterations) / (stopTime - startTime) + << F(" filter operations per second") << endl << endl; + } + { + Serial << F("Median even (N = 10)") << endl; + MedianFilter<10, uint16_t> med; + auto startTime = micros(); + + for (unsigned int i = 0; i < iterations; ++i) + for (uint8_t j = 0; j < data_length; ++j) + data[j] = med(data[j]); + + auto stopTime = micros(); + Serial << (1e6 * data_length * iterations) / (stopTime - startTime) + << F(" filter operations per second") << endl << endl; + } + { + Serial << F("Median odd (N = 11)") << endl; + MedianFilter<11, uint16_t> med; + auto startTime = micros(); + + for (unsigned int i = 0; i < iterations; ++i) + for (uint8_t j = 0; j < data_length; ++j) + data[j] = med(data[j]); + + auto stopTime = micros(); + Serial << (1e6 * data_length * iterations) / (stopTime - startTime) + << F(" filter operations per second") << endl << endl; + } + { + Serial << F("Median even (N = 100)") << endl; + MedianFilter<100, uint16_t> med; + auto startTime = micros(); + + for (unsigned int i = 0; i < iterations; ++i) + for (uint8_t j = 0; j < data_length; ++j) + data[j] = med(data[j]); + + auto stopTime = micros(); + Serial << (1e6 * data_length * iterations) / (stopTime - startTime) + << F(" filter operations per second") << endl << endl; + } + { + Serial << F("Median odd (N = 101)") << endl; + MedianFilter<101, uint16_t> med; + auto startTime = micros(); + + for (unsigned int i = 0; i < iterations; ++i) + for (uint8_t j = 0; j < data_length; ++j) + data[j] = med(data[j]); + + auto stopTime = micros(); + Serial << (1e6 * data_length * iterations) / (stopTime - startTime) + << F(" filter operations per second") << endl << endl; + } +} + +void loop() {} + +/* + +EMA (K = 4) +358731.53 filter operations per second + +EMA (K = 6) +297867.28 filter operations per second + +EMA (K = 8) +657375.75 filter operations per second + +SMA (N = 16) +162951.37 filter operations per second + +SMA (N = 10) +51198.03 filter operations per second + +SMA (N = 100) +53278.78 filter operations per second + +Median even (N = 10) +16338.37 filter operations per second + +Median odd (N = 11) +17778.92 filter operations per second + +Median even (N = 100) +2162.23 filter operations per second + +Median odd (N = 101) +2658.79 filter operations per second + +Observations: + +The EMA is much faster than the EMA, even if N is a power of two. + +If K = 4, the EMA is very fast, because the AVR instruction set has an +instruction to swap nibbles in a byte. +If K = 8, the EMA is even faster, because this just corresponds to removing the +least significant byte. +Otherwise, multiple bit shift instructions are used, which is slower. + +The SMA with N a power of two is significantly faster than SMA with N not a +power of two, because the division by N can then be implemented as a series of +bit shifts. (It should be noted that the library uses special code for signed +integers, otherwise the compiler can't optimize it.) +Making N 10 times larger doesn't really impact the performance. + +The median filter is a bit slower, because each step involves copying and +partially sorting the ring buffer. As N increases, the performance drops, +because the sorting algorithm used has an average complexity of O(N). +Odd N is faster, as the median requires only one middle element, when N is even, +you have to find the two middle elements, which requires N/2 extra comparisons. + +*/ diff --git a/examples/test/STL-test/STL-test.cpp b/examples/test/STL-test/STL-test.cpp new file mode 100644 index 000000000..936a53a74 --- /dev/null +++ b/examples/test/STL-test/STL-test.cpp @@ -0,0 +1,126 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +AH_DIAGNOSTIC_WERROR() // ESP32 -Werror=c++0x-compat fix + +long double f() { + return rand(); +} + +using std::is_same; +using AH::operator<<; +using AH::endl; + +#define TEST_CMATH_FUNCTION(Fun) \ + static_assert(is_same::value, \ + "cmath error " #Fun "(float)"); \ + static_assert(is_same::value, \ + "cmath error " #Fun "(double)"); \ + static_assert(is_same::value, \ + "cmath error " #Fun "(long double)"); \ + Serial.println(Fun((float)f())); \ + Serial.println(Fun((double)f())); \ + Serial.println((double)Fun((long double)f())); + +#define TEST_CMATH_FUNCTION_I(Fun) \ + TEST_CMATH_FUNCTION(Fun); \ + static_assert(is_same::value, \ + "cmath error " #Fun "(int)"); \ + Serial.println(Fun((int)f())); + +#define TEST_CMATH_FUNCTION3(Fun) \ + static_assert( \ + is_same::value, \ + "cmath error " #Fun "(float)"); \ + static_assert( \ + is_same::value, \ + "cmath error " #Fun "(double)"); \ + static_assert( \ + is_same::value, \ + "cmath error " #Fun "(long double)"); \ + Serial.println(Fun((float)f(), (float)f(), (float)f())); \ + Serial.println(Fun((double)f(), (double)f(), (double)f())); \ + Serial.println( \ + (double)Fun((long double)f(), (long double)f(), (long double)f())); + +#define TEST_CMATH_FUNCTION2(Fun) \ + static_assert(is_same::value, \ + "cmath error " #Fun "(float)"); \ + static_assert(is_same::value, \ + "cmath error " #Fun "(double)"); \ + static_assert(is_same::value, \ + "cmath error " #Fun "(long double)"); \ + Serial.println(Fun((float)f(), (float)f())); \ + Serial.println(Fun((double)f(), (double)f())); \ + Serial.println((double)Fun((long double)f(), (long double)f())); + +void setup() { + Serial.begin(115200); + while (!Serial) + ; +#ifdef __cpp_lib_optional + std::optional opt = std::nullopt; + opt = 1; + Serial.println(*opt); +#endif + std::bitset<128> bs; + bs[0] = 1; + bs[2] = 1; + Serial << bs << endl; + auto ptr = AH::make_unique>(); + ptr->operator[](2) = 42; + Serial.println(ptr->at(2)); + + TEST_CMATH_FUNCTION(std::round); + TEST_CMATH_FUNCTION(std::sin); + TEST_CMATH_FUNCTION(std::cos); + TEST_CMATH_FUNCTION(std::tan); + TEST_CMATH_FUNCTION(std::asin); + TEST_CMATH_FUNCTION(std::acos); + TEST_CMATH_FUNCTION(std::atan); + TEST_CMATH_FUNCTION(std::exp); + TEST_CMATH_FUNCTION(std::log); + TEST_CMATH_FUNCTION(std::log10); + +#ifndef __AVR__ + TEST_CMATH_FUNCTION(std::asinh); + TEST_CMATH_FUNCTION(std::exp2); +#endif + + TEST_CMATH_FUNCTION_I(std::abs); + + TEST_CMATH_FUNCTION2(std::hypot); + TEST_CMATH_FUNCTION3(std::fma); + + std::vector vec {1, 2, 3, 4}; + vec.reserve(100); + vec.resize(50); + vec[1] = -2; + for (int i : vec) + Serial.println(i); +} + +void loop() {} + +AH_DIAGNOSTIC_POP() \ No newline at end of file diff --git a/examples/test/STL-test/STL-test.ino b/examples/test/STL-test/STL-test.ino index 09da51e60..8f359a476 100644 --- a/examples/test/STL-test/STL-test.ino +++ b/examples/test/STL-test/STL-test.ino @@ -1,118 +1,4 @@ /** - * @boards AVR, AVR USB, Nano 33, Teensy 3.x, ESP8266, ESP32 + * @boards AVR, AVR USB, Nano 33 IoT, Nano 33 BLE, Teensy 3.x, ESP8266, ESP32 */ - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -AH_DIAGNOSTIC_WERROR() // ESP32 -Werror=c++0x-compat fix - -long double f() { - return rand(); -} - -using std::is_same; - -#define TEST_CMATH_FUNCTION(Fun) \ - static_assert(is_same::value, \ - "cmath error " #Fun "(float)"); \ - static_assert(is_same::value, \ - "cmath error " #Fun "(double)"); \ - static_assert(is_same::value, \ - "cmath error " #Fun "(long double)"); \ - Serial.println(Fun((float)f())); \ - Serial.println(Fun((double)f())); \ - Serial.println((double)Fun((long double)f())); - -#define TEST_CMATH_FUNCTION_I(Fun) \ - TEST_CMATH_FUNCTION(Fun); \ - static_assert(is_same::value, \ - "cmath error " #Fun "(int)"); \ - Serial.println(Fun((int)f())); - -#define TEST_CMATH_FUNCTION3(Fun) \ - static_assert( \ - is_same::value, \ - "cmath error " #Fun "(float)"); \ - static_assert( \ - is_same::value, \ - "cmath error " #Fun "(double)"); \ - static_assert( \ - is_same::value, \ - "cmath error " #Fun "(long double)"); \ - Serial.println(Fun((float)f(), (float)f(), (float)f())); \ - Serial.println(Fun((double)f(), (double)f(), (double)f())); \ - Serial.println( \ - (double)Fun((long double)f(), (long double)f(), (long double)f())); - -#define TEST_CMATH_FUNCTION2(Fun) \ - static_assert(is_same::value, \ - "cmath error " #Fun "(float)"); \ - static_assert(is_same::value, \ - "cmath error " #Fun "(double)"); \ - static_assert(is_same::value, \ - "cmath error " #Fun "(long double)"); \ - Serial.println(Fun((float)f(), (float)f())); \ - Serial.println(Fun((double)f(), (double)f())); \ - Serial.println((double)Fun((long double)f(), (long double)f())); - -void setup() { - Serial.begin(115200); - while (!Serial) - ; -#ifdef __cpp_lib_optional - std::optional opt = std::nullopt; - opt = 1; - Serial.println(*opt); -#endif - std::bitset<128> bs; - bs[0] = 1; - bs[2] = 1; - Serial << bs << endl; - auto ptr = AH::make_unique>(); - ptr->operator[](2) = 42; - Serial.println(ptr->at(2)); - - TEST_CMATH_FUNCTION(std::round); - TEST_CMATH_FUNCTION(std::sin); - TEST_CMATH_FUNCTION(std::cos); - TEST_CMATH_FUNCTION(std::tan); - TEST_CMATH_FUNCTION(std::asin); - TEST_CMATH_FUNCTION(std::acos); - TEST_CMATH_FUNCTION(std::atan); - TEST_CMATH_FUNCTION(std::exp); - TEST_CMATH_FUNCTION(std::log); - TEST_CMATH_FUNCTION(std::log10); - -#ifndef __AVR__ - TEST_CMATH_FUNCTION(std::asinh); - TEST_CMATH_FUNCTION(std::exp2); -#endif - - TEST_CMATH_FUNCTION_I(std::abs); - - TEST_CMATH_FUNCTION2(std::hypot); - TEST_CMATH_FUNCTION3(std::fma); -} - -void loop() {} - -AH_DIAGNOSTIC_POP() \ No newline at end of file +#include \ No newline at end of file diff --git a/googletest b/googletest deleted file mode 160000 index 8b4817e3d..000000000 --- a/googletest +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8b4817e3df3746a20502a84580f661ac448821be diff --git a/gtest-wrappers/CMakeLists.txt b/gtest-wrappers/CMakeLists.txt deleted file mode 100644 index a2b086a0f..000000000 --- a/gtest-wrappers/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -add_library(googletest_wrappers INTERFACE) -target_include_directories(googletest_wrappers - INTERFACE - ${CMAKE_CURRENT_SOURCE_DIR} -) -target_link_libraries(googletest_wrappers INTERFACE gtest gmock) \ No newline at end of file diff --git a/gtest-wrappers/Wsuggest-override.hpp b/gtest-wrappers/Wsuggest-override.hpp deleted file mode 100644 index 38bd86dca..000000000 --- a/gtest-wrappers/Wsuggest-override.hpp +++ /dev/null @@ -1,28 +0,0 @@ -// I prefer to have my warnings turned up pretty high, and I think the -// `-Wsuggest-override` is pretty useful. It warns you when you are creating a -// function that overrides a virtual function of the super class. -// That warning in itself is useful, but it's even more useful because it -// enforces writing `override` after all functions that are meant to override -// other functions. This leaves no room for bugs where you expect a function -// to override a parent function, but it doesn't (maybe because of a typo in -// the function name, different capitalization, or different signature). -// -// There are some places in the Google Test & Mock libraries where the -// `override` keyword is missing, so we have to temporarily disable the warning -// in these parts of the code. - -#if __GNUC__ >= 5 && !defined(__clang__) -#define W_SUGGEST_OVERRIDE_OFF \ - _Pragma("GCC diagnostic push") \ - _Pragma("GCC diagnostic ignored \"-Wsuggest-override\"") -#elif defined(__clang__) -#define W_SUGGEST_OVERRIDE_OFF \ - _Pragma("clang diagnostic push") _Pragma( \ - "clang diagnostic ignored \"-Winconsistent-missing-override\"") -#endif - -#if __GNUC__ >= 5 && !defined(__clang__) -#define W_SUGGEST_OVERRIDE_ON _Pragma("GCC diagnostic pop") -#elif defined(__clang__) -#define W_SUGGEST_OVERRIDE_ON _Pragma("clang diagnostic pop") -#endif diff --git a/gtest-wrappers/gmock-wrapper.h b/gtest-wrappers/gmock-wrapper.h deleted file mode 100644 index 0680ad470..000000000 --- a/gtest-wrappers/gmock-wrapper.h +++ /dev/null @@ -1,5 +0,0 @@ -#include "Wsuggest-override.hpp" - -W_SUGGEST_OVERRIDE_OFF -#include -W_SUGGEST_OVERRIDE_ON \ No newline at end of file diff --git a/gtest-wrappers/gtest-wrapper.h b/gtest-wrappers/gtest-wrapper.h deleted file mode 100644 index a156f6993..000000000 --- a/gtest-wrappers/gtest-wrapper.h +++ /dev/null @@ -1,5 +0,0 @@ -#include "Wsuggest-override.hpp" - -W_SUGGEST_OVERRIDE_OFF -#include -W_SUGGEST_OVERRIDE_ON \ No newline at end of file diff --git a/keywords.txt b/keywords.txt index a2ad751ee..c7c7068ad 100644 --- a/keywords.txt +++ b/keywords.txt @@ -11,78 +11,7 @@ Arduino_Helpers KEYWORD1 AH KEYWORD1 - -# AH/Math -######### - -increaseBitDepth KEYWORD2 -min KEYWORD2 -max KEYWORD2 - -# AH/Timing -########### - -Timer KEYWORD1 - -begin KEYWORD2 - -timefunction LITERAL1 - -# AH/Containers -############### - -Array KEYWORD1 -ArraySlice KEYWORD1 -Iterator KEYWORD1 -BitArray KEYWORD1 -DoublyLinkedList KEYWORD1 -iterator KEYWORD1 -const_iterator KEYWORD1 -reverse_iterator KEYWORD1 -const_reverse_iterator KEYWORD1 -DoublyLinkable KEYWORD1 -UniquePtr KEYWORD1 -NormalUpdatable KEYWORD1 -Updatable KEYWORD1 - -length KEYWORD2 -begin KEYWORD2 -end KEYWORD2 -slice KEYWORD2 -cslice KEYWORD2 -asArray KEYWORD2 -generate KEYWORD2 -generateArray KEYWORD2 -copyAs KEYWORD2 -fillArray KEYWORD2 -cat KEYWORD2 -distribute KEYWORD2 -get KEYWORD2 -set KEYWORD2 -clear KEYWORD2 -safeIndex KEYWORD2 -getByte KEYWORD2 -getBufferLength KEYWORD2 -append KEYWORD2 -insertBefore KEYWORD2 -insertSorted KEYWORD2 -remove KEYWORD2 -moveDown KEYWORD2 -couldContain KEYWORD2 -reset KEYWORD2 -get KEYWORD2 -release KEYWORD2 -MakeUnique KEYWORD2 -update KEYWORD2 -begin KEYWORD2 -enable KEYWORD2 -disable KEYWORD2 -isEnabled KEYWORD2 -beginAll KEYWORD2 -updateAll KEYWORD2 - -ElementRefType LITERAL1 -ElementPtrType LITERAL1 +Filters KEYWORD1 # AH/Hardware ############# @@ -92,6 +21,8 @@ ButtonMatrix KEYWORD1 FilteredAnalog KEYWORD1 IncrementButton KEYWORD1 IncrementDecrementButtons KEYWORD1 +MCP23017Encoders KEYWORD1 +MCP23017Encoder KEYWORD1 begin KEYWORD2 update KEYWORD2 @@ -101,12 +32,16 @@ stableTime KEYWORD2 onButtonChanged KEYWORD2 begin KEYWORD2 update KEYWORD2 +reset KEYWORD2 +resetToCurrentValue KEYWORD2 +getMappingFunction KEYWORD2 map KEYWORD2 invert KEYWORD2 update KEYWORD2 getValue KEYWORD2 getFloatValue KEYWORD2 getRawValue KEYWORD2 +getMaxRawValue KEYWORD2 setupADC KEYWORD2 begin KEYWORD2 update KEYWORD2 @@ -116,6 +51,11 @@ begin KEYWORD2 update KEYWORD2 getState KEYWORD2 invert KEYWORD2 +begin KEYWORD2 +update KEYWORD2 +read KEYWORD2 +readAndReset KEYWORD2 +write KEYWORD2 State LITERAL1 Pressed LITERAL1 @@ -129,11 +69,17 @@ NO_PIN LITERAL1 PinList LITERAL1 State LITERAL1 Nothing LITERAL1 -Increment LITERAL1 +IncrementShort LITERAL1 +IncrementLong LITERAL1 +IncrementHold LITERAL1 State LITERAL1 Nothing LITERAL1 -Increment LITERAL1 -Decrement LITERAL1 +IncrementShort LITERAL1 +IncrementLong LITERAL1 +IncrementHold LITERAL1 +DecrementShort LITERAL1 +DecrementLong LITERAL1 +DecrementHold LITERAL1 Reset LITERAL1 # AH/Hardware/ExtendedInputOutput @@ -145,6 +91,7 @@ CD74HC4051 KEYWORD1 ExtIO KEYWORD1 ExtendedIOElement KEYWORD1 MAX7219 KEYWORD1 +MCP23017 KEYWORD1 ShiftRegisterOut KEYWORD1 ShiftRegisterOutRGB KEYWORD1 SPIShiftRegisterOut KEYWORD1 @@ -168,6 +115,8 @@ redBit KEYWORD2 greenBit KEYWORD2 blueBit KEYWORD2 pins KEYWORD2 +pinA KEYWORD2 +pinB KEYWORD2 # AH/Hardware/LEDs ################## @@ -199,6 +148,87 @@ DotBarMode LITERAL1 Dot LITERAL1 Bar LITERAL1 +# AH/Containers +############### + +Array KEYWORD1 +ArraySlice KEYWORD1 +Iterator KEYWORD1 +BitArray KEYWORD1 +DoublyLinkedList KEYWORD1 +iterator KEYWORD1 +const_iterator KEYWORD1 +reverse_iterator KEYWORD1 +const_reverse_iterator KEYWORD1 +DoublyLinkable KEYWORD1 +NormalUpdatable KEYWORD1 +Updatable KEYWORD1 + +length KEYWORD2 +begin KEYWORD2 +end KEYWORD2 +slice KEYWORD2 +cslice KEYWORD2 +asArray KEYWORD2 +generate KEYWORD2 +generateArray KEYWORD2 +copyAs KEYWORD2 +fillArray KEYWORD2 +cat KEYWORD2 +distribute KEYWORD2 +get KEYWORD2 +set KEYWORD2 +clear KEYWORD2 +safeIndex KEYWORD2 +getByte KEYWORD2 +getBufferLength KEYWORD2 +append KEYWORD2 +insertBefore KEYWORD2 +insertSorted KEYWORD2 +remove KEYWORD2 +moveDown KEYWORD2 +couldContain KEYWORD2 +update KEYWORD2 +begin KEYWORD2 +enable KEYWORD2 +disable KEYWORD2 +isEnabled KEYWORD2 +beginAll KEYWORD2 +updateAll KEYWORD2 + +ElementRefType LITERAL1 +ElementPtrType LITERAL1 + +# AH/Math +######### + +Quaternion KEYWORD1 +EulerAngles KEYWORD1 +Vec2f KEYWORD1 +Vec3f KEYWORD1 + +increaseBitDepth KEYWORD2 +min KEYWORD2 +max KEYWORD2 +w KEYWORD2 +x KEYWORD2 +y KEYWORD2 +z KEYWORD2 +hamiltonianProduct KEYWORD2 +conjugated KEYWORD2 +normSquared KEYWORD2 +norm KEYWORD2 +normalize KEYWORD2 +normalized KEYWORD2 +rotate KEYWORD2 +identity KEYWORD2 +fromDirection KEYWORD2 +fromXYAngle KEYWORD2 +quat2eul KEYWORD2 +eul2quat KEYWORD2 +rad2deg KEYWORD2 +deg2rad KEYWORD2 + # AH/Types ########## @@ -208,6 +238,15 @@ _MHz LITERAL1 _kHz LITERAL1 _Hz LITERAL1 +# AH/Timing +########### + +Timer KEYWORD1 + +begin KEYWORD2 + +timefunction LITERAL1 + # AH/Filters ############ @@ -219,3 +258,10 @@ filter KEYWORD2 update KEYWORD2 getValue KEYWORD2 +# Filters +######### + +MedianFilter KEYWORD1 + +butter KEYWORD2 + diff --git a/library.properties b/library.properties index 8d5791024..1355fa28f 100644 --- a/library.properties +++ b/library.properties @@ -1,10 +1,10 @@ -name=Arduino Helpers +name=Arduino Filters version=1.0.0 author=Pieter P maintainer=Pieter P -sentence=This is a utility library with hardware abstraction, containers, type traits, easy printing, debugging, filters ... Includes a mocking and testing framework. -paragraph=Originally part of the Control Surface library, split off to be used in other libraries as well, or stand-alone. -category=Other -url=https://github.com/tttapa/Arduino-Helpers -architectures=avr,sam,samd,teensy,esp32 -includes=Arduino_Helpers.h +sentence=Filter library for Arduino. +paragraph= Supports IIR and FIR filters with many different implementations, Direct Form 1 & 2, BiQuad, Second Order Sections ... Supports Butterworth filters etc. +category=Data Processing +url=https://github.com/tttapa/Arduino-Filters +architectures=avr,sam,samd,teensy,esp32,esp8266,megaavr,mbed,mbed_nano +includes=Filters.h diff --git a/mock/CMakeLists.txt b/mock/CMakeLists.txt index 8c32e9cff..f3f44c425 100644 --- a/mock/CMakeLists.txt +++ b/mock/CMakeLists.txt @@ -1,10 +1,17 @@ -file(GLOB_RECURSE - ARDUINO_MOCK_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp) -add_library(ArduinoMock ${ARDUINO_MOCK_SOURCES}) +find_package(GTest REQUIRED CONFIG) + +add_library(ArduinoMock + "Core/Arduino.cpp" + "Core/ArduinoMock.cpp" + "Core/HardwareSerial0.cpp" + "Core/Print.cpp" +) target_include_directories(ArduinoMock PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/Core ${CMAKE_CURRENT_SOURCE_DIR}/Core-Libraries ${CMAKE_CURRENT_SOURCE_DIR}/Libraries/Adafruit_GFX ${CMAKE_CURRENT_SOURCE_DIR}/Libraries/Adafruit_SSD1306 ${CMAKE_CURRENT_SOURCE_DIR}/Libraries/Encoder) -target_link_libraries(ArduinoMock PUBLIC googletest_wrappers) \ No newline at end of file +target_link_libraries(ArduinoMock + PUBLIC GTest::gtest GTest::gmock + PRIVATE Arduino-Helpers::warnings) \ No newline at end of file diff --git a/mock/Core-Libraries/SPI.h b/mock/Core-Libraries/SPI.h index 0ffdd02fc..46fb25064 100644 --- a/mock/Core-Libraries/SPI.h +++ b/mock/Core-Libraries/SPI.h @@ -1 +1,17 @@ -// TODO \ No newline at end of file +#include + +// TODO +class SPIClass { +} extern SPI; + +enum SPIMode { + SPI_MODE0 = 0, + SPI_MODE1 = 1, + SPI_MODE2 = 2, + SPI_MODE3 = 3, +}; + +class SPISettings { + public: + SPISettings(uint32_t, BitOrder_t, SPIMode) {} +}; \ No newline at end of file diff --git a/mock/Core/Arduino.cpp b/mock/Core/Arduino.cpp index 1c4178217..6edb7aeca 100644 --- a/mock/Core/Arduino.cpp +++ b/mock/Core/Arduino.cpp @@ -22,10 +22,19 @@ int analogRead(uint8_t pin) { return ArduinoMock::getInstance().analogRead(pin); } +void analogReadResolution(uint8_t bits) { + ArduinoMock::getInstance().analogReadResolution(bits); +} + void analogWrite(uint8_t pin, int value) { ArduinoMock::getInstance().analogWrite(pin, value); } +void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, + uint8_t val) { + ArduinoMock::getInstance().shiftOut(dataPin, clockPin, bitOrder, val); +} + unsigned long millis() { return ArduinoMock::getInstance().millis(); } unsigned long micros() { return ArduinoMock::getInstance().micros(); } \ No newline at end of file diff --git a/mock/Core/Arduino.h b/mock/Core/Arduino.h index 44731d98b..95af05193 100644 --- a/mock/Core/Arduino.h +++ b/mock/Core/Arduino.h @@ -68,10 +68,10 @@ typedef bool boolean; // #define min(a,b) ((a)<(b)?(a):(b)) // #define max(a,b) ((a)>(b)?(a):(b)) -#define abs(x) ((x) > 0 ? (x) : -(x)) +// #define abs(x) ((x) > 0 ? (x) : -(x)) #define constrain(amt, low, high) \ ((amt) < (low) ? (low) : ((amt) > (high) ? (high) : (amt))) -#define round(x) std::round(x) +// #define round(x) std::round(x) #define radians(deg) ((deg)*DEG_TO_RAD) #define degrees(rad) ((rad)*RAD_TO_DEG) #define sq(x) ((x) * (x)) @@ -83,6 +83,7 @@ void pinMode(uint8_t, uint8_t); void digitalWrite(uint8_t, uint8_t); int digitalRead(uint8_t); int analogRead(uint8_t); +void analogReadResolution(uint8_t); void analogWrite(uint8_t, int); unsigned long millis(void); diff --git a/mock/Core/ArduinoMock.hpp b/mock/Core/ArduinoMock.hpp index 28c7dfba9..48e60b880 100644 --- a/mock/Core/ArduinoMock.hpp +++ b/mock/Core/ArduinoMock.hpp @@ -14,14 +14,16 @@ class ArduinoMock { static void end(); static SerialHelper &getSerial(); - MOCK_METHOD2(pinMode, void(uint8_t, uint8_t)); - MOCK_METHOD2(digitalWrite, void(uint8_t, uint8_t)); - MOCK_METHOD1(digitalRead, int(uint8_t)); - MOCK_METHOD1(analogRead, int(uint8_t)); - MOCK_METHOD2(analogWrite, void(uint8_t, int)); + MOCK_METHOD(void, pinMode, (uint8_t, uint8_t)); + MOCK_METHOD(void, digitalWrite, (uint8_t, uint8_t)); + MOCK_METHOD(int, digitalRead, (uint8_t)); + MOCK_METHOD(int, analogRead, (uint8_t)); + MOCK_METHOD(void, analogReadResolution, (uint8_t)); + MOCK_METHOD(void, analogWrite, (uint8_t, int)); + MOCK_METHOD(void, shiftOut, (uint8_t, uint8_t, uint8_t, uint8_t)); - MOCK_METHOD0(millis, unsigned long()); - MOCK_METHOD0(micros, unsigned long()); + MOCK_METHOD(unsigned long, millis, ()); + MOCK_METHOD(unsigned long, micros, ()); virtual ~ArduinoMock() = default; }; \ No newline at end of file diff --git a/mock/Core/HardwareSerial.h b/mock/Core/HardwareSerial.h index cabf0c097..e07e175c3 100644 --- a/mock/Core/HardwareSerial.h +++ b/mock/Core/HardwareSerial.h @@ -31,19 +31,19 @@ #undef F #endif -#include +#include class SerialHelper { public: - MOCK_METHOD1(begin, void(unsigned long)); - MOCK_METHOD0(end, void()); + MOCK_METHOD(void, begin, (unsigned long)); + MOCK_METHOD(void, end, ()); - MOCK_METHOD0(available, int()); - MOCK_METHOD0(read, int()); - MOCK_METHOD0(peek, int()); + MOCK_METHOD(int, available, ()); + MOCK_METHOD(int, read, ()); + MOCK_METHOD(int, peek, ()); - MOCK_METHOD1(write, size_t(uint8_t)); - MOCK_METHOD2(write, size_t(const uint8_t *, size_t)); + MOCK_METHOD(size_t, write, (uint8_t)); + MOCK_METHOD(size_t, write, (const uint8_t *, size_t)); virtual ~SerialHelper() = default; }; diff --git a/mock/Libraries/Encoder/Encoder.h b/mock/Libraries/Encoder/Encoder.h index 6badd5e63..0ba846011 100644 --- a/mock/Libraries/Encoder/Encoder.h +++ b/mock/Libraries/Encoder/Encoder.h @@ -1,7 +1,7 @@ #ifndef Encoder_h_ #define Encoder_h_ -#include +#include class EncoderMock { public: diff --git a/python/butterworth.svg b/python/butterworth.svg new file mode 100644 index 000000000..7de1386cc --- /dev/null +++ b/python/butterworth.svg @@ -0,0 +1,1341 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/python/firnotch.svg b/python/firnotch.svg new file mode 100644 index 000000000..b03a4f98d --- /dev/null +++ b/python/firnotch.svg @@ -0,0 +1,1280 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/python/visualization/__init__.py b/python/visualization/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/python/visualization/bode.py b/python/visualization/bode.py new file mode 100644 index 000000000..29930c2ef --- /dev/null +++ b/python/visualization/bode.py @@ -0,0 +1,34 @@ +from scipy.signal import freqz +import matplotlib.pyplot as plt +from math import pi +import numpy as np + +def bode(b, a, f_s, magnitude_limits = None, phase_limits = None): + w, H = freqz(b, a, 4096) # Calculate the frequency response + w *= f_s / (2 * pi) # Convert from rad/sample to Hz + + # Plot the amplitude response + plt.subplot(2, 1, 1) + plt.suptitle('Bode Plot') + H_dB = 20 * np.log10(abs(H)) # Convert modulus of H to dB + plt.plot(w, H_dB) + plt.ylabel('Magnitude [dB]') + plt.xlim(0, f_s / 2) + if (magnitude_limits is not None): + plt.ylim(*magnitude_limits) + plt.axhline(0, linewidth=0.8, color='black', linestyle=':') + + # Plot the phase response + plt.subplot(2, 1, 2) + phi = np.angle(H) # Argument of H + phi = np.unwrap(phi) # Remove discontinuities + phi *= 180 / pi # and convert to degrees + plt.plot(w, phi) + plt.xlabel('Frequency [Hz]') + plt.ylabel('Phase [°]') + plt.xlim(0, f_s / 2) + if (phase_limits is not None): + plt.ylim(*phase_limits) + plt.axhline(0, linewidth=0.8, color='black', linestyle=':') + + plt.show() \ No newline at end of file diff --git a/python/visualize-butterworth.py b/python/visualize-butterworth.py new file mode 100644 index 000000000..7517754d6 --- /dev/null +++ b/python/visualize-butterworth.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python3 + +""" +Visualization of the filter from the Butterworth.ino example. +""" + +from visualization.bode import bode +from scipy.signal import butter + +f_s = 100 # Sample frequency Hz +f_c = 25 # Cut-off frequency in Hz +f_n = 2 * f_c / f_s # Normalized cut-off frequency +order = 6 # Order of the butterworth filter + +# Design the digital Butterworth filter +b, a = butter(order, f_n) + +# Display the bode plot of the filter +bode(b, a, f_s, magnitude_limits=[-100, 10], phase_limits=[-540, 45]) diff --git a/python/visualize-firnotch.py b/python/visualize-firnotch.py new file mode 100644 index 000000000..58d5404a9 --- /dev/null +++ b/python/visualize-firnotch.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 + +""" +Visualization of the filter from the FIRNotch.ino example. +""" + +from visualization.bode import bode +from math import pi, cos + +f_s = 250 # Sample frequency in Hz +f_c = 50 # Notch frequency in Hz + +omega_c = 2 * pi * f_c # Notch angular frequency +omega_c_d = omega_c / f_s # Normalized notch frequency (digital) + +h0 = 2 - 2 * cos(omega_c_d) # DC gain + +b = [1 / h0, -2 * cos(omega_c_d) / h0, 1 / h0] # Calculate coefficients +a = [1] + +# Display the bode plot of the filter +bode(b, a, f_s, magnitude_limits=[-60, 20], phase_limits=[-90, 135]) diff --git a/scripts/build-arduino-examples-ci.sh b/scripts/build-arduino-examples-ci.sh deleted file mode 100755 index 8eef2904d..000000000 --- a/scripts/build-arduino-examples-ci.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash -cd "$(dirname "$0")" - -if [ $# -ge 2 ]; then - p=$1 - j=$2 -elif [ $# -eq 1 ]; then - p=$1 - j=2 -else - p=$(nproc) - j=2 -fi - -../tools/arduino-example-builder \ - --default-board 'AVR USB' \ - --directory ../examples \ - --parallel $p --jobs $j \ - --board-options-file ../test/examples-board-options-ci.txt \ - # --verbose # --print-successful diff --git a/scripts/build-arduino-examples.sh b/scripts/build-arduino-examples.sh deleted file mode 100755 index 6b9296aba..000000000 --- a/scripts/build-arduino-examples.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash -cd "$(dirname "$0")" - -if [ $# -ge 2 ]; then - p=$1 - j=$2 -elif [ $# -eq 1 ]; then - p=$1 - j=2 -else - p=$(nproc) - j=2 -fi - -../tools/arduino-example-builder \ - --default-board 'Teensy 3.x' \ - --directory ../examples \ - --parallel $p --jobs $j \ - --board-options-file ../test/examples-board-options.txt \ - # --verbose # --print-successful diff --git a/scripts/build-ci.sh b/scripts/build-ci.sh deleted file mode 100755 index c5eebc622..000000000 --- a/scripts/build-ci.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash - -set -e - -export PATH="$HOME/.local/bin:$PATH" -cd "${TRAVIS_BUILD_DIR}${GITHUB_WORKSPACE}/build" -cmake .. -DFAST_COMPILE=ON -make -j4 -make test -make arduino_ci diff --git a/scripts/ci/gen-docs.sh b/scripts/ci/gen-docs.sh new file mode 100755 index 000000000..27648b4ad --- /dev/null +++ b/scripts/ci/gen-docs.sh @@ -0,0 +1,104 @@ +#!/usr/bin/env bash +set -ex +cd "$(dirname "$0")" + +output_folder="${1:-/tmp}" +mkdir -p "$output_folder" + +# Function that builds the doxygen documentation and generates the +# coverage information. +# usage: run_doxygen_coverage +function run_doxygen_coverage { + pushd ../../doxygen + if [ "$1" = "master" ]; then dir="Doxygen"; else dir="$1/Doxygen"; fi + # Remove the old documentation + rm -rf "$2/$dir" + mkdir -p "$2/$dir" + # Tweak some Doxyfile verion numbers and output paths + ( + cat Doxyfile; + echo; + echo "PROJECT_NUMBER = \"$1\""; + echo "OUTPUT_DIRECTORY = \"$2\""; + echo "HTML_OUTPUT = \"$dir\""; + echo "GENERATE_LATEX = NO" + ) > tmp-Doxyfile + # Generate the documentation + doxygen tmp-Doxyfile + rm -rf tmp-Doxyfile + popd + + if [ "$1" = "master" ]; then dir="Coverage"; else dir="$1/Coverage"; fi + pushd ../.. + rm -rf docs/Coverage build + cmake -S. --preset ci-cov + cmake --build --preset ci-cov -t coverage -j + mkdir -p "$2/$dir" + rm -rf "$2/$dir" + mv docs/Coverage "$2/$dir" + popd +} + +# Generate the documentation for the current branch +curr_branch=$(git branch --show-current) +if [ -n "$curr_branch" ]; then + run_doxygen_coverage "$curr_branch" "$output_folder" +fi +# Generate the documentation for the current tag +if curr_tag=$(git describe --tags --exact-match); then + run_doxygen_coverage "$curr_tag" "$output_folder" +fi + +echo "Done generating documentation" + +# Get all tags and branches for generating the index with links to docs for +# specific branches and versions: +git fetch +git fetch --tags + +README="$output_folder/README.md" +echo "Documentation for" \ + "[**$GITHUB_REPOSITORY**](https://github.com/$GITHUB_REPOSITORY)." \ +> "$README" +# Always have a link to main, it's at the root of the docs folder +echo -e '\n### Main Branch\n' >> "$README" +echo "- **master** " >> "$README" +echo " [Doxygen](Doxygen/index.html)"\ + "─ [Coverage](Coverage/index.html)" >> "$README" +# Find all tags with documentation (version numbers) +echo -e '\n### Tags and Releases\n' >> "$README" +git tag -l --sort=-creatordate \ + | while read tag; do + index="$output_folder/$tag/Doxygen/index.html" + if [ -e "$index" ]; then + echo "- **$tag** " >> "$README" + echo " [Doxygen]($tag/Doxygen/index.html)"\ + "─ [Coverage]($tag/Coverage/index.html)" >> "$README" + else + echo "tag $tag has no documentation" + fi +done +# Find other branches (not version numbers) +echo -e '\n### Other Branches\n' >> "$README" +git branch -r --sort=-committerdate | cut -d / -f 2 \ + | while read branch +do + index="$output_folder/$branch/Doxygen/index.html" + if [ -e "$index" ]; then + echo "- **$branch** " >> "$README" + echo " [Doxygen]($branch/Doxygen/index.html)"\ + "─ [Coverage]($branch/Coverage/index.html)" >> "$README" + else + echo "branch $branch has no documentation" + fi +done + +echo -e "\n***\n" >> "$README" +# echo "Updated on $(date)" >> "$README" +cat > "$output_folder/_config.yml" << EOF +include: + - "_modules" + - "_sources" + - "_static" + - "_images" +EOF diff --git a/scripts/ci/install-doxygen.sh b/scripts/ci/install-doxygen.sh new file mode 100755 index 000000000..6dc952766 --- /dev/null +++ b/scripts/ci/install-doxygen.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +# Script to download and install Doxygen + +set -ex + +version="Release_1_9_4" # Release tag on GitHub +prefix="${1:-$HOME/.local}" + +[ -e "$prefix/bin/doxygen" ] \ + && exit 0 + +mkdir /tmp/doxygen-install +pushd /tmp/doxygen-install + +# Download +[ -d "doxygen" ] \ + || git clone --single-branch --depth=1 --branch "$version" \ + https://github.com/doxygen/doxygen.git +pushd doxygen +# Configure +cmake -Bbuild -S. \ + -DCMAKE_INSTALL_PREFIX="$prefix" \ + -DCMAKE_BUILD_TYPE=Release +# Build +cmake --build build -j1 +# Install +cmake --install build + +popd +popd \ No newline at end of file diff --git a/scripts/ci/install-lcov.sh b/scripts/ci/install-lcov.sh new file mode 100755 index 000000000..91adc65f4 --- /dev/null +++ b/scripts/ci/install-lcov.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +# Script to download and install LCOV + +set -ex + +version="v1.15" # Release tag on GitHub +prefix="${1:-$HOME/.local}" + +[ -e "$prefix/bin/lcov" ] \ + && exit 0 + +mkdir /tmp/lcov-install +pushd /tmp/lcov-install + +# Download +[ -d "lcov" ] \ + || git clone --single-branch --depth=1 --branch "$version" \ + https://github.com/linux-test-project/lcov.git +pushd lcov +make install PREFIX="$prefix" + +popd +popd diff --git a/scripts/coverage-badge.py b/scripts/coverage-badge.py index 251fc83f8..845f4fe4e 100755 --- a/scripts/coverage-badge.py +++ b/scripts/coverage-badge.py @@ -1,15 +1,12 @@ -#!/usr/bin/python3 +#!/usr/bin/env python3 """ Script that extracts the test coverage percentage and saves it as a JSON shields.io endpoint. """ -import os -from os.path import join, normpath, dirname, splitext, relpath, realpath +from os.path import join, normpath, dirname, realpath import re -from yaml import safe_load - script_dir = dirname(realpath(__file__)) cov_dir = normpath(join(dirname(script_dir), "docs", "Coverage")) diff --git a/scripts/coverage.sh b/scripts/coverage.sh index ac3fa2b4a..3bf1b2762 100755 --- a/scripts/coverage.sh +++ b/scripts/coverage.sh @@ -4,8 +4,8 @@ set -ex dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -proj_dir=`realpath "$dir"/..` -build_dir=`pwd` +proj_dir=$(dirname "$dir") +build_dir=$(pwd) html_dest="$proj_dir/docs/Coverage" dest="$build_dir/coverage" @@ -15,38 +15,59 @@ mkdir -p "$html_dest" rm -f "$dest/*.info" rm -rf "$html_dest/*" -if [ "${1,,}" == "clang" ]; then - gcov_bin="$dir/llvm-cov-gcov.sh" +# Parse command line arguments + +compiler="${1,,}" +version="${2%%.*}" + +if [ ! -z "$version" ]; then version="-${version}"; fi + +echo "Compiler: ${compiler}${version}" + +# If the compiler is Clang, use a wrapper around llvm-cov that emulates gcov +# and use the right c++filt +if [ "${compiler}" == "clang" ]; then + mkdir -p "/tmp/clang-cxxfilt-gcov" + echo -e "#!/usr/bin/env sh\nexec llvm-cov${version} gcov \"\$@\"" \ + > "/tmp/clang-cxxfilt-gcov/llvm-cov" + chmod +x "/tmp/clang-cxxfilt-gcov/llvm-cov" + # Replace the default c++filt program with LLVM/Clang's version + ln -sfn $(which llvm-cxxfilt${version}) /tmp/clang-cxxfilt-gcov/c++filt + export PATH="/tmp/clang-cxxfilt-gcov:$PATH" + gcov_bin="llvm-cov" else - gcov_bin="gcov" + gcov_bin="gcov${version}" fi branches=0 -cd "$proj_dir" -pwd - +# Reset counters lcov \ --zerocounters \ --directory "$build_dir" -cmake -S "$proj_dir" -B "$build_dir" -make -C "$build_dir" -j$((`nproc` * 2)) - +# Initial capture lcov \ - --capture --initial --directory "$build_dir" \ + --capture --initial \ + --directory "$build_dir" \ + --include "$proj_dir"'/src/Filters/**' \ --output-file "$dest"/coverage_base.info \ --gcov-tool "$gcov_bin" \ --rc lcov_branch_coverage=$branches -make -C "$build_dir" check +# Run tests +ctest +# Actual capture lcov \ - --capture --directory "$build_dir" \ + --capture \ + --directory "$build_dir" \ + --include "$proj_dir"'/src/Filters/**' \ --output-file "$dest"/coverage_test.info \ --gcov-tool "$gcov_bin" \ --rc lcov_branch_coverage=$branches +# Combine captures lcov \ --add-tracefile "$dest"/coverage_base.info \ --add-tracefile "$dest"/coverage_test.info \ @@ -54,21 +75,14 @@ lcov \ --gcov-tool "$gcov_bin" \ --rc lcov_branch_coverage=$branches -lcov \ - --remove "$dest"/coverage_total.info \ - '/usr/include/*' '/usr/lib/*' \ - '*/ArduinoMock/*' '*/mock/*' \ - '*/googletest/*' \ - '*/test/*' \ - --output-file "$dest"/coverage_filtered.info \ - --gcov-tool "$gcov_bin" \ - --rc lcov_branch_coverage=$branches - +# Generate HTML coverage report genhtml \ - --prefix `realpath "$proj_dir"` \ - "$dest"/coverage_filtered.info \ + --prefix "$proj_dir" \ + "$dest"/coverage_total.info \ --output-directory="$html_dest" \ --legend --title `cd "$proj_dir" && git rev-parse HEAD` \ - --rc lcov_branch_coverage=$branches + --rc lcov_branch_coverage=$branches \ + -s \ + --demangle-cpp -./scripts/coverage-badge.py \ No newline at end of file +python3 "$proj_dir/scripts/coverage-badge.py" diff --git a/scripts/git-pull-arduino-helpers.sh b/scripts/git-pull-arduino-helpers.sh new file mode 100755 index 000000000..a1483658a --- /dev/null +++ b/scripts/git-pull-arduino-helpers.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +cd "$(dirname "$0")" + +read -p "This script will reset and clean 'docs'. Press enter to confirm. " + +git pull arduino-helpers master +git reset ../docs +git reset ../examples/examples.dox +git checkout ../docs +git clean -d ../docs -f +git checkout ../examples/examples.dox +git add ../docs +git add ../examples/examples.dox \ No newline at end of file diff --git a/scripts/install-ci.sh b/scripts/install-ci.sh index f51678fc5..6af8d938b 100755 --- a/scripts/install-ci.sh +++ b/scripts/install-ci.sh @@ -28,6 +28,8 @@ else arduino --install-boards "arduino:avr:1.8.1" arduino --install-boards "arduino:sam" arduino --install-boards "arduino:samd" + arduino --install-boards "arduino:megaavr" + arduino --install-boards "arduino:mbed" cd /tmp wget https://www.pjrc.com/teensy/td_148/TeensyduinoInstall.linux64 @@ -55,4 +57,4 @@ else fi ln -s "${TRAVIS_BUILD_DIR}${GITHUB_WORKSPACE}" \ - "$HOME/Arduino/libraries/Arduino-Helpers" \ No newline at end of file + "$HOME/Arduino/libraries/Arduino-Filters" \ No newline at end of file diff --git a/scripts/install-gtest.sh b/scripts/install-gtest.sh new file mode 100755 index 000000000..c2cdae749 --- /dev/null +++ b/scripts/install-gtest.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +cd "$( dirname "${BASH_SOURCE[0]}" )"/.. + +build_type="${1:-RelWithDebInfo}" +prefix="${2:-/usr/local}" + +set -ex + +pushd /tmp + +# GoogleTest framework +rm -rf googletest +git clone --single-branch --depth=1 --branch main \ + https://github.com/google/googletest.git +pushd googletest +cmake -Bbuild -S. \ + -D CMAKE_INSTALL_PREFIX="${prefix}" \ + -D CMAKE_BUILD_TYPE="${build_type}" +cmake --build build -j +cmake --install build +popd + +popd diff --git a/scripts/keywords.py b/scripts/keywords.py old mode 100644 new mode 100755 diff --git a/scripts/llvm-cov-gcov.sh b/scripts/llvm-cov-gcov.sh deleted file mode 100755 index f5e0afa72..000000000 --- a/scripts/llvm-cov-gcov.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env sh -exec llvm-cov gcov "$@" \ No newline at end of file diff --git a/scripts/setup-build.sh b/scripts/setup-build.sh deleted file mode 100755 index 7656bb243..000000000 --- a/scripts/setup-build.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash - -set -ex - -if [ "$#" -ne 1 ]; then - echo "Usage: $0 " - exit 0 -fi - -cd "$1" - -rm -rf build/* -mkdir -p build && cd $_ - -cmake .. \ - -DCMAKE_BUILD_TYPE=Debug \ - -DFAST_COMPILE=OFF - -mkdir coverage && cd $_ - -CC=clang CXX=clang++ \ -cmake ../.. \ - -DCMAKE_BUILD_TYPE=Coverage \ - -DFAST_COMPILE=ON \ No newline at end of file diff --git a/src/AH/CMakeLists.txt b/src/AH/CMakeLists.txt index e09f7a755..b13e5807b 100644 --- a/src/AH/CMakeLists.txt +++ b/src/AH/CMakeLists.txt @@ -1,14 +1,18 @@ -if (FAST_COMPILE) +option(AH_FAST_COMPILE "Compile only necessary files" On) + +if (AH_FAST_COMPILE) set(Arduino_Helpers_SOURCES - PrintStream/PrintStream.cpp - Debug/Debug.cpp - Hardware/IncrementDecrementButtons.cpp - Hardware/Button.cpp - Hardware/IncrementButton.cpp - Hardware/ExtendedInputOutput/ShiftRegisterOutRGB.cpp - Hardware/ExtendedInputOutput/ExtendedIOElement.cpp - Hardware/ExtendedInputOutput/ExtendedInputOutput.cpp - Error/Exit.cpp + "PrintStream/PrintStream.cpp" + "Debug/Debug.cpp" + "Hardware/IncrementDecrementButtons.cpp" + "Hardware/Button.cpp" + "Hardware/IncrementButton.cpp" + "Hardware/ExtendedInputOutput/ShiftRegisterOutRGB.cpp" + "Hardware/ExtendedInputOutput/ExtendedIOElement.cpp" + "Hardware/ExtendedInputOutput/ExtendedInputOutput.cpp" + "Error/Exit.cpp" + "Math/Vector.cpp" + "Math/Quaternion.cpp" ) else () file(GLOB_RECURSE @@ -19,11 +23,11 @@ add_library(Arduino_Helpers ${Arduino_Helpers_SOURCES}) target_include_directories(Arduino_Helpers PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/..) -if (FAST_COMPILE) -target_compile_definitions(Arduino_Helpers - PUBLIC - -DNO_DEBUG_PRINTS - -DANALOG_FILTER_SHIFT_FACTOR_OVERRIDE=2) +if (AH_FAST_COMPILE) + target_compile_definitions(Arduino_Helpers + PUBLIC + -DNO_DEBUG_PRINTS + -DANALOG_FILTER_SHIFT_FACTOR_OVERRIDE=2) else () target_compile_definitions(Arduino_Helpers PUBLIC @@ -32,4 +36,6 @@ else () -DANALOG_FILTER_SHIFT_FACTOR_OVERRIDE=2) endif () -target_link_libraries(Arduino_Helpers PUBLIC ArduinoMock) \ No newline at end of file +target_link_libraries(Arduino_Helpers + PUBLIC ArduinoMock + PRIVATE Arduino-Helpers::warnings) \ No newline at end of file diff --git a/src/AH/Containers/Array.hpp b/src/AH/Containers/Array.hpp index c4fbddd28..8cac97f6a 100644 --- a/src/AH/Containers/Array.hpp +++ b/src/AH/Containers/Array.hpp @@ -9,7 +9,7 @@ AH_DIAGNOSTIC_WERROR() // Enable errors on warnings #include #include #include // conditional -#include // size_t +#include // size_t BEGIN_AH_NAMESPACE @@ -195,10 +195,13 @@ class ArraySlice { using reference = ElementRefType; using iterator_category = std::random_access_iterator_tag; - bool operator!=(Iterator rhs) const { return ptr != rhs.ptr; } bool operator==(Iterator rhs) const { return ptr == rhs.ptr; } + bool operator!=(Iterator rhs) const { return ptr != rhs.ptr; } reference operator*() const { return *ptr; } + pointer operator->() const { return ptr; } + + reference operator[](difference_type n) const { return ptr[n]; } Iterator &operator++() { Reverse ? --ptr : ++ptr; @@ -210,6 +213,28 @@ class ArraySlice { return *this; } + Iterator operator++(int) { + Iterator ret = *this; + ++(*this); + return ret; + } + + Iterator operator--(int) { + Iterator ret = *this; + --(*this); + return ret; + } + + Iterator &operator+=(difference_type n) { + Reverse ? (ptr -= n) : (ptr += n); + return *this; + } + + Iterator &operator-=(difference_type n) { + Reverse ? (ptr += n) : (ptr -= n); + return *this; + } + difference_type operator-(Iterator rhs) const { return Reverse ? rhs.ptr - ptr : ptr - rhs.ptr; } @@ -226,6 +251,12 @@ class ArraySlice { return Reverse ? rhs.ptr < ptr : ptr < rhs.ptr; } + bool operator>(Iterator rhs) const { return rhs < *this; } + + bool operator<=(Iterator rhs) const { return !(*this > rhs); } + + bool operator>=(Iterator rhs) const { return !(*this < rhs); } + private: ElementPtrType ptr; }; @@ -245,9 +276,9 @@ class ArraySlice { index = N - 1; // LCOV_EXCL_LINE } // LCOV_EXCL_LINE if (Reverse) - return array[-index]; + return *(array - index); else - return array[index]; + return *(array + index); } Iterator begin() const { @@ -299,9 +330,18 @@ ArraySlice::slice() const { return &(*this)[Start]; } +/// @related ArraySlice::Iterator +template +typename ArraySlice::Iterator operator+( + typename ArraySlice::Iterator::difference_type n, + typename ArraySlice::Iterator a) { + return a + n; +} + // Equality :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: /// Slice == Slice +/// @related ArraySlice template bool operator==(ArraySlice a, @@ -314,6 +354,7 @@ bool operator==(ArraySlice a, } /// Array == Slice +/// @related ArraySlice template bool operator==(const Array &a, ArraySlice b) { @@ -321,6 +362,7 @@ bool operator==(const Array &a, } /// Slice == Array +/// @related ArraySlice template bool operator==(ArraySlice a, const Array &b) { @@ -330,6 +372,7 @@ bool operator==(ArraySlice a, // Inequality :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: /// Slice != Slice +/// @related ArraySlice template bool operator!=(ArraySlice a, @@ -338,6 +381,7 @@ bool operator!=(ArraySlice a, } /// Array != Slice +/// @related ArraySlice template bool operator!=(const Array &a, ArraySlice b) { @@ -345,6 +389,7 @@ bool operator!=(const Array &a, } /// Slice != Array +/// @related ArraySlice template bool operator!=(ArraySlice a, const Array &b) { @@ -354,6 +399,7 @@ bool operator!=(ArraySlice a, // Addition :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: /// Slice + Slice +/// @related ArraySlice template Array @@ -367,6 +413,7 @@ operator+(ArraySlice a, } /// Array + Array +/// @related Array template Array operator+(const Array &a, const Array &b) { @@ -374,6 +421,7 @@ Array operator+(const Array &a, } /// Slice += Slice +/// @related ArraySlice template const ArraySlice & @@ -386,6 +434,7 @@ operator+=(const ArraySlice &a, } /// Array += Array +/// @related Array template Array &operator+=(Array &a, const Array &b) { a.slice() += b.slice(); @@ -395,6 +444,7 @@ Array &operator+=(Array &a, const Array &b) { // Subtraction ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: /// Slice - Slice +/// @related ArraySlice template Array @@ -408,6 +458,7 @@ operator-(ArraySlice a, } /// Array - Array +/// @related Array template Array operator-(const Array &a, const Array &b) { @@ -415,6 +466,7 @@ Array operator-(const Array &a, } /// Slice -= Slice +/// @related ArraySlice template const ArraySlice & @@ -427,6 +479,7 @@ operator-=(const ArraySlice &a, } /// Array -= Array +/// @related Array template Array &operator-=(Array &a, const Array &b) { a.slice() -= b.slice(); @@ -436,6 +489,7 @@ Array &operator-=(Array &a, const Array &b) { // Scalar Multiplication ::::::::::::::::::::::::::::::::::::::::::::::::::::::: /// Slice * Scalar +/// @related ArraySlice template Array operator*(ArraySlice a, T2 b) { @@ -446,12 +500,14 @@ operator*(ArraySlice a, T2 b) { } /// Array * Scalar +/// @related Array template Array operator*(const Array &a, T2 b) { return a.slice() * b; } /// Scalar * Slice +/// @related ArraySlice template Array operator*(T1 a, ArraySlice b) { @@ -462,12 +518,14 @@ operator*(T1 a, ArraySlice b) { } /// Scalar * Array +/// @related Array template Array operator*(T1 a, const Array &b) { return a * b.slice(); } /// Slice *= Scalar +/// @related ArraySlice template const ArraySlice & operator*=(const ArraySlice &a, T2 b) { @@ -477,6 +535,7 @@ operator*=(const ArraySlice &a, T2 b) { } /// Array *= Scalar +/// @related Array template Array &operator*=(Array &a, T2 b) { a.slice() *= b; @@ -486,6 +545,7 @@ Array &operator*=(Array &a, T2 b) { // Scalar Division ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: /// Slice / Scalar +/// @related ArraySlice template Array operator/(ArraySlice a, T2 b) { @@ -496,12 +556,14 @@ operator/(ArraySlice a, T2 b) { } /// Array / Scalar +/// @related Array template Array operator/(const Array &a, T2 b) { return a.slice() / b; } /// Slice /= Scalar +/// @related ArraySlice template const ArraySlice & operator/=(const ArraySlice &a, T2 b) { @@ -511,6 +573,7 @@ operator/=(const ArraySlice &a, T2 b) { } /// Array /= Scalar +/// @related Array template Array &operator/=(Array &a, T2 b) { a.slice() /= b; @@ -520,6 +583,7 @@ Array &operator/=(Array &a, T2 b) { // Negation :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: /// -Slice +/// @related ArraySlice template Array operator-(ArraySlice a) { Array result = {{}}; @@ -529,6 +593,7 @@ Array operator-(ArraySlice a) { } /// -Array +/// @related Array template Array operator-(const Array &a) { return -a.slice(); @@ -537,8 +602,8 @@ Array operator-(const Array &a) { // Type aliases :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: /// An easy alias for two-dimensional Arrays. -template -using Array2D = Array, nb_rows>; +template +using Array2D = Array, NumRows>; /// @} diff --git a/src/AH/Containers/ArrayHelpers.hpp b/src/AH/Containers/ArrayHelpers.hpp index cfcdeb8b5..00977f42d 100644 --- a/src/AH/Containers/ArrayHelpers.hpp +++ b/src/AH/Containers/ArrayHelpers.hpp @@ -46,12 +46,9 @@ class Incrementor { } // namespace detail -END_AH_NAMESPACE /// @addtogroup AH_Containers /// @{ -BEGIN_AH_NAMESPACE - /** * @brief Generate an array using the given generator. * @@ -244,10 +241,10 @@ distribute(const Array &a, const Array &b) { return distribute(a.slice(), b.slice()); } -END_AH_NAMESPACE - /// @} +END_AH_NAMESPACE + #ifndef ARDUINO #include diff --git a/src/AH/Containers/BitArray.hpp b/src/AH/Containers/BitArray.hpp index ea4cf22d1..2ba37cce9 100644 --- a/src/AH/Containers/BitArray.hpp +++ b/src/AH/Containers/BitArray.hpp @@ -10,18 +10,18 @@ AH_DIAGNOSTIC_WERROR() // Enable errors on warnings #include #include +BEGIN_AH_NAMESPACE + /// @addtogroup AH_Containers /// @{ -BEGIN_AH_NAMESPACE - /** * @brief A class for arrays of bits. * * @tparam N * The number of bits. */ -template +template class BitArray { public: /** @@ -30,7 +30,7 @@ class BitArray { * @param bitIndex * The (zero-based) index of the bit to read. */ - bool get(uint8_t bitIndex) const { + bool get(uint16_t bitIndex) const { return buffer[getBufferIndex(bitIndex)] & getBufferMask(bitIndex); } @@ -40,7 +40,7 @@ class BitArray { * @param bitIndex * The (zero-based) index of the bit to set. */ - void set(uint8_t bitIndex) { + void set(uint16_t bitIndex) { buffer[getBufferIndex(bitIndex)] |= getBufferMask(bitIndex); } @@ -50,7 +50,7 @@ class BitArray { * @param bitIndex * The (zero-based) index of the bit to clear. */ - void clear(uint8_t bitIndex) { + void clear(uint16_t bitIndex) { buffer[getBufferIndex(bitIndex)] &= ~getBufferMask(bitIndex); } @@ -62,7 +62,7 @@ class BitArray { * @param state * The value to set the bit to. */ - void set(uint8_t bitIndex, bool state) { + void set(uint16_t bitIndex, bool state) { state ? set(bitIndex) : clear(bitIndex); } @@ -74,13 +74,13 @@ class BitArray { * @param byteIndex * The index to check. */ - uint8_t safeIndex(uint8_t byteIndex) const { + uint16_t safeIndex(uint16_t byteIndex) const { if (byteIndex >= getBufferLength()) { ERROR(F("Error: index out of bounds (") << byteIndex << F(", length is ") << getBufferLength() << ')', 0xFFFF); - return getBufferLength() - 1; + return getBufferLength() - 1; // LCOV_EXCL_LINE } return byteIndex; } @@ -96,31 +96,53 @@ class BitArray { * @param byteIndex * The index of the byte within the array. */ - uint8_t getByte(uint8_t byteIndex) const { + const uint8_t &getByte(uint16_t byteIndex) const { + return buffer[byteIndex]; + // return buffer[safeIndex(byteIndex)]; + } + /// @copydoc BitArray::getByte + uint8_t &getByte(uint16_t byteIndex) { return buffer[byteIndex]; // return buffer[safeIndex(byteIndex)]; } + /** + * @brief Set the byte at the given index. + * + * This function can be used to quickly write all of the bits, when reading + * them in from an I/O expander, for example. + * + * @note No bounds checking is performed. + * + * @param byteIndex + * The index of the byte within the array. + * @param value + * The byte to write. + */ + void setByte(uint16_t byteIndex, uint8_t value) { + buffer[byteIndex] = value; + } + /** * @brief Get the buffer length in bytes. */ - uint8_t getBufferLength() const { return bufferLength; } + uint16_t getBufferLength() const { return bufferLength; } private: - uint8_t getBufferIndex(uint8_t bitIndex) const { + uint16_t getBufferIndex(uint16_t bitIndex) const { return safeIndex(bitIndex / 8); } - uint8_t getBufferBit(uint8_t bitIndex) const { return bitIndex % 8; } - uint8_t getBufferMask(uint8_t bitIndex) const { + uint8_t getBufferBit(uint16_t bitIndex) const { return bitIndex % 8; } + uint8_t getBufferMask(uint16_t bitIndex) const { return 1 << getBufferBit(bitIndex); } - constexpr static uint8_t bufferLength = (uint8_t)((N + 7) / 8); + constexpr static uint16_t bufferLength = (uint16_t)((N + 7) / 8); uint8_t buffer[bufferLength] = {}; }; -END_AH_NAMESPACE - /// @} +END_AH_NAMESPACE + AH_DIAGNOSTIC_POP() \ No newline at end of file diff --git a/src/AH/Containers/CRTP.hpp b/src/AH/Containers/CRTP.hpp new file mode 100644 index 000000000..97f4280a7 --- /dev/null +++ b/src/AH/Containers/CRTP.hpp @@ -0,0 +1,5 @@ +#pragma once + +/// Helper for the Curiously Recurring Template Pattern. +#define CRTP(Derived) (*static_cast(this)) +#define CRTP_INST(Derived, el) (static_cast(el)) diff --git a/src/AH/Containers/Containers.dox b/src/AH/Containers/Containers.dox index 105de2294..6586ebb0f 100644 --- a/src/AH/Containers/Containers.dox +++ b/src/AH/Containers/Containers.dox @@ -5,7 +5,7 @@ /** * @defgroup AH_Containers Containers - * @brief Containers like Array, BitArray, DoublyLinkedList and UniquePtr. + * @brief Containers like Array, BitArray, DoublyLinkedList. */ /// @cond !AH_MAIN_LIBRARY diff --git a/src/AH/Containers/LinkedList.hpp b/src/AH/Containers/LinkedList.hpp index 340fee2a8..6fe2cbf31 100644 --- a/src/AH/Containers/LinkedList.hpp +++ b/src/AH/Containers/LinkedList.hpp @@ -10,9 +10,7 @@ AH_DIAGNOSTIC_WERROR() // Enable errors on warnings #include #include -#ifndef __AVR__ -#include -#endif +#include /// @addtogroup AH_Containers /// @{ @@ -36,11 +34,20 @@ class DoublyLinkedList { return node != rhs.node; } + bool operator==(const node_iterator_base &rhs) const { + return !(*this != rhs); + } + INode &operator*() const { // TODO: check node != nullptr return *node; } + INode *operator->() const { + // TODO: check node != nullptr + return node; + } + protected: INode *node; }; @@ -51,13 +58,11 @@ class DoublyLinkedList { public: node_iterator(INode *node) : node_iterator_base(node) {} -#ifndef __AVR__ - using difference_type = void; + using difference_type = long; using value_type = INode; using pointer = INode *; using reference = INode &; using iterator_category = std::bidirectional_iterator_tag; -#endif /// Prefix increment operator node_iterator &operator++() { @@ -80,13 +85,11 @@ class DoublyLinkedList { public: reverse_node_iterator(INode *node) : node_iterator_base(node) {} -#ifndef __AVR__ - using difference_type = void; + using difference_type = long; using value_type = INode; using pointer = INode *; using reference = INode &; using iterator_category = std::bidirectional_iterator_tag; -#endif /// Prefix increment operator reverse_node_iterator &operator++() { @@ -250,6 +253,19 @@ class DoublyLinkedList { last = nodeB; } + /** + * @brief Move down the given node in the linked list. + * + * For example: moving down node `C`: + * ``` + * Before: ... → A → B → C → D → ... + * After: ... → A → C → B → D → ... + * ``` + * @param node + * A reference to the node to be moved down. + */ + void moveDown(Node &node) { moveDown(&node); } + /** * @brief Check if the linked list could contain the given node. * @@ -265,11 +281,14 @@ class DoublyLinkedList { * The given node is not part of any linked list, or it is the * only element of a different linked list. */ - bool couldContain(Node *node) { + bool couldContain(const Node *node) const { return node && (node == first || node->next != nullptr || node->previous != nullptr); } + /// @copydoc DoublyLinkedList::couldContain(const Node *) const + bool couldContain(const Node &node) const { return couldContain(&node); } + iterator begin() { return {first}; } iterator end() { return {nullptr}; } @@ -305,6 +324,22 @@ class DoublyLinkable { Node *next = nullptr; Node *previous = nullptr; virtual ~DoublyLinkable() = default; + + DoublyLinkable() = default; + DoublyLinkable(const DoublyLinkable &) { + // Don't copy the pointers + } + DoublyLinkable &operator=(const DoublyLinkable &) { + // Don't copy the pointers + return *this; + } + DoublyLinkable(DoublyLinkable &&) { + // Don't swap the pointers + } + DoublyLinkable &operator=(DoublyLinkable &&) { + // Don't swap the pointers + return *this; + } }; /// @} diff --git a/src/AH/Containers/UniquePtr.cpp b/src/AH/Containers/UniquePtr.cpp deleted file mode 100644 index 49e751598..000000000 --- a/src/AH/Containers/UniquePtr.cpp +++ /dev/null @@ -1,3 +0,0 @@ -#ifdef TEST_COMPILE_ALL_HEADERS_SEPARATELY -#include "UniquePtr.hpp" -#endif diff --git a/src/AH/Containers/UniquePtr.hpp b/src/AH/Containers/UniquePtr.hpp deleted file mode 100644 index 804da8011..000000000 --- a/src/AH/Containers/UniquePtr.hpp +++ /dev/null @@ -1,74 +0,0 @@ -#pragma once - -#include -AH_DIAGNOSTIC_WERROR() // Enable errors on warnings - -#include -#include // std::forward - -BEGIN_AH_NAMESPACE - -/// @addtogroup AH_Containers -/// @{ - -/** - * @brief Very basic smart pointer. Doesn't support array types. - * - * @tparam T - * The type of the pointee. - */ -template -class UniquePtr { - public: - UniquePtr() = default; - explicit UniquePtr(T *p) : p(p) {} - UniquePtr(const UniquePtr &) = delete; - template - UniquePtr(UniquePtr &&r) { - reset(r.release()); - } - - ~UniquePtr() { delete p; } - - UniquePtr &operator=(const UniquePtr &) = delete; - UniquePtr &operator=(UniquePtr &&r) { - reset(r.release()); - return *this; - } - - void reset(T *newP = nullptr) { - T *old_ptr = p; - p = newP; - delete old_ptr; - } - - T *release() { - T *old_ptr = p; - p = nullptr; - return old_ptr; - } - - explicit operator bool() const { return p != nullptr; } - - T *get() { return p; } - const T *get() const { return p; } - - T *operator->() { return p; } - const T *operator->() const { return p; } - T &operator*() { return *p; } - const T &operator*() const { return *p; } - - private: - T *p = nullptr; -}; - -template -UniquePtr MakeUnique(Args &&... args) { - return UniquePtr(new T(std::forward(args)...)); -} - -/// @} - -END_AH_NAMESPACE - -AH_DIAGNOSTIC_POP() diff --git a/src/AH/Containers/Updatable.hpp b/src/AH/Containers/Updatable.hpp index 2edd69e92..5e4666303 100644 --- a/src/AH/Containers/Updatable.hpp +++ b/src/AH/Containers/Updatable.hpp @@ -6,48 +6,103 @@ AH_DIAGNOSTIC_WERROR() // Enable errors on warnings +#include #include #include +#include +#include // std::forward #include #include BEGIN_AH_NAMESPACE -struct NormalUpdatable {}; - /** * @brief A super class for object that have to be updated regularly. * * All instances of this class are kept in a linked list, so it's easy to - * iterate over all of them to update them. + * iterate over all of them to update them. + * + * This version uses static polymorphism using the Curiously Recurring Template + * Pattern. This requires less virtual function calls. + * (Only the destructor is virtual.) + * + * @nosubgrouping */ -template -class Updatable : public DoublyLinkable> { +template +class UpdatableCRTP : public DoublyLinkable { + + public: +#if defined(__GNUC__) && !defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wattributes" +#endif + + // When a Derived instance is constructed, the base class constructor + // UpdatableCRTP is called first. Because the Derived constructor hasn't + // been run yet, the dynamic type is just Updatable, not yet Derived. + // The undefined behavior sanitizer checks this dynamic type when the this + // pointer is casted to Derived using the CRTP macro, and thus causes an + // error. + // The constructor only casts and stores the pointer, it doesn't dereference + // it to call any of Derived methods, so I don't think that it's undefined + // behavior (and I don't know of a better way to do this). + // Also see https://stackoverflow.com/q/61061051/6356744 + protected: - /// Create an Updatabe and add it to the linked list of instances. - Updatable() { updatables.append(this); } + /// Constructor: create an Updatable and add it to the linked list of + /// instances. + UpdatableCRTP() __attribute__((no_sanitize("undefined"))) { + updatables.append(CRTP(Derived)); + } + + UpdatableCRTP(const UpdatableCRTP &) + __attribute__((no_sanitize("undefined"))) + : DoublyLinkable() { + updatables.append(CRTP(Derived)); + } + UpdatableCRTP &operator=(const UpdatableCRTP &) { return *this; } + + UpdatableCRTP(UpdatableCRTP &&) __attribute__((no_sanitize("undefined"))) { + updatables.append(CRTP(Derived)); + } + UpdatableCRTP &operator=(UpdatableCRTP &&) { return *this; } public: /// Destructor: remove the updatable from the linked list of instances. - virtual ~Updatable() { - if (isEnabled()) - updatables.remove(this); + virtual ~UpdatableCRTP() __attribute__((no_sanitize("undefined"))) { + if (updatables.couldContain(CRTP(Derived))) + updatables.remove(CRTP(Derived)); } - /// Update this updatable. - virtual void update() = 0; +#if defined(__GNUC__) && !defined(__clang__) +#pragma GCC diagnostic pop +#endif - /// Initialize this updatable. - virtual void begin() = 0; + public: + /// @name Main initialization and updating methods + /// @{ + + template + static void __attribute__((always_inline)) + applyToAll(void (Derived::*method)(Args...), Args... args) { + for (auto &el : updatables) + (el.*method)(args...); + } + + /// @} + + public: + /// @name Enabling and disabling updatables + /// @{ /// Enable this updatable: insert it into the linked list of instances, /// so it gets updated automatically void enable() { if (isEnabled()) { ERROR(F("Error: This element is already enabled."), 0x1212); - return; + return; // LCOV_EXCL_LINE } - updatables.append(this); + updatables.append(CRTP(Derived)); } /// Disable this updatable: remove it from the linked list of instances, @@ -55,9 +110,9 @@ class Updatable : public DoublyLinkable> { void disable() { if (!isEnabled()) { ERROR(F("Error: This element is already disabled."), 0x1213); - return; + return; // LCOV_EXCL_LINE } - updatables.remove(this); + updatables.remove(CRTP(Derived)); } /** @@ -66,48 +121,76 @@ class Updatable : public DoublyLinkable> { * @note Assumes that the updatable is not added to a different linked * list by the user. */ - bool isEnabled() { return updatables.couldContain(this); } - - /// Begin all enabled instances of this class - /// @see begin() - static void beginAll() { - for (Updatable &el : updatables) - el.begin(); - } - - /// Update all enabled instances of this class - /// @see update() - static void updateAll() { - for (Updatable &el : updatables) - el.update(); + bool isEnabled() const { + return updatables.couldContain(CRTP(const Derived)); } - static void enable(Updatable *element) { element->enable(); } - - static void enable(Updatable &element) { element.enable(); } - + /// @copydoc enable + static void enable(UpdatableCRTP *element) { element->enable(); } + /// @copydoc enable + static void enable(UpdatableCRTP &element) { element.enable(); } + /// @copydoc enable template static void enable(U (&array)[N]) { for (U &el : array) enable(el); } - static void disable(Updatable *element) { element->disable(); } - - static void disable(Updatable &element) { element.disable(); } - + /// @copydoc disable + static void disable(UpdatableCRTP *element) { element->disable(); } + /// @copydoc disable + static void disable(UpdatableCRTP &element) { element.disable(); } + /// @copydoc disable template static void disable(U (&array)[N]) { for (U &el : array) disable(el); } - private: - static DoublyLinkedList> updatables; + /// Move down this element in the list. + void moveDown() { updatables.moveDown(CRTP(Derived)); } + + /// @} + + protected: + static DoublyLinkedList updatables; }; -template -DoublyLinkedList> Updatable::updatables; +template +DoublyLinkedList UpdatableCRTP::updatables; + +struct NormalUpdatable {}; + +/** + * @brief A super class for object that have to be updated regularly. + * + * All instances of this class are kept in a linked list, so it's easy to + * iterate over all of them to update them. + * + * @nosubgrouping + */ +template +class Updatable : public UpdatableCRTP> { + public: + /// @name Main initialization and updating methods + /// @{ + + /// Initialize this updatable. + virtual void begin() = 0; + + /// Update this updatable. + virtual void update() = 0; + + /// Begin all enabled instances of this class + /// @see begin() + static void beginAll() { Updatable::applyToAll(&Updatable::begin); } + + /// Update all enabled instances of this class + /// @see update() + static void updateAll() { Updatable::applyToAll(&Updatable::update); } + + /// @} +}; END_AH_NAMESPACE diff --git a/src/AH/Containers/keywords.yml b/src/AH/Containers/keywords.yml index 72f8d34f5..5a5dd162b 100644 --- a/src/AH/Containers/keywords.yml +++ b/src/AH/Containers/keywords.yml @@ -12,8 +12,6 @@ keyword1: - reverse_iterator - const_reverse_iterator - DoublyLinkable - # UniquePtr.hpp - - UniquePtr # Updatable.hpp - NormalUpdatable - Updatable @@ -47,11 +45,6 @@ keyword2: - remove - moveDown - couldContain - # UniquePtr.hpp - - reset - - get - - release - - MakeUnique # Updatable.hpp - update - begin diff --git a/src/AH/Debug/Debug.cpp b/src/AH/Debug/Debug.cpp index e4a3ec7e1..e9cad2de4 100644 --- a/src/AH/Debug/Debug.cpp +++ b/src/AH/Debug/Debug.cpp @@ -10,4 +10,14 @@ const decltype(std::chrono::high_resolution_clock::now()) start_time = END_AH_NAMESPACE #endif +#endif + +#if defined(ESP32) +BEGIN_AH_NAMESPACE +std::mutex debugmutex; +END_AH_NAMESPACE +#elif defined(ARDUINO_ARCH_MBED) +BEGIN_AH_NAMESPACE +rtos::Mutex debugmutex; +END_AH_NAMESPACE #endif \ No newline at end of file diff --git a/src/AH/Debug/Debug.hpp b/src/AH/Debug/Debug.hpp index de0fa5d38..b908994f1 100644 --- a/src/AH/Debug/Debug.hpp +++ b/src/AH/Debug/Debug.hpp @@ -26,6 +26,13 @@ AH_DIAGNOSTIC_WERROR() // Enable errors on warnings #endif #endif +#if defined(ESP32) +#include +#elif defined(ARDUINO_ARCH_MBED) +#include +#include +#endif + // ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: #ifdef ARDUINO @@ -63,6 +70,22 @@ AH_DIAGNOSTIC_WERROR() // Enable errors on warnings // ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +#if defined(ESP32) +#define DEBUG_LOCK_MUTEX std::lock_guard lock(AH::debugmutex); +BEGIN_AH_NAMESPACE +extern std::mutex debugmutex; +END_AH_NAMESPACE +#elif defined(ARDUINO_ARCH_MBED) +#define DEBUG_LOCK_MUTEX std::lock_guard lock(AH::debugmutex); +BEGIN_AH_NAMESPACE +extern rtos::Mutex debugmutex; +END_AH_NAMESPACE +#else +#define DEBUG_LOCK_MUTEX +#endif + +// ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + /// Macro for printing an expression as a string, followed by its value. /// The expression string is saved in PROGMEM using the `F(...)` macro. /// @ingroup AH_Debug @@ -74,6 +97,7 @@ AH_DIAGNOSTIC_WERROR() // Enable errors on warnings /// @ingroup AH_Debug #define DEBUG(x) \ do { \ + DEBUG_LOCK_MUTEX \ DEBUG_OUT << x << DEBUG_ENDL; \ } while (0) @@ -83,6 +107,7 @@ AH_DIAGNOSTIC_WERROR() // Enable errors on warnings /// @ingroup AH_Debug #define DEBUGREF(x) \ do { \ + DEBUG_LOCK_MUTEX \ DEBUG_OUT << F(DEBUG_LOCATION) << x << DEBUG_ENDL; \ } while (0) @@ -92,6 +117,7 @@ AH_DIAGNOSTIC_WERROR() // Enable errors on warnings /// @ingroup AH_Debug #define DEBUGFN(x) \ do { \ + DEBUG_LOCK_MUTEX \ DEBUG_OUT << DEBUG_FUNC_LOCATION << x << DEBUG_ENDL; \ } while (0) @@ -103,6 +129,7 @@ AH_DIAGNOSTIC_WERROR() // Enable errors on warnings /// @ingroup AH_Debug #define DEBUGTIME(x) \ do { \ + DEBUG_LOCK_MUTEX \ unsigned long t = millis(); \ unsigned long h = t / (60UL * 60 * 1000); \ unsigned long m = (t / (60UL * 1000)) % 60; \ diff --git a/src/AH/Filters/EMA.hpp b/src/AH/Filters/EMA.hpp index 3602b393a..743f83b9e 100644 --- a/src/AH/Filters/EMA.hpp +++ b/src/AH/Filters/EMA.hpp @@ -6,21 +6,19 @@ AH_DIAGNOSTIC_WERROR() // Enable errors on warnings #include +#include +#include /** - * @brief A class for single-pole infinite impulse response filters - * or exponential moving average filters. - * - * Optimized implementation of the difference equation with a slight - * optimization by using a factor of two as the pole location (this means - * that no division or floating point operations are required). - * + * @brief Exponential moving average filter. + * + * Fast integer EMA implementation where the weight factor is a power of two. + * * Difference equation: @f$ y[n] = \alpha·x[n]+(1-\alpha)·y[n-1] @f$ * where @f$ \alpha = \left(\frac{1}{2}\right)^{K} @f$, @f$ x @f$ is the * input sequence, and @f$ y @f$ is the output sequence. * - * [An in-depth explanation of the EMA filter] - * (https://tttapa.github.io/Pages/Mathematics/Systems-and-Control-Theory/Digital-filters/Exponential%20Moving%20Average/) + * [An in-depth explanation of the EMA filter](https://tttapa.github.io/Pages/Mathematics/Systems-and-Control-Theory/Digital-filters/Exponential%20Moving%20Average/) * * @tparam K * The amount of bits to shift by. This determines the location @@ -28,50 +26,111 @@ AH_DIAGNOSTIC_WERROR() // Enable errors on warnings * cut-off frequency. * The higher this number, the more filtering takes place. * The pole location is @f$ 1 - 2^{-K} @f$. - * @tparam uint_t - * The (signed) integer type to use for the input, intermediate values - * and the output. - * Should be at least @f$ M+K @f$ bits wide, where @f$ M @f$ - * is the maximum number of bits of the input. - * In case of the Arduino's built-in ADC, - * @f$ M = 10 = \log_2(1024) @f$. + * @tparam input_t + * The integer type to use for the input and output of the filter. + * Can be signed or unsigned. + * @tparam state_t + * The unsigned integer type to use for the internal state of the + * filter. A fixed-point representation with @f$ K @f$ fractional + * bits is used, so this type should be at least @f$ M + K @f$ bits + * wide, where @f$ M @f$ is the maximum number of bits of the input. + * + * Some examples of different combinations of template parameters: + * + * 1. Filtering the result of `analogRead`: analogRead returns an integer + * between 0 and 1023, which can be represented using 10 bits, so + * @f$ M = 10 @f$. If `input_t` and `output_t` are both `uint16_t`, + * the maximum shift factor `K` is @f$ 16 - M = 6 @f$. If `state_t` + * is increased to `uint32_t`, the maximum shift factor `K` is + * @f$ 32 - M = 22 @f$. + * 2. Filtering a signed integer between -32768 and 32767: this can be + * represented using a 16-bit signed integer, so `input_t` is `int16_t`, + * and @f$ M = 16 @f$. (2¹⁵ = 32768) + * Let's say the shift factor `K` is 1, then the minimum width of + * `state_t` should be @f$ M + K = 17 @f$ bits, so `uint32_t` would be + * a sensible choice. * * @ingroup AH_Filters */ -template +template ::type> class EMA { public: + /// Constructor: initialize filter to zero or optional given value. + EMA(input_t initial = input_t(0)) + : state(zero + (state_t(initial) << K) - initial) {} + /** - * @brief Filter the input: Given @f$ x[n] @f$, calculate @f$ y[n] @f$. - * - * @param input - * The new raw input value. - * @return The new filtered output value. + * @brief Reset the filter to the given value. + * + * @param value + * The value to reset the filter state to. */ - uint_t filter(uint_t input) { - filtered += input; - uint_t output = (filtered + fixedPointAHalf) >> K; - filtered -= output; - return output; + void reset(input_t value = input_t(0)) { + state = zero + (state_t(value) << K) - value; } /** * @brief Filter the input: Given @f$ x[n] @f$, calculate @f$ y[n] @f$. * - * @param value + * @param input * The new raw input value. * @return The new filtered output value. */ - uint_t operator()(uint_t value) { return filter(value); } + input_t filter(input_t input) { + state += state_t(input); + state_t output = (state + half) >> K; + output -= zero >> K; + state -= output; + return input_t(output); + } + + /// @copydoc EMA::filter(input_t) + input_t operator()(input_t input) { + return filter(input); + } + + constexpr static state_t + max_state = std::numeric_limits::max(), + half_state = max_state / 2 + 1, + zero = std::is_unsigned::value ? state_t(0) : half_state, + half = K > 0 ? state_t(1) << (K - 1) : state_t(0); + + static_assert(std::is_unsigned::value, + "state type should be unsigned"); + + static_assert(max_state >= std::numeric_limits::max(), + "state type cannot be narrower than input type"); - static_assert( - uint_t(0) < uint_t(-1), // Check that `uint_t` is an unsigned type - "Error: the uint_t type should be an unsigned integer, otherwise, " - "the division using bit shifts is invalid."); + /// Verify the input range to make sure it's compatible with the shift + /// factor and the width of the state type. + /// + /// Examples: + /// ~~~cpp + /// EMA<5, int_fast16_t, uint_fast16_t> filter; + /// static_assert(filter.supports_range(-1024, 1023), + /// "use a wider state or input type, or a smaller shift factor"); + /// ~~~ + /// ~~~cpp + /// EMA<5, uint_fast16_t, uint_fast16_t> filter; + /// static_assert(filter.supports_range(0u, 2047u), + /// "use a wider state or input type, or a smaller shift factor"); + /// ~~~ + template + constexpr static bool supports_range(T min, T max) { + using sstate_t = typename std::make_signed::type; + return min <= max && + min >= std::numeric_limits::min() && + max <= std::numeric_limits::max() && + (std::is_unsigned::value + ? state_t(max) <= (max_state >> K) + : min >= -sstate_t(max_state >> (K + 1)) - 1 && + max <= sstate_t(max_state >> (K + 1))); + } private: - uint_t filtered = 0; - constexpr static uint_t fixedPointAHalf = 1 << (K - 1); + state_t state; }; // -------------------------------------------------------------------------- // @@ -116,13 +175,7 @@ class EMA_f { return filtered; } - /** - * @brief Filter the input: Given @f$ x[n] @f$, calculate @f$ y[n] @f$. - * - * @param value - * The new raw input value. - * @return The new filtered output value. - */ + /// @copydoc filter(float) float operator()(float value) { return filter(value); } private: diff --git a/src/AH/Filters/Hysteresis.hpp b/src/AH/Filters/Hysteresis.hpp index a1640bbcc..d459ea784 100644 --- a/src/AH/Filters/Hysteresis.hpp +++ b/src/AH/Filters/Hysteresis.hpp @@ -50,7 +50,7 @@ class Hysteresis { T_in lowerbound = prevLevel > 0 ? prevLevelFull - margin : 0; T_in upperbound = prevLevel < max_out ? prevLevelFull + margin : max_in; if (inputLevel < lowerbound || inputLevel > upperbound) { - prevLevel = inputLevel >> BITS; + setValue(inputLevel); return true; } return false; @@ -63,6 +63,11 @@ class Hysteresis { */ T_out getValue() const { return prevLevel; } + /** + * @brief Forcefully update the internal state to the given level. + */ + void setValue(T_in inputLevel) { prevLevel = inputLevel >> BITS; } + private: T_out prevLevel = 0; constexpr static T_in margin = (1UL << BITS) - 1; diff --git a/src/AH/Hardware/ADCConfig.hpp b/src/AH/Hardware/ADCConfig.hpp index 2d939960e..14fe916a1 100644 --- a/src/AH/Hardware/ADCConfig.hpp +++ b/src/AH/Hardware/ADCConfig.hpp @@ -62,6 +62,13 @@ AH_DIAGNOSTIC_POP() #define ADC_RESOLUTION 12 #define HAS_ANALOG_READ_RESOLUTION 1 +// Unit test on PC +// ----------------------------------------------------------------------------- +#elif !defined(ARDUINO) + +#define ADC_RESOLUTION 10 +#define HAS_ANALOG_READ_RESOLUTION 1 + // Unknown/Default //------------------------------------------------------------------------------ #else diff --git a/src/AH/Hardware/Arduino-Hardware-Types.hpp b/src/AH/Hardware/Arduino-Hardware-Types.hpp new file mode 100644 index 000000000..591aade95 --- /dev/null +++ b/src/AH/Hardware/Arduino-Hardware-Types.hpp @@ -0,0 +1,77 @@ +#pragma once + +#include +AH_DIAGNOSTIC_WERROR() // Enable errors on warnings + +#include +#include + +AH_DIAGNOSTIC_EXTERNAL_HEADER() +#include // pin functions and constants +AH_DIAGNOSTIC_POP() + + +#if defined(ARDUINO_API_VERSION) + +using ArduinoPin_t = pin_size_t; +using PinStatus_t = PinStatus; +using PinMode_t = PinMode; +using BitOrder_t = BitOrder; + +#else // ARDUINO_API_VERSION + +using ArduinoPin_t = + AH::function_traits::argument_t<0>; +using PinStatus_t = + AH::function_traits::argument_t<1>; +using PinMode_t = AH::function_traits::argument_t<1>; + +#if defined(ARDUINO_ARCH_SAM) || defined(ARDUINO_ARCH_SAMD) +using BitOrder_t = BitOrder; +#else +using BitOrder_t = uint8_t; +#endif + +namespace AH_pin_detail { +constexpr static auto tmp_HIGH = HIGH; +constexpr static auto tmp_LOW = LOW; +constexpr static auto tmp_INPUT = INPUT; +constexpr static auto tmp_OUTPUT = OUTPUT; +constexpr static auto tmp_INPUT_PULLUP = INPUT_PULLUP; +} // namespace AH_pin_detail +#ifdef HIGH +#undef HIGH +#define HIGH HIGH +#endif +#ifdef LOW +#undef LOW +#define LOW LOW +#endif +#ifdef INPUT +#undef INPUT +#define INPUT INPUT +#endif +#ifdef OUTPUT +#undef OUTPUT +#define OUTPUT OUTPUT +#endif +#ifdef INPUT_PULLUP +#undef INPUT_PULLUP +#define INPUT_PULLUP INPUT_PULLUP +#endif +constexpr PinStatus_t HIGH = AH_pin_detail::tmp_HIGH; +constexpr PinStatus_t LOW = AH_pin_detail::tmp_LOW; +constexpr PinMode_t INPUT = AH_pin_detail::tmp_INPUT; +constexpr PinMode_t OUTPUT = AH_pin_detail::tmp_OUTPUT; +constexpr PinMode_t INPUT_PULLUP = AH_pin_detail::tmp_INPUT_PULLUP; + +#endif // ARDUINO_API_VERSION + +BEGIN_AH_NAMESPACE +template +inline ArduinoPin_t arduino_pin_cast(T t) { + return static_cast(t); +} +END_AH_NAMESPACE + +AH_DIAGNOSTIC_POP() \ No newline at end of file diff --git a/src/AH/Hardware/Button.cpp b/src/AH/Hardware/Button.cpp index b643b5891..eea1b18e2 100644 --- a/src/AH/Hardware/Button.cpp +++ b/src/AH/Hardware/Button.cpp @@ -4,36 +4,36 @@ AH_DIAGNOSTIC_WERROR() // Enable errors on warnings BEGIN_AH_NAMESPACE -using namespace ExtIO; - Button::Button(pin_t pin) : pin(pin) {} void Button::begin() { ExtIO::pinMode(pin, INPUT_PULLUP); } -void Button::invert() { invertState = true; } - -#ifndef AH_INDIVIDUAL_BUTTON_INVERT -bool Button::invertState = false; -#endif +void Button::invert() { state.invert = true; } Button::State Button::update() { - // read the button state and invert it if "invertState" is true - bool input = ExtIO::digitalRead(pin) ^ invertState; - bool prevState = debouncedState & 0b01; + // Read pin state and current time + bool input = ExtIO::digitalRead(pin) ^ state.invert; unsigned long now = millis(); - if (now - prevBounceTime > debounceTime) { // wait for state to stabilize - debouncedState = static_cast((prevState << 1) | input); - } else { - debouncedState = static_cast((prevState << 1) | prevState); - } - if (input != prevInput) { // Button is pressed, released or bounces - prevBounceTime = now; - prevInput = input; + // Check if enough time has elapsed after last bounce + if (state.bouncing) + state.bouncing = now - state.prevBounceTime <= debounceTime; + // Shift the debounced state one bit to the left, either appending the + // new input state if not bouncing, or repeat the old state if bouncing + bool prevState = state.debounced & 0b01; + bool newState = state.bouncing ? prevState : input; + state.debounced = (prevState << 1) | newState; + // Check if the input changed state (button pressed, released or bouncing) + if (input != state.prevInput) { + state.bouncing = true; + state.prevInput = input; + state.prevBounceTime = now; } - return debouncedState; + return getState(); } -Button::State Button::getState() const { return debouncedState; } +Button::State Button::getState() const { + return static_cast(state.debounced); +} FlashString_t Button::getName(Button::State state) { switch (state) { @@ -45,7 +45,9 @@ FlashString_t Button::getName(Button::State state) { } } -unsigned long Button::previousBounceTime() const { return prevBounceTime; } +unsigned long Button::previousBounceTime() const { + return state.prevBounceTime; +} unsigned long Button::stableTime(unsigned long now) const { return now - previousBounceTime(); diff --git a/src/AH/Hardware/Button.hpp b/src/AH/Hardware/Button.hpp index eea808683..cff398567 100644 --- a/src/AH/Hardware/Button.hpp +++ b/src/AH/Hardware/Button.hpp @@ -39,15 +39,10 @@ class Button { void begin(); /** - * @brief Invert the state of all buttons, or of this specific button + * @brief Invert the input state of this button * (button pressed is `HIGH` instead of `LOW`). - * - * @note This affects **all** Button objects if - * `AH_INDIVIDUAL_BUTTON_INVERT` is not defined. - * - * @see AH_INDIVIDUAL_BUTTON_INVERT */ - AH_INDIVIDUAL_BUTTON_INVERT_STATIC void invert(); + void invert(); /// @brief An enumeration of the different states a button can be in. enum State { @@ -78,11 +73,11 @@ class Button { * States: * HIGH ────────────────┐ ┌───────────────── * LOW └──────────────────┘ - * RELEASED FALLING PRESSED RISING + * Released Falling Pressed Rising * ``` * - * @return The state of the button, either Button::PRESSED, - * Button::RELEASED, Button::FALLING or Button::RISING. + * @return The state of the button, either Button::Pressed, + * Button::Released, Button::Falling or Button::Rising. */ State update(); @@ -90,8 +85,8 @@ class Button { * @brief Get the state of the button, without updating it. * Returns the same value as the last call to @ref update. * - * @return The state of the button, either Button::PRESSED, - * Button::RELEASED, Button::FALLING or Button::RISING. + * @return The state of the button, either Button::Pressed, + * Button::Released, Button::Falling or Button::Rising. */ State getState() const; @@ -129,15 +124,16 @@ class Button { private: pin_t pin; - bool prevInput = HIGH; - State debouncedState = Released; - unsigned long prevBounceTime = 0; - -#ifdef AH_INDIVIDUAL_BUTTON_INVERT // Edit this in Settings/Settings.hpp - bool invertState = false; -#else - static bool invertState; -#endif + struct InternalState { + InternalState() + : debounced(0b11), bouncing(true), prevInput(HIGH), invert(false), + prevBounceTime(0) {} + uint8_t debounced : 2; + bool bouncing : 1; + bool prevInput : 1; + bool invert : 1; + unsigned long prevBounceTime; + } state; /// Edit this in Settings.hpp /// @see BUTTON_DEBOUNCE_TIME diff --git a/src/AH/Hardware/ButtonMatrix.hpp b/src/AH/Hardware/ButtonMatrix.hpp index 7dc9b00e6..4df4c588e 100644 --- a/src/AH/Hardware/ButtonMatrix.hpp +++ b/src/AH/Hardware/ButtonMatrix.hpp @@ -12,14 +12,14 @@ BEGIN_AH_NAMESPACE /** * @brief A class that reads the states of a button matrix. * - * @tparam nb_rows + * @tparam NumRows * The number of rows in the button matrix. - * @tparam nb_cols + * @tparam NumCols * The number of columns in the button matrix. * * @ingroup AH_HardwareUtils */ -template +template class ButtonMatrix { public: /** @@ -35,12 +35,8 @@ class ButtonMatrix { * These pins will be used as inputs (Hi-Z), and the internal * pull-up resistor will be enabled. */ - ButtonMatrix(const PinList &rowPins, - const PinList &colPins); - /** - * @brief Destructor. - */ - virtual ~ButtonMatrix() = default; + ButtonMatrix(const PinList &rowPins, + const PinList &colPins); /** * @brief Initialize (enable internal pull-up resistors on column pins). @@ -60,10 +56,18 @@ class ButtonMatrix { */ bool getPrevState(uint8_t col, uint8_t row); - private: + /// Configure the debounce time interval. Only one button can change in each + /// debounce interval. Time in milliseconds. + void setDebounceTime(unsigned long debounceTime) { + this->debounceTime = debounceTime; + } + /// Get the debounce time. + unsigned long getDebounceTime() const { return debounceTime; } + + protected: /** * @brief The callback function that is called whenever a button changes - * state. + * state. Implement this in the derived class. * * @param row * The row of the button that changed state. @@ -72,18 +76,20 @@ class ButtonMatrix { * @param state * The new state of the button. */ - virtual void onButtonChanged(uint8_t row, uint8_t col, bool state) = 0; + void onButtonChanged(uint8_t row, uint8_t col, bool state) = delete; + private: static inline uint8_t positionToBits(uint8_t col, uint8_t row); static inline uint8_t bitsToIndex(uint8_t bits); static inline uint8_t bitsToBitmask(uint8_t bits); void setPrevState(uint8_t col, uint8_t row, bool state); + unsigned long debounceTime = BUTTON_DEBOUNCE_TIME; unsigned long prevRefresh = 0; - uint8_t prevStates[(nb_cols * nb_rows + 7) / 8]; + uint8_t prevStates[(NumCols * NumRows + 7) / 8]; - const PinList rowPins; - const PinList colPins; + const PinList rowPins; + const PinList colPins; }; END_AH_NAMESPACE diff --git a/src/AH/Hardware/ButtonMatrix.ipp b/src/AH/Hardware/ButtonMatrix.ipp index 82bfbc5b8..b646f6920 100644 --- a/src/AH/Hardware/ButtonMatrix.ipp +++ b/src/AH/Hardware/ButtonMatrix.ipp @@ -1,34 +1,36 @@ #include "ButtonMatrix.hpp" +#include #include #include BEGIN_AH_NAMESPACE -using namespace ExtIO; - -template -ButtonMatrix::ButtonMatrix(const PinList &rowPins, - const PinList &colPins) +template +ButtonMatrix::ButtonMatrix( + const PinList &rowPins, const PinList &colPins) : rowPins(rowPins), colPins(colPins) { memset(prevStates, 0xFF, sizeof(prevStates)); } -template -void ButtonMatrix::update() { +template +void ButtonMatrix::update() { unsigned long now = millis(); // only update 25 ms after previous change (crude software debounce). // Edit this in Settings/Settings.hpp - if (now - prevRefresh < BUTTON_DEBOUNCE_TIME) + if (now - prevRefresh < debounceTime) return; - for (size_t row = 0; row < nb_rows; row++) { // scan through all rows + for (size_t row = 0; row < NumRows; row++) { // scan through all rows pinMode(rowPins[row], OUTPUT); // make the current row Lo-Z 0V - for (size_t col = 0; col < nb_cols; col++) { // scan through all columns +#if !defined(__AVR__) && defined(ARDUINO) + delayMicroseconds(1); +#endif + for (size_t col = 0; col < NumCols; col++) { // scan through all columns bool state = digitalRead(colPins[col]); // read the state if (state != getPrevState(col, row)) { // if the state changed since last time // execute the handler - onButtonChanged(row, col, state); + CRTP(Derived).onButtonChanged(row, col, state); setPrevState(col, row, state); // remember the state prevRefresh = now; } @@ -37,8 +39,8 @@ void ButtonMatrix::update() { } } -template -void ButtonMatrix::begin() { +template +void ButtonMatrix::begin() { // make all columns input pins and enable // the internal pull-up resistors for (const pin_t &colPin : colPins) @@ -48,32 +50,37 @@ void ButtonMatrix::begin() { pinMode(rowPin, INPUT); } -template -inline uint8_t ButtonMatrix::positionToBits(uint8_t col, - uint8_t row) { +template +inline uint8_t +ButtonMatrix::positionToBits(uint8_t col, + uint8_t row) { // map from a 2D array of bits to a flat array of bits - return col * nb_rows + row; + return col * NumRows + row; } -template -inline uint8_t ButtonMatrix::bitsToIndex(uint8_t bits) { +template +inline uint8_t +ButtonMatrix::bitsToIndex(uint8_t bits) { return bits >> 3; // bits / 8 } -template -inline uint8_t ButtonMatrix::bitsToBitmask(uint8_t bits) { +template +inline uint8_t +ButtonMatrix::bitsToBitmask(uint8_t bits) { return 1 << (bits & 7); // bits % 8 } -template -bool ButtonMatrix::getPrevState(uint8_t col, uint8_t row) { +template +bool ButtonMatrix::getPrevState(uint8_t col, + uint8_t row) { uint8_t bits = positionToBits(col, row); return !!(prevStates[bitsToIndex(bits)] & bitsToBitmask(bits)); } -template -void ButtonMatrix::setPrevState(uint8_t col, uint8_t row, - bool state) { +template +void ButtonMatrix::setPrevState(uint8_t col, + uint8_t row, + bool state) { uint8_t bits = positionToBits(col, row); if (state) prevStates[bitsToIndex(bits)] |= bitsToBitmask(bits); diff --git a/src/AH/Hardware/ExtendedInputOutput/AnalogMultiplex.hpp b/src/AH/Hardware/ExtendedInputOutput/AnalogMultiplex.hpp index 843ee0787..54d8ea6e0 100644 --- a/src/AH/Hardware/ExtendedInputOutput/AnalogMultiplex.hpp +++ b/src/AH/Hardware/ExtendedInputOutput/AnalogMultiplex.hpp @@ -63,6 +63,11 @@ class AnalogMultiplex : public StaticSizeExtendedIOElement<1 << N> { */ void pinMode(pin_t pin, PinMode_t mode) override; + /** + * @copydoc pinMode + */ + void pinModeBuffered(pin_t pin, PinMode_t mode) override; + /** * @brief The digitalWrite function is not implemented because writing an * output to a multiplexer is not useful. @@ -70,13 +75,24 @@ class AnalogMultiplex : public StaticSizeExtendedIOElement<1 << N> { void digitalWrite(pin_t, PinStatus_t) override // LCOV_EXCL_LINE __attribute__((deprecated)) {} // LCOV_EXCL_LINE + /** + * @copydoc digitalWrite + */ + void digitalWriteBuffered(pin_t, PinStatus_t) override // LCOV_EXCL_LINE + __attribute__((deprecated)) {} // LCOV_EXCL_LINE + /** * @brief Read the digital state of the given input. * * @param pin * The multiplexer's pin number to read from. */ - int digitalRead(pin_t pin) override; + PinStatus_t digitalRead(pin_t pin) override; + + /** + * @copydoc digitalRead + */ + PinStatus_t digitalReadBuffered(pin_t pin) override; /** * @brief Read the analog value of the given input. @@ -86,6 +102,11 @@ class AnalogMultiplex : public StaticSizeExtendedIOElement<1 << N> { */ analog_t analogRead(pin_t pin) override; + /** + * @copydoc analogRead + */ + analog_t analogReadBuffered(pin_t pin) override; + /** * @brief The analogWrite function is not implemented because writing an * output to a multiplexer is not useful. @@ -93,6 +114,12 @@ class AnalogMultiplex : public StaticSizeExtendedIOElement<1 << N> { void analogWrite(pin_t, analog_t) override // LCOV_EXCL_LINE __attribute__((deprecated)) {} // LCOV_EXCL_LINE + /** + * @copydoc analogWrite + */ + void analogWriteBuffered(pin_t, analog_t) override // LCOV_EXCL_LINE + __attribute__((deprecated)) {} // LCOV_EXCL_LINE + /** * @brief Initialize the multiplexer: set the pin mode of the address pins * and the enable pin to output mode. @@ -103,12 +130,27 @@ class AnalogMultiplex : public StaticSizeExtendedIOElement<1 << N> { * @brief No periodic updating of the state is necessary, all actions are * carried out when the user calls analogRead or digitalRead. */ - void update() override {} // LCOV_EXCL_LINE + void updateBufferedOutputs() override {} // LCOV_EXCL_LINE - private: + /** + * @brief No periodic updating of the state is necessary, all actions are + * carried out when the user calls analogRead or digitalRead. + */ + void updateBufferedInputs() override {} // LCOV_EXCL_LINE + + /** + * @brief Specify whether to discard the first analog reading after + * changing the address lines (enabled by default). + */ + void discardFirstReading(bool discardFirstReading_) { + this->discardFirstReading_ = discardFirstReading_; + } + + protected: const pin_t analogPin; const Array addressPins; const pin_t enablePin; + bool discardFirstReading_ = true; /** * @brief Write the pin number/address to the address pins of the @@ -161,22 +203,38 @@ void AnalogMultiplex::pinMode(pin_t, PinMode_t mode) { } template -int AnalogMultiplex::digitalRead(pin_t pin) { +void AnalogMultiplex::pinModeBuffered(pin_t, PinMode_t mode) { + AnalogMultiplex::pinMode(analogPin, mode); +} + +template +PinStatus_t AnalogMultiplex::digitalRead(pin_t pin) { prepareReading(pin); - int result = ExtIO::digitalRead(analogPin); + PinStatus_t result = ExtIO::digitalRead(analogPin); afterReading(); return result; } +template +PinStatus_t AnalogMultiplex::digitalReadBuffered(pin_t pin) { + return AnalogMultiplex::digitalRead(pin); +} + template analog_t AnalogMultiplex::analogRead(pin_t pin) { prepareReading(pin); - ExtIO::analogRead(analogPin); // Discard first reading + if (discardFirstReading_) + (void)ExtIO::analogRead(analogPin); // Discard first reading analog_t result = ExtIO::analogRead(analogPin); afterReading(); return result; } +template +analog_t AnalogMultiplex::analogReadBuffered(pin_t pin) { + return AnalogMultiplex::analogRead(pin); +} + template void AnalogMultiplex::begin() { for (const pin_t &addressPin : addressPins) @@ -194,8 +252,8 @@ void AnalogMultiplex::setMuxAddress(uint8_t address) { ExtIO::digitalWrite(addressPin, (address & mask) != 0 ? HIGH : LOW); mask <<= 1; } -#if !defined(__AVR__) && !defined(__x86_64__) - delayMicroseconds(5); +#if !defined(__AVR__) && defined(ARDUINO) + delayMicroseconds(1); #endif } diff --git a/src/AH/Hardware/ExtendedInputOutput/ExtendedIOElement.cpp b/src/AH/Hardware/ExtendedInputOutput/ExtendedIOElement.cpp index acc6f032e..963ca445f 100644 --- a/src/AH/Hardware/ExtendedInputOutput/ExtendedIOElement.cpp +++ b/src/AH/Hardware/ExtendedInputOutput/ExtendedIOElement.cpp @@ -15,14 +15,18 @@ ExtendedIOElement::ExtendedIOElement(pin_t length) "recommended."), 0x00FF); offset = end; - elements.append(this); } -ExtendedIOElement::~ExtendedIOElement() { elements.remove(this); } - void ExtendedIOElement::beginAll() { - for (ExtendedIOElement &e : elements) - e.begin(); + ExtendedIOElement::applyToAll(&ExtendedIOElement::begin); +} + +void ExtendedIOElement::updateAllBufferedOutputs() { + ExtendedIOElement::applyToAll(&ExtendedIOElement::updateBufferedOutputs); +} + +void ExtendedIOElement::updateAllBufferedInputs() { + ExtendedIOElement::applyToAll(&ExtendedIOElement::updateBufferedInputs); } pin_t ExtendedIOElement::pin(pin_t p) const { @@ -49,11 +53,9 @@ pin_t ExtendedIOElement::getEnd() const { return end; } pin_t ExtendedIOElement::getStart() const { return start; } DoublyLinkedList &ExtendedIOElement::getAll() { - return elements; + return updatables; } -DoublyLinkedList ExtendedIOElement::elements; - pin_t ExtendedIOElement::offset = NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS; END_AH_NAMESPACE diff --git a/src/AH/Hardware/ExtendedInputOutput/ExtendedIOElement.hpp b/src/AH/Hardware/ExtendedInputOutput/ExtendedIOElement.hpp index 58d73aee8..345459aed 100644 --- a/src/AH/Hardware/ExtendedInputOutput/ExtendedIOElement.hpp +++ b/src/AH/Hardware/ExtendedInputOutput/ExtendedIOElement.hpp @@ -6,7 +6,7 @@ AH_DIAGNOSTIC_WERROR() // Enable errors on warnings #include "ExtendedInputOutput.hpp" -#include +#include #include BEGIN_AH_NAMESPACE @@ -60,7 +60,7 @@ BEGIN_AH_NAMESPACE * Another reason to do it this way, is that this approach is still fast enough * to make sure it is not noticable to human users. */ -class ExtendedIOElement : public DoublyLinkable { +class ExtendedIOElement : public UpdatableCRTP { protected: /** * @brief Create an ExtendedIOElement with the given number of pins. @@ -70,9 +70,17 @@ class ExtendedIOElement : public DoublyLinkable { */ ExtendedIOElement(pin_t length); - public: - virtual ~ExtendedIOElement(); + /// Copying not allowed. + ExtendedIOElement(const ExtendedIOElement &) = delete; + /// Copying not allowed. + ExtendedIOElement &operator=(const ExtendedIOElement &) = delete; + + /// Move constructor. + ExtendedIOElement(ExtendedIOElement &&) = default; + /// Move assignment. + ExtendedIOElement &operator=(ExtendedIOElement &&) = delete; + public: /** * @brief Set the mode of a given pin. * @@ -89,7 +97,18 @@ class ExtendedIOElement : public DoublyLinkable { * The mode to set the pin to (e.g. `INPUT`, `OUTPUT` or * `INPUT_PULLUP`). */ - virtual void pinMode(pin_t pin, PinMode_t mode) = 0; + virtual void pinMode(pin_t pin, PinMode_t mode) { + pinModeBuffered(pin, mode); + updateBufferedOutputs(); + } + + /** + * @brief Set the mode of a given pin in the software buffer. + * The buffer is written to the ExtIO device when @ref updateBufferedOutputs + * is called. + * @copydetails pinMode + */ + virtual void pinModeBuffered(pin_t pin, PinMode_t mode) = 0; /** * @brief Set the output of the given pin to the given state. @@ -99,7 +118,18 @@ class ExtendedIOElement : public DoublyLinkable { * @param state * The new state to set the pin to. */ - virtual void digitalWrite(pin_t pin, PinStatus_t state) = 0; + virtual void digitalWrite(pin_t pin, PinStatus_t state) { + digitalWriteBuffered(pin, state); + updateBufferedOutputs(); + } + + /** + * @brief Set the output of a given pin in the software buffer. + * The buffer is written to the ExtIO device when @ref updateBufferedOutputs + * is called. + * @copydetails digitalWrite + */ + virtual void digitalWriteBuffered(pin_t pin, PinStatus_t state) = 0; /** * @brief Read the state of the given pin. @@ -108,7 +138,17 @@ class ExtendedIOElement : public DoublyLinkable { * The (zero-based) pin of this IO element. * @return The state of the given pin. */ - virtual int digitalRead(pin_t pin) = 0; + virtual PinStatus_t digitalRead(pin_t pin) { + updateBufferedInputs(); + return digitalReadBuffered(pin); + } + + /** + * @brief Read the state of the given pin from the software buffer. + * To update the buffer, you have to call @ref updateBufferedInputs first. + * @copydetails digitalRead + */ + virtual PinStatus_t digitalReadBuffered(pin_t pin) = 0; /** * @brief Write an analog (or PWM) value to the given pin. @@ -118,7 +158,18 @@ class ExtendedIOElement : public DoublyLinkable { * @param val * The new analog value to set the pin to. */ - virtual void analogWrite(pin_t pin, analog_t val) = 0; + virtual void analogWrite(pin_t pin, analog_t val) { + analogWriteBuffered(pin, val); + updateBufferedOutputs(); + } + + /** + * @brief Write an analog (or PWM) value to the software buffer given pin. + * The buffer is written to the ExtIO device when @ref updateBufferedOutputs + * is called. + * @copydetails analogWrite + */ + virtual void analogWriteBuffered(pin_t pin, analog_t val) = 0; /** * @brief Read the analog value of the given pin. @@ -127,7 +178,17 @@ class ExtendedIOElement : public DoublyLinkable { * The (zero-based) pin of this IO element. * @return The new analog value of pin. */ - virtual analog_t analogRead(pin_t pin) = 0; + virtual analog_t analogRead(pin_t pin) { + updateBufferedInputs(); + return analogReadBuffered(pin); + } + + /** + * @brief Read the analog value of the given pin from the software buffer. + * To update the buffer, you have to call @ref updateBufferedInputs first. + * @copydetails analogRead + */ + virtual analog_t analogReadBuffered(pin_t pin) = 0; /** * @brief Initialize the extended IO element. @@ -140,11 +201,26 @@ class ExtendedIOElement : public DoublyLinkable { static void beginAll(); /** - * @brief Update the extended IO element: - * write the internal state to the physical outputs, - * or read the physical state into the input buffers. + * @brief Write the internal state to the physical outputs. */ - virtual void update() = 0; + virtual void updateBufferedOutputs() = 0; + + /** + * @brief Write the internal states to the physical outputs for all + * extended IO elements. + */ + static void updateAllBufferedOutputs(); + + /** + * @brief Read the physical state into the input buffers. + */ + virtual void updateBufferedInputs() = 0; + + /** + * @brief Read the physical state into the input buffers for all extended + * IO elements. + */ + static void updateAllBufferedInputs(); /** * @brief Get the extended IO pin number of a given physical pin of this @@ -194,10 +270,161 @@ class ExtendedIOElement : public DoublyLinkable { const pin_t start; const pin_t end; static pin_t offset; +}; - static DoublyLinkedList elements; +namespace ExtIO { + +struct CachedExtIOPin { + explicit CachedExtIOPin(pin_t pin) + : element(pin == NO_PIN || isNativePin(pin) ? nullptr + : getIOElementOfPin(pin)), + elementPin(element ? pin - element->getStart() : pin) {} + + template + FRet __attribute__((always_inline)) + apply(FRet (ExtendedIOElement::*func)(pin_t, FArgs...), Fallback &&fallback, + FArgs... args) { + if (element != nullptr) + return (element->*func)(elementPin, args...); + else if (elementPin != NO_PIN) + return fallback(arduino_pin_cast(elementPin), args...); + else + return static_cast(0); + } + + ExtendedIOElement *element; + pin_t elementPin; }; +/// An ExtIO version of the Arduino function +/// @see ExtendedIOElement::pinMode +inline void pinMode(CachedExtIOPin pin, PinMode_t mode) { + pin.apply( + &ExtendedIOElement::pinMode, // + [](ArduinoPin_t p, PinMode_t m) { ::pinMode(p, m); }, mode); +} +/// An ExtIO version of the Arduino function +/// @see ExtendedIOElement::digitalWrite +inline void digitalWrite(CachedExtIOPin pin, PinStatus_t val) { + pin.apply( + &ExtendedIOElement::digitalWrite, // + [](ArduinoPin_t p, PinStatus_t v) { ::digitalWrite(p, v); }, val); +} +/// An ExtIO version of the Arduino function +/// @see ExtendedIOElement::digitalRead +inline PinStatus_t digitalRead(CachedExtIOPin pin) { + return pin.apply(&ExtendedIOElement::digitalRead, // + [](ArduinoPin_t p) { return ::digitalRead(p); }); +} + +/// An ExtIO version of the Arduino function +/// @see ExtendedIOElement::analogRead +inline analog_t analogRead(CachedExtIOPin pin) { + return pin.apply(&ExtendedIOElement::analogRead, // + [](ArduinoPin_t p) { return ::analogRead(p); }); +} +/// An ExtIO version of the Arduino function +/// @see ExtendedIOElement::analogWrite +inline void analogWrite(CachedExtIOPin pin, analog_t val) { +#ifndef ESP32 + pin.apply( + &ExtendedIOElement::analogWrite, // + [](ArduinoPin_t p, analog_t v) { ::analogWrite(p, v); }, val); +#else + pin.apply( + &ExtendedIOElement::analogWrite, // + [](ArduinoPin_t, analog_t) {}, val); +#endif +} +/// An ExtIO version of the Arduino function +/// @see ExtendedIOElement::analogWrite +inline void analogWrite(CachedExtIOPin pin, int val) { + return analogWrite(pin, static_cast(val)); +} + +/// An ExtIO version of the Arduino function +inline void shiftOut(CachedExtIOPin dataPin, CachedExtIOPin clockPin, + BitOrder_t bitOrder, uint8_t val) { + if (dataPin.elementPin == NO_PIN || clockPin.elementPin == NO_PIN) + return; + // Native version + if (dataPin.element == nullptr && clockPin.element == nullptr) { + ::shiftOut(arduino_pin_cast(dataPin.elementPin), + arduino_pin_cast(clockPin.elementPin), bitOrder, val); + } + // ExtIO version + else if (dataPin.element != nullptr && clockPin.element != nullptr) { + const auto dataEl = dataPin.element; + const auto dataPinN = dataPin.elementPin; + const auto clockEl = clockPin.element; + const auto clockPinN = clockPin.elementPin; + for (uint8_t i = 0; i < 8; i++) { + uint8_t mask = bitOrder == LSBFIRST ? (1 << i) : (1 << (7 - i)); + dataEl->digitalWrite(dataPinN, (val & mask) ? HIGH : LOW); + clockEl->digitalWrite(clockPinN, HIGH); + clockEl->digitalWrite(clockPinN, LOW); + } + } + // Mixed version (slow) + else { + for (uint8_t i = 0; i < 8; i++) { + uint8_t mask = bitOrder == LSBFIRST ? (1 << i) : (1 << (7 - i)); + digitalWrite(dataPin, (val & mask) ? HIGH : LOW); + digitalWrite(clockPin, HIGH); + digitalWrite(clockPin, LOW); + } + } +} + +/// A buffered ExtIO version of the Arduino function +/// @see ExtendedIOElement::pinModeBuffered +inline void pinModeBuffered(CachedExtIOPin pin, PinMode_t mode) { + pin.apply( + &ExtendedIOElement::pinModeBuffered, // + [](ArduinoPin_t p, PinMode_t m) { ::pinMode(p, m); }, mode); +} +/// A buffered ExtIO version of the Arduino function +/// @see ExtendedIOElement::digitalWriteBuffered +inline void digitalWriteBuffered(CachedExtIOPin pin, PinStatus_t val) { + pin.apply( + &ExtendedIOElement::digitalWriteBuffered, // + [](ArduinoPin_t p, PinStatus_t v) { ::digitalWrite(p, v); }, val); +} +/// A buffered ExtIO version of the Arduino function +/// @see ExtendedIOElement::digitalReadBuffered +inline PinStatus_t digitalReadBuffered(CachedExtIOPin pin) { + return pin.apply(&ExtendedIOElement::digitalReadBuffered, // + [](ArduinoPin_t p) { return ::digitalRead(p); }); +} + +/// A buffered ExtIO version of the Arduino function +/// @see ExtendedIOElement::analogReadBuffered +inline analog_t analogReadBuffered(CachedExtIOPin pin) { + return pin.apply(&ExtendedIOElement::analogReadBuffered, // + [](ArduinoPin_t p) { return ::analogRead(p); }); +} +/// A buffered ExtIO version of the Arduino function +/// @see ExtendedIOElement::analogWriteBuffered +inline void analogWriteBuffered(CachedExtIOPin pin, analog_t val) { +#ifndef ESP32 + pin.apply( + &ExtendedIOElement::analogWriteBuffered, // + [](ArduinoPin_t p, analog_t v) { ::analogWrite(p, v); }, val); +#else + pin.apply( + &ExtendedIOElement::analogWriteBuffered, // + [](ArduinoPin_t, analog_t) {}, val); +#endif +} +/// A buffered ExtIO version of the Arduino function +/// @see ExtendedIOElement::analogWriteBuffered +inline void analogWriteBuffered(CachedExtIOPin pin, int val) { + return analogWrite(pin, static_cast(val)); +} +} // namespace ExtIO + +using ExtIO::CachedExtIOPin; + END_AH_NAMESPACE AH_DIAGNOSTIC_POP() diff --git a/src/AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.cpp b/src/AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.cpp index c1e31b53d..3ede5f8ea 100644 --- a/src/AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.cpp +++ b/src/AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.cpp @@ -10,104 +10,232 @@ BEGIN_AH_NAMESPACE namespace ExtIO { template -bool inRange(T target, T start, T end) { +static bool inRange(T target, T start, T end) { return target >= start && target < end; } -ExtendedIOElement &getIOElementOfPin(pin_t pin) { - for (ExtendedIOElement &el : ExtendedIOElement::getAll()) +ExtendedIOElement *getIOElementOfPinOrNull(pin_t pin) { + for (auto &el : ExtendedIOElement::getAll()) if (pin < el.getStart()) break; else if (inRange(pin, el.getStart(), el.getEnd())) - return el; + return ⪙ + return nullptr; +} - FATAL_ERROR( - F("The given pin does not correspond to an Extended IO element."), - 0x8888); +ExtendedIOElement *getIOElementOfPin(pin_t pin) { + auto *el = getIOElementOfPinOrNull(pin); + if (el == nullptr) + FATAL_ERROR( + F("The given pin does not correspond to an Extended IO element."), + 0x8888); + return el; +} - // TODO: why doesn't this give a compilation error? - // No return statement. On desktop, FATAL_ERROR throws an exception, so - // I get why that works, but on Arduino, it just calls fatalErrorExit, which - // is marked 'noreturn'. However, if I remove the 'noreturn' attribute, and - // have it return immediately, it still compiles, without returning a valid - // reference. +template +ArduinoPin_t arduino_pin_cast(T t) { + return static_cast(t); } void pinMode(pin_t pin, PinMode_t mode) { - // DEBUGFN(DEBUGVAR(pin) << '\t' << DEBUGVAR(mode)); - if (pin < NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS) { + if (pin == NO_PIN) + return; // LCOV_EXCL_LINE + else if (isNativePin(pin)) { ::pinMode(pin, mode); } else { - ExtendedIOElement &el = getIOElementOfPin(pin); - el.pinMode(pin - el.getStart(), mode); + auto el = getIOElementOfPin(pin); + el->pinMode(pin - el->getStart(), mode); } } -void pinMode(int pin, PinMode_t mode) { pinMode((pin_t)pin, mode); } +void pinMode(int pin, PinMode_t mode) { + ::pinMode(arduino_pin_cast(pin), mode); +} void digitalWrite(pin_t pin, PinStatus_t val) { - // DEBUGFN(DEBUGVAR(pin) << '\t' << DEBUGVAR(val)); - if (pin < NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS) { + if (pin == NO_PIN) + return; // LCOV_EXCL_LINE + else if (isNativePin(pin)) { ::digitalWrite(pin, val); } else { - ExtendedIOElement &el = getIOElementOfPin(pin); - el.digitalWrite(pin - el.getStart(), val); + auto el = getIOElementOfPin(pin); + el->digitalWrite(pin - el->getStart(), val); } } -void digitalWrite(int pin, PinStatus_t val) { digitalWrite((pin_t)pin, val); } +void digitalWrite(int pin, PinStatus_t val) { + ::digitalWrite(arduino_pin_cast(pin), val); +} -int digitalRead(pin_t pin) { - if (pin < NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS) { +PinStatus_t digitalRead(pin_t pin) { + if (pin == NO_PIN) + return LOW; // LCOV_EXCL_LINE + else if (isNativePin(pin)) { return ::digitalRead(pin); } else { - ExtendedIOElement &el = getIOElementOfPin(pin); - return el.digitalRead(pin - el.getStart()); + auto el = getIOElementOfPin(pin); + return el->digitalRead(pin - el->getStart()); } - return 0; } -int digitalRead(int pin) { return digitalRead((pin_t)pin); } +PinStatus_t digitalRead(int pin) { + return ::digitalRead(arduino_pin_cast(pin)); +} -void shiftOut(pin_t dataPin, pin_t clockPin, BitOrder_t bitOrder, uint8_t val) { - uint8_t i; +analog_t analogRead(pin_t pin) { + if (pin == NO_PIN) + return 0; // LCOV_EXCL_LINE + else if (isNativePin(pin)) { + return ::analogRead(pin); + } else { + auto el = getIOElementOfPin(pin); + return el->analogRead(pin - el->getStart()); + } +} +analog_t analogRead(int pin) { return ::analogRead(arduino_pin_cast(pin)); } - for (i = 0; i < 8; i++) { - if (bitOrder == LSBFIRST) - digitalWrite(dataPin, (val & (1 << i)) ? HIGH : LOW); - else - digitalWrite(dataPin, (val & (1 << (7 - i))) ? HIGH : LOW); +void analogWrite(pin_t pin, analog_t val) { + if (pin == NO_PIN) + return; // LCOV_EXCL_LINE + else if (isNativePin(pin)) { +#ifndef ESP32 + ::analogWrite(pin, val); +#endif + } else { + auto el = getIOElementOfPin(pin); + el->analogWrite(pin - el->getStart(), val); + } +} +void analogWrite(pin_t pin, int val) { analogWrite(pin, (analog_t)val); } +#ifndef ESP32 +void analogWrite(int pin, analog_t val) { + ::analogWrite(arduino_pin_cast(pin), val); +} +void analogWrite(int pin, int val) { + ::analogWrite(arduino_pin_cast(pin), val); +} +#endif - digitalWrite(clockPin, HIGH); - digitalWrite(clockPin, LOW); +void pinModeBuffered(pin_t pin, PinMode_t mode) { + if (pin == NO_PIN) + return; // LCOV_EXCL_LINE + else if (isNativePin(pin)) { + ::pinMode(pin, mode); + } else { + auto el = getIOElementOfPin(pin); + el->pinModeBuffered(pin - el->getStart(), mode); } } -void shiftOut(int dataPin, int clockPin, BitOrder_t bitOrder, uint8_t val) { - shiftOut((pin_t)dataPin, (pin_t)clockPin, bitOrder, val); + +void digitalWriteBuffered(pin_t pin, PinStatus_t val) { + if (pin == NO_PIN) + return; // LCOV_EXCL_LINE + else if (isNativePin(pin)) { + ::digitalWrite(pin, val); + } else { + auto el = getIOElementOfPin(pin); + el->digitalWriteBuffered(pin - el->getStart(), val); + } } -analog_t analogRead(pin_t pin) { - if (pin < NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS) { +PinStatus_t digitalReadBuffered(pin_t pin) { + if (pin == NO_PIN) + return LOW; // LCOV_EXCL_LINE + else if (isNativePin(pin)) { + return ::digitalRead(pin); + } else { + auto el = getIOElementOfPin(pin); + return el->digitalReadBuffered(pin - el->getStart()); + } +} + +analog_t analogReadBuffered(pin_t pin) { + if (pin == NO_PIN) + return 0; // LCOV_EXCL_LINE + else if (isNativePin(pin)) { return ::analogRead(pin); } else { - ExtendedIOElement &el = getIOElementOfPin(pin); - return el.analogRead(pin - el.getStart()); + auto el = getIOElementOfPin(pin); + return el->analogReadBuffered(pin - el->getStart()); } return 0; } -analog_t analogRead(int pin) { return analogRead((pin_t)pin); } -void analogWrite(pin_t pin, analog_t val) { - // DEBUGFN(DEBUGVAR(pin) << '\t' << DEBUGVAR(val)); - if (pin < NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS) { +void analogWriteBuffered(pin_t pin, analog_t val) { + if (pin == NO_PIN) + return; // LCOV_EXCL_LINE + else if (isNativePin(pin)) { #ifndef ESP32 ::analogWrite(pin, val); #endif } else { - ExtendedIOElement &el = getIOElementOfPin(pin); - el.analogWrite(pin - el.getStart(), val); + auto el = getIOElementOfPin(pin); + el->analogWriteBuffered(pin - el->getStart(), val); } } -void analogWrite(int pin, analog_t val) { analogWrite((pin_t)pin, val); } -void analogWrite(int pin, int val) { analogWrite((pin_t)pin, (analog_t)val); } -void analogWrite(pin_t pin, int val) { analogWrite(pin, (analog_t)val); } +void analogWriteBuffered(pin_t pin, int val) { + analogWriteBuffered(pin, (analog_t)val); +} + +void shiftOut(pin_t dataPin, pin_t clockPin, BitOrder_t bitOrder, uint8_t val) { + if (dataPin == NO_PIN || clockPin == NO_PIN) + return; + // Native version + if (isNativePin(dataPin) && isNativePin(clockPin)) { + ::shiftOut((int)dataPin, (int)clockPin, bitOrder, val); + } + // ExtIO version + else if (!isNativePin(dataPin) && !isNativePin(clockPin)) { + auto dataEl = getIOElementOfPin(dataPin); + auto dataPinN = dataPin - dataEl->getStart(); + auto clockEl = getIOElementOfPin(clockPin); + auto clockPinN = clockPin - clockEl->getStart(); + for (uint8_t i = 0; i < 8; i++) { + uint8_t mask = bitOrder == LSBFIRST ? (1 << i) : (1 << (7 - i)); + dataEl->digitalWrite(dataPinN, (val & mask) ? HIGH : LOW); + clockEl->digitalWrite(clockPinN, HIGH); + clockEl->digitalWrite(clockPinN, LOW); + } + } + // Mixed version (slow) + else { + for (uint8_t i = 0; i < 8; i++) { + uint8_t mask = bitOrder == LSBFIRST ? (1 << i) : (1 << (7 - i)); + digitalWrite(dataPin, (val & mask) ? HIGH : LOW); + digitalWrite(clockPin, HIGH); + digitalWrite(clockPin, LOW); + } + } +} +void shiftOut(int dataPin, int clockPin, BitOrder_t bitOrder, uint8_t val) { + ::shiftOut(arduino_pin_cast(dataPin), arduino_pin_cast(clockPin), bitOrder, + val); +} + +#if UINT16_MAX != UINT_MAX +void pinMode(unsigned int pin, PinMode_t mode) { + ::pinMode(arduino_pin_cast(pin), mode); +} +void digitalWrite(unsigned int pin, PinStatus_t val) { + ::digitalWrite(arduino_pin_cast(pin), val); +} +PinStatus_t digitalRead(unsigned int pin) { + return ::digitalRead(arduino_pin_cast(pin)); +} +analog_t analogRead(unsigned int pin) { + return ::analogRead(arduino_pin_cast(pin)); +} +#ifndef ESP32 +void analogWrite(unsigned int pin, analog_t val) { + ::analogWrite(arduino_pin_cast(pin), val); +} +void analogWrite(unsigned int pin, int val) { + ::analogWrite(arduino_pin_cast(pin), val); +} +#endif +void shiftOut(unsigned int dataPin, unsigned int clockPin, BitOrder_t bitOrder, + uint8_t val) { + ::shiftOut(arduino_pin_cast(dataPin), arduino_pin_cast(clockPin), bitOrder, + val); +} +#endif } // namespace ExtIO diff --git a/src/AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.hpp b/src/AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.hpp index 44eaf6f58..083c8c344 100644 --- a/src/AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.hpp +++ b/src/AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.hpp @@ -2,70 +2,13 @@ #pragma once -#include +#include +#include #include +#include AH_DIAGNOSTIC_WERROR() // Enable errors on warnings -AH_DIAGNOSTIC_EXTERNAL_HEADER() -#include // pin functions and constants -AH_DIAGNOSTIC_POP() - -#include - -BEGIN_AH_NAMESPACE - -#define AH_EXT_PIN(x) (x + NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS) - -namespace detail { -constexpr static auto tmp_HIGH = HIGH; -constexpr static auto tmp_LOW = LOW; -constexpr static auto tmp_INPUT = INPUT; -constexpr static auto tmp_OUTPUT = OUTPUT; -constexpr static auto tmp_INPUT_PULLUP = INPUT_PULLUP; -} // namespace detail - -END_AH_NAMESPACE - -#ifndef ARDUINO_API_VERSION -#ifdef HIGH -#undef HIGH -#endif -#ifdef LOW -#undef LOW -#endif - -#ifdef INPUT -#undef INPUT -#endif -#ifdef OUTPUT -#undef OUTPUT -#endif -#ifdef INPUT_PULLUP -#undef INPUT_PULLUP -#endif - -using PinStatus_t = uint8_t; -using PinMode_t = uint8_t; -#if defined(SAMD_SERIES) /* Nano 33 */ || defined(_LIB_SAM_) /* Due */ -using BitOrder_t = BitOrder; -#else -using BitOrder_t = uint8_t; -#endif - -const PinStatus_t HIGH = AH::detail::tmp_HIGH; -const PinStatus_t LOW = AH::detail::tmp_LOW; - -const PinMode_t INPUT = AH::detail::tmp_INPUT; -const PinMode_t OUTPUT = AH::detail::tmp_OUTPUT; -const PinMode_t INPUT_PULLUP = AH::detail::tmp_INPUT_PULLUP; - -#else -using PinStatus_t = PinStatus; -using PinMode_t = PinMode; -using BitOrder_t = BitOrder; -#endif - BEGIN_AH_NAMESPACE class ExtendedIOElement; @@ -75,6 +18,16 @@ class ExtendedIOElement; * that can be used with extended IO pin numbers. */ namespace ExtIO { + +/// @addtogroup AH_ExtIO +/// @{ + +/// Check if the given pin number is a real Arduino pin number, and not an ExtIO +/// pin number. +inline bool isNativePin(pin_t pin) { + return pin < NUM_DIGITAL_PINS + NUM_ANALOG_INPUTS; +} + /** * @brief Find the IO element of a given extended IO pin number. * @@ -82,37 +35,93 @@ namespace ExtIO { * The extended IO pin number to find the IO element of. * @return A pointer to the extended IO element that the given pin belongs to. */ -ExtendedIOElement &getIOElementOfPin(pin_t pin); +ExtendedIOElement *getIOElementOfPinOrNull(pin_t pin); +/// @copydoc getIOElementOfPinOrNull +/// Throws an error if the element was not found. +ExtendedIOElement *getIOElementOfPin(pin_t pin); + /// An ExtIO version of the Arduino function +/// @see ExtendedIOElement::pinMode void pinMode(pin_t pin, PinMode_t mode); -/// An ExtIO version of the Arduino function +/// Overload to Arduino pinMode function. void pinMode(int pin, PinMode_t mode); /// An ExtIO version of the Arduino function +/// @see ExtendedIOElement::digitalWrite void digitalWrite(pin_t pin, PinStatus_t val); -/// An ExtIO version of the Arduino function +/// Overload to Arduino digitalWrite function. void digitalWrite(int pin, PinStatus_t val); /// An ExtIO version of the Arduino function -int digitalRead(pin_t pin); -/// An ExtIO version of the Arduino function -int digitalRead(int pin); -/// An ExtIO version of the Arduino function -void shiftOut(pin_t dataPin, pin_t clockPin, BitOrder_t bitOrder, - uint8_t val); -/// An ExtIO version of the Arduino function -void shiftOut(int dataPin, int clockPin, BitOrder_t bitOrder, - uint8_t val); +/// @see ExtendedIOElement::digitalRead +PinStatus_t digitalRead(pin_t pin); +/// Overload to Arduino digitalRead function. +PinStatus_t digitalRead(int pin); + /// An ExtIO version of the Arduino function +/// @see ExtendedIOElement::analogRead analog_t analogRead(pin_t pin); -/// An ExtIO version of the Arduino function +/// Overload to Arduino analogRead function. analog_t analogRead(int pin); /// An ExtIO version of the Arduino function +/// @see ExtendedIOElement::analogWrite void analogWrite(pin_t pin, analog_t val); /// An ExtIO version of the Arduino function +/// @see ExtendedIOElement::analogWrite +void analogWrite(pin_t pin, int val); +#ifndef ESP32 +/// Overload to Arduino analogWrite function. void analogWrite(int pin, analog_t val); -/// An ExtIO version of the Arduino function +/// Overload to Arduino analogWrite function. void analogWrite(int pin, int val); +#endif + /// An ExtIO version of the Arduino function -void analogWrite(pin_t pin, int val); +void shiftOut(pin_t dataPin, pin_t clockPin, BitOrder_t bitOrder, uint8_t val); +/// Overload to Arduino shiftOut function +void shiftOut(int dataPin, int clockPin, BitOrder_t bitOrder, uint8_t val); + +/// A buffered ExtIO version of the Arduino function +/// @see ExtendedIOElement::pinModeBuffered +void pinModeBuffered(pin_t pin, PinMode_t mode); +/// A buffered ExtIO version of the Arduino function +/// @see ExtendedIOElement::digitalWriteBuffered +void digitalWriteBuffered(pin_t pin, PinStatus_t val); +/// A buffered ExtIO version of the Arduino function +/// @see ExtendedIOElement::digitalReadBuffered +PinStatus_t digitalReadBuffered(pin_t pin); + +/// A buffered ExtIO version of the Arduino function +/// @see ExtendedIOElement::analogReadBuffered +analog_t analogReadBuffered(pin_t pin); +/// A buffered ExtIO version of the Arduino function +/// @see ExtendedIOElement::analogWriteBuffered +void analogWriteBuffered(pin_t pin, analog_t val); +/// A buffered ExtIO version of the Arduino function +/// @see ExtendedIOElement::analogWriteBuffered +void analogWriteBuffered(pin_t pin, int val); + +#if UINT16_MAX != UINT_MAX +/// Overload to Arduino pinMode function. +void pinMode(unsigned int pin, PinMode_t mode); +/// Overload to Arduino digitalWrite function. +void digitalWrite(unsigned int pin, PinStatus_t val); +/// Overload to Arduino digitalRead function. +PinStatus_t digitalRead(unsigned int pin); + +/// Overload to Arduino analogRead function. +analog_t analogRead(unsigned int pin); +#ifndef ESP32 +/// Overload to Arduino analogWrite function. +void analogWrite(unsigned int pin, analog_t val); +/// Overload to Arduino analogWrite function. +void analogWrite(unsigned int pin, int val); +#endif + +/// Overload to Arduino shiftOut function +void shiftOut(unsigned int dataPin, unsigned int clockPin, BitOrder_t bitOrder, + uint8_t val); +#endif + +/// @} } // namespace ExtIO diff --git a/src/AH/Hardware/ExtendedInputOutput/MAX7219.hpp b/src/AH/Hardware/ExtendedInputOutput/MAX7219.hpp index 6794b3d1a..57058fda1 100644 --- a/src/AH/Hardware/ExtendedInputOutput/MAX7219.hpp +++ b/src/AH/Hardware/ExtendedInputOutput/MAX7219.hpp @@ -17,21 +17,51 @@ BEGIN_AH_NAMESPACE * The SPI interface is used. * * @todo Wiring diagram for SPI connection. + * + * @tparam NumChips + * The number of daisy-chained MAX7219 chips. + * @tparam SPIDriver + * The SPI class to use. Usually, the default is fine. */ -class MAX7219 : public MAX7219_Base, public StaticSizeExtendedIOElement<8 * 8> { +template +class MAX7219 : public MAX7219_Base, + public StaticSizeExtendedIOElement<8 * 8 * NumChips> { public: /** * @brief Create a MAX7219 ExtendedIOElement. * + * @param spi + * The SPI interface to use. * @param loadPin * The pin connected to the load pin (C̄S̄) of the MAX7219. */ - MAX7219(pin_t loadPin) : MAX7219_Base(loadPin) {} + MAX7219(SPIDriver spi, pin_t loadPin) + : MAX7219_Base(std::forward(spi), loadPin, + NumChips) {} /// Initialize. - /// @see MAX7219#init - void begin() override { init(); } + /// @see @ref MAX7219::begin + void begin() override { MAX7219_Base::begin(); } + + private: + struct IndexMask { + uint8_t row; + uint8_t col; + uint8_t rowgrp; + uint8_t rowmask; + uint8_t colmask; + }; + + static IndexMask pin2index(pin_t pin) { + uint8_t row = pin / 8; + uint8_t col = pin % 8; + uint8_t rowgrp = row % 8; + uint8_t rowmask = 1 << rowgrp; + uint8_t colmask = 1 << col; + return {row, col, rowgrp, rowmask, colmask}; + } + public: /** * @brief The pinMode function is not implemented because the mode is * `OUTPUT` by definition. @@ -42,6 +72,15 @@ class MAX7219 : public MAX7219_Base, public StaticSizeExtendedIOElement<8 * 8> { (void)mode; } + /** + * @copydoc pinMode + */ + void pinModeBuffered(pin_t pin, PinMode_t mode) override + __attribute__((deprecated)) { + (void)pin; + (void)mode; + } + /** * @brief Set the state of a given output pin. * @@ -52,8 +91,23 @@ class MAX7219 : public MAX7219_Base, public StaticSizeExtendedIOElement<8 * 8> { * (Either `HIGH` (1) or `LOW` (0)) */ void digitalWrite(pin_t pin, PinStatus_t val) override { - buffer.set(pin, val); - update(); + IndexMask i = pin2index(pin); + val ? buffer[i.row] |= i.colmask // set the pin (high) + : buffer[i.row] &= ~i.colmask; // clear the pin (low) + updateBufferedOutputRow(i); + } + + /** + * @brief Set the state of a given pin in the software buffer. + * The buffer is written to the MAX7219 when @ref updateBufferedOutputs + * is called. + * @copydetails digitalWrite + */ + void digitalWriteBuffered(pin_t pin, PinStatus_t val) override { + IndexMask i = pin2index(pin); + val ? buffer[i.row] |= i.colmask // set the pin (high) + : buffer[i.row] &= ~i.colmask; // clear the pin (low) + dirty_rows |= i.rowmask; } /** @@ -66,7 +120,18 @@ class MAX7219 : public MAX7219_Base, public StaticSizeExtendedIOElement<8 * 8> { * @retval 1 * The state of the output is `HIGH`. */ - int digitalRead(pin_t pin) override { return buffer.get(pin); } + PinStatus_t digitalRead(pin_t pin) override { + IndexMask i = pin2index(pin); + return bool(buffer[i.row] & i.colmask) ? HIGH : LOW; + } + + /** + * @copydoc digitalRead + */ + PinStatus_t digitalReadBuffered(pin_t pin) override { + IndexMask i = pin2index(pin); + return bool(buffer[i.row] & i.colmask) ? HIGH : LOW; + } /** * @brief The analogRead function is deprecated because a MAX7219 @@ -82,6 +147,14 @@ class MAX7219 : public MAX7219_Base, public StaticSizeExtendedIOElement<8 * 8> { return 1023 * digitalRead(pin); } + /** + * @copydoc analogRead + */ + analog_t analogReadBuffered(pin_t pin) override + __attribute__((deprecated)) { + return 1023 * digitalRead(pin); + } + /** * @brief The analogWrite function is deprecated because a MAX7219 * is always digital. @@ -101,17 +174,35 @@ class MAX7219 : public MAX7219_Base, public StaticSizeExtendedIOElement<8 * 8> { } /** - * @brief Write the buffer to the display. - * - * @todo Does this really have to happen on each update? + * @copydoc analogWrite */ - void update() override { - for (uint8_t i = 0; i < buffer.getBufferLength(); i++) - sendRaw(i + 1, buffer.getByte(i)); + void analogWriteBuffered(pin_t pin, analog_t val) override + __attribute__((deprecated)) { + digitalWrite(pin, val >= 0x80 ? HIGH : LOW); } + void updateBufferedOutputRow(IndexMask i) { + this->sendRowAll(i.rowgrp, buffer.data + i.rowgrp, 8); + dirty_rows &= ~i.rowmask; + } + + void updateBufferedOutputs() override { + if (dirty_rows == 0) + return; + uint8_t row = 8; + do { + --row; + if (dirty_rows & 0x80) + this->sendRowAll(row, buffer.data + row, 8); + dirty_rows <<= 1; + } while (row); + } + + void updateBufferedInputs() override {} + private: - BitArray<8 * 8> buffer; + Array buffer; + uint8_t dirty_rows = 0xFF; }; END_AH_NAMESPACE diff --git a/src/AH/Hardware/ExtendedInputOutput/MCP23017.hpp b/src/AH/Hardware/ExtendedInputOutput/MCP23017.hpp new file mode 100644 index 000000000..80c164f0c --- /dev/null +++ b/src/AH/Hardware/ExtendedInputOutput/MCP23017.hpp @@ -0,0 +1,104 @@ +#pragma once + +#include +AH_DIAGNOSTIC_WERROR() // Enable errors on warnings + +#include "ExtendedInputOutput.hpp" +#include "StaticSizeExtendedIOElement.hpp" +#include + +BEGIN_AH_NAMESPACE + +/** + * @brief Class for MCP23017 I²C I/O expanders. + * + * @tparam WireType + * The type of the I²C driver to use. + */ +template +class MCP23017 : public StaticSizeExtendedIOElement<16> { + public: + /** + * @brief Constructor. + * + * @param wire + * The Wire/I²C interface to use. + * @param addressOffset + * A number between 0 and 7 reflecting the state of the I2C address + * pins of the MCP23017. + * @param interruptPin + * The pin connected to the MCP23017 interrupt pin. This doesn't + * have to be an interrupt pin of the Arduino. + * The interrupt pin of the MCP23017 is configured as open-drain + * active-low output, and the interrupt pins of GPIO banks A and B + * are mirrored/OR'ed together. This means that you only need to + * connect a single interrupt pin for each MCP23017, and you can + * connect the interrupt pins of multiple MCP23017s to a single + * Arduino pin. + */ + MCP23017(WireType &wire, uint8_t addressOffset = 0, + pin_t interruptPin = NO_PIN); + + void pinModeBuffered(pin_t pin, PinMode_t mode) override; + void digitalWriteBuffered(pin_t pin, PinStatus_t status) override; + PinStatus_t digitalReadBuffered(pin_t pin) override; + analog_t analogReadBuffered(pin_t pin) override; + void analogWriteBuffered(pin_t, analog_t) override; + + void begin() override; + + void updateBufferedOutputs() override; + void updateBufferedInputs() override; + /// Send the new pin modes to the chip after calling `pinModeBuffered`. + void updateBufferedPinModes(); + + /// Get the identifier of the given pin in register A. + /// @param p + /// Pin number in [0, 7] + pin_t pinA(pin_t p) { return pin(p); } + /// Get the identifier of the given pin in register B. + /// @param p + /// Pin number in [0, 7] + pin_t pinB(pin_t p) { return pin(p + 8); } + + private: + constexpr static uint8_t I2C_BASE_ADDRESS = 0x20; + + WireType *wire; + uint8_t address; + pin_t interruptPin; + + private: + bool pinModesDirty = true; + BitArray<16> bufferedPinModes; + bool pullupsDirty = true; + BitArray<16> bufferedPullups; + bool outputsDirty = true; + BitArray<16> bufferedOutputs; + BitArray<16> bufferedInputs; + + private: + /// Check if any of the pins are configured as inputs. + bool hasInputs() const; + + /// Write any data to the MCP23017. + template + void writeI2C(const uint8_t (&values)[N]); + + /** + * @brief Write any data to the MCP23017. + * + * @param addr + * The address of the register to write to. + * @param values + * The values to write. + */ + template + void writeI2C(uint8_t addr, Args... values); +}; + +END_AH_NAMESPACE + +#include "MCP23017.ipp" + +AH_DIAGNOSTIC_POP() \ No newline at end of file diff --git a/src/AH/Hardware/ExtendedInputOutput/MCP23017.ipp b/src/AH/Hardware/ExtendedInputOutput/MCP23017.ipp new file mode 100644 index 000000000..c98f2f121 --- /dev/null +++ b/src/AH/Hardware/ExtendedInputOutput/MCP23017.ipp @@ -0,0 +1,160 @@ +#include "MCP23017.hpp" + +BEGIN_AH_NAMESPACE + +enum MCP23017RegAddr { + IODIRA = 0x00, + IODIRB = 0x01, + IPOLA = 0x02, + IPOLB = 0x03, + GPINTENA = 0x04, + GPINTENB = 0x05, + DEFVALA = 0x06, + DEFVALB = 0x07, + INTCONA = 0x08, + INTCONB = 0x09, + IOCON = 0x0A, + GPPUA = 0x0C, + GPPUB = 0x0D, + INTFA = 0x0E, + INTFB = 0x0F, + INTCAPA = 0x10, + INTCAPB = 0x11, + GPIOA = 0x12, + GPIOB = 0x13, + OLATA = 0x14, + OLATB = 0x15, +}; + +template +MCP23017::MCP23017(WireType &wire, uint8_t addressOffset, + pin_t interruptPin) + : wire(&wire), address(I2C_BASE_ADDRESS | addressOffset), + interruptPin(interruptPin) { + // Input mode by default + bufferedPinModes.setByte(0, 0xFF); + bufferedPinModes.setByte(1, 0xFF); +} + +template +void MCP23017::pinModeBuffered(pin_t pin, PinMode_t mode) { + if (mode == INPUT) { + pinModesDirty |= bufferedPinModes.get(pin) == 0; + pullupsDirty |= bufferedPullups.get(pin) == 1; + bufferedPinModes.set(pin); + bufferedPullups.clear(pin); + } else if (mode == OUTPUT) { + pinModesDirty |= bufferedPinModes.get(pin) == 1; + bufferedPinModes.clear(pin); + } else if (mode == INPUT_PULLUP) { + pinModesDirty |= bufferedPinModes.get(pin) == 0; + pullupsDirty |= bufferedPullups.get(pin) == 0; + bufferedPinModes.set(pin); + bufferedPullups.set(pin); + } +} + +template +void MCP23017::digitalWriteBuffered(pin_t pin, PinStatus_t status) { + bool boolstate = status == HIGH; + outputsDirty |= bufferedOutputs.get(pin) != boolstate; + bufferedOutputs.set(pin, boolstate); +} + +template +PinStatus_t MCP23017::digitalReadBuffered(pin_t pin) { + return bufferedInputs.get(pin) ? HIGH : LOW; +} + +template +analog_t MCP23017::analogReadBuffered(pin_t pin) { + return bufferedInputs.get(pin) ? 1023 : 0; +} + +template +void MCP23017::analogWriteBuffered(pin_t pin, analog_t value) { + digitalWriteBuffered(pin, value >= 0x80 ? HIGH : LOW); +} + +template +void MCP23017::begin() { + if (interruptPin != NO_PIN) + ExtIO::pinMode(interruptPin, INPUT_PULLUP); + // Set the IOCON register (configuration register) + writeI2C(IOCON, // + 0b01100100); + // │││││││└─ Unimplemented + // ││││││└── INTPOL = Active-low + // │││││└─── ODR = Open-drain output (overrides the INTPOL bit) + // ││││└──── HAEN = Disables the MCP23S17 address pins + // │││└───── DISSLW = Slew rate enabled + // ││└────── SEQOP = Sequential operation disabled, address pointer does not increment + // │└─────── MIRROR = The INT pins are internally connected + // └──────── BANK = The registers are in the same bank (addresses are sequential) +} + +template +void MCP23017::updateBufferedOutputs() { + updateBufferedPinModes(); + if (!outputsDirty) + return; + writeI2C(GPIOA, // + bufferedOutputs.getByte(0), // + bufferedOutputs.getByte(1)); + outputsDirty = false; +} + +template +void MCP23017::updateBufferedInputs() { + // Only update if at least one pin is configured as input + if (!hasInputs()) + return; + // Only update if a pin change interrupt happened + if (interruptPin != NO_PIN && ExtIO::digitalRead(interruptPin) == HIGH) + return; + writeI2C(GPIOA); + wire->requestFrom(address, uint8_t(2)); + bufferedInputs.setByte(0, wire->read()); + bufferedInputs.setByte(1, wire->read()); +} + +template +void MCP23017::updateBufferedPinModes() { + if (pinModesDirty) { + writeI2C(IODIRA, // + bufferedPinModes.getByte(0), // + bufferedPinModes.getByte(1)); + writeI2C(GPINTENA, // + bufferedPinModes.getByte(0), // + bufferedPinModes.getByte(1)); + pinModesDirty = false; + } + if (pullupsDirty) { + writeI2C(GPPUA, // + bufferedPullups.getByte(0), // + bufferedPullups.getByte(1)); + pullupsDirty = false; + } +} + +template +bool MCP23017::hasInputs() const { + return bufferedPinModes.getByte(0) != 0 || bufferedPinModes.getByte(1) != 0; +} + +template +template +void MCP23017::writeI2C(const uint8_t (&values)[N]) { + this->wire->beginTransmission(address); + this->wire->write(values, N); + this->wire->endTransmission(); +} + +template +template +void MCP23017::writeI2C(uint8_t addr, Args... values) { + const uint8_t v[] = {addr, static_cast(values)...}; + writeI2C(v); +} + +END_AH_NAMESPACE diff --git a/src/AH/Hardware/ExtendedInputOutput/SPIShiftRegisterOut.hpp b/src/AH/Hardware/ExtendedInputOutput/SPIShiftRegisterOut.hpp index 0eb3a7d81..125fce72e 100644 --- a/src/AH/Hardware/ExtendedInputOutput/SPIShiftRegisterOut.hpp +++ b/src/AH/Hardware/ExtendedInputOutput/SPIShiftRegisterOut.hpp @@ -6,10 +6,10 @@ AH_DIAGNOSTIC_WERROR() // Enable errors on warnings #include "ShiftRegisterOutBase.hpp" -#include AH_DIAGNOSTIC_EXTERNAL_HEADER() #include // MSBFIRST, SS +#include AH_DIAGNOSTIC_POP() BEGIN_AH_NAMESPACE @@ -22,10 +22,12 @@ BEGIN_AH_NAMESPACE * The number of bits in total. Usually, shift registers (e.g. the * 74HC595) have eight bits per chip, so `length = 8 * k` where `k` * is the number of cascaded chips. + * @tparam SPIDriver + * The SPI class to use. Usually, the default is fine. * * @ingroup AH_ExtIO */ -template +template class SPIShiftRegisterOut : public ShiftRegisterOutBase { public: /** @@ -45,6 +47,8 @@ class SPIShiftRegisterOut : public ShiftRegisterOutBase { * CS >───────────┴──────────────────────┴───────── ⋯ * ``` * + * @param spi + * The SPI interface to use. * @param latchPin * The digital output pin connected to the latch pin (ST_CP or * RCLK) of the shift register. @@ -52,7 +56,8 @@ class SPIShiftRegisterOut : public ShiftRegisterOutBase { * Either `MSBFIRST` (most significant bit first) or `LSBFIRST` * (least significant bit first). */ - SPIShiftRegisterOut(pin_t latchPin = SS, BitOrder_t bitOrder = MSBFIRST); + SPIShiftRegisterOut(SPIDriver spi, pin_t latchPin = SS, + BitOrder_t bitOrder = MSBFIRST); /** * @brief Initialize the shift register. @@ -64,7 +69,13 @@ class SPIShiftRegisterOut : public ShiftRegisterOutBase { /** * @brief Write the state buffer to the physical outputs. */ - void update() override; + void updateBufferedOutputs() override; + + private: + SPIDriver spi; + + public: + SPISettings settings{SPI_MAX_SPEED, this->bitOrder, SPI_MODE0}; }; END_AH_NAMESPACE diff --git a/src/AH/Hardware/ExtendedInputOutput/SPIShiftRegisterOut.ipp b/src/AH/Hardware/ExtendedInputOutput/SPIShiftRegisterOut.ipp index 6511b0ed3..62f4c795e 100644 --- a/src/AH/Hardware/ExtendedInputOutput/SPIShiftRegisterOut.ipp +++ b/src/AH/Hardware/ExtendedInputOutput/SPIShiftRegisterOut.ipp @@ -1,4 +1,4 @@ -#ifdef ARDUINO // I'm too lazy to mock the SPI library +#ifdef ARDUINO // TODO: I'm too lazy to mock the SPI library #include "ExtendedInputOutput.hpp" #include "SPIShiftRegisterOut.hpp" @@ -9,33 +9,35 @@ AH_DIAGNOSTIC_POP() BEGIN_AH_NAMESPACE -template -SPIShiftRegisterOut::SPIShiftRegisterOut(pin_t latchPin, BitOrder_t bitOrder) - : ShiftRegisterOutBase(latchPin, bitOrder) {} +template +SPIShiftRegisterOut::SPIShiftRegisterOut(SPIDriver spi, + pin_t latchPin, + BitOrder_t bitOrder) + : ShiftRegisterOutBase(latchPin, bitOrder), + spi(std::forward(spi)) {} -template -void SPIShiftRegisterOut::begin() { +template +void SPIShiftRegisterOut::begin() { ExtIO::pinMode(this->latchPin, OUTPUT); - SPI.begin(); - update(); + spi.begin(); + updateBufferedOutputs(); } -template -void SPIShiftRegisterOut::update() { +template +void SPIShiftRegisterOut::updateBufferedOutputs() { if (!this->dirty) return; - SPISettings settings = {SPI_MAX_SPEED, this->bitOrder, SPI_MODE0}; - SPI.beginTransaction(settings); + spi.beginTransaction(settings); ExtIO::digitalWrite(this->latchPin, LOW); - const uint8_t bufferLength = this->buffer.getBufferLength(); + const uint16_t bufferLength = this->buffer.getBufferLength(); if (this->bitOrder == LSBFIRST) - for (uint8_t i = 0; i < bufferLength; i++) - SPI.transfer(this->buffer.getByte(i)); + for (uint16_t i = 0; i < bufferLength; i++) + spi.transfer(this->buffer.getByte(i)); else - for (int8_t i = bufferLength - 1; i >= 0; i--) - SPI.transfer(this->buffer.getByte(i)); + for (uint16_t i = bufferLength; i-->0;) + spi.transfer(this->buffer.getByte(i)); ExtIO::digitalWrite(this->latchPin, HIGH); - SPI.endTransaction(); + spi.endTransaction(); this->dirty = false; } diff --git a/src/AH/Hardware/ExtendedInputOutput/ShiftRegisterOut.hpp b/src/AH/Hardware/ExtendedInputOutput/ShiftRegisterOut.hpp index c9969dec0..08f48a684 100644 --- a/src/AH/Hardware/ExtendedInputOutput/ShiftRegisterOut.hpp +++ b/src/AH/Hardware/ExtendedInputOutput/ShiftRegisterOut.hpp @@ -19,7 +19,7 @@ BEGIN_AH_NAMESPACE * * @ingroup AH_ExtIO */ -template +template class ShiftRegisterOut : public ShiftRegisterOutBase { public: /** @@ -65,7 +65,7 @@ class ShiftRegisterOut : public ShiftRegisterOutBase { /** * @brief Write the state buffer to the physical outputs. */ - void update() override; + void updateBufferedOutputs() override; private: const pin_t dataPin; diff --git a/src/AH/Hardware/ExtendedInputOutput/ShiftRegisterOut.ipp b/src/AH/Hardware/ExtendedInputOutput/ShiftRegisterOut.ipp index 67de96f54..3608e3f4c 100644 --- a/src/AH/Hardware/ExtendedInputOutput/ShiftRegisterOut.ipp +++ b/src/AH/Hardware/ExtendedInputOutput/ShiftRegisterOut.ipp @@ -3,22 +3,22 @@ BEGIN_AH_NAMESPACE -template +template ShiftRegisterOut::ShiftRegisterOut(pin_t dataPin, pin_t clockPin, pin_t latchPin, BitOrder_t bitOrder) : ShiftRegisterOutBase(latchPin, bitOrder), dataPin(dataPin), clockPin(clockPin) {} -template +template void ShiftRegisterOut::begin() { ExtIO::pinMode(dataPin, OUTPUT); ExtIO::pinMode(clockPin, OUTPUT); ExtIO::pinMode(this->latchPin, OUTPUT); - update(); + updateBufferedOutputs(); } -template -void ShiftRegisterOut::update() { +template +void ShiftRegisterOut::updateBufferedOutputs() { if (!this->dirty) return; ExtIO::digitalWrite(this->latchPin, LOW); diff --git a/src/AH/Hardware/ExtendedInputOutput/ShiftRegisterOutBase.hpp b/src/AH/Hardware/ExtendedInputOutput/ShiftRegisterOutBase.hpp index d3027b2fa..1c0f62b48 100644 --- a/src/AH/Hardware/ExtendedInputOutput/ShiftRegisterOutBase.hpp +++ b/src/AH/Hardware/ExtendedInputOutput/ShiftRegisterOutBase.hpp @@ -22,7 +22,7 @@ BEGIN_AH_NAMESPACE * * @ingroup AH_ExtIO */ -template +template class ShiftRegisterOutBase : public StaticSizeExtendedIOElement { protected: /** @@ -49,6 +49,15 @@ class ShiftRegisterOutBase : public StaticSizeExtendedIOElement { (void)mode; } + /** + * @copydoc pinMode + */ + void pinModeBuffered(pin_t pin, PinMode_t mode) override + __attribute__((deprecated)) { + (void)pin; + (void)mode; + } + /** * @brief Set the state of a given output pin. * @@ -60,6 +69,14 @@ class ShiftRegisterOutBase : public StaticSizeExtendedIOElement { */ void digitalWrite(pin_t pin, PinStatus_t val) override; + /** + * @brief Set the output of a given pin in the software buffer. + * The buffer is written to the ExtIO device when @ref updateBufferedOutputs + * is called. + * @copydetails digitalWrite + */ + void digitalWriteBuffered(pin_t pin, PinStatus_t val) override; + /** * @brief Get the current state of a given output pin. * @@ -70,7 +87,14 @@ class ShiftRegisterOutBase : public StaticSizeExtendedIOElement { * @retval 1 * The state of the pin is `HIGH`. */ - int digitalRead(pin_t pin) override; + PinStatus_t digitalRead(pin_t pin) override; + + /** + * @copydoc digitalRead + */ + PinStatus_t digitalReadBuffered(pin_t pin) override { + return digitalRead(pin); + } /** * @brief The analogRead function is deprecated because a shift @@ -86,6 +110,14 @@ class ShiftRegisterOutBase : public StaticSizeExtendedIOElement { return 1023 * digitalRead(pin); } + /** + * @copydoc analogRead + */ + analog_t analogReadBuffered(pin_t pin) override + __attribute__((deprecated)) { + return 1023 * digitalRead(pin); + } + /** * @brief The analogWrite function is not deprecated because a shift * is always digital. @@ -101,6 +133,19 @@ class ShiftRegisterOutBase : public StaticSizeExtendedIOElement { digitalWrite(pin, val >= 0x80 ? HIGH : LOW); } + /** + * @copydoc analogWrite + */ + void analogWriteBuffered(pin_t pin, analog_t val) override + __attribute__((deprecated)) { + digitalWrite(pin, val >= 0x80 ? HIGH : LOW); + } + + /** + * @brief Shift registers don't have an input buffer. + */ + void updateBufferedInputs() override {} // LCOV_EXCL_LINE + /** * @brief Get the red output pin of the given LED. * diff --git a/src/AH/Hardware/ExtendedInputOutput/ShiftRegisterOutBase.ipp b/src/AH/Hardware/ExtendedInputOutput/ShiftRegisterOutBase.ipp index 0a2556179..dc9a8cc59 100644 --- a/src/AH/Hardware/ExtendedInputOutput/ShiftRegisterOutBase.ipp +++ b/src/AH/Hardware/ExtendedInputOutput/ShiftRegisterOutBase.ipp @@ -4,51 +4,57 @@ BEGIN_AH_NAMESPACE -template +template ShiftRegisterOutBase::ShiftRegisterOutBase(pin_t latchPin, BitOrder_t bitOrder) : latchPin(latchPin), bitOrder(bitOrder) {} -template +template void ShiftRegisterOutBase::digitalWrite(pin_t pin, PinStatus_t val) { buffer.set(pin, val); dirty = true; - this->update(); // TODO: should I always update? + this->updateBufferedOutputs(); // TODO: should I always update? } -template -int ShiftRegisterOutBase::digitalRead(pin_t pin) { - return buffer.get(pin); +template +void ShiftRegisterOutBase::digitalWriteBuffered(pin_t pin, PinStatus_t val) { + buffer.set(pin, val); + dirty = true; +} + +template +PinStatus_t ShiftRegisterOutBase::digitalRead(pin_t pin) { + return buffer.get(pin) ? HIGH : LOW; } -template +template pin_t ShiftRegisterOutBase::green(pin_t id) { return this->pin(3 * id + ShiftRegisterOutRGB::greenBit); } -template +template Array ShiftRegisterOutBase::greenPins() { return generateIncrementalArray( this->pin(ShiftRegisterOutRGB::greenBit), 3); } -template +template pin_t ShiftRegisterOutBase::red(pin_t id) { return this->pin(3 * id + ShiftRegisterOutRGB::redBit); } -template +template Array ShiftRegisterOutBase::redPins() { return generateIncrementalArray( this->pin(ShiftRegisterOutRGB::redBit), 3); } -template +template pin_t ShiftRegisterOutBase::blue(pin_t id) { return this->pin(3 * id + ShiftRegisterOutRGB::blueBit); } -template +template Array ShiftRegisterOutBase::bluePins() { return generateIncrementalArray( this->pin(ShiftRegisterOutRGB::blueBit), 3); diff --git a/src/AH/Hardware/ExtendedInputOutput/keywords.yml b/src/AH/Hardware/ExtendedInputOutput/keywords.yml index 78b4d92fe..e2e9574e2 100644 --- a/src/AH/Hardware/ExtendedInputOutput/keywords.yml +++ b/src/AH/Hardware/ExtendedInputOutput/keywords.yml @@ -9,6 +9,8 @@ keyword1: - MAX7219 + - MCP23017 + - ShiftRegisterOut - ShiftRegisterOutRGB @@ -41,4 +43,7 @@ keyword2: - pins + - pinA + - pinB + literal1: diff --git a/src/AH/Hardware/FilteredAnalog.hpp b/src/AH/Hardware/FilteredAnalog.hpp index 89178cdde..1d461cbc8 100755 --- a/src/AH/Hardware/FilteredAnalog.hpp +++ b/src/AH/Hardware/FilteredAnalog.hpp @@ -9,72 +9,87 @@ AH_DIAGNOSTIC_WERROR() // Enable errors on warnings #include #include #include +#include // std::enable_if, std::is_constructible +#include // std::forward #include BEGIN_AH_NAMESPACE /** - * A class that reads and filters an analog input. - * - * A map function can be applied to the analog value (e.g. to compensate for - * logarithmic taper potentiometers or to calibrate the range). The analog input - * value is filtered using an exponential moving average filter. The default - * settings for this filter can be changed in Settings.hpp. - * After filtering, hysteresis is applied to prevent flipping back and forth - * between two values when the input is not changing. - * - * @tparam Precision - * The number of bits of precision the output should have. - * @tparam FilterShiftFactor - * The number of bits used for the EMA filter. - * The pole location is - * @f$ 1 - \left(\frac{1}{2}\right)^{\text{FilterShiftFactor}} @f$. - * A lower shift factor means less filtering (@f$0@f$ is no filtering), - * and a higher shift factor means more filtering (and more latency). - * @tparam FilterType - * The type to use for the intermediate types of the filter. - * Should be at least - * @f$ \text{ADC_BITS} + \text{IncRes} + - * \text{FilterShiftFactor} @f$ bits wide. - * @tparam AnalogType - * The type to use for the analog values. - * Should be at least @f$ \text{ADC_BITS} + \text{IncRes} @f$ - * bits wide. - * @tparam IncRes - * The number of bits to increase the resolution of the analog reading - * by. + * @brief Helper to determine how many of the remaining bits of the filter + * data types can be used to achieve higher precision. + */ +template +struct MaximumFilteredAnalogIncRes { + constexpr static uint8_t value = + min(sizeof(FilterType) * CHAR_BIT - ADC_BITS - FilterShiftFactor, + sizeof(AnalogType) * CHAR_BIT - ADC_BITS); +}; + +/** + * @brief FilteredAnalog base class with generic MappingFunction. * - * @ingroup AH_HardwareUtils + * @see FilteredAnalog */ -template -class FilteredAnalog { + uint8_t IncRes = MaximumFilteredAnalogIncRes< + FilterShiftFactor, FilterType, AnalogType>::value> +class GenericFilteredAnalog { public: /** - * @brief Construct a new FilteredAnalog object. + * @brief Construct a new GenericFilteredAnalog object. * * @param analogPin * The analog pin to read from. + * @param mapFn + * The mapping function + * @param initial + * The initial value of the filter. */ - FilteredAnalog(pin_t analogPin) : analogPin(analogPin) {} + GenericFilteredAnalog(pin_t analogPin, MappingFunction mapFn, + AnalogType initial = 0) + : analogPin(analogPin), mapFn(std::forward(mapFn)), + filter(increaseBitDepth(initial)) {} - /// A function pointer to a mapping function to map analog values. - /// @see map() - using MappingFunction = AnalogType (*)(AnalogType); + /** + * @brief Reset the filter to the given value. + * + * @param value + * The value to reset the filter state to. + * + * @todo Should the filter be initialized to the first value that is read + * instead of to zero? This would require adding a `begin` method. + */ + void reset(AnalogType value = 0) { + AnalogType widevalue = increaseBitDepth(value); + filter.reset(widevalue); + hysteresis.setValue(widevalue); + } + + /** + * @brief Reset the filtered value to the value that's currently being + * measured at the analog input. + * + * This is useful to avoid transient effects upon initialization. + */ + void resetToCurrentValue() { + AnalogType widevalue = getRawValue(); + filter.reset(widevalue); + hysteresis.setValue(widevalue); + } /** - * @brief Specify a mapping function that is applied to the raw - * analog value before filtering. + * @brief Specify a mapping function/functor that is applied to the analog + * value after filtering and before applying hysteresis. * * @param fn - * A function pointer to the mapping function. This function - * should take the filtered value (of ADC_BITS + IncRes bits - * wide) as a parameter, and should return a value of ADC_BITS + - * IncRes bits wide. + * This functor should have a call operator that takes the filtered + * value (of ADC_BITS + IncRes bits wide) as a parameter, + * and returns a value of ADC_BITS + IncRes bits wide. * * @note Applying the mapping function before filtering could result in * the noise being amplified to such an extent that filtering it @@ -83,19 +98,16 @@ class FilteredAnalog { * That's why the mapping function is applied after filtering and * before hysteresis. */ - void map(MappingFunction fn) { mapFn = fn; } + void map(MappingFunction fn) { mapFn = std::forward(fn); } /** - * @brief Invert the analog value. For example, if the precision is 10 - * bits, when the analog input measures 1023, the output will be 0, - * and when the analog input measures 0, the output will be 1023. - * - * @note This overrides the mapping function set by the `map` method. + * @brief Get a reference to the mapping function. */ - void invert() { - constexpr AnalogType maxval = (1UL << (ADC_BITS + IncRes)) - 1; - map([](AnalogType val) -> AnalogType { return maxval - val; }); - } + MappingFunction &getMappingFunction() { return mapFn; } + /** + * @brief Get a reference to the mapping function. + */ + const MappingFunction &getMappingFunction() const { return mapFn; } /** * @brief Read the analog input value, apply the mapping function, and @@ -109,8 +121,7 @@ class FilteredAnalog { bool update() { AnalogType input = getRawValue(); // read the raw analog input value input = filter.filter(input); // apply a low-pass EMA filter - if (mapFn) // If a mapping function is specified, - input = mapFn(input); // apply it + input = mapFnHelper(input); // apply the mapping function return hysteresis.update(input); // apply hysteresis, and return true // if the value changed since last time } @@ -139,12 +150,23 @@ class FilteredAnalog { } /** - * @brief Read the raw value of the analog input any filtering or mapping - * applied, but with its bit depth increased by @c IncRes. + * @brief Read the raw value of the analog input without any filtering or + * mapping applied, but with its bit depth increased by @c IncRes. */ AnalogType getRawValue() const { - return increaseBitDepth(ExtIO::analogRead(analogPin)); + AnalogType value = ExtIO::analogRead(analogPin); +#ifdef ESP8266 + if (value > 1023) + value = 1023; +#endif + return increaseBitDepth(value); + } + + /** + * @brief Get the maximum value that can be returned from @ref getRawValue. + */ + constexpr static AnalogType getMaxRawValue() { + return (1ul << (ADC_BITS + IncRes)) - 1ul; } /** @@ -161,9 +183,32 @@ class FilteredAnalog { } private: - const pin_t analogPin; + /// Helper function that applies the mapping function if it's enabled. + /// This function is only enabled if MappingFunction is explicitly + /// convertible to bool. + template + typename std::enable_if::value, + AnalogType>::type + mapFnHelper(AnalogType input) { + return bool(mapFn) ? mapFn(input) : input; + } + + /// Helper function that applies the mapping function without checking if + /// it's enabled. + /// This function is only enabled if MappingFunction is not convertible to + /// bool. + template + typename std::enable_if::value, + AnalogType>::type + mapFnHelper(AnalogType input) { + return mapFn(input); + } + + private: + pin_t analogPin; + MappingFunction mapFn; - MappingFunction mapFn = nullptr; + using EMA_t = EMA; static_assert( ADC_BITS + IncRes + FilterShiftFactor <= sizeof(FilterType) * CHAR_BIT, @@ -174,12 +219,97 @@ class FilteredAnalog { static_assert( Precision <= ADC_BITS + IncRes, "Error: Precision is larger than the increased ADC precision"); + static_assert(EMA_t::supports_range(AnalogType(0), getMaxRawValue()), + "Error: EMA filter type doesn't support full ADC range"); - EMA filter; + EMA_t filter; Hysteresis hysteresis; }; +/** + * @brief A class that reads and filters an analog input. + * + * A map function can be applied to the analog value (e.g. to compensate for + * logarithmic taper potentiometers or to calibrate the range). The analog input + * value is filtered using an exponential moving average filter. The default + * settings for this filter can be changed in Settings.hpp. + * After filtering, hysteresis is applied to prevent flipping back and forth + * between two values when the input is not changing. + * + * @tparam Precision + * The number of bits of precision the output should have. + * @tparam FilterShiftFactor + * The number of bits used for the EMA filter. + * The pole location is + * @f$ 1 - \left(\frac{1}{2}\right)^{\text{FilterShiftFactor}} @f$. + * A lower shift factor means less filtering (@f$0@f$ is no filtering), + * and a higher shift factor means more filtering (and more latency). + * @tparam FilterType + * The type to use for the intermediate types of the filter. + * Should be at least + * @f$ \text{ADC_BITS} + \text{IncRes} + + * \text{FilterShiftFactor} @f$ bits wide. + * @tparam AnalogType + * The type to use for the analog values. + * Should be at least @f$ \text{ADC_BITS} + \text{IncRes} @f$ + * bits wide. + * @tparam IncRes + * The number of bits to increase the resolution of the analog reading + * by. + * + * @ingroup AH_HardwareUtils + */ +template ::value> +class FilteredAnalog + : public GenericFilteredAnalog { + public: + /** + * @brief Construct a new FilteredAnalog object. + * + * @param analogPin + * The analog pin to read from. + * @param initial + * The initial value of the filter. + */ + FilteredAnalog(pin_t analogPin, AnalogType initial = 0) + : GenericFilteredAnalog(analogPin, nullptr, initial) {} + + /** + * @brief Construct a new FilteredAnalog object. + * + * **This constructor should not be used.** + * It is just a way to easily create arrays of FilteredAnalog objects, and + * initializing them later. Trying to update a default-constructed or + * uninitialized FilteredAnalog object will result in a fatal runtime error. + */ + FilteredAnalog() : FilteredAnalog(NO_PIN) {} + + /// A function pointer to a mapping function to map analog values. + /// @see map() + using MappingFunction = AnalogType (*)(AnalogType); + + /** + * @brief Invert the analog value. For example, if the precision is 10 + * bits, when the analog input measures 1023, the output will be 0, + * and when the analog input measures 0, the output will be 1023. + * + * @note This overrides the mapping function set by the `map` method. + */ + void invert() { + constexpr AnalogType maxval = FilteredAnalog::getMaxRawValue(); + this->map([](AnalogType val) -> AnalogType { return maxval - val; }); + } +}; + END_AH_NAMESPACE AH_DIAGNOSTIC_POP() diff --git a/src/AH/Hardware/IncrementButton.cpp b/src/AH/Hardware/IncrementButton.cpp index c313aaf71..53c854b9f 100644 --- a/src/AH/Hardware/IncrementButton.cpp +++ b/src/AH/Hardware/IncrementButton.cpp @@ -12,23 +12,26 @@ IncrementButton::State IncrementButton::updateImplementation() { // This one is first to minimize overhead // because most of the time, the button will // be released + return Nothing; } else if (incrState == Button::Rising) { + auto res = longPressState == LongPress ? ReleasedLong : ReleasedShort; longPressState = Initial; + return res; } else if (incrState == Button::Falling) { - return Increment; + return IncrementShort; } else { // if (incrState == Button::Pressed) auto now = millis(); if (longPressState == LongPress) { // still long pressed if (now - longPressRepeat >= LONG_PRESS_REPEAT_DELAY) { longPressRepeat += LONG_PRESS_REPEAT_DELAY; - return Increment; + return IncrementHold; } } else if (button.stableTime(now) >= LONG_PRESS_DELAY) { // long press starts longPressState = LongPress; longPressRepeat = now; - return Increment; + return IncrementLong; } } return Nothing; diff --git a/src/AH/Hardware/IncrementButton.hpp b/src/AH/Hardware/IncrementButton.hpp index 4625c847a..a5a066c77 100644 --- a/src/AH/Hardware/IncrementButton.hpp +++ b/src/AH/Hardware/IncrementButton.hpp @@ -39,8 +39,12 @@ class IncrementButton { * @todo Add states for initial press. */ enum State { - Nothing = 0, ///< The counter must not be incremented. - Increment, ///< The counter must be incremented. + Nothing = 0, ///< The counter must not be incremented. + IncrementShort, ///< The counter must be incremented (after short press). + IncrementLong, ///< The counter must be incremented (after long press). + IncrementHold, ///< The counter must be incremented (still pressed). + ReleasedShort, ///< The button was released after a short press. + ReleasedLong, ///< The button was released after a long press. }; /** @@ -55,10 +59,8 @@ class IncrementButton { */ State getState() const { return state; } -#ifdef AH_INDIVIDUAL_BUTTON_INVERT /// @see Button::invert void invert() { button.invert(); } -#endif protected: State updateImplementation(); diff --git a/src/AH/Hardware/IncrementDecrementButtons.cpp b/src/AH/Hardware/IncrementDecrementButtons.cpp index 53532f524..957315433 100644 --- a/src/AH/Hardware/IncrementDecrementButtons.cpp +++ b/src/AH/Hardware/IncrementDecrementButtons.cpp @@ -29,7 +29,7 @@ IncrementDecrementButtons::updateImplementation() { return Reset; } else { // Increment falling, the other released → increment - return Increment; + return IncrementShort; } } else if (decrState == Button::Falling) { if (incrState == Button::Pressed) { @@ -38,7 +38,7 @@ IncrementDecrementButtons::updateImplementation() { return Reset; } else { // Decrement falling, the other released → decrement - return Decrement; + return DecrementShort; } } else if (incrState == Button::Pressed && decrState == Button::Pressed) { // Both pressed → nothing @@ -48,12 +48,12 @@ IncrementDecrementButtons::updateImplementation() { if (longPressState == LongPress) { if (now - longPressRepeat >= LONG_PRESS_REPEAT_DELAY) { longPressRepeat += LONG_PRESS_REPEAT_DELAY; - return Increment; + return IncrementHold; } } else if (incrementButton.stableTime() >= LONG_PRESS_DELAY) { longPressState = LongPress; longPressRepeat = now; - return Increment; + return IncrementLong; } } else if (longPressState != AfterReset && decrState == Button::Pressed) { // Not reset and decrement pressed → long press? @@ -61,12 +61,12 @@ IncrementDecrementButtons::updateImplementation() { if (longPressState == LongPress) { if (now - longPressRepeat >= LONG_PRESS_REPEAT_DELAY) { longPressRepeat += LONG_PRESS_REPEAT_DELAY; - return Decrement; + return DecrementHold; } } else if (decrementButton.stableTime() >= LONG_PRESS_DELAY) { longPressState = LongPress; longPressRepeat = now; - return Decrement; + return DecrementLong; } } return Nothing; diff --git a/src/AH/Hardware/IncrementDecrementButtons.hpp b/src/AH/Hardware/IncrementDecrementButtons.hpp index e559ef8be..6a5c05b46 100644 --- a/src/AH/Hardware/IncrementDecrementButtons.hpp +++ b/src/AH/Hardware/IncrementDecrementButtons.hpp @@ -50,10 +50,14 @@ class IncrementDecrementButtons { * @todo Add states for initial press. */ enum State { - Nothing = 0, ///< The counter should not be incremented. - Increment, ///< The counter should be incremented. - Decrement, ///< The counter should be decremented. - Reset, ///< The counter should be reset to the initial value. + Nothing = 0, ///< The counter should not be incremented. + IncrementShort, ///< The counter must be incremented (after short press). + IncrementLong, ///< The counter must be incremented (after long press). + IncrementHold, ///< The counter must be incremented (still pressed). + DecrementShort, ///< The counter must be decremented (after short press). + DecrementLong, ///< The counter must be decremented (after long press). + DecrementHold, ///< The counter must be decremented (still pressed). + Reset, ///< The counter should be reset to the initial value. }; /** @@ -69,13 +73,11 @@ class IncrementDecrementButtons { */ State getState() const { return state; } -#ifdef AH_INDIVIDUAL_BUTTON_INVERT /// @see Button::invert void invert() { incrementButton.invert(); decrementButton.invert(); } -#endif protected: State updateImplementation(); diff --git a/src/AH/Hardware/LEDs/DotBarDisplayLEDs.hpp b/src/AH/Hardware/LEDs/DotBarDisplayLEDs.hpp index 2947f0365..73cb67644 100644 --- a/src/AH/Hardware/LEDs/DotBarDisplayLEDs.hpp +++ b/src/AH/Hardware/LEDs/DotBarDisplayLEDs.hpp @@ -25,7 +25,7 @@ enum class DotBarMode : bool { * * @ingroup AH_HardwareUtils */ -template +template class DotBarDisplayLEDs : public LEDs { public: /// Constructor from list of pins. @@ -37,7 +37,7 @@ class DotBarDisplayLEDs : public LEDs { * @param value * The number of the LED to activate. */ - void display(uint8_t value) const { + void display(uint16_t value) const { if (value == 0) this->clear(); else if (mode == DotBarMode::Bar) @@ -52,7 +52,7 @@ class DotBarDisplayLEDs : public LEDs { * @param value * The fraction of the LED bar to display. */ - void display(float value) const { display(uint8_t(value * (N + 1))); } + void display(float value) const { display(uint16_t(value * (N + 1))); } /// Get the dot/bar mode. DotBarMode getMode() const { return mode; } diff --git a/src/AH/Hardware/LEDs/LEDs.hpp b/src/AH/Hardware/LEDs/LEDs.hpp index fe473b466..263b2fc23 100644 --- a/src/AH/Hardware/LEDs/LEDs.hpp +++ b/src/AH/Hardware/LEDs/LEDs.hpp @@ -17,7 +17,7 @@ BEGIN_AH_NAMESPACE * * @ingroup AH_HardwareUtils */ -template +template class LEDs { public: /** @@ -45,23 +45,23 @@ class LEDs { * @param startOff * The first LED after the range to turn off. */ - void displayRange(uint8_t startOn, uint8_t startOff) const { - for (uint8_t pin = 0; pin < startOn; pin++) + void displayRange(uint16_t startOn, uint16_t startOff) const { + for (uint16_t pin = 0; pin < startOn; pin++) clear(pin); - for (uint8_t pin = startOn; pin < startOff; pin++) + for (uint16_t pin = startOn; pin < startOff; pin++) set(pin); - for (uint8_t pin = startOff; pin < N; pin++) + for (uint16_t pin = startOff; pin < N; pin++) clear(pin); } /// Turn on the given LED. - void set(uint8_t index) const { + void set(uint16_t index) const { // TODO: bounds check? ExtIO::digitalWrite(ledPins[index], HIGH); } /// Turn off the given LED. - void clear(uint8_t index) const { + void clear(uint16_t index) const { // TODO: bounds check? ExtIO::digitalWrite(ledPins[index], LOW); } @@ -72,7 +72,7 @@ class LEDs { * @param led * The LED to turn on. */ - void displayDot(uint8_t led) const { displayRange(led, led + 1); } + void displayDot(uint16_t led) const { displayRange(led, led + 1); } /** * @brief Turn off all LEDs. diff --git a/src/AH/Hardware/LEDs/MAX7219SevenSegmentDisplay.hpp b/src/AH/Hardware/LEDs/MAX7219SevenSegmentDisplay.hpp index e4a324ede..93e5b9d8c 100644 --- a/src/AH/Hardware/LEDs/MAX7219SevenSegmentDisplay.hpp +++ b/src/AH/Hardware/LEDs/MAX7219SevenSegmentDisplay.hpp @@ -44,24 +44,56 @@ static constexpr const uint8_t *NumericChars = &SevenSegmentCharacters[0x30]; /** * @brief A class for 8-digit 7-segment displays with a MAX7219 driver. * + * @tparam SPIDriver + * The SPI class to use. Usually, the default is fine. + * * @ingroup AH_HardwareUtils */ -class MAX7219SevenSegmentDisplay : public MAX7219_Base { +template +class MAX7219SevenSegmentDisplay : public MAX7219_Base { public: /** * @brief Create a MAX7219SevenSegmentDisplay. * + * @param spi + * The SPI interface to use. * @param loadPin * The pin connected to the load pin (C̄S̄) of the MAX7219. + * @param chainlength + * The number of daisy-chained MAX7219 chips. */ - MAX7219SevenSegmentDisplay(pin_t loadPin) : MAX7219_Base(loadPin) {} + MAX7219SevenSegmentDisplay(SPIDriver spi, pin_t loadPin, + uint8_t chainlength = 1) + : MAX7219_Base(std::forward(spi), loadPin, + chainlength) {} /// Initialize. - /// @see MAX7219#init - void begin() { init(); } + /// @see @ref MAX7219_Base::begin + void begin() { MAX7219_Base::begin(); } /** - * @brief Display a long integer number to the display. + * @brief Set the value of a single digit. + * + * @param digit + * The digit to set the value of. May be greater than 7 if more + * than one chip are daisy-chained. + * Digit numbering starts from the right, the rightmost digit is + * digit zero. + * @param value + * The value/bit pattern to set the digit to. + */ + void sendDigit(uint16_t digit, uint8_t value) { + this->sendRaw((digit % 8) + 1, value, digit / 8); + } + + /** + * @brief Get the total number of digits in this chain of displays, i.e. + * eight times the number of chips. + */ + uint8_t getNumberOfDigits() const { return 8 * this->getChainLength(); } + + /** + * @brief Display a long integer to the display. * The number will be right-aligned. * * @param number @@ -73,28 +105,92 @@ class MAX7219SevenSegmentDisplay : public MAX7219_Base { * @param endDigit * The last digit (zero-based, counting from the right) that can * be printed. - * If the number is larger than `endDigit - startDigit`, the number - * is truncated on the left. If the number is smaller than + * If the number is larger than `endDigit - startDigit`, a series + * of dashes is displayed. If the number is smaller than * `endDigit - startDigit`, the leftmost digits including * `endDigit` are cleared. * @return The number of digits that have been overwritten * (`endDigit - startDigit`). */ - uint8_t display(long number, uint8_t startDigit = 0, uint8_t endDigit = 7) { - long anumber = abs(number); - uint8_t i = startDigit + 1; - endDigit++; + int16_t display(long number, int16_t startDigit = 0, + int16_t endDigit = -1) { + if (startDigit < 0) + startDigit += getNumberOfDigits(); + if (endDigit < 0) + endDigit += getNumberOfDigits(); + unsigned long anumber = abs(number); + int16_t i = startDigit; do { - sendRaw(i++, NumericChars[anumber % 10]); + sendDigit(i++, NumericChars[anumber % 10]); anumber /= 10; } while (anumber && i <= endDigit); - if (number < 0 && i <= endDigit) - sendRaw(i++, 0b00000001); // minus sign - while (i <= endDigit) - sendRaw(i++, 0b00000000); // clear unused digits within range + if (number < 0 && i <= endDigit) { + sendDigit(i++, 0b00000001); // minus sign + } + if (anumber != 0) { + for (int16_t i = startDigit; i <= endDigit;) + sendDigit(i++, 0b00000001); + } else { + // clear unused digits within range + while (i <= endDigit) + sendDigit(i++, 0b00000000); + } + return endDigit - startDigit; + } + + /// @copydoc display(long, int16_t, int16_t) + int16_t display(int number, int16_t startDigit = 0, int16_t endDigit = -1) { + return display(long(number), startDigit, endDigit); + } + + /** + * @brief Display a long unsigned integer to the display. + * The number will be right-aligned. + * + * @param number + * The number to display. + * @param startDigit + * The digit (zero-based, counting from the right) to start + * printing the number. + * Digits: 7 6 5 4 3 2 1 0 + * @param endDigit + * The last digit (zero-based, counting from the right) that can + * be printed. + * If the number is larger than `endDigit - startDigit`, a series + * of dashes is displayed. If the number is smaller than + * `endDigit - startDigit`, the leftmost digits including + * `endDigit` are cleared. + * @return The number of digits that have been overwritten + * (`endDigit - startDigit`). + */ + int16_t display(unsigned long number, int16_t startDigit = 0, + int16_t endDigit = -1) { + if (startDigit < 0) + startDigit += getNumberOfDigits(); + if (endDigit < 0) + endDigit += getNumberOfDigits(); + int16_t i = startDigit; + do { + sendDigit(i++, NumericChars[number % 10]); + number /= 10; + } while (number && i <= endDigit); + if (number != 0) { + for (int16_t i = startDigit; i <= endDigit;) + sendDigit(i++, 0b00000001); + } else { + // clear unused digits within range + while (i <= endDigit) + sendDigit(i++, 0b00000000); + } return endDigit - startDigit; } + /// @copydoc display(unsigned long, int16_t, int16_t) + int16_t display(unsigned int number, int16_t startDigit = 0, + int16_t endDigit = -1) { + return display((unsigned long)(number), startDigit, endDigit); + } + /** * @brief Display a string of text to the display. * @@ -105,19 +201,21 @@ class MAX7219SevenSegmentDisplay : public MAX7219_Base { * @param startPos * The position to start printing. */ - uint8_t display(const char *text, uint8_t startPos = 0) { - uint8_t i = 8 - startPos; + int16_t display(const char *text, int16_t startPos = 0) { + if (startPos < 0) + startPos += getNumberOfDigits(); + int16_t i = getNumberOfDigits() - startPos; char prevD = '\0'; while (*text && (i > 0 || *text == '.')) { char c = *text++; uint8_t d = 0; if (c == '.') { if (prevD) { - sendRaw(1 + i, prevD | 0b10000000); + sendDigit(i, prevD | 0b10000000); prevD = '\0'; continue; } else { - sendRaw(i--, 0b10000000); + sendDigit(--i, 0b10000000); continue; } } else if (c >= '@' && c <= '_') @@ -126,28 +224,10 @@ class MAX7219SevenSegmentDisplay : public MAX7219_Base { d = SevenSegmentCharacters[(uint8_t)c]; else if (c >= 'a' && c <= 'z') d = SevenSegmentCharacters[(uint8_t)c - 'a' + 'A' - '@']; - sendRaw(i--, d); + sendDigit(--i, d); prevD = d; } - return 8 - i - startPos; - } - - /** - * @brief ? - * - * @todo Find out what this function does, and write documentation. - */ - template - uint8_t display(const uint8_t (&characters)[N], uint8_t startPos = 0) { - uint8_t i = 8 - startPos; - const uint8_t *char_p = &characters[0]; - const uint8_t *const end_p = &characters[N]; - while (i && char_p < end_p) { - uint8_t c = *char_p++; - sendRaw(i--, SevenSegmentCharacters[(uint8_t)c & 0x3F] | - (((uint8_t)c & 0x40) << 1)); - } - return 8 - i - startPos; + return getNumberOfDigits() - i - startPos; } /** @@ -157,15 +237,55 @@ class MAX7219SevenSegmentDisplay : public MAX7219_Base { * The digit to print to [0, 7]. * @param value * The 4-bit value to print [0, 15]. - * - * @todo Rename to `printHexChar` and create function that actually - * prints longer hexadecimal numbers. */ - void printHex(uint8_t digit, uint8_t value) { + void printHexChar(int16_t digit, uint8_t value) { + if (digit < 0) + digit += getNumberOfDigits(); value &= 0x0F; - uint8_t c = - value >= 0xA ? AlphaChars[value - 0x0A] : NumericChars[value]; - send(digit, c); + uint8_t c = value >= 0x0A // + ? AlphaChars[value - 0x0A] + : NumericChars[value]; + sendDigit(digit, c); + } + + /** + * @brief Print a number to the display in hexadecimal format. + * @param number + * The number to display. + * @param startDigit + * The digit (zero-based, counting from the right) to start + * printing the number. + * Digits: 7 6 5 4 3 2 1 0 + * @param endDigit + * The last digit (zero-based, counting from the right) that can + * be printed. + * If the number is larger than `endDigit - startDigit`, a series + * of dashes is displayed. If the number is smaller than + * `endDigit - startDigit`, the leftmost digits including + * `endDigit` are cleared. + * @return The number of digits that have been overwritten + * (`endDigit - startDigit`). + */ + int16_t displayHex(unsigned long number, int16_t startDigit = 0, + int16_t endDigit = -1) { + if (startDigit < 0) + startDigit += getNumberOfDigits(); + if (endDigit < 0) + endDigit += getNumberOfDigits(); + int16_t i = startDigit; + do { + printHexChar(i++, uint8_t(number)); + number >>= 4; + } while (number && i <= endDigit); + if (number != 0) { + for (int16_t i = startDigit; i <= endDigit;) + sendDigit(i++, 0b00000001); + } else { + // clear unused digits within range + while (i <= endDigit) + sendDigit(i++, 0b00000000); + } + return endDigit - startDigit; } }; diff --git a/src/AH/Hardware/LEDs/MAX7219_Base.hpp b/src/AH/Hardware/LEDs/MAX7219_Base.hpp index 1a6812658..cf95a1e91 100644 --- a/src/AH/Hardware/LEDs/MAX7219_Base.hpp +++ b/src/AH/Hardware/LEDs/MAX7219_Base.hpp @@ -16,19 +16,27 @@ BEGIN_AH_NAMESPACE /** * @brief A base class for classes that control MAX7219 LED drivers. * - * The SPI interface is used. + * @tparam SPIDriver + * The SPI class to use. Usually, the default is fine. * * @todo Wiring diagram for SPI connection. */ +template class MAX7219_Base { public: /** * @brief Create a MAX7219_Base object. * + * @param spi + * The SPI interface to use. * @param loadPin * The pin connected to the load pin (C̄S̄) of the MAX7219. + * @param chainlength + * The number of daisy-chained MAX7219 chips. */ - MAX7219_Base(pin_t loadPin) : loadPin(loadPin) {} + MAX7219_Base(SPIDriver spi, pin_t loadPin, uint8_t chainlength = 1) + : spi(std::forward(spi)), loadPin(loadPin), + chainlength(chainlength) {} static constexpr uint8_t DECODEMODE = 9; static constexpr uint8_t INTENSITY = 10; @@ -38,18 +46,17 @@ class MAX7219_Base { /** * @brief Initialize the Arduino pins, SPI, and the MAX7219. - * @todo Rename to `begin`. */ - void init() { + void begin() { ExtIO::digitalWrite(loadPin, HIGH); ExtIO::pinMode(loadPin, OUTPUT); - SPI.begin(); - sendRaw(DISPLAYTEST, 0); // Normal operation, no test mode - sendRaw(SCANLIMIT, 7); // Scan all 8 digits - sendRaw(DECODEMODE, 0); // Raw LED addressing - sendRaw(INTENSITY, 0xF); // Maximum intensity + spi.begin(); + sendRawAll(DISPLAYTEST, 0); // Normal operation, no test mode + sendRawAll(SCANLIMIT, 7); // Scan all 8 digits + sendRawAll(DECODEMODE, 0); // Raw LED addressing + sendRawAll(INTENSITY, 0xF); // Maximum intensity clear(); - sendRaw(SHUTDOWN, 1); // Enable the display + sendRawAll(SHUTDOWN, 1); // Enable the display } /** @@ -57,51 +64,173 @@ class MAX7219_Base { */ void clear() { for (uint8_t j = 1; j < 8 + 1; j++) - sendRaw(j, 0); + sendRawAll(j, 0); } /** - * @brief Send the value to the given digit. + * @brief Send the value to the given digit or row. * * @param digit * The digit or row to set [0, 7]. * @param value * The value to set the row to. + * @param chip + * The chip to send the digit to. */ - void send(uint8_t digit, uint8_t value) { - sendRaw((digit & 0x7) + 1, value); + void send(uint8_t digit, uint8_t value, uint8_t chip = 0) { + sendRaw((digit & 0x7) + 1, value, chip); } /** - * @brief Send a raw opcode and value to the MAX7219. + * @brief Send values to the given digit or row, sending a different value + * for each chip. + * + * The array is often a matrix containing the values for all rows of all + * chips in this chain. In that case, the leading dimension is 8, because + * each chip has 8 rows. + * + * [0] chip 0, row 0 ┐ + * [1] chip 0, row 1 │ + * [ ] ... │ 8 elements between two chips + * [7] chip 0, row 7 │ + * [8] chip 1, row 0 ┘ + * [9] chip 1, row 1 + * [ ] ... + * + * If you just want to specify a single row for all chips, the leading + * dimension of the array is 1. + * + * [0] chip 0, row 0 ┐ + * [1] chip 1, row 0 ┘ 1 element between two chips + * [2] chip 2, row 0 + * [ ] ... + * + * @param digit + * The digit or row to set [0, 7]. + * @param values + * The array of values to send. + * @param leading_dim + * The leading dimension of the array of values. + */ + void sendRowAll(uint8_t digit, const uint8_t *values, + uint8_t leading_dim = 1) { + uint8_t opcode = (digit & 0x7) + 1; + ExtIO::digitalWrite(loadPin, LOW); + spi.beginTransaction(settings); + for (uint8_t i = 0; i < chainlength; ++i) { + spi.transfer(opcode); + spi.transfer(values[uint16_t(i) * leading_dim]); + } + ExtIO::digitalWrite(loadPin, HIGH); + spi.endTransaction(); + } + + /** + * @brief Send different values to all digits/rows of all chips. + * + * The array layout should be as follows: + * + * [0] chip 0, row 0 ┐ + * [1] chip 0, row 1 │ + * [ ] ... │ 8 elements between two chips + * [7] chip 0, row 7 │ + * [8] chip 1, row 0 ┘ + * [9] chip 1, row 1 + * [ ] ... + * + * The array has 8 * `chainlength` elements in total. + * + * @param values + * The array of values to send. + */ + void sendAll(const uint8_t *values) { + for (uint8_t row = 0; row < 8; ++row) + sendRowAll(row, values + row, 8); + } + + /** + * @brief Send the same raw opcode and value to all chips in the chain. + * + * @param opcode + * The opcode to send. + * @param value + * The value to send. + */ + void sendRawAll(uint8_t opcode, uint8_t value) { + ExtIO::digitalWrite(loadPin, LOW); + spi.beginTransaction(settings); + for (uint8_t i = 0; i < chainlength; ++i) { + spi.transfer(opcode); + spi.transfer(value); + } + ExtIO::digitalWrite(loadPin, HIGH); + spi.endTransaction(); + } + + /** + * @brief Send a raw opcode and value to the given MAX7219. * * @param opcode * The opcode to send. * @param value * The value to send. + * @param chip + * The chip to send the command to. */ - void sendRaw(uint8_t opcode, uint8_t value) { + void sendRaw(uint8_t opcode, uint8_t value, uint8_t chip = 0) { + if (chip >= chainlength) + return; // Should I throw an error? ExtIO::digitalWrite(loadPin, LOW); - SPI.beginTransaction(settings); - SPI.transfer(opcode); - SPI.transfer(value); + spi.beginTransaction(settings); + uint8_t c = 0; + for (; c < chip; c++) { + spi.transfer(0x00); // No-Op + spi.transfer(0x00); + } + spi.transfer(opcode); + spi.transfer(value); + for (c++; c < chainlength; c++) { + spi.transfer(0x00); // No-Op + spi.transfer(0x00); + } ExtIO::digitalWrite(loadPin, HIGH); - SPI.endTransaction(); + spi.endTransaction(); } /** - * @brief Set the intensity of the LEDs. + * @brief Set the intensity of the LEDs of all chips. * * @param intensity * The intensity [0, 15]. */ void setIntensity(uint8_t intensity) { - sendRaw(INTENSITY, intensity & 0xF); + sendRawAll(INTENSITY, intensity & 0xF); } + /** + * @brief Set the intensity of the LEDs of a specific chip. + * + * @param intensity + * The intensity [0, 15]. + * @param chip + * The chip to set the intensity of. + */ + void setIntensity(uint8_t intensity, uint8_t chip) { + sendRaw(INTENSITY, intensity & 0xF, chip); + } + + /** + * @brief Get the number of daisy-chained chips. + */ + uint8_t getChainLength() const { return chainlength; } + private: + SPIDriver spi; pin_t loadPin; - SPISettings settings = {SPI_MAX_SPEED, MSBFIRST, SPI_MODE0}; + uint8_t chainlength; + + public: + SPISettings settings{SPI_MAX_SPEED, MSBFIRST, SPI_MODE0}; }; END_AH_NAMESPACE diff --git a/src/AH/Hardware/MCP23017Encoders.hpp b/src/AH/Hardware/MCP23017Encoders.hpp new file mode 100644 index 000000000..8bf002956 --- /dev/null +++ b/src/AH/Hardware/MCP23017Encoders.hpp @@ -0,0 +1,251 @@ +#pragma once + +#include +#include + +AH_DIAGNOSTIC_WERROR() // Enable errors on warnings + +AH_DIAGNOSTIC_EXTERNAL_HEADER() +#include +AH_DIAGNOSTIC_POP() + +#include +#include + +BEGIN_AH_NAMESPACE + +/** + * @brief Class for reading 8 rotary encoders using a MCP23017 I²C port + * expander. + * + * Encoders are indexed by a number from 0 to 7. Encoder #0 is connected to pins + * GPA0 and GPA1, Encoder #1 is connected to pins GPA2 and GPA3, ..., Encoder #7 + * is connected to pins GPB6 and GPB7. + * + * @tparam WireType + * The type of the `Wire` I²C driver to use. + * @tparam EncoderPositionType + * The type used for saving the encoder positions. `int32_t` is the + * default because this matches the Encoder library. You can use small + * unsigned types such as `uint8_t` or `uint16_t` if you're just + * interrested in the deltas. + * @tparam InterruptSafe + * Make the `update` method safe to use inside of an interrupt. + * It makes the necessary variables `volatile` and disables interrupts + * while reading the positions from the main program. + */ +template +class MCP23017Encoders { + private: + constexpr static uint8_t I2C_BASE_ADDRESS = 0x20; + + WireType *wire; + uint8_t address; + pin_t interrupt_pin; + + using RegisterEncoderType = + RegisterEncoders; + + RegisterEncoderType encs; + + protected: + /// Write any data to the MCP23017. + template + void writeI2C(const uint8_t (&values)[N]) { + this->wire->beginTransmission(address); + this->wire->write(values, N); + this->wire->endTransmission(); + } + + /** + * @brief Write any data to the MCP23017. + * + * @param addr + * The address of the register to write to. + * @param values + * The values to write. + */ + template + void writeI2C(uint8_t addr, Args... values) { + const uint8_t v[] = {addr, static_cast(values)...}; + writeI2C(v); + } + + /// Read the state of all GPIO pins. + uint16_t readGPIO() { + // No need to specify the register address, since this was done in the + // begin method, and the MCP23017 mode was set to Byte mode with + // IOCON.BANK = 0 (see §3.2.1 in the datasheet). + // + // TODO: + // For some reason, it sometimes seems to mess up though, and it'll read + // the wrong register, so we'll select the register again (for now). + + writeI2C(0x12); // GPIOA + + this->wire->requestFrom(address, uint8_t(2)); + uint8_t a = this->wire->read(); + uint16_t b = this->wire->read(); + return a | (b << 8); + } + + public: + /** + * @brief Constructor. + * + * @param wire + * The Wire/I²C interface to use. + * @param addr_offset + * A number between 0 and 7 reflecting the state of the I2C address + * pins of the MCP23017. + * @param interrupt_pin + * The pin connected to the MCP23017 interrupt pin. This doesn't + * have to be an interrupt pin of the Arduino. + * The interrupt pin of the MCP23017 is configured as open-drain + * active-low output, and the interrupt pins of GPIO banks A and B + * are mirrored/OR'ed together. This means that you only need to + * connect a single interrupt pin for each MCP23017, and you can + * connect the interrupt pins of multiple MCP23017s to a single + * Arduino pin. + */ + MCP23017Encoders(WireType &wire, uint8_t addr_offset = 0, + pin_t interrupt_pin = NO_PIN) + : wire(&wire), address(I2C_BASE_ADDRESS | addr_offset), + interrupt_pin(interrupt_pin) {} + + /** + * @brief Initialize the MCP23017. + * + * The configuration register is set to the right config, all GPIO pins are + * set to input mode, the pin change interrupts are enabled, and the + * internal pull-up resistors are enabled as well. + * + * The interrupt pin on the Arduino is configured as input with the internal + * pull-up resistor enabled, because the MCP23017's interrupt output is + * configured in open-drain mode. + * + * This function does not initialize the I²C interface. You have to call + * `Wire.begin()` before calling this function. + */ + void begin() { + // Set the IOCON register (configuration register) + writeI2C(0x0A, // IOCON register for BANK=0 + 0b01100100); + // │││││││└─ Unimplemented + // ││││││└── INTPOL = Active-low + // │││││└─── ODR = Open-drain output (overrides the INTPOL bit) + // ││││└──── HAEN = Disables the MCP23S17 address pins + // │││└───── DISSLW = Slew rate enabled + // ││└────── SEQOP = Sequential operation disabled, address pointer does not increment + // │└─────── MIRROR = The INT pins are internally connected + // └──────── BANK = The registers are in the same bank (addresses are sequential) + + // Set all GPIO pins to input mode + writeI2C(0x00, // IODIRA + 0xFF, // input mode for GPIO A + 0xFF); // input mode for GPIO B + + // Enable all pin change interrupts + writeI2C(0x04, // GPINTENA + 0xFF, // interrupt enable for GPIO A + 0xFF); // interrupt enable for GPIO B + + // Enable all internal pullups + writeI2C(0x0C, // GPPUA + 0xFF, // pullup enable for GPIO A + 0xFF); // pullup enable for GPIO B + + // Interrupts are configured in open-drain mode, so enable + // the internal pullup resistor on the Arduino pin that + // reads the interrupt pin. + if (interrupt_pin != NO_PIN) + ExtIO::pinMode(interrupt_pin, INPUT_PULLUP); + + // Set the address pointer to the GPIOA register. + // This means that subsequent reads will all toggle between the + // GPIOA and GPIOB register, so we can speedup reading the GPIO + // by not having to send an opcode/register address each time. + writeI2C(0x12); // GPIOA + + /// Initialize the state + encs.reset(readGPIO()); + } + + /** + * @brief If the state of the MCP23017's GPIO changed, read the new state + * and update the encoder positions. + * + * Can be called from within an ISR on boards that support I²C inside of + * ISRs, on the condition that @p InterruptSafe is set to `true`. + * + * Don't call this function both from the ISR and from your main program, + * only call it from one of the two. + */ + void update() { + // Only update if a pin change interrupt happened + if (interrupt_pin != NO_PIN && + ExtIO::digitalRead(interrupt_pin) == HIGH) + return; + // Read both GPIO A and B + uint16_t newstate = readGPIO(); + encs.update(newstate); + } + + /** + * @brief Read the position of the given encoder. + * + * Does not update the state, just reads it from the buffered position. + * + * Don't call this function from within an ISR. + * + * @param idx + * The index of the encoder to read [0, 7]. + */ + EncoderPositionType read(uint8_t idx) const { return encs.read(idx); } + + /** + * @brief Read the position of the given encoder and reset it to zero. + * + * Does not update the state, just reads it from the buffered position. + * + * Don't call this function from within an ISR. + * + * @param idx + * The index of the encoder to read [0, 7]. + */ + EncoderPositionType readAndReset(uint8_t idx) { + return encs.readAndReset(idx); + } + + /** + * @brief Set the position of the given encoder. + * + * Don't call this function from within an ISR. + * + * @param idx + * The index of the encoder to write [0, 7]. + * @param pos + * The position value to write. + */ + void write(uint8_t idx, EncoderPositionType pos) { encs.write(idx, pos); } + + /** + * @brief Proxy to access a single encoder of the 8 encoders managed by + * MCP23017Encoders. + */ + using MCP23017Encoder = typename RegisterEncoderType::Encoder; + + /** + * @brief Get a proxy to one of the encoders managed by this + * MCP23017. + * + * @param index + * The index of the encoder to access. + */ + MCP23017Encoder operator[](uint8_t index) { return encs[index]; } +}; + +END_AH_NAMESPACE + +AH_DIAGNOSTIC_POP() diff --git a/src/AH/Hardware/MultiPurposeButton.hpp b/src/AH/Hardware/MultiPurposeButton.hpp new file mode 100644 index 000000000..911b54792 --- /dev/null +++ b/src/AH/Hardware/MultiPurposeButton.hpp @@ -0,0 +1,146 @@ +/* ✔ */ + +#pragma once + +#include +AH_DIAGNOSTIC_WERROR() // Enable errors on warnings + +#include "Button.hpp" + +BEGIN_AH_NAMESPACE + +/** + * @brief Class for detecting short/long button presses and double clicks. + */ +class MultiPurposeButton { + public: + MultiPurposeButton(pin_t pin) : button(pin) {} + + enum Event { + None, ///< Nothing changed + PressStart, ///< The button was just pressed + ShortPressRelease, ///< The button was released after a short press + LongPress, ///< The button has been pressed for some time + LongPressRelease, ///< The button was released after a long press + MultiPress, ///< The button was pressed in quick succession of + ///< the previous release. + MultiPressDone, ///< The button has been released for long enough to + ///< rule out another MultiPress. + }; + + /// @see @ref Button::begin() + void begin() { button.begin(); } + + /// Read the button state and return the @ref Event (if any). + Event update() { + Event event = None; + auto now = millis(); + auto stableTime = button.stableTime(now); + switch (button.update()) { + case Button::Released: { + if (multiPressCountNew > 0 && stableTime > multiPressDelay) { + multiPressCount = multiPressCountNew; + multiPressCountNew = 0; + event = MultiPressDone; + } + } break; + case Button::Falling: { + event = (stableTime <= multiPressDelay) ? MultiPress // + : PressStart; + multiPressCountNew += event == MultiPress; + } break; + case Button::Pressed: { + if (not longPress && stableTime >= longPressDelay) { + event = LongPress; + longPress = true; + } + } break; + case Button::Rising: { + event = longPress ? LongPressRelease : ShortPressRelease; + longPress = false; + } break; + } + return event; + } + + /// Get the number of times the button was pressed in quick succession + /// (after MultiPressDone), this is the final count. + uint8_t getMultiPressCount() const { return multiPressCount; } + /// Get the number of times the button was pressed in quick succession, + /// while the button is being pressed (before MultiPressDone). + /// The count could still increase if the user keeps on pressing the button. + uint8_t getCurrentMultiPressCount() const { return multiPressCountNew; } + + /// Get the number of milliseconds after which a press is considered a long + /// press. + unsigned long getLongPressDelay() const { return longPressDelay; } + /// Set the number of milliseconds after which a press is considered a long + /// press. + void setLongPressDelay(unsigned long longPressDelay) { + this->longPressDelay = longPressDelay; + } + + /// Get the number of milliseconds between multipresses. + unsigned long getMultiPressDelay() const { return multiPressDelay; } + /// Set the number of milliseconds between multipresses. + void setMultiPressDelay(unsigned long multiPressDelay) { + this->multiPressDelay = multiPressDelay; + } + + /// @see @ref Button::previousBounceTime() const + unsigned long previousBounceTime() const { + return button.previousBounceTime(); + } + /// @see @ref Button::stableTime() const + unsigned long stableTime() const { return button.stableTime(); } + /// @see @ref Button::stableTime(unsigned long) const + unsigned long stableTime(unsigned long now) const { + return button.stableTime(now); + } + + /// Get the number of milliseconds the button has been pressed for. Returns + /// 0 if the button is not currently pressed. + unsigned long getPressedTime() const { + return getButtonState() == Button::Pressed ? stableTime() : 0; + } + /// Get the number of milliseconds the button has been pressed for. Returns + /// 0 if the button is not currently pressed or if the current press is not + /// a long press (yet). + unsigned long getLongPressedTime() const { + return longPress ? stableTime() : 0; + } + + /// Return the name of the event as a string. + static FlashString_t getName(Event ev) { return to_string(ev); } + + /// @see @ref Button::getState() const + Button::State getButtonState() const { return button.getState(); } + /// @see @ref Button::invert() + void invert() { button.invert(); } + + protected: + Button button; + unsigned long longPressDelay = 1000; + unsigned long multiPressDelay = 400; + bool longPress = false; + uint8_t multiPressCountNew = 0; + uint8_t multiPressCount = 0; + + public: + friend FlashString_t to_string(Event ev) { + switch (ev) { + case None: return F("None"); + case PressStart: return F("PressStart"); + case ShortPressRelease: return F("ShortPressRelease"); + case LongPress: return F("LongPress"); + case LongPressRelease: return F("LongPressRelease"); + case MultiPress: return F("MultiPress"); + case MultiPressDone: return F("MultiPressDone"); + } + return F(""); + } +}; + +END_AH_NAMESPACE + +AH_DIAGNOSTIC_POP() diff --git a/src/AH/Hardware/RegisterEncoders.hpp b/src/AH/Hardware/RegisterEncoders.hpp new file mode 100644 index 000000000..e82138518 --- /dev/null +++ b/src/AH/Hardware/RegisterEncoders.hpp @@ -0,0 +1,274 @@ +#pragma once + +#include +#include + +AH_DIAGNOSTIC_WERROR() // Enable errors on warnings + +AH_DIAGNOSTIC_EXTERNAL_HEADER() +#include +AH_DIAGNOSTIC_POP() + +#include +#include +#include + +BEGIN_AH_NAMESPACE + +/// Lookup table that maps rotary encoder (2-bit gray code) state changes to +/// position deltas. +constexpr static int8_t RegisterEncodersLUT[16] = { + 0, // 0 0 0 0 + +1, // 0 0 0 1 + -1, // 0 0 1 0 + +2, // 0 0 1 1 + -1, // 0 1 0 0 + 0, // 0 1 0 1 + -2, // 0 1 1 0 + +1, // 0 1 1 1 + +1, // 1 0 0 0 + -2, // 1 0 0 1 + 0, // 1 0 1 0 + -1, // 1 0 1 1 + +2, // 1 1 0 0 + -1, // 1 1 0 1 + +1, // 1 1 1 0 + 0, // 1 1 1 1 +}; + +/** + * @brief Class for keeping track of the position of multiple rotary encoders. + * + * @tparam RegisterType + * The type of the GPIO registers. + * @tparam NumEnc + * The number of encoders. + * @tparam EncoderPositionType + * The type used for saving the encoder positions. `int32_t` is the + * default because this matches the Encoder library. You can use small + * unsigned types such as `uint8_t` or `uint16_t` if you're just + * interrested in the deltas. + * @tparam InterruptSafe + * Make the `update` method safe to use inside of an interrupt. + * It makes the necessary variables `volatile` and disables interrupts + * while reading the positions from the main program. + */ +template +class RegisterEncoders { + private: + static_assert(std::is_unsigned::value, + "RegisterType should be an unsigned integer type"); + + using EncoderPositionStorageType = + typename std::conditional::type; + + using StateStorageType = + typename std::conditional::type; + + StateStorageType state = std::numeric_limits::max(); + Array positions {{}}; + + public: + /// Reset the positions to zero and the state to 0xFF...FF. + void reset() { + positions = {{}}; + state = std::numeric_limits::max(); + } + + /// Reset the positions to zero and the state to the given value. + void reset(RegisterType resetstate) { + positions = {{}}; + state = resetstate; + } + + /** + * @brief Update the encoder positions based on the new state. + * + * Can be called from within an ISR, on the condition that @p InterruptSafe + is set to `true`. + * + * Don't call this function both from the ISR and from your main program, + * only call it from one of the two. + * + * @retval true + * The new state is different from the old state, positions have + * been updated. + * @retval false + * The new state is the same as the old state, nothing updated. + */ + bool update(RegisterType newstate) { + RegisterType oldstate = state; + + // If the state didn't change, do nothing + if (newstate == oldstate) + return false; + + // Save the new state + state = newstate; + + // For each encoder, compare the new state of its two pins + // to the old state. Combine the four states into a 4-bit + // number and use a lookup table to determine the delta between + // the two encoder positions. + for (uint8_t i = 0; i < NumEnc; ++i) { + // Top two bits are new pin states + uint8_t change = static_cast(newstate) & 0b11; + change <<= 2; + // Bottom two bits are old pin states + change |= static_cast(oldstate) & 0b11; + auto delta = + static_cast(RegisterEncodersLUT[change]); + if (delta != 0) // small speedup on AVR + positions[i] += delta; + oldstate >>= 2; + newstate >>= 2; + } + return true; + } + + /** + * @brief Read the position of the given encoder. + * + * Does not update the state, just reads it from the buffered position. + * + * Don't call this function from within an ISR. + * + * @param idx + * The index of the encoder to read [0, NumEnc - 1]. + */ + EncoderPositionType read(uint8_t idx) const { + if (InterruptSafe) { + noInterrupts(); + EncoderPositionType ret = positions[idx]; + interrupts(); + return ret; + } else { + return positions[idx]; + } + } + + /** + * @brief Read the position of the given encoder and reset it to zero. + * + * Does not update the state, just reads it from the buffered position. + * + * Don't call this function from within an ISR. + * + * @param idx + * The index of the encoder to read [0, NumEnc - 1]. + */ + EncoderPositionType readAndReset(uint8_t idx) { + if (InterruptSafe) { + noInterrupts(); + EncoderPositionType ret = positions[idx]; + positions[idx] = 0; + interrupts(); + return ret; + } else { + EncoderPositionType ret = positions[idx]; + positions[idx] = 0; + return ret; + } + } + + /** + * @brief Set the position of the given encoder. + * + * Don't call this function from within an ISR. + * + * @param idx + * The index of the encoder to write [0, NumEnc - 1]. + * @param pos + * The position value to write. + */ + void write(uint8_t idx, EncoderPositionType pos) { + if (InterruptSafe) { + noInterrupts(); + positions[idx] = pos; + interrupts(); + } else { + positions[idx] = pos; + } + } + + /** + * @brief Proxy to access a single encoder of the encoders managed by + * RegisterEncoders. + */ + class Encoder { + private: + friend class RegisterEncoders; + + /// A pointer to the position value inside of the RegisterEncoders class. + EncoderPositionStorageType *position; + + Encoder(EncoderPositionStorageType *position) : position(position) {} + + public: + /// Read the position of the encoder. + /// @see RegisterEncoders::read + EncoderPositionType read() const { + if (InterruptSafe) { + noInterrupts(); + EncoderPositionType ret = *position; + interrupts(); + return ret; + } else { + return *position; + } + } + + /// Read the position of the encoder and reset it to zero. + /// @see RegisterEncoders::readAndReset + EncoderPositionType readAndReset() { + if (InterruptSafe) { + noInterrupts(); + EncoderPositionType ret = *position; + *position = 0; + interrupts(); + return ret; + } else { + EncoderPositionType ret = *position; + *position = 0; + return ret; + } + } + + /// Set the position of the encoder. + /// @see RegisterEncoders::write + void write(EncoderPositionType pos) { + if (InterruptSafe) { + noInterrupts(); + *position = pos; + interrupts(); + } else { + *position = pos; + } + } + +#if defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 5 + // begin_if_possible doesn't work on GCC 4.x and earlier, so provide a + // dummy begin method instead. + void begin() {} +#endif + }; + + /** + * @brief Get a proxy to one of the encoders managed by this object. + * + * @param index + * The index of the encoder to access. + */ + Encoder operator[](uint8_t index) { + if (index >= NumEnc) + index = NumEnc - 1; + return &positions[index]; + } +}; + +END_AH_NAMESPACE + +AH_DIAGNOSTIC_POP() diff --git a/src/AH/Hardware/keywords.yml b/src/AH/Hardware/keywords.yml index 10ee6781f..6bc71e672 100644 --- a/src/AH/Hardware/keywords.yml +++ b/src/AH/Hardware/keywords.yml @@ -9,6 +9,9 @@ keyword1: - IncrementButton # IncrementDecrementButtons.hpp - IncrementDecrementButtons + # MCP23017Encoders.hpp + - MCP23017Encoders + - MCP23017Encoder keyword2: # Button.hpp @@ -22,12 +25,16 @@ keyword2: - begin - update # FilteredAnalog.hpp + - reset + - resetToCurrentValue + - getMappingFunction - map - invert - update - getValue - getFloatValue - getRawValue + - getMaxRawValue - setupADC # IncrementButton.hpp - begin @@ -39,6 +46,12 @@ keyword2: - update - getState - invert + # MCP23017Encoders.hpp + - begin + - update + - read + - readAndReset + - write literal1: # Button.hpp @@ -57,10 +70,16 @@ literal1: # IncrementButton.hpp - State - Nothing - - Increment + - IncrementShort + - IncrementLong + - IncrementHold # IncrementDecrementButtons.hpp - State - Nothing - - Increment - - Decrement + - IncrementShort + - IncrementLong + - IncrementHold + - DecrementShort + - DecrementLong + - DecrementHold - Reset \ No newline at end of file diff --git a/src/AH/Math/Degrees.hpp b/src/AH/Math/Degrees.hpp new file mode 100644 index 000000000..600725f84 --- /dev/null +++ b/src/AH/Math/Degrees.hpp @@ -0,0 +1,48 @@ +/** + * @file + * @brief Conversions between radians and degrees. + */ +#pragma once + +#include +#include +#include +AH_DIAGNOSTIC_WERROR() // Enable errors on warnings + +BEGIN_AH_NAMESPACE + +namespace detail { +constexpr long double pi_inv_l = 0.318309886183790671537767526745028724L; +constexpr long double pi_l = 3.141592653589793238462643383279502884L; +} // namespace detail + +/// @addtogroup AH_Math +/// @{ + +/// Convert radians to degrees. +template +constexpr inline + typename std::enable_if::value, T>::type + rad2deg(T r) { + return r * static_cast(detail::pi_inv_l) * 180; +} +/// Convert degrees to radians. +template +constexpr inline + typename std::enable_if::value, T>::type + deg2rad(T d) { + return d * static_cast(detail::pi_l) / 180; +} + +/// Convert degrees to radians, e.g. 10_deg. +constexpr long double operator"" _deg(long double deg) { return deg2rad(deg); } +/// Convert degrees to radians, e.g. 10_deg. +constexpr long double operator"" _deg(unsigned long long deg) { + return deg2rad(static_cast(deg)); +} + +/// @} + +END_AH_NAMESPACE + +AH_DIAGNOSTIC_POP() diff --git a/src/AH/Math/Divide.hpp b/src/AH/Math/Divide.hpp new file mode 100644 index 000000000..c6abdee33 --- /dev/null +++ b/src/AH/Math/Divide.hpp @@ -0,0 +1,63 @@ +#pragma once + +#include +#include +#include +#include +#include + +AH_DIAGNOSTIC_WERROR() + +BEGIN_AH_NAMESPACE + +/// Divide by N using the default division operator, without explicit rounding +/// This should be used for floating point types. For integers, prefer using +/// @ref round_div_unsigned_int and @ref round_div_signed_int. +template +struct round_div_default { + static T div(T val) { return val / N; } +}; + +/// Divide an unsigned integer by N, rounding the result. +template +struct round_div_unsigned_int { + static T div(T val) { + return (val + (N / 2)) / N; + static_assert(std::is_unsigned::value && std::is_integral::value, + "This function is only valid for unsigned integers"); + } +}; + +/// Divide a signed integer by N, rounding the result. +template +struct round_div_signed_int { + static T div(T val) { + T offset = val >= 0 ? (N / 2) : (-N / 2); + return (val + offset) / N; + } +}; + +/// Select the right rounding division operator, depending on whether T is a +/// signed or unsigned integer. +template +struct round_div_int + : std::conditional::value, round_div_signed_int, + round_div_unsigned_int>::type {}; + +/// Select the right rounding division operator, depending on whether T is an +/// integer or not. +template +struct round_div_helper + : std::conditional::value, round_div_int, + round_div_default>::type {}; + +/// Divide a number by N and round the result. Uses different specializations +/// for integers to implement efficient rounding. +template +T round_div(T val) { + return round_div_helper::div(val); +} + +END_AH_NAMESPACE + +AH_DIAGNOSTIC_POP() \ No newline at end of file diff --git a/src/AH/Math/IncreaseBitDepth.hpp b/src/AH/Math/IncreaseBitDepth.hpp index 758035ddc..9d16d0d6a 100644 --- a/src/AH/Math/IncreaseBitDepth.hpp +++ b/src/AH/Math/IncreaseBitDepth.hpp @@ -11,22 +11,18 @@ BEGIN_AH_NAMESPACE template std::enable_if_t<(Bits_out <= 2 * Bits_in), T_out> -increaseBitDepthImpl(T_in in); - -template -std::enable_if_t<(Bits_out > 2 * Bits_in), T_out> increaseBitDepthImpl(T_in in) { constexpr size_t leftShift = Bits_out - Bits_in; - return (T_out(in) << leftShift) | - increaseBitDepthImpl(in); + constexpr size_t rightShift = Bits_in - leftShift; + return (T_out(in) << leftShift) | (in >> rightShift); } template -std::enable_if_t<(Bits_out <= 2 * Bits_in), T_out> +std::enable_if_t<(Bits_out > 2 * Bits_in), T_out> increaseBitDepthImpl(T_in in) { constexpr size_t leftShift = Bits_out - Bits_in; - constexpr size_t rightShift = Bits_in - leftShift; - return (T_out(in) << leftShift) | (in >> rightShift); + return (T_out(in) << leftShift) | + increaseBitDepthImpl(in); } /// @addtogroup AH_Math @@ -34,9 +30,9 @@ increaseBitDepthImpl(T_in in) { /** * @brief Increase the bit depth of the given value from `Bits_in` bits wide - * to `Bits_out` bits wide, evenly distributing the error across the - * entire range, such that the error for each element is between -0.5 - * and +0.5. + * to `Bits_out` bits wide, (approximately) evenly distributing the + * error across the entire range, such that the error for each element + * is between -1 and +1. * * For example, converting 3-bit numbers to 7-bit numbers would result in the * following: diff --git a/src/AH/Math/Math.dox b/src/AH/Math/Math.dox index c684b228a..40f7cbf76 100644 --- a/src/AH/Math/Math.dox +++ b/src/AH/Math/Math.dox @@ -6,8 +6,17 @@ /** * @defgroup AH_Math Math Utilities * @brief Mathematics helper functions. Min/max functions, functions to - * uniformly increase the effective bid depth, etc. + * uniformly increase the effective bit depth, etc. */ +/// @{ + +/** + * @defgroup math-types Math Types + * Vector and Quaternion types with the necessary operators and + * functions. + */ + +/// @} /// @cond !AH_MAIN_LIBRARY /// @} diff --git a/src/AH/Math/Quaternion.cpp b/src/AH/Math/Quaternion.cpp new file mode 100644 index 000000000..c60f218ae --- /dev/null +++ b/src/AH/Math/Quaternion.cpp @@ -0,0 +1,42 @@ +#include "Quaternion.hpp" + +AH_DIAGNOSTIC_WERROR() // Enable errors on warnings + +#include +#ifndef ARDUINO +#include // std::ostream, << +#endif + +BEGIN_AH_NAMESPACE + +// LCOV_EXCL_START + +#ifndef ARDUINO + +std::ostream &operator<<(std::ostream &os, Quaternion q) { + return os << "(" << q.w << ", " << q.x << ", " << q.y << ", " << q.z << ")"; +} + +std::ostream &operator<<(std::ostream &os, EulerAngles e) { + os << "(" << rad2deg(e.yaw) << "°, " << rad2deg(e.pitch) << "°, " + << rad2deg(e.roll) << "°)"; + return os; +} + +#endif // ARDUINO + +Print &operator<<(Print &os, Quaternion q) { + return os << "(" << q.w << ", " << q.x << ", " << q.y << ", " << q.z << ")"; +} + +Print &operator<<(Print &os, EulerAngles e) { + os << "(" << rad2deg(e.yaw) << "°, " << rad2deg(e.pitch) << "°, " + << rad2deg(e.roll) << "°)"; + return os; +} + +// LCOV_EXCL_STOP + +END_AH_NAMESPACE + +AH_DIAGNOSTIC_POP() diff --git a/src/AH/Math/Quaternion.hpp b/src/AH/Math/Quaternion.hpp new file mode 100644 index 000000000..5efe95933 --- /dev/null +++ b/src/AH/Math/Quaternion.hpp @@ -0,0 +1,374 @@ +/** + * @file + * @brief Definition of Quaternion and EulerAngles. + * + * Quaternions can be multiplied (Hamiltonian product), normalized and can + * perform rotations of vectors. Quaternion also has an implementation of the + * following operators: + * + * - `-` (conjugate) + * - `+`, `+=`, `-`, `-=` (Hamiltonian product of quaternions, adds and + * subtracts angles) + * - `*`, `*=`, `/`, `/=` (multiplication and division by scalars) + * - `==`, `!=` (equality) + * - `<<` (printing) + * + * EulerAngles provides the conversions between Euler angles and quaternions. + * It also has an implementation of the following operators: + * + * - `==`, `!=` (equality) + * - `<<` (printing) + */ +#pragma once + +#include +AH_DIAGNOSTIC_WERROR() // Enable errors on warnings + +#include // Print +#include // rad2deg() +#include // Vec3f +#include // std::sqrt +#include // std::numeric_limits + +#ifndef ARDUINO +#include // std::ostream +#endif + +BEGIN_AH_NAMESPACE + +/** + * @addtogroup math-types Math Types + * Vector and Quaternion types with the necessary operators and + * functions. + * @{ + */ + +/** + * @brief Type for quaternions of floating point numbers. + * + * Quaternions can be multiplied (Hamiltonian product), normalized and can + * perform rotations of vectors. Quaternion also has an implementation of the + * following operators: + * + * - `-` (conjugate) + * - `+`, `+=`, `-`, `-=` (Hamiltonian product of quaternions, adds and + * subtracts angles) + * - `*`, `*=`, `/`, `/=` (multiplication and division by scalars) + * - `==`, `!=` (equality) + * - `<<` (printing) + */ +struct Quaternion { + float w = 1.0; ///< Scalar (real) component. + float x = 0.0; ///< First vector (imaginary) component @f$ \mathbf{i} @f$. + float y = 0.0; ///< Second vector (imaginary) component @f$ \mathbf{j} @f$. + float z = 0.0; ///< Third vector (imaginary) component @f$ \mathbf{k} @f$. + + /// Create a quaternion that is initialized to the identity quaternion. + Quaternion() = default; + /// Create a quaterion with the given values for w, x, y and z. + Quaternion(float w, float x, float y, float z) : w(w), x(x), y(y), z(z) {} + + /// Sum of two quaterions uses quaternion multiplication. + /// (Composition of the two rotations.) + Quaternion &operator+=(Quaternion rhs) { + return *this = hamiltonianProduct(*this, rhs); + } + /// Sum of two quaternions uses quaternion multiplication. + /// (Composition of the two rotations.) + Quaternion operator+(Quaternion rhs) const { + return hamiltonianProduct(*this, rhs); + } + + /// Complex conjugate (doesn't change the original quaternion). + Quaternion conjugated() const { return {w, -x, -y, -z}; } + /// Negated quaternion is its conjugate. + Quaternion operator-() const { return conjugated(); } + + /// Difference of two quaternions `a` and `b` is the quaternion + /// multiplication of `a` and the conjugate of `b`. + /// (Composition of the rotation of `a` and the inverse rotation of `b`.) + Quaternion &operator-=(Quaternion rhs) { return *this += -rhs; } + /// Difference of two quaternions `a` and `b` is the quaternion + /// multiplication of `a` and the conjugate of `b`. + /// (Composition of the rotation of `a` and the inverse rotation of `b`.) + Quaternion operator-(Quaternion rhs) const { + Quaternion result = *this; + result -= rhs; + return result; + } + + /// Scalar multiplication. + Quaternion &operator*=(float rhs) { + w *= rhs; + x *= rhs; + y *= rhs; + z *= rhs; + return *this; + } + /// Scalar multiplication. + Quaternion operator*(float rhs) const { + Quaternion result = *this; + result *= rhs; + return result; + } + + /// Scalar division. + Quaternion &operator/=(float rhs) { + w /= rhs; + x /= rhs; + y /= rhs; + z /= rhs; + return *this; + } + /// Scalar division. + Quaternion operator/(float rhs) const { + Quaternion result = *this; + result /= rhs; + return result; + } + + /// Norm squared. + float normSquared() const { return w * w + x * x + y * y + z * z; } + /// Norm. + float norm() const { return std::sqrt(normSquared()); } + /// Normalize this quaternion. + Quaternion &normalize() { return *this /= norm(); } + /// Normalize a copy of this quaternion (doesn't change the original + /// quaternion). + Quaternion normalized() const { return *this / norm(); } + + /** + * @brief Rotate vector by this quaternion. + * + * This function uses the normalized version of this quaternion. + * + * @note This function is not the same as `quatrotate` in MATLAB! + * MATLAB rotates by the conjugate of the quaternion, while this + * function rotates by the quaternion itself. + */ + Vec3f rotate(Vec3f v) const { + // Source: + // https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation#Quaternion-derived_rotation_matrix + + // Compare to the MATLAB convetions: + // https://www.mathworks.com/matlabcentral/answers/352465-what-is-the-aerospace-blockset-quaternion-convention + // https://www.mathworks.com/help/aerotbx/ug/quatrotate.html#mw_f4c2628b-30a7-4b62-a227-7fb9ef158187 + + // Normalized quaternion. + Quaternion q = normalized(); + + // Rotation matrix. + float M11 = 1 - 2 * q.y * q.y - 2 * q.z * q.z; + float M12 = 2 * (q.x * q.y - q.w * q.z); + float M13 = 2 * (q.x * q.z + q.w * q.y); + float M21 = 2 * (q.x * q.y + q.w * q.z); + float M22 = 1 - 2 * q.x * q.x - 2 * q.z * q.z; + float M23 = 2 * (q.y * q.z - q.w * q.x); + float M31 = 2 * (q.x * q.z - q.w * q.y); + float M32 = 2 * (q.y * q.z + q.w * q.x); + float M33 = 1 - 2 * q.x * q.x - 2 * q.y * q.y; + + return Vec3f{ + M11 * v.x + M12 * v.y + M13 * v.z, + M21 * v.x + M22 * v.y + M23 * v.z, + M31 * v.x + M32 * v.y + M33 * v.z, + }; + } + + /// Equality check. + bool operator==(Quaternion rhs) const { + return this->w == rhs.w && this->x == rhs.x && this->y == rhs.y && + this->z == rhs.z; + } + /// Inequality check. + bool operator!=(Quaternion rhs) const { return !(*this == rhs); } + + /// Identity quaternion (1,0,0,0). + static Quaternion identity() { return {1, 0, 0, 0}; } + + /** + * @brief Calculate the quaternion that satisfies the following: + * `result.rotate(Vec3f{0, 0, 1}) == v.normalized()`. + */ + static Quaternion fromDirection(Vec3f v) { + /* + * Formula: + * q = cos(ϑ / 2) + sin(ϑ / 2)·(x·i + y·j + z·k) + * where (x y z) is a unit vector representing the axis about which + * the body is rotated; ϑ is the angle by which it is rotated. + * + * Source: + * https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation#Using_quaternion_as_rotations + * + * The rotational axis (x y z) can be calcuated by taking the normalized + * cross product of (0 0 1) and the given vector. The angle of rotation + * ϑ can be found using |A×B| = |A||B|·sin(ϑ). + */ + + float eps = std::numeric_limits::epsilon(); + + // Ensure that the norm of v is not zero + float v_norm = v.norm(); + if (v_norm <= eps) + return Quaternion(0, 0, 0, 0); // invalid zero quaternion + + // Normalize the x and y components (only the sign of v.z matters now) + float x = v.x / v_norm; + float y = v.y / v_norm; + + // Check the edge case, where v ≃ (0 0 ±1). + if (std::abs(x) <= eps && std::abs(y) <= eps) + return v.z > 0 ? Quaternion(1, 0, 0, 0) : Quaternion(0, 1, 0, 0); + + // Calculate the cross product and its norm. + // (z component is always zero) + Vec2f cross = {-y, x}; + float crossNorm = min(cross.norm(), 1); + cross /= crossNorm; + + // Calculate the angle ϑ. + float angle = std::asin(crossNorm); + if (v.z < 0) + angle = float(180_deg) - angle; + + // Calculate the resulting quaternion. + return { + std::cos(angle / 2), // + std::sin(angle / 2) * cross.x, // + std::sin(angle / 2) * cross.y, // + 0, // = std::sin(angle / 2) * cross.z + }; + } + + /** + * @brief Calculate the quaternion from a vector that makes a given angle + * with the XZ plane and a given angle with the YZ plane. + * + * @param xAngle + * The angle the vector should make with the XZ plane. A positive + * value represents a positive rotation about the x-axis. + * @param yAngle + * The angle the vector should make with the YZ plane. A positive + * value represents a positive rotation about the y-axis. + * + * @return A quaternion from the vector {tan(yAngle), -tan(xAngle), 1}. + */ + static Quaternion fromXYAngle(float xAngle, float yAngle) { + Vec3f v = { + +std::tan(yAngle), // x + -std::tan(xAngle), // y + 1, // z + }; + return Quaternion::fromDirection(v); + } + + /// Quaternion multiplication. + static Quaternion hamiltonianProduct(Quaternion q, Quaternion r) { + return { + r.w * q.w - r.x * q.x - r.y * q.y - r.z * q.z, + r.w * q.x + r.x * q.w - r.y * q.z + r.z * q.y, + r.w * q.y + r.x * q.z + r.y * q.w - r.z * q.x, + r.w * q.z - r.x * q.y + r.y * q.x + r.z * q.w, + }; + } +}; + +/// Scalar multiplication. +/// @related Quaternion +inline Quaternion operator*(float lhs, Quaternion rhs) { + return {lhs * rhs.w, lhs * rhs.x, lhs * rhs.y, lhs * rhs.z}; +} + +/** + * @brief Struct for Euler angles of floating point numbers. + * + * EulerAngles provides the conversions between Euler angles and quaternions. + * It also has an implementation of the following operators: + * + * - `==`, `!=` (equality) + * - `<<` (printing) + */ +struct EulerAngles { + float yaw = 0.0; ///< Z : drone Z = world +Z. + float pitch = 0.0; ///< Y': drone Y = world -X. + float roll = 0.0; ///< X": drone X = world +Y. + + /// Create Euler angles that are initialized to (0 0 0), or upright. + EulerAngles() = default; + /// Create Euler angles with the given values for yaw, pitch and roll. + EulerAngles(float yaw, float pitch, float roll) + : yaw(yaw), pitch(pitch), roll(roll) {} + /// Create Euler angles from the given quaternion. + EulerAngles(Quaternion q) : EulerAngles{quat2eul(q)} {} + + /// Implicitly convert these Euler angles to a quaternion. + operator Quaternion() const { return eul2quat(*this); } + + /// Equality check. + bool operator==(EulerAngles rhs) const { + return this->yaw == rhs.yaw && this->pitch == rhs.pitch && + this->roll == rhs.roll; + } + /// Inequality check. + bool operator!=(EulerAngles rhs) const { return !(*this == rhs); } + + /// Convert the given quaternion to Euler angles. + static EulerAngles quat2eul(Quaternion q) { + // Source: https://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles#Quaternion_to_Euler_Angles_Conversion + + // Normalize quaternion (q is passed by value, so this is a copy of q). + q.normalize(); + + float phi = std::atan2(2 * (q.w * q.x + q.y * q.z), + 1 - 2 * (q.x * q.x + q.y * q.y)); + float theta = std::asin(2 * (q.w * q.y - q.z * q.x)); + float psi = std::atan2(2 * (q.w * q.z + q.x * q.y), + 1 - 2 * (q.y * q.y + q.z * q.z)); + return {psi, theta, phi}; + } + + /// Convert the given Euler angles to a quaternion. + static Quaternion eul2quat(EulerAngles eulerAngles) { + // Source: https://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles#Euler_Angles_to_Quaternion_Conversion + + float cy = std::cos(eulerAngles.yaw / 2); + float sy = std::sin(eulerAngles.yaw / 2); + float cp = std::cos(eulerAngles.pitch / 2); + float sp = std::sin(eulerAngles.pitch / 2); + float cr = std::cos(eulerAngles.roll / 2); + float sr = std::sin(eulerAngles.roll / 2); + + return { + cy * cp * cr + sy * sp * sr, + cy * cp * sr - sy * sp * cr, + sy * cp * sr + cy * sp * cr, + sy * cp * cr - cy * sp * sr, + }; + } +}; + +#ifndef ARDUINO + +/// Printing. +/// @related Quaternion +std::ostream &operator<<(std::ostream &os, Quaternion q); + +/// Printing. +/// @related EulerAngles +std::ostream &operator<<(std::ostream &os, EulerAngles e); + +#endif // ARDUINO + +/// Printing. +/// @related Quaternion +Print &operator<<(Print &os, Quaternion e); + +/// Printing. +/// @related EulerAngles +Print &operator<<(Print &os, EulerAngles e); + +/// @} + +END_AH_NAMESPACE + +AH_DIAGNOSTIC_POP() diff --git a/src/AH/Math/Vector.cpp b/src/AH/Math/Vector.cpp new file mode 100644 index 000000000..4c4c235de --- /dev/null +++ b/src/AH/Math/Vector.cpp @@ -0,0 +1,46 @@ +#include "Vector.hpp" + +AH_DIAGNOSTIC_WERROR() // Enable errors on warnings + +#include +#ifndef ARDUINO +#include // std::ostream, << +#endif + +BEGIN_AH_NAMESPACE + +// LCOV_EXCL_START + +#ifndef ARDUINO + +/// Printing. +/// @related Vec2f +std::ostream &operator<<(std::ostream &os, Vec2f v) { + return os << "(" << v.x << ", " << v.y << ")"; +} + +/// Printing. +/// @related Vec3f +std::ostream &operator<<(std::ostream &os, Vec3f v) { + return os << "(" << v.x << ", " << v.y << ", " << v.z << ")"; +} + +#endif + +/// Printing. +/// @related Vec2f +Print &operator<<(Print &os, Vec2f v) { + return os << "(" << v.x << ", " << v.y << ")"; +} + +/// Printing. +/// @related Vec3f +Print &operator<<(Print &os, Vec3f v) { + return os << "(" << v.x << ", " << v.y << ", " << v.z << ")"; +} + +// LCOV_EXCL_STOP + +END_AH_NAMESPACE + +AH_DIAGNOSTIC_POP() diff --git a/src/AH/Math/Vector.hpp b/src/AH/Math/Vector.hpp new file mode 100644 index 000000000..1af92d547 --- /dev/null +++ b/src/AH/Math/Vector.hpp @@ -0,0 +1,270 @@ +/** + * @file + * @brief Definition of Vec2f and Vec3f. + * + * Vec2fs can be added, subtracted, multiplied (dot product) and normalized. + * It also has an implementation of the following operators: + * "+", "+=", "-", "-=", "*" (vector-vector); + * "*", "*=", "/", "/=" (vector-scalar); + * "==", "!=" (equality); + * "*" (scalar-vector); + * "<<" (printing). + * The same applies for Vec3fs. + */ +#pragma once + +#include +AH_DIAGNOSTIC_WERROR() // Enable errors on warnings + +#include // Print +#include // std::sqrt + +#ifndef ARDUINO +#include // std::ostream +#endif + +BEGIN_AH_NAMESPACE + +/// @addtogroup math-types +/// @{ + +/** + * @brief Type for 2D vectors of floating point numbers. + * + * Vec2fs can be added, subtracted, multiplied (dot product) and normalized. + * It also has an implementation of the following operators: + * "+", "+=", "-", "-=", "*" (vector-vector); + * "*", "*=", "/", "/=" (vector-scalar); + * "==", "!=" (equality); + * "*" (scalar-vector); + * "<<" (printing). + */ +struct Vec2f { + float x = 0.0; ///< The x component of the vector. + float y = 0.0; ///< The y component of the vector. + + /// Create a vector that is initialized to the zero vector (0,0). + Vec2f() = default; + /// Create a vector with the given x and y coordinates. + Vec2f(float x, float y) : x(x), y(y) {} + + /// Addition. + Vec2f &operator+=(Vec2f rhs) { + x += rhs.x; + y += rhs.y; + return *this; + } + /// Addition. + Vec2f operator+(Vec2f rhs) const { + Vec2f result = *this; + result += rhs; + return result; + } + + /// Negation. + Vec2f operator-() const { return {-x, -y}; } + /// Subtraction. + Vec2f &operator-=(Vec2f rhs) { return *this += -rhs; } + /// Subtraction. + Vec2f operator-(Vec2f rhs) const { + Vec2f result = *this; + result -= rhs; + return result; + } + + /// Scalar multiplication. + Vec2f &operator*=(float rhs) { + x *= rhs; + y *= rhs; + return *this; + } + /// Scalar multiplication. + Vec2f operator*(float rhs) const { + Vec2f result = *this; + result *= rhs; + return result; + } + + /// Scalar division. + Vec2f &operator/=(float rhs) { + x /= rhs; + y /= rhs; + return *this; + } + /// Scalar division. + Vec2f operator/(float rhs) const { + Vec2f result = *this; + result /= rhs; + return result; + } + + /// Inner product. + float operator*(Vec2f rhs) const { + return this->x * rhs.x + this->y * rhs.y; + } + + /// Norm squared. + float normSquared() const { return (*this) * (*this); } + /// Norm. + float norm() const { + // return std::sqrt(normSquared()); // faster but less accurate + return std::hypot(x, y); + } + /// Normalize this vector. + Vec2f &normalize() { return *this /= norm(); } + /// Normalize a copy of this vector (doesn't change the original vector). + Vec2f normalized() const { return *this / norm(); } + + /// Equality check. + bool operator==(Vec2f rhs) const { + return this->x == rhs.x && this->y == rhs.y; + } + /// Inequality check. + bool operator!=(Vec2f rhs) const { return !(*this == rhs); } +}; + +/// Scalar multiplication. +/// @related Vec2f +inline Vec2f operator*(float lhs, Vec2f rhs) { + return {lhs * rhs.x, lhs * rhs.y}; +} + +/** + * @brief Type for 3D vectors of floating point numbers. + * + * Vec3fs can be added, subtracted, multiplied (dot product) and normalized. + * It also has an implementation of the following operators: + * "+", "+=", "-", "-=", "*" (vector-vector); + * "*", "*=", "/", "/=" (vector-scalar); + * "==", "!=" (equality); + * "*" (scalar-vector); + * "<<" (printing). + */ +struct Vec3f { + float x = 0.0; ///< The x component of the vector. + float y = 0.0; ///< The y component of the vector. + float z = 0.0; ///< The z component of the vector. + + /// Create a vector that is initialized to the zero vector (0,0,0). + Vec3f() = default; + /// Create a vector with the given x, y and z coordinates. + Vec3f(float x, float y, float z) : x(x), y(y), z(z) {} + Vec3f(const Vec3f &) = default; + Vec3f(const volatile Vec3f &other) : x(other.x), y(other.y), z(other.z) {} + void operator=(const Vec3f &other) volatile { + this->x = other.x; + this->y = other.y; + this->z = other.z; + } + + /// Addition. + Vec3f &operator+=(Vec3f rhs) { + x += rhs.x; + y += rhs.y; + z += rhs.z; + return *this; + } + /// Addition. + Vec3f operator+(Vec3f rhs) const { + Vec3f result = *this; + result += rhs; + return result; + } + + /// Negation. + Vec3f operator-() const { return {-x, -y, -z}; } + /// Subtraction. + Vec3f &operator-=(Vec3f rhs) { return *this += -rhs; } + /// Subtraction. + Vec3f operator-(Vec3f rhs) const { + Vec3f result = *this; + result -= rhs; + return result; + } + + /// Scalar multiplication. + Vec3f &operator*=(float rhs) { + x *= rhs; + y *= rhs; + z *= rhs; + return *this; + } + /// Scalar multiplication. + Vec3f operator*(float rhs) const { + Vec3f result = *this; + result *= rhs; + return result; + } + + /// Scalar division. + Vec3f &operator/=(float rhs) { + x /= rhs; + y /= rhs; + z /= rhs; + return *this; + } + /// Scalar division. + Vec3f operator/(float rhs) const { + Vec3f result = *this; + result /= rhs; + return result; + } + + /// Inner product. + float operator*(Vec3f rhs) const { + return this->x * rhs.x + this->y * rhs.y + this->z * rhs.z; + } + + /// Norm squared. + float normSquared() const { return (*this) * (*this); } + + /// Norm. + float norm() const { + return std::sqrt(normSquared()); + // return std::hypot(x, y, z); // C++17 + } + + /// Normalize this vector. + Vec3f &normalize() { return *this /= norm(); } + /// Normalize a copy of this vector (doesn't change the original vector). + Vec3f normalized() const { return *this / norm(); } + + /// Equality check. + bool operator==(Vec3f rhs) const { + return this->x == rhs.x && this->y == rhs.y && this->z == rhs.z; + } + /// Inequality check. + bool operator!=(Vec3f rhs) const { return !(*this == rhs); } +}; + +/// Scalar multiplication. +/// @related Vec3f +inline Vec3f operator*(float lhs, Vec3f rhs) { + return {lhs * rhs.x, lhs * rhs.y, lhs * rhs.z}; +} + +#ifndef ARDUINO + +/// Printing. +/// @related Vec2f +std::ostream &operator<<(std::ostream &os, Vec2f v); + +/// Printing. +/// @related Vec3f +std::ostream &operator<<(std::ostream &os, Vec3f v); + +#endif + +/// Printing. +/// @related Vec2f +Print &operator<<(Print &os, Vec2f v); + +/// Printing. +/// @related Vec3f +Print &operator<<(Print &os, Vec3f v); + +/// @} + +END_AH_NAMESPACE + +AH_DIAGNOSTIC_POP() diff --git a/src/AH/Math/keywords.yml b/src/AH/Math/keywords.yml index fed6a9ded..0e2ffa7f0 100644 --- a/src/AH/Math/keywords.yml +++ b/src/AH/Math/keywords.yml @@ -1,4 +1,28 @@ +keyword1: + - Quaternion + - EulerAngles + - Vec2f + - Vec3f + keyword2: - increaseBitDepth - min - max + - w + - x + - y + - z + - hamiltonianProduct + - conjugated + - normSquared + - norm + - normalize + - normalized + - rotate + - identity + - fromDirection + - fromXYAngle + - quat2eul + - eul2quat + - rad2deg + - deg2rad diff --git a/src/AH/PrintStream/PrintStream.cpp b/src/AH/PrintStream/PrintStream.cpp index 7fdced488..4ff799406 100644 --- a/src/AH/PrintStream/PrintStream.cpp +++ b/src/AH/PrintStream/PrintStream.cpp @@ -9,6 +9,8 @@ #define FLUSH #endif +BEGIN_AH_NAMESPACE + /* #define OCT 8 */ uint8_t formatPrintStream = DEC; @@ -130,6 +132,9 @@ Print &operator<<(Print &printer, double d) { printer.print(d, precisionPrintStream); return printer; } +Print &operator<<(Print &printer, float f) { + return printer << static_cast(f); +} Print &operator<<(Print &printer, const Printable &p) { printer.print(p); return printer; @@ -142,20 +147,6 @@ Print &operator<<(Print &printer, bool b) { return printer; } -template -Print &printIntegral(Print &printer, T i) { - switch (formatPrintStream) { - case DEC: printer.print(i); break; - case HEX: printHex(printer, i); break; - case BIN: printBin(printer, i); break; - /* case OCT: - printOct(printer, i); - break; */ - default: break; - } - return printer; -} - Print &operator<<(Print &printer, manipulator pf) { return pf(printer); } Setbase setbase(uint8_t base) { return {base}; } @@ -231,4 +222,59 @@ void printOct(Print &printer, T val) ; // TODO } */ +template +Print &printIntegral(Print &printer, T i) { + switch (formatPrintStream) { + case DEC: printer.print(i); break; + case HEX: printHex(printer, i); break; + case BIN: printBin(printer, i); break; + /* case OCT: + printOct(printer, i); + break; */ + default: break; + } + return printer; +} + +Print &operator<<(Print &p, HexDump h) { + if (h.length == 0) + return p; + + auto temp_case = casePrintStream; + casePrintStream = UPPERCASE; + while (h.length-- > 1) { + printHex(p, *h.data++); + p.print(' '); + } + printHex(p, *h.data++); + casePrintStream = temp_case; + return p; +} + +#ifndef ARDUINO + +std::ostream &operator<<(std::ostream &p, HexDump h) { + if (h.length == 0) + return p; + + auto hex_nibble_to_char = [](uint8_t nibble) -> char { + nibble &= 0xF; + return nibble > 9 ? nibble - 10 + 'A' : nibble + '0'; + }; + auto printHex = [&](std::ostream &p, uint8_t b) { + p << hex_nibble_to_char(b >> 4) << hex_nibble_to_char(b); + }; + + while (h.length-- > 1) { + printHex(p, *h.data++); + p << ' '; + } + printHex(p, *h.data++); + return p; +} + +#endif + +END_AH_NAMESPACE + // LCOV_EXCL_STOP diff --git a/src/AH/PrintStream/PrintStream.hpp b/src/AH/PrintStream/PrintStream.hpp index fdf0df2e8..99a13e134 100644 --- a/src/AH/PrintStream/PrintStream.hpp +++ b/src/AH/PrintStream/PrintStream.hpp @@ -5,6 +5,7 @@ #ifndef PrintStream_h #define PrintStream_h +#include #include AH_DIAGNOSTIC_WERROR() // Enable errors on warnings @@ -12,6 +13,8 @@ AH_DIAGNOSTIC_EXTERNAL_HEADER() #include // Print AH_DIAGNOSTIC_POP() +BEGIN_AH_NAMESPACE + /// @addtogroup AH_PrintStream /// @{ @@ -44,6 +47,7 @@ Print &operator<<(Print &printer, unsigned int i); Print &operator<<(Print &printer, int8_t i); Print &operator<<(Print &printer, long i); Print &operator<<(Print &printer, unsigned long i); +Print &operator<<(Print &printer, float f); Print &operator<<(Print &printer, double d); Print &operator<<(Print &printer, const Printable &p); Print &operator<<(Print &printer, bool b); @@ -68,6 +72,15 @@ struct Setbytesep { Setbytesep setbytesep(char bytesep); Print &operator<<(Print &printer, Setbytesep f); +struct HexDump { + HexDump(const uint8_t *data, size_t length) + : data(data), length(length) {} + const uint8_t *data; + size_t length; +}; + +Print &operator<<(Print &p, HexDump h); + /// @} #ifndef ARDUINO @@ -100,8 +113,12 @@ inline std::ostream &operator<<(std::ostream &os, return os << reinterpret_cast(s); } +std::ostream &operator<<(std::ostream &p, HexDump h); + #endif +END_AH_NAMESPACE + AH_DIAGNOSTIC_POP() #endif // PrintStream_h \ No newline at end of file diff --git a/src/AH/STL/Fallback/climits b/src/AH/STL/Fallback/climits new file mode 100644 index 000000000..1daf0e551 --- /dev/null +++ b/src/AH/STL/Fallback/climits @@ -0,0 +1,59 @@ +// -*- C++ -*- forwarding header. + +// Copyright (C) 1997-2017 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file include/climits + * This is a Standard C++ Library file. You should @c \#include this file + * in your programs, rather than any of the @a *.h implementation files. + * + * This is the C++ version of the Standard C Library header @c limits.h, + * and its contents are (mostly) the same as that header, but are all + * contained in the namespace @c std (except for names which are defined + * as macros in C). + */ + +// +// ISO C++ 14882: 18.2.2 Implementation properties: C library +// + +#pragma GCC system_header + +#include "bits/c++config.h" +#include + +#ifndef _GLIBCXX_CLIMITS +#define _GLIBCXX_CLIMITS 1 + +#ifndef LLONG_MIN +#define LLONG_MIN (-__LONG_LONG_MAX__ - 1) +#endif + +#ifndef LLONG_MAX +#define LLONG_MAX __LONG_LONG_MAX__ +#endif + +#ifndef ULLONG_MAX +#define ULLONG_MAX (__LONG_LONG_MAX__ * 2ULL + 1) +#endif + +#endif diff --git a/src/AH/STL/Fallback/cstddef b/src/AH/STL/Fallback/cstddef new file mode 100644 index 000000000..c6b0f9cf2 --- /dev/null +++ b/src/AH/STL/Fallback/cstddef @@ -0,0 +1,191 @@ +// -*- C++ -*- forwarding header. + +// Copyright (C) 1997-2017 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file cstddef + * This is a Standard C++ Library file. You should @c \#include this file + * in your programs, rather than any of the @a *.h implementation files. + * + * This is the C++ version of the Standard C Library header @c stddef.h, + * and its contents are (mostly) the same as that header, but are all + * contained in the namespace @c std (except for names which are defined + * as macros in C). + */ + +// +// ISO C++ 14882: 18.1 Types +// + +#ifndef _GLIBCXX_CSTDDEF +#define _GLIBCXX_CSTDDEF 1 + +#pragma GCC system_header + +#undef __need_wchar_t +#undef __need_ptrdiff_t +#undef __need_size_t +#undef __need_NULL +#undef __need_wint_t +#include "bits/c++config.h" +#include + +#if __cplusplus >= 201103L +namespace std +{ + // We handle size_t, ptrdiff_t, and nullptr_t in c++config.h. + using ::max_align_t; +} +#endif + +#if __cplusplus >= 201703L +namespace std +{ +#define __cpp_lib_byte 201603 + + /// std::byte + enum class byte : unsigned char {}; + + template struct __byte_operand { }; + template<> struct __byte_operand { using __type = byte; }; + template<> struct __byte_operand { using __type = byte; }; + template<> struct __byte_operand { using __type = byte; }; + template<> struct __byte_operand { using __type = byte; }; +#ifdef _GLIBCXX_USE_WCHAR_T + template<> struct __byte_operand { using __type = byte; }; +#endif + template<> struct __byte_operand { using __type = byte; }; + template<> struct __byte_operand { using __type = byte; }; + template<> struct __byte_operand { using __type = byte; }; + template<> struct __byte_operand { using __type = byte; }; + template<> struct __byte_operand { using __type = byte; }; + template<> struct __byte_operand { using __type = byte; }; + template<> struct __byte_operand { using __type = byte; }; + template<> struct __byte_operand { using __type = byte; }; + template<> struct __byte_operand { using __type = byte; }; + template<> struct __byte_operand { using __type = byte; }; +#if defined(__GLIBCXX_TYPE_INT_N_0) + template<> struct __byte_operand<__GLIBCXX_TYPE_INT_N_0> + { using __type = byte; }; + template<> struct __byte_operand + { using __type = byte; }; +#endif +#if defined(__GLIBCXX_TYPE_INT_N_1) + template<> struct __byte_operand<__GLIBCXX_TYPE_INT_N_1> + { using __type = byte; }; + template<> struct __byte_operand + { using __type = byte; }; +#endif +#if defined(__GLIBCXX_TYPE_INT_N_2) + template<> struct __byte_operand<__GLIBCXX_TYPE_INT_N_2> + { using __type = byte; }; + template<> struct __byte_operand + { using __type = byte; }; +#endif + template + struct __byte_operand + : __byte_operand<_IntegerType> { }; + template + struct __byte_operand + : __byte_operand<_IntegerType> { }; + template + struct __byte_operand + : __byte_operand<_IntegerType> { }; + + template + using __byte_op_t = typename __byte_operand<_IntegerType>::__type; + + template + constexpr __byte_op_t<_IntegerType>& + operator<<=(byte& __b, _IntegerType __shift) noexcept + { return __b = byte(static_cast(__b) << __shift); } + + template + constexpr __byte_op_t<_IntegerType> + operator<<(byte __b, _IntegerType __shift) noexcept + { return byte(static_cast(__b) << __shift); } + + template + constexpr __byte_op_t<_IntegerType>& + operator>>=(byte& __b, _IntegerType __shift) noexcept + { return __b = byte(static_cast(__b) >> __shift); } + + template + constexpr __byte_op_t<_IntegerType> + operator>>(byte __b, _IntegerType __shift) noexcept + { return byte(static_cast(__b) >> __shift); } + + constexpr byte& + operator|=(byte& __l, byte __r) noexcept + { + return __l = + byte(static_cast(__l) | static_cast(__r)); + } + + constexpr byte + operator|(byte __l, byte __r) noexcept + { + return + byte(static_cast(__l) | static_cast(__r)); + } + + constexpr byte& + operator&=(byte& __l, byte __r) noexcept + { + return __l = + byte(static_cast(__l) & static_cast(__r)); + } + + constexpr byte + operator&(byte __l, byte __r) noexcept + { + return + byte(static_cast(__l) & static_cast(__r)); + } + + constexpr byte& + operator^=(byte& __l, byte __r) noexcept + { + return __l = + byte(static_cast(__l) ^ static_cast(__r)); + } + + constexpr byte + operator^(byte __l, byte __r) noexcept + { + return + byte(static_cast(__l) ^ static_cast(__r)); + } + + constexpr byte + operator~(byte __b) noexcept + { return byte(~static_cast(__b)); } + + template + constexpr _IntegerType + to_integer(__byte_op_t<_IntegerType> __b) noexcept + { return _IntegerType(__b); } + +} // namespace std +#endif + +#endif // _GLIBCXX_CSTDDEF diff --git a/src/AH/STL/algorithm b/src/AH/STL/algorithm index d582d617b..02a46e041 100644 --- a/src/AH/STL/algorithm +++ b/src/AH/STL/algorithm @@ -5,6 +5,8 @@ #include #ifdef __AVR__ +#include + #include "Fallback/algorithm" #else #include diff --git a/src/AH/STL/array b/src/AH/STL/array index 6ce7c762a..79c256029 100644 --- a/src/AH/STL/array +++ b/src/AH/STL/array @@ -1,6 +1,8 @@ #pragma once #ifdef __AVR__ +#include + #include "Fallback/array" #else #include diff --git a/src/AH/STL/bitset b/src/AH/STL/bitset index 6470f5ae1..bab367c7f 100644 --- a/src/AH/STL/bitset +++ b/src/AH/STL/bitset @@ -3,6 +3,8 @@ #include #ifdef __AVR__ +#include + #include "Fallback/bitset" #else #include diff --git a/src/AH/STL/climits b/src/AH/STL/climits new file mode 100644 index 000000000..2cbd638df --- /dev/null +++ b/src/AH/STL/climits @@ -0,0 +1,11 @@ +#pragma once + +#include + +#ifdef __AVR__ +#include + +#include "Fallback/climits" +#else +#include +#endif \ No newline at end of file diff --git a/src/AH/STL/cmath b/src/AH/STL/cmath index 8a66f7c66..c243d4a2d 100644 --- a/src/AH/STL/cmath +++ b/src/AH/STL/cmath @@ -5,12 +5,14 @@ #include #ifdef __AVR__ +#include + #include "Fallback/cmath" #else #include -#ifndef _GLIBCXX_USE_C99_MATH_TR1 +#if !defined(__clang__) && !defined(_GLIBCXX_USE_C99_MATH_TR1) #pragma message("FMA math fix") namespace std { constexpr double @@ -42,6 +44,18 @@ namespace std { double>::__type round(_Tp __x) { return __builtin_round(__x); } + + constexpr float + hypot(float __x, float __y) + { return __builtin_hypotf(__x, __y); } + + constexpr double + hypot(double __x, double __y) + { return __builtin_hypot(__x, __y); } + + constexpr long double + hypot(long double __x, long double __y) + { return __builtin_hypotl(__x, __y); } } #endif diff --git a/src/AH/STL/complex b/src/AH/STL/complex index 0da3aadd7..83d511ae7 100644 --- a/src/AH/STL/complex +++ b/src/AH/STL/complex @@ -5,6 +5,8 @@ #include #ifdef __AVR__ +#include + #include "Fallback/complex" #else #include @@ -14,5 +16,6 @@ template Print &operator<<(Print &os, const std::complex &x) { + USING_AH_NAMESPACE; return os << '(' << x.real() << ',' << x.imag() << ')'; } \ No newline at end of file diff --git a/src/AH/STL/cstddef b/src/AH/STL/cstddef new file mode 100644 index 000000000..7c1889e64 --- /dev/null +++ b/src/AH/STL/cstddef @@ -0,0 +1,15 @@ +#pragma once + +#ifdef __AVR__ +#include + +#include "Fallback/cstddef" +#else +#include +#endif + +#include + +BEGIN_AH_NAMESPACE + +END_AH_NAMESPACE \ No newline at end of file diff --git a/src/AH/STL/cstdint b/src/AH/STL/cstdint index 79b9f02c7..1d32a0a48 100644 --- a/src/AH/STL/cstdint +++ b/src/AH/STL/cstdint @@ -1,6 +1,8 @@ #pragma once #ifdef __AVR__ +#include + #include "Fallback/cstdint" #else #include diff --git a/src/AH/STL/cstdlib b/src/AH/STL/cstdlib index 5c5ac7319..310578497 100644 --- a/src/AH/STL/cstdlib +++ b/src/AH/STL/cstdlib @@ -1,6 +1,8 @@ #pragma once #ifdef __AVR__ +#include + #include "Fallback/cstdlib" #else #include diff --git a/src/AH/STL/initializer_list b/src/AH/STL/initializer_list index 4f1b1928c..960548b60 100644 --- a/src/AH/STL/initializer_list +++ b/src/AH/STL/initializer_list @@ -1,6 +1,8 @@ #pragma once #ifdef __AVR__ +#include + #include "Fallback/initializer_list" #else #include diff --git a/src/AH/STL/iterator b/src/AH/STL/iterator index 6fa8f9037..916d5ef2d 100644 --- a/src/AH/STL/iterator +++ b/src/AH/STL/iterator @@ -5,6 +5,8 @@ #include #ifdef __AVR__ +#include + #include "Fallback/iterator" #else #include diff --git a/src/AH/STL/limits b/src/AH/STL/limits index 2bc4acdd4..c30c8c497 100644 --- a/src/AH/STL/limits +++ b/src/AH/STL/limits @@ -1,6 +1,8 @@ #pragma once #ifdef __AVR__ +#include + #include "Fallback/limits" #else #include diff --git a/src/AH/STL/memory b/src/AH/STL/memory index ebfaa9736..ac94a8ca5 100644 --- a/src/AH/STL/memory +++ b/src/AH/STL/memory @@ -3,6 +3,8 @@ #include #ifdef __AVR__ +#include + #include "Fallback/memory" #else #include diff --git a/src/AH/STL/new b/src/AH/STL/new index 138302d01..625c16cc7 100644 --- a/src/AH/STL/new +++ b/src/AH/STL/new @@ -1,6 +1,8 @@ #pragma once #ifdef __AVR__ +#include + #include "Fallback/new" #else #include diff --git a/src/AH/STL/numeric b/src/AH/STL/numeric index ba415993f..528f5654f 100644 --- a/src/AH/STL/numeric +++ b/src/AH/STL/numeric @@ -3,6 +3,8 @@ #include #ifdef __AVR__ +#include + #include "Fallback/numeric" #else #include diff --git a/src/AH/STL/optional b/src/AH/STL/optional index 193efa805..c74ed884e 100644 --- a/src/AH/STL/optional +++ b/src/AH/STL/optional @@ -1,6 +1,8 @@ #pragma once #ifdef __AVR__ +#include + #include "Fallback/optional" #else #if defined(__cpp_lib_optional) && __cpp_lib_optional >= 201603 diff --git a/src/AH/STL/tuple b/src/AH/STL/tuple index b47f34147..9a7953c3d 100644 --- a/src/AH/STL/tuple +++ b/src/AH/STL/tuple @@ -3,6 +3,8 @@ #include #ifdef __AVR__ +#include + #include "Fallback/tuple" #else #include diff --git a/src/AH/STL/utility b/src/AH/STL/utility index 431a32ca9..d9605ae20 100644 --- a/src/AH/STL/utility +++ b/src/AH/STL/utility @@ -3,6 +3,8 @@ #include #ifdef __AVR__ +#include + #include "Fallback/utility" #else #include diff --git a/src/AH/STL/vector b/src/AH/STL/vector new file mode 100644 index 000000000..939e4000d --- /dev/null +++ b/src/AH/STL/vector @@ -0,0 +1,15 @@ +#pragma once + +#ifdef __AVR__ +#include + +#include "Fallback/vector" +#else +#include +#endif + +#include + +BEGIN_AH_NAMESPACE + +END_AH_NAMESPACE \ No newline at end of file diff --git a/src/AH/STL/vector.cpp b/src/AH/STL/vector.cpp new file mode 100644 index 000000000..6d7e39e4f --- /dev/null +++ b/src/AH/STL/vector.cpp @@ -0,0 +1,12 @@ +#if defined(TEENSYDUINO) && !defined(AVR) +#include "vector" +#include + +namespace std { +void __throw_bad_alloc() { FATAL_ERROR(F("bad_alloc"), 0x6371); } + +void __throw_length_error(char const *e) { + FATAL_ERROR(F("length_error: ") << e, 0x6372); +} +} // namespace std +#endif \ No newline at end of file diff --git a/src/AH/Settings/Settings.hpp b/src/AH/Settings/Settings.hpp index d4255ab5c..3f69a990e 100644 --- a/src/AH/Settings/Settings.hpp +++ b/src/AH/Settings/Settings.hpp @@ -19,12 +19,14 @@ BEGIN_AH_NAMESPACE // ----------------------------- Debug Settings ----------------------------- // // ========================================================================== // +#ifndef DEBUG_OUT /// The debug output. /// Use `#define DEBUG_OUT Serial` to print debugging information to the serial /// monitor. /// @note Printing debug information can slow down the program dramatically. #define DEBUG_OUT // #define DEBUG_OUT Serial +#endif /// Exit when encountering an error, instead of trying to recover (recommended). #define FATAL_ERRORS @@ -84,10 +86,6 @@ constexpr unsigned long FILTERED_INPUT_UPDATE_INTERVAL = 1000; // microseconds constexpr static Frequency SPI_MAX_SPEED = 8_MHz; -/// Make it possible to invert individual push buttons. -/// Enabling this will increase memory usage. -#define AH_INDIVIDUAL_BUTTON_INVERT - // ========================================================================== // END_AH_NAMESPACE \ No newline at end of file diff --git a/src/AH/Settings/SettingsWrapper.hpp b/src/AH/Settings/SettingsWrapper.hpp index 5b1dac58e..1b9dfcfc5 100644 --- a/src/AH/Settings/SettingsWrapper.hpp +++ b/src/AH/Settings/SettingsWrapper.hpp @@ -25,12 +25,6 @@ AH_DIAGNOSTIC_WERROR() // Enable errors on warnings #endif #endif -#ifdef AH_INDIVIDUAL_BUTTON_INVERT -#define AH_INDIVIDUAL_BUTTON_INVERT_STATIC -#else -#define AH_INDIVIDUAL_BUTTON_INVERT_STATIC static -#endif - #ifdef TEENSYDUINO #include #if defined(DEBUG_OUT) && (DEBUG_OUT == Serial) && \ diff --git a/src/AH/Settings/Warnings.hpp b/src/AH/Settings/Warnings.hpp index 713b0354f..eaa4eea90 100644 --- a/src/AH/Settings/Warnings.hpp +++ b/src/AH/Settings/Warnings.hpp @@ -2,14 +2,33 @@ #if defined(__GNUC__) && !defined(__clang__) +#if __GNUC__ >= 5 + #define AH_DIAGNOSTIC_WERROR() \ _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic error \"-Wall\"") \ _Pragma("GCC diagnostic error \"-Wextra\"") \ _Pragma("GCC diagnostic ignored \"-Wc++0x-compat\"") #define AH_DIAGNOSTIC_POP() _Pragma("GCC diagnostic pop") #define AH_DIAGNOSTIC_EXTERNAL_HEADER() \ - _Pragma("GCC diagnostic ignored \"-Wsuggest-override\"") \ - _Pragma("GCC diagnostic ignored \"-Wunused-parameter\"") + _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic ignored \"-Wall\"") \ + _Pragma("GCC diagnostic ignored \"-Wextra\"") \ + _Pragma("GCC diagnostic ignored \"-Wsuggest-override\"") \ + _Pragma("GCC diagnostic ignored \"-Wunused-parameter\"") + +#else // __GNUC__ < 5 + +#define AH_DIAGNOSTIC_WERROR() \ + _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic error \"-Wall\"") \ + _Pragma("GCC diagnostic error \"-Wextra\"") \ + _Pragma("GCC diagnostic ignored \"-Wc++0x-compat\"") \ + _Pragma("GCC diagnostic ignored \"-Wattributes\"") +#define AH_DIAGNOSTIC_POP() _Pragma("GCC diagnostic pop") +#define AH_DIAGNOSTIC_EXTERNAL_HEADER() \ + _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic ignored \"-Wall\"") \ + _Pragma("GCC diagnostic ignored \"-Wextra\"") \ + _Pragma("GCC diagnostic ignored \"-Wunused-parameter\"") + +#endif #else diff --git a/src/AH/Timing/MillisMicrosTimer.hpp b/src/AH/Timing/MillisMicrosTimer.hpp index 39a118886..0609bdada 100644 --- a/src/AH/Timing/MillisMicrosTimer.hpp +++ b/src/AH/Timing/MillisMicrosTimer.hpp @@ -11,18 +11,18 @@ AH_DIAGNOSTIC_POP() BEGIN_AH_NAMESPACE -/// A function type that returns a time value. -using timefunction = unsigned long (*)(); - /// @addtogroup AH_Timing /// @{ +/// A function type that returns a time value. +using timefunction = unsigned long (*)(); + /** * @brief A class for easily managing timed events. A wrapper for "Blink * Without Delay". * - * @tparam time - * The time function to use. + * @tparam time + * The time function to use. */ template class Timer { @@ -37,8 +37,10 @@ class Timer { begin(); #endif } - /// Initialize the timer. + /// Initialize or reset the timer. The timer will fire immediately. void begin() { previous = time() - interval; } + /// Initialize or reset the timer. The timer will fire after one period. + void beginNextPeriod() { previous = time(); } /// Update the timer and return true if the event should fire. explicit operator bool() { auto now = time(); diff --git a/src/AH/Types/Frequency.hpp b/src/AH/Types/Frequency.hpp index f69091149..beff4e00f 100644 --- a/src/AH/Types/Frequency.hpp +++ b/src/AH/Types/Frequency.hpp @@ -20,13 +20,13 @@ constexpr Frequency operator"" _Hz(unsigned long long hz) { return Frequency{(unsigned long)hz}; } constexpr Frequency operator"" _kHz(long double khz) { - return Frequency{(unsigned long)(khz * 1E3)}; + return Frequency{(unsigned long)(khz * 1E3l)}; } constexpr Frequency operator"" _kHz(unsigned long long khz) { return Frequency{(unsigned long)(khz * 1E3)}; } constexpr Frequency operator"" _MHz(long double mhz) { - return Frequency{(unsigned long)(mhz * 1E6)}; + return Frequency{(unsigned long)(mhz * 1E6l)}; } constexpr Frequency operator"" _MHz(unsigned long long mhz) { return Frequency{(unsigned long)(mhz * 1E6)}; diff --git a/src/AH/Types/FunctionTraits.hpp b/src/AH/Types/FunctionTraits.hpp new file mode 100644 index 000000000..6ffbcdfe3 --- /dev/null +++ b/src/AH/Types/FunctionTraits.hpp @@ -0,0 +1,33 @@ +#pragma once + +#include +#include + +#include +AH_DIAGNOSTIC_WERROR() // Enable errors on warnings + +#include + +BEGIN_AH_NAMESPACE + +template +struct function_traits; + +template +struct function_traits { + static constexpr size_t number_arguments = sizeof...(Args); + + using return_t = Return; + template + struct argument { + using type = + typename std::tuple_element>::type; + }; + + template + using argument_t = typename argument::type; +}; + +END_AH_NAMESPACE + +AH_DIAGNOSTIC_POP() diff --git a/src/Arduino_Helpers.h b/src/Arduino_Helpers.h old mode 100755 new mode 100644 index 945679f51..802f39a6f --- a/src/Arduino_Helpers.h +++ b/src/Arduino_Helpers.h @@ -1,3 +1,4 @@ + /** * @file * @brief Dummy header file for Arduino builder. diff --git a/src/Filters.h b/src/Filters.h new file mode 100644 index 000000000..68c36f16f --- /dev/null +++ b/src/Filters.h @@ -0,0 +1,22 @@ + +/** + * @file + * @brief Dummy header file for Arduino builder. + * You have to add this file first, so the other headers are in the + * include path. + * + * @author Pieter Pas + * @date 2019-11-07 + */ + +#pragma once + +#include // For VSCode errors in examples +#include + +BEGIN_AH_NAMESPACE +END_AH_NAMESPACE + +#ifndef NO_USING_NAMESPACE_AH +USING_AH_NAMESPACE; +#endif \ No newline at end of file diff --git a/src/Filters/BiQuad.hpp b/src/Filters/BiQuad.hpp new file mode 100644 index 000000000..8d31d1aaf --- /dev/null +++ b/src/Filters/BiQuad.hpp @@ -0,0 +1,550 @@ +#pragma once + +#include +#include +#include + +/// @addtogroup Filters +/// @{ + +/// BiQuadratic transfer function coefficients. +template +using BiQuadCoefficients = TransferFunction<3, 3, T>; + +/// @} + +/// @addtogroup FilterImplementations +/// @{ + +// Direct Form 1 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + +/** + * @brief BiQuad filter Direct Form 1 implementation that normalizes the + * coefficients upon initialization. + * + * This class is faster than @ref NonNormalizingBiQuadFilterDF1, because each + * filter iteration involves only addition and multiplication, no divisions. + * It works great for floating point numbers, but might be less ideal + * for integer types, because it can create large rounding errors on the + * coefficients. + * + * Implements the following difference equation: + * + * @f[ + * y[n] = \frac{b_0 \cdot x[n] + b_1 \cdot x[n-1] + b_2 \cdot x[n-2] + * - a_1 \cdot y[n-1] - a_2 \cdot y[n-2]}{a_0} + * @f] + */ +template +class NormalizingBiQuadFilterDF1 { + public: + NormalizingBiQuadFilterDF1() = default; + + NormalizingBiQuadFilterDF1(const AH::Array &b, + const AH::Array &a) + : b(b / a[0]), a(-a.template slice<1, 2>() / a[0]) {} + + NormalizingBiQuadFilterDF1(const BiQuadCoefficients &coefficients) + : NormalizingBiQuadFilterDF1{coefficients.b, coefficients.a} {} + + NormalizingBiQuadFilterDF1(const AH::Array &b, + const AH::Array &a, T gain) + : b(b * gain / a[0]), a(-a.template slice<1, 2>() / a[0]) {} + + NormalizingBiQuadFilterDF1(const BiQuadCoefficients &coefficients, + T gain) + : NormalizingBiQuadFilterDF1{coefficients.b, coefficients.a, gain} {} + + template + static std::enable_if_t::value && Enable, T> + update(T input, AH::Array &x, AH::Array &y, + const AH::Array &b, const AH::Array &a) { + T acc = input * b[0]; + acc = std::fma(x[0], b[1], acc); + acc = std::fma(x[1], b[2], acc); + acc = std::fma(y[0], a[0], acc); + acc = std::fma(y[1], a[1], acc); + x[1] = x[0]; + x[0] = input; + y[1] = y[0]; + y[0] = acc; + return y[0]; + } + + template + static std::enable_if_t::value && Enable, T> + update(T input, AH::Array &x, AH::Array &y, + const AH::Array &b, const AH::Array &a) { + T acc = input * b[0]; + acc = x[0] * b[1] + acc; + acc = x[1] * b[2] + acc; + acc = y[0] * a[0] + acc; + acc = y[1] * a[1] + acc; + x[1] = x[0]; + x[0] = input; + y[1] = y[0]; + y[0] = acc; + return y[0]; + } + + /** + * @brief Update the internal state with the new input @f$ x[n] @f$ and + * return the new output @f$ y[n] @f$. + * + * @param input + * The new input @f$ x[n] @f$. + * @return The new output @f$ y[n] @f$. + */ + T operator()(T input) { return update(input, x, y, b, a); } + + private: + AH::Array x = {{}}; ///< Previous inputs + AH::Array y = {{}}; ///< Previous outputs + AH::Array b = {{}}; ///< Numerator coefficients + AH::Array a = {{}}; ///< Denominator coefficients +}; + +/** + * @brief BiQuad filter Direct Form 1 implementation that does not + * normalize the coefficients upon initialization, the division by + * @f$ a_0 @f$ is carried out on each filter iteration. + * + * This class is slower than @ref NormalizingBiQuadFilterDF1, but it works + * better for integer types, because it has no rounding error on the + * coefficients. + * + * Implements the following difference equation: + * + * @f[ + * y[n] = \frac{b_0 \cdot x[n] + b_1 \cdot x[n-1] + b_2 \cdot x[n-2] + * - a_1 \cdot y[n-1] - a_2 \cdot y[n-2]}{a_0} + * @f] + */ +template +class NonNormalizingBiQuadFilterDF1 { + public: + NonNormalizingBiQuadFilterDF1() = default; + + NonNormalizingBiQuadFilterDF1(const AH::Array &b, + const AH::Array &a) + : b(b), a(-a.template slice<1, 2>()), a0(a[0]) {} + + NonNormalizingBiQuadFilterDF1(const BiQuadCoefficients &coefficients) + : NonNormalizingBiQuadFilterDF1{coefficients.b, coefficients.a} {} + + NonNormalizingBiQuadFilterDF1(const AH::Array &b, + const AH::Array &a, T gain) + : b(b * gain), a(-a.template slice<1, 2>()), a0(a[0]) {} + + NonNormalizingBiQuadFilterDF1(const BiQuadCoefficients &coefficients, + T gain) + : NonNormalizingBiQuadFilterDF1{coefficients.b, coefficients.a, gain} {} + + template + static std::enable_if_t::value && Enable, T> + update(T input, AH::Array &x, AH::Array &y, + const AH::Array &b, const AH::Array &a, T a0) { + T acc = input * b[0]; + acc = std::fma(x[0], b[1], acc); + acc = std::fma(x[1], b[2], acc); + acc = std::fma(y[0], a[0], acc); + acc = std::fma(y[1], a[1], acc); + x[1] = x[0]; + x[0] = input; + y[1] = y[0]; + y[0] = acc / a0; + return y[0]; + } + + template + static std::enable_if_t::value && Enable, T> + update(T input, AH::Array &x, AH::Array &y, + const AH::Array &b, const AH::Array &a, T a0) { + T acc = input * b[0]; + acc = x[0] * b[1] + acc; + acc = x[1] * b[2] + acc; + acc = y[0] * a[0] + acc; + acc = y[1] * a[1] + acc; + x[1] = x[0]; + x[0] = input; + y[1] = y[0]; + y[0] = acc / a0; + return y[0]; + } + + /** + * @brief Update the internal state with the new input @f$ x[n] @f$ and + * return the new output @f$ y[n] @f$. + * + * @param input + * The new input @f$ x[n] @f$. + * @return The new output @f$ y[n] @f$. + */ + T operator()(T input) { return update(input, x, y, b, a, a0); } + + private: + AH::Array x = {{}}; ///< Previous inputs + AH::Array y = {{}}; ///< Previous outputs + AH::Array b = {{}}; ///< Numerator coefficients + AH::Array a = {{}}; ///< Denominator coefficients + T a0 = T(1.); ///< First denominator coefficient +}; + +/// @} + +/// Select the @ref NormalizingIIRFilter implementation if @p T is a floating +/// point type, @ref NonNormalizingIIRFilter otherwise. +template +using BiQuadDF1Implementation = + typename std::conditional::value, + NormalizingBiQuadFilterDF1, + NonNormalizingBiQuadFilterDF1>::type; + +/// @addtogroup Filters +/// @{ + +/** + * @brief Generic BiQuad (Bi-Quadratic) filter class, Direct Form 1 + * implementation. + * + * Uses the @ref NormalizingBiQuadFilterDF1 implementation for floating point + * types, and @ref NonNormalizingBiQuadFilterDF1 for all other types. + * + * Implements the following difference equation: + * + * @f[ + * y[n] = \frac{b_0 \cdot x[n] + b_1 \cdot x[n-1] + b_2 \cdot x[n-2] + * - a_1 \cdot y[n-1] - a_2 \cdot y[n-2]}{a_0} + * @f] + */ +template +class BiQuadFilterDF1 : public BiQuadDF1Implementation { + public: + BiQuadFilterDF1() = default; + + /** + * @brief Construct a new BiQuad (Bi-Quadratic) Filter object. + * + * The coefficients @f$ b @f$ and @f$ a @f$ can be derived from the transfer + * function: + * + * @f[ + * H(z) = \frac{b_0 + b_1 z^{-1} + b_2 z ^{-2}} + * {a_0 + a_1 z^{-1} + a_2 z ^{-2}} + * @f] + * + * @param b_coefficients + * The coefficients of the transfer function numerator. + * @param a_coefficients + * The coefficients of the transfer function denominator. + */ + BiQuadFilterDF1(const AH::Array &b_coefficients, + const AH::Array &a_coefficients) + : BiQuadDF1Implementation{b_coefficients, a_coefficients} {} + + BiQuadFilterDF1(const BiQuadCoefficients &coefficients) + : BiQuadDF1Implementation{coefficients} {} + + /** + * @brief Construct a new BiQuad (Bi-Quadratic) Filter object. + * + * The coefficients @f$ b @f$ and @f$ a @f$ can be derived from the transfer + * function: + * + * @f[ + * H(z) = K \frac{b_0 + b_1 z^{-1} + b_2 z ^{-2}} + * {a_0 + a_1 z^{-1} + a_2 z ^{-2}} + * @f] + * + * @param b_coefficients + * The coefficients of the transfer function numerator. + * @param a_coefficients + * The coefficients of the transfer function denominator. + * @param gain + * Gain factor @f$ K @f$. + */ + BiQuadFilterDF1(const AH::Array &b_coefficients, + const AH::Array &a_coefficients, T gain) + : BiQuadDF1Implementation{b_coefficients, a_coefficients, gain} {} + + BiQuadFilterDF1(const BiQuadCoefficients &coefficients, T gain) + : BiQuadDF1Implementation{coefficients, gain} {} + + /** + * @brief Update the internal state with the new input @f$ x[n] @f$ and + * return the new output @f$ y[n] @f$. + * + * @param input + * The new input @f$ x[n] @f$. + * @return The new output @f$ y[n] @f$. + */ + T operator()(T input) { + return BiQuadDF1Implementation::operator()(input); + } +}; + +/// @} + +// Direct Form 2 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + +/// @addtogroup FilterImplementations +/// @{ + +/** + * @brief BiQuad filter Direct Form 2 implementation that normalizes the + * coefficients upon initialization. + * + * This class is faster than @ref NonNormalizingBiQuadFilterDF2, because each + * filter iteration involves only addition and multiplication, no divisions. + * It works great for floating point numbers, but might be less ideal + * for integer types, because it can create large rounding errors on the + * coefficients. + * + * Implements the following difference equation: + * + * @f[ + * y[n] = \frac{b_0 \cdot x[n] + b_1 \cdot x[n-1] + b_2 \cdot x[n-2] + * - a_1 \cdot y[n-1] - a_2 \cdot y[n-2]}{a_0} + * @f] + */ +template +class NormalizingBiQuadFilterDF2 { + public: + NormalizingBiQuadFilterDF2() = default; + + NormalizingBiQuadFilterDF2(const AH::Array &b, + const AH::Array &a) + : b(b / a[0]), a(-a.template slice<1, 2>() / a[0]) {} + + NormalizingBiQuadFilterDF2(const BiQuadCoefficients &coefficients) + : NormalizingBiQuadFilterDF2{coefficients.b, coefficients.a} {} + + NormalizingBiQuadFilterDF2(const AH::Array &b, + const AH::Array &a, T gain) + : b(b * gain / a[0]), a(-a.template slice<1, 2>() / a[0]) {} + + NormalizingBiQuadFilterDF2(const BiQuadCoefficients &coefficients, + T gain) + : NormalizingBiQuadFilterDF2{coefficients.b, coefficients.a, gain} {} + + template + static std::enable_if_t::value && Enable, T> + update(T input, AH::Array &w, const AH::Array &b, + const AH::Array &a) { + input = std::fma(a[0], w[0], input); + input = std::fma(a[1], w[1], input); + T result = b[0] * input; + result = std::fma(b[1], w[0], result); + result = std::fma(b[2], w[1], result); + w[1] = w[0]; + w[0] = input; + return result; + } + + template + static std::enable_if_t::value && Enable, T> + update(T input, AH::Array &w, const AH::Array &b, + const AH::Array &a) { + input += a[0] * w[0]; + input += a[1] * w[1]; + T result = b[0] * input; + result += b[1] * w[0]; + result += b[2] * w[1]; + w[1] = w[0]; + w[0] = input; + return result; + } + + /** + * @brief Update the internal state with the new input @f$ x[n] @f$ and + * return the new output @f$ y[n] @f$. + * + * @param input + * The new input @f$ x[n] @f$. + * @return The new output @f$ y[n] @f$. + */ + T operator()(T input) { return update(input, w, b, a); } + + private: + AH::Array w = {{}}; ///< Internal state + AH::Array b = {{}}; ///< Numerator coefficients + AH::Array a = {{}}; ///< Denominator coefficients +}; + +/** + * @brief BiQuad filter Direct Form 2 implementation that does not + * normalize the coefficients upon initialization, the division by + * @f$ a_0 @f$ is carried out on each filter iteration. + * + * This class is slower than @ref NormalizingBiQuadFilterDF2, but it works + * better for integer types, because it has no rounding error on the + * coefficients. + * + * Implements the following difference equation: + * + * @f[ + * y[n] = \frac{b_0 \cdot x[n] + b_1 \cdot x[n-1] + b_2 \cdot x[n-2] + * - a_1 \cdot y[n-1] - a_2 \cdot y[n-2]}{a_0} + * @f] + */ +template +class NonNormalizingBiQuadFilterDF2 { + public: + NonNormalizingBiQuadFilterDF2() = default; + + NonNormalizingBiQuadFilterDF2(const AH::Array &b, + const AH::Array &a) + : b(b), a(-a.template slice<1, 2>()), a0(a[0]) {} + + NonNormalizingBiQuadFilterDF2(const BiQuadCoefficients &coefficients) + : NonNormalizingBiQuadFilterDF2{coefficients.b, coefficients.a} {} + + NonNormalizingBiQuadFilterDF2(const AH::Array &b, + const AH::Array &a, T gain) + : b(b * gain), a(-a.template slice<1, 2>()), a0(a[0]) {} + + NonNormalizingBiQuadFilterDF2(const BiQuadCoefficients &coefficients, + T gain) + : NonNormalizingBiQuadFilterDF2{coefficients.b, coefficients.a, gain} {} + + template + static std::enable_if_t::value && Enable, T> + update(T input, AH::Array &w, const AH::Array &b, + const AH::Array &a, T a0) { + input = std::fma(a[0], w[0], input); + input = std::fma(a[1], w[1], input); + input /= a0; + T result = b[0] * input; + result = std::fma(b[1], w[0], result); + result = std::fma(b[2], w[1], result); + w[1] = w[0]; + w[0] = input; + return result; + } + + template + static std::enable_if_t::value && Enable, T> + update(T input, AH::Array &w, const AH::Array &b, + const AH::Array &a, T a0) { + input += a[0] * w[0]; + input += a[1] * w[1]; + input /= a0; + T result = b[0] * input; + result += b[1] * w[0]; + result += b[2] * w[1]; + w[1] = w[0]; + w[0] = input; + return result; + } + + /** + * @brief Update the internal state with the new input @f$ x[n] @f$ and + * return the new output @f$ y[n] @f$. + * + * @param input + * The new input @f$ x[n] @f$. + * @return The new output @f$ y[n] @f$. + */ + T operator()(T input) { return update(input, w, b, a, a0); } + + private: + AH::Array w = {{}}; ///< Internal state + AH::Array b = {{}}; ///< Numerator coefficients + AH::Array a = {{}}; ///< Denominator coefficients + T a0 = T(1.); ///< First denominator coefficient +}; + +/// @} + +/// Select the @ref NormalizingIIRFilter implementation if @p T is a floating +/// point type, @ref NonNormalizingIIRFilter otherwise. +template +using BiQuadDF2Implementation = + typename std::conditional::value, + NormalizingBiQuadFilterDF2, + NonNormalizingBiQuadFilterDF2>::type; + +/// @addtogroup Filters +/// @{ + +/** + * @brief Generic BiQuad (Bi-Quadratic) filter class, Direct Form 2 + * implementation. + * + * Uses the @ref NormalizingBiQuadFilterDF2 implementation for floating point + * types, and @ref NonNormalizingBiQuadFilterDF2 for all other types. + * + * Implements the following difference equation: + * + * @f[ + * y[n] = \frac{b_0 \cdot x[n] + b_1 \cdot x[n-1] + b_2 \cdot x[n-2] + * - a_1 \cdot y[n-1] - a_2 \cdot y[n-2]}{a_0} + * @f] + */ +template +class BiQuadFilterDF2 : public BiQuadDF2Implementation { + public: + BiQuadFilterDF2() = default; + + /** + * @brief Construct a new BiQuad (Bi-Quadratic) Filter object. + * + * The coefficients @f$ b @f$ and @f$ a @f$ can be derived from the transfer + * function: + * + * @f[ + * H(z) = \frac{b_0 + b_1 z^{-1} + b_2 z ^{-2}} + * {a_0 + a_1 z^{-1} + a_2 z ^{-2}} + * @f] + * + * @param b_coefficients + * The coefficients of the transfer function numerator. + * @param a_coefficients + * The coefficients of the transfer function denominator. + */ + BiQuadFilterDF2(const AH::Array &b_coefficients, + const AH::Array &a_coefficients) + : BiQuadDF2Implementation{b_coefficients, a_coefficients} {} + + BiQuadFilterDF2(const BiQuadCoefficients &coefficients) + : BiQuadDF2Implementation{coefficients} {} + + /** + * @brief Construct a new BiQuad (Bi-Quadratic) Filter object. + * + * The coefficients @f$ b @f$ and @f$ a @f$ can be derived from the transfer + * function: + * + * @f[ + * H(z) = K \frac{b_0 + b_1 z^{-1} + b_2 z ^{-2}} + * {a_0 + a_1 z^{-1} + a_2 z ^{-2}} + * @f] + * + * @param b_coefficients + * The coefficients of the transfer function numerator. + * @param a_coefficients + * The coefficients of the transfer function denominator. + * @param gain + * Gain factor @f$ K @f$. + */ + BiQuadFilterDF2(const AH::Array &b_coefficients, + const AH::Array &a_coefficients, T gain) + : BiQuadDF2Implementation{b_coefficients, a_coefficients, gain} {} + + BiQuadFilterDF2(const BiQuadCoefficients &coefficients, T gain) + : BiQuadDF2Implementation{coefficients, gain} {} + + /** + * @brief Update the internal state with the new input @f$ x[n] @f$ and + * return the new output @f$ y[n] @f$. + * + * @param input + * The new input @f$ x[n] @f$. + * @return The new output @f$ y[n] @f$. + */ + T operator()(T input) { + return BiQuadDF2Implementation::operator()(input); + } +}; + +/// @} \ No newline at end of file diff --git a/src/Filters/Butterworth.hpp b/src/Filters/Butterworth.hpp new file mode 100644 index 000000000..fa7c8e3a9 --- /dev/null +++ b/src/Filters/Butterworth.hpp @@ -0,0 +1,114 @@ +#pragma once + +#include +#include + +/// @addtogroup FilterDesign +/// @{ + +/** + * @brief Compute Butterworth filter coefficients. + * @tparam N + * Order of the filter. + * @param f_n + * Normalized cut-off frequency in half-cycles per sample. + * @f$ f_n = \frac{2 f_c}{f_s} \in \left[0, 1\right] @f$, where + * @f$ f_s @f$ is the sample frequency in @f$ \text{Hz} @f$, and + * @f$ f_c @f$ is the cut-off frequency in @f$ \text{Hz} @f$. + * @param normalize + * If true, normalize all coefficients such that @f$ a_0 = 1 @f$. + * @tparam T + * The type of the coefficients. + * + * @see + */ +template +SOSCoefficients butter_coeff(double f_n, + bool normalize = true) { + const double gamma = 1 / std::tan(M_PI * f_n / 2); // pre-warp factor + + auto make_sos = [=](uint8_t k) { + const double gamma2 = gamma * gamma; + const double alpha = 2 * std::cos(2 * M_PI * (2 * k + N + 1) / (4 * N)); + return BiQuadCoefficients{ + {{T(1.), T(2.), T(1.)}}, // b0, b1, b2 + {{ + T(gamma2 - alpha * gamma + 1), // a0 + T(2 * (1 - gamma2)), // a1 + T(gamma2 + alpha * gamma + 1), // a2 + }}, + }; + }; + auto make_fos = [=]() { + return BiQuadCoefficients{ + {{T(1.), T(1.)}}, // b0, b1 + {{ + T(gamma + 1), // a0 + T(1 - gamma), // a1 + }}, + }; + }; + + auto make_sos_norm = [=](uint8_t k) { + const double gamma2 = gamma * gamma; + const double alpha = 2 * std::cos(2 * M_PI * (2 * k + N + 1) / (4 * N)); + const double a0 = gamma2 - alpha * gamma + 1; + return BiQuadCoefficients{ + {{T(1. / a0), T(2. / a0), T(1. / a0)}}, // b0, b1, b2 + {{ + T(1.), // a0 + T(2 * (1 - gamma2) / a0), // a1 + T((gamma2 + alpha * gamma + 1) / a0), // a2 + }}, + }; + }; + auto make_fos_norm = [=]() { + const double a0 = gamma + 1; + return BiQuadCoefficients{ + {{T(1. / a0), T(1. / a0)}}, // b0, b1 + {{ + T(1.), // a0 + T((1 - gamma) / a0), // a1 + }}, + }; + }; + + SOSCoefficients sections; + + if (N % 2 == 0) { + for (uint8_t i = 0; i < sections.length; ++i) + sections[i] = normalize ? make_sos_norm(i) : make_sos(i); + } else { + for (uint8_t i = 0; i < sections.length - 1; ++i) + sections[i] = normalize ? make_sos_norm(i) : make_sos(i); + sections.end()[-1] = normalize ? make_fos_norm() : make_fos(); + } + return sections; +} + +/** + * @brief Create a Butterworth filter, implemented as Second Order Sections + * (SOS) filter. + * @tparam N + * Order of the filter. + * @param f_n + * Normalized cut-off frequency in half-cycles per sample. + * @f$ f_n = \frac{2 f_c}{f_s} \in \left[0, 1\right] @f$, where + * @f$ f_s @f$ is the sample frequency in @f$ \text{Hz} @f$, and + * @f$ f_c @f$ is the cut-off frequency in @f$ \text{Hz} @f$. + * @tparam T + * The type of filter values and coefficients. + * @param normalize + * If true, normalize all coefficients such that @f$ a_0 = 1 @f$. + * @tparam Implementation + * The BiQuad implementation to use. + * + * @see + */ +template > +SOSFilter butter(double f_n, + bool normalize = true) { + return butter_coeff(f_n, normalize); +} + +/// @} \ No newline at end of file diff --git a/src/Filters/FIRFilter.hpp b/src/Filters/FIRFilter.hpp new file mode 100644 index 000000000..0e3de84ff --- /dev/null +++ b/src/Filters/FIRFilter.hpp @@ -0,0 +1,71 @@ +#pragma once + +#include + +/// @addtogroup Filters +/// @{ + +/** + * @brief Finite Impulse Response filter implementation. + * + * Implements the following difference equation: + * + * @f[ + * y[n] = \sum_{i=0}^{N-1} b_i \cdot x[n-i] + * @f] + */ +template +class FIRFilter { + public: + /** + * @brief Construct a new FIR Filter object. + * + * The coefficients @f$ b @f$ can be derived from the transfer function: + * + * @f[ + * H(z) = b_0 + b_1 z^{-1} + \ldots + b_{N_b} z ^{-N_b} + * @f] + * + * @param coefficients + * The coefficients of the transfer function numerator. + */ + FIRFilter(const AH::Array &coefficients) { + for (uint8_t i = 0; i < 2 * N - 1; ++i) + this->coefficients[i] = coefficients[(2 * N - 1 - i) % N]; + } + + /** + * @brief Update the internal state with the new input @f$ x[n] @f$ and + * return the new output @f$ y[n] @f$. + * + * @param input + * The new input @f$ x[n] @f$. + * @return The new output @f$ y[n] @f$. + */ + T operator()(T input) { + // Save the new value to the ring buffer. + x[index_b] = input; + + // Calculate the offset to the shifted coefficients. + T *coeff_shift = coefficients.end() - N - index_b; + + // Multiply and accumulate the inputs and their respective coefficients. + T acc = {}; + for (uint8_t i = 0; i < N; i++) + acc += x[i] * coeff_shift[i]; + + // Increment and wrap around the index of the ring buffer. + index_b++; + if (index_b == N) + index_b = 0; + + return acc; + } + + private: + uint8_t index_b = 0; + AH::Array x = {}; + AH::Array coefficients; +}; + +/// @} diff --git a/src/Filters/Filters.dox b/src/Filters/Filters.dox new file mode 100644 index 000000000..059e52f67 --- /dev/null +++ b/src/Filters/Filters.dox @@ -0,0 +1,16 @@ +/** + * @defgroup Filters Arduino Filters + * @brief Main module containing all filters and filter utilities. + */ + +/** + * @defgroup FilterImplementations Filter Implementations + * @brief Different implementations. + * @ingroup Filters + */ + +/** + * @defgroup FilterDesign Filter Design + * @brief Filter design tools. + * @ingroup Filters + */ diff --git a/src/Filters/FixedPoint.hpp b/src/Filters/FixedPoint.hpp new file mode 100644 index 000000000..508f0d799 --- /dev/null +++ b/src/Filters/FixedPoint.hpp @@ -0,0 +1,174 @@ +#pragma once + +#include +#include +#include +#include + +#include + +template +struct DoubleWidthInt { + using type = void; +}; + +template <> +struct DoubleWidthInt { + using type = uint16_t; +}; + +template <> +struct DoubleWidthInt { + using type = int16_t; +}; + +template <> +struct DoubleWidthInt { + using type = uint32_t; +}; + +template <> +struct DoubleWidthInt { + using type = int32_t; +}; + +template <> +struct DoubleWidthInt { + using type = uint64_t; +}; + +template <> +struct DoubleWidthInt { + using type = int64_t; +}; + +/// @addtogroup FixedPoint +/// @{ + +/// Get the integer type that has twice the number of bits as the given type. +template +using DoubleWidthInt_t = typename DoubleWidthInt::type; + +/** + * @brief Very basic fixed-point integer implementation. + * + * @tparam T + * The integer type to use. + * @tparam N + * The number of fractional bits. + * @tparam T2 + * The integer type to use for intermediate values when mutliplying or + * dividing. + */ +template > +class FixedPoint { + public: + /// Fixed-point representation of the number one. + constexpr static T one = 1 << N; + + /// Default constructor + FixedPoint() : val(0) {} + + /// Initialize U from a numeric value. + template + FixedPoint(U f) : val(std::llrint(f * one)) {} + + /// Convert a raw integer representation to fixed point type. + static constexpr FixedPoint raw(T t) { + FixedPoint res; + res.val = t; + return res; + } + + /// Addition. + FixedPoint operator+(FixedPoint rhs) const { + // if (rhs.val > 0 && + // this->val > std::numeric_limits::max() - rhs.val) { + // ERROR("Integer overflow", 0x0FF0); + // return raw(std::numeric_limits::max()); + // } + // if (rhs.val < 0 && + // this->val < std::numeric_limits::min() - rhs.val) { + // ERROR("Integer underflow", 0x0FF1); + // return raw(std::numeric_limits::min()); + // } + return raw(static_cast( + static_cast::type>(this->val) + + static_cast::type>(rhs.val))); + } + + /// Subtraction. + FixedPoint operator-(FixedPoint rhs) const { + // return raw(this->val - rhs.val); + return *this + -rhs; + } + + /// Invert. + FixedPoint operator-() const { return raw(-this->val); } + + /// Multiplication. + FixedPoint operator*(FixedPoint rhs) const { + return raw(div_N(T2(this->val) * T2(rhs.val))); + } + + /// Multiplication with normal integer. + T2 operator*(T2 rhs) const { return div_N(T2(this->val) * T2(rhs)); } + + /// Division. + FixedPoint operator/(FixedPoint rhs) const { + if (rhs.val == one) + return raw(this->val); + return raw(T2(this->val) * one / rhs.val); + } + + /// Divide the given integer by @f$ 2^N @f$. + static T div_N(T2 val) { + static_assert(std::is_unsigned::value || (-97 * 2) >> 1 == -97, + "Negative signed right shift incorrect"); + int neg = val < 0 ? 1 : 0; + return (val + (1 << (N - 1)) - neg) >> N; + } + + explicit operator long double() const { return (long double)val / one; } + explicit operator double() const { return (double)val / one; } + explicit operator float() const { return (float)val / one; } + + private: + T val; +}; + +/// Multiply normal integer with fixed point integer. +template +T2 operator*(T lhs, FixedPoint rhs) { + return rhs * lhs; +} + +/// Multiply normal integer with fixed point integer. +template +T2 operator*(T2 lhs, FixedPoint rhs) { + return rhs * lhs; +} + +#ifndef ARDUINO + +#include + +/// Printing a fixed-point integer. +template +std::ostream &operator<<(std::ostream &os, FixedPoint fp) { + return os << double(fp); +} + +#else + +#include + +/// Printing a fixed-point integer. +template +Print &operator<<(Print &os, FixedPoint fp) { + return os << double(fp); +} + +#endif + +/// @} \ No newline at end of file diff --git a/src/Filters/IIRFilter.hpp b/src/Filters/IIRFilter.hpp new file mode 100644 index 000000000..b63b2dfc6 --- /dev/null +++ b/src/Filters/IIRFilter.hpp @@ -0,0 +1,287 @@ +#pragma once + +#include +#include +#include + +/// @addtogroup FilterImplementations +/// @{ + +/** + * @brief Infinite Impulse Response filter implementation that does not + * normalize the coefficients upon initialization, the division by + * @f$ a_0 @f$ is carried out on each filter iteration. + * + * This class is slower than @ref NormalizingIIRFilter, but it works better + * for integer types, because it has no rounding error on the coefficients. + * + * Implements the following difference equation using the Direct-Form 1 + * implementation: + * + * @f[ + * y[n] = \frac{1}{a_0} \left(\sum_{i=0}^{N_b-1} b_i \cdot x[n-i] + * - \sum_{i=1}^{N_a-1} a_i \cdot y[n-i] \right) + * @f] + */ +template +class NonNormalizingIIRFilter { + public: + /** + * @brief Construct a new Non-Normalizing IIR Filter object. + * + * The coefficients @f$ b @f$ and @f$ a @f$ can be derived from the transfer + * function: + * + * @f[ + * H(z) = \frac{b_0 + b_1 z^{-1} + \ldots + b_{N_b} z ^{-N_b}} + * {a_0 + a_1 z^{-1} + \ldots + a_{N_b} z ^{-N_a}} + * @f] + * + * @param b_coefficients + * The coefficients of the transfer function numerator. + * @param a_coefficients + * The coefficients of the transfer function denominator. + */ + NonNormalizingIIRFilter(const AH::Array &b_coefficients, + const AH::Array &a_coefficients) + : a0(a_coefficients[0]) { + for (uint8_t i = 0; i < 2 * NB - 1; ++i) + this->b_coefficients[i] = b_coefficients[(2 * NB - 1 - i) % NB]; + for (uint8_t i = 0; i < 2 * MA - 1; ++i) + this->a_coefficients[i] = a_coefficients[(2 * MA - 2 - i) % MA + 1]; + } + + NonNormalizingIIRFilter(const TransferFunction &tf) + : NonNormalizingIIRFilter{tf.b, tf.a} {} + + /** + * @brief Update the internal state with the new input @f$ x[n] @f$ and + * return the new output @f$ y[n] @f$. + * + * @param input + * The new input @f$ x[n] @f$. + * @return The new output @f$ y[n] @f$. + */ + T operator()(T input) { + // Save the new input to the ring buffer. + x[index_b] = input; + + // Calculate the offset to the shifted coefficients. + T *b_coeff_shift = b_coefficients.end() - NB - index_b; + T *a_coeff_shift = a_coefficients.end() - MA - index_a; + + // Multiply and accumulate the inputs and their respective coefficients. + T acc = {}; + for (uint8_t i = 0; i < NB; i++) + acc += x[i] * b_coeff_shift[i]; + + // Multiply and accumulate the inputs and their respective coefficients. + for (uint8_t i = 0; i < MA; i++) + acc -= y[i] * a_coeff_shift[i]; + + // Save the current output + acc /= a0; + y[index_a] = acc; + + // Increment and wrap around the index of the ring buffer. + index_b++; + if (index_b == NB) + index_b = 0; + + index_a++; + if (index_a == MA) + index_a = 0; + + return acc; + } + + private: + constexpr static uint8_t MA = NA - 1; + uint8_t index_b = 0, index_a = 0; + AH::Array x = {}; ///< Previous inputs + AH::Array y = {}; ///< Previous outputs + AH::Array b_coefficients; ///< Numerator coefficients + AH::Array a_coefficients; ///< Denominator coefficients + T a0; +}; + +/** + * @brief Infinite Impulse Response filter implementation that normalizes the + * coefficients upon initialization. + * + * This class is faster than @ref NonNormalizingIIRFilter, because each filter + * iteration involves only addition and multiplication, no divisions. + * It works great for floating point numbers, but might be less ideal + * for integer types, because it can create large rounding errors on the + * coefficients. + * + * Implements the following difference equation using the Direct-Form 1 + * implementation: + * + * @f[ + * y[n] = \frac{1}{a_0} \left(\sum_{i=0}^{N_b-1} b_i \cdot x[n-i] + * - \sum_{i=1}^{N_a-1} a_i \cdot y[n-i] \right) + * @f] + */ +template +class NormalizingIIRFilter { + public: + /** + * @brief Construct a new Normalizing IIR Filter object. + * + * The coefficients @f$ b @f$ and @f$ a @f$ can be derived from the transfer + * function: + * + * @f[ + * H(z) = \frac{b_0 + b_1 z^{-1} + \ldots + b_{N_b} z ^{-N_b}} + * {a_0 + a_1 z^{-1} + \ldots + a_{N_b} z ^{-N_a}} + * @f] + * + * @param b_coefficients + * The coefficients of the transfer function numerator. + * @param a_coefficients + * The coefficients of the transfer function denominator. + */ + NormalizingIIRFilter(const AH::Array &b_coefficients, + const AH::Array &a_coefficients) { + T a0 = a_coefficients[0]; + for (uint8_t i = 0; i < 2 * NB - 1; ++i) + this->b_coefficients[i] = + b_coefficients[(2 * NB - 1 - i) % NB] / a0; + for (uint8_t i = 0; i < 2 * MA - 1; ++i) + this->a_coefficients[i] = + a_coefficients[(2 * MA - 2 - i) % MA + 1] / a0; + } + + NormalizingIIRFilter(const TransferFunction &tf) + : NormalizingIIRFilter{tf.b, tf.a} {} + + /** + * @brief Update the internal state with the new input @f$ x[n] @f$ and + * return the new output @f$ y[n] @f$. + * + * @param input + * The new input @f$ x[n] @f$. + * @return The new output @f$ y[n] @f$. + */ + T operator()(T input) { + // Save the new input to the ring buffer. + x[index_b] = input; + + // Calculate the offset to the shifted coefficients. + T *b_coeff_shift = b_coefficients.end() - NB - index_b; + T *a_coeff_shift = a_coefficients.end() - MA - index_a; + + // Multiply and accumulate the inputs and their respective coefficients. + T acc = {}; + for (uint8_t i = 0; i < NB; i++) + acc += x[i] * b_coeff_shift[i]; + + // Multiply and accumulate the inputs and their respective coefficients. + for (uint8_t i = 0; i < MA; i++) + acc -= y[i] * a_coeff_shift[i]; + + // Save the current output + y[index_a] = acc; + + // Increment and wrap around the index of the ring buffer. + index_b++; + if (index_b == NB) + index_b = 0; + + index_a++; + if (index_a == MA) + index_a = 0; + + return acc; + } + + private: + constexpr static uint8_t MA = NA - 1; + uint8_t index_b = 0, index_a = 0; + AH::Array x = {}; + AH::Array y = {}; + AH::Array b_coefficients; + AH::Array a_coefficients; +}; + +/// @} + +/// Select the @ref NormalizingIIRFilter implementation if @p T is a floating +/// point type, @ref NonNormalizingIIRFilter otherwise. +template +using IIRImplementation = + typename std::conditional::value, + NormalizingIIRFilter, + NonNormalizingIIRFilter>::type; + +/// @addtogroup Filters +/// @{ + +/** + * @brief Generic Infinite Impulse Response filter class. + * + * Uses the @ref NormalizingIIRFilter implementation for floating point + * types, and @ref NonNormalizingIIRFilter for all other types. + * + * Implements the following difference equation using the Direct-Form 1 + * implementation: + * + * @f[ + * y[n] = \frac{1}{a_0} \left(\sum_{i=0}^{N_b-1} b_i \cdot x[n-i] + * - \sum_{i=1}^{N_a-1} a_i \cdot y[n-i] \right) + * @f] + */ +template +class IIRFilter : public IIRImplementation { + public: + /** + * @brief Construct a new IIR Filter object. + * + * The coefficients @f$ b @f$ and @f$ a @f$ can be derived from the transfer + * function: + * + * @f[ + * H(z) = \frac{b_0 + b_1 z^{-1} + \ldots + b_{N_b} z ^{-N_b}} + * {a_0 + a_1 z^{-1} + \ldots + a_{N_b} z ^{-N_a}} + * @f] + * + * @param b_coefficients + * The coefficients of the transfer function numerator. + * @param a_coefficients + * The coefficients of the transfer function denominator. + */ + IIRFilter(const AH::Array &b_coefficients, + const AH::Array &a_coefficients) + : IIRImplementation{b_coefficients, a_coefficients} {} + + IIRFilter(const TransferFunction &tf) + : IIRImplementation{tf} {} + + /** + * @brief Update the internal state with the new input @f$ x[n] @f$ and + * return the new output @f$ y[n] @f$. + * + * @param input + * The new input @f$ x[n] @f$. + * @return The new output @f$ y[n] @f$. + */ + T operator()(T input) { + return IIRImplementation::operator()(input); + } +}; + +/// Create an IIRFilter from the given transfer function. +template +IIRFilter makeIIRFilter(const TransferFunction &tf) { + return tf; +} + +/// Create an IIRFilter from the given transfer function coefficients. +template +IIRFilter makeIIRFilter(const AH::Array &b_coefficients, + const AH::Array &a_coefficients) { + return {b_coefficients, a_coefficients}; +} + +/// @} \ No newline at end of file diff --git a/src/Filters/MedianFilter.hpp b/src/Filters/MedianFilter.hpp new file mode 100644 index 000000000..f13f68aa9 --- /dev/null +++ b/src/Filters/MedianFilter.hpp @@ -0,0 +1,175 @@ +#pragma once + +#include // std::partial_sort_copy +#include // std::array +#include // uint8_t + +/// @addtogroup Filters +/// @{ + +#if 0 + +/** + * @brief Class for Median Filters. + * + * Use the parenthesis or call operator (`operator()`) with the next input of + * the filter as an argument to update the Median filter. + * This operator returns the next output of the filter. + * + * The output equation is: + * @f$ y[n] = \text{median}\Big(x[n], x[n-1],\ \ldots,\ x[n-N+1]\Big) @f$ + * + * This version uses std::partial_sort_copy, and is about 4 times slower than + * the version using std::nth_element below. (Tested on an Arduino Leonardo, + * tested with N = 100 and N = 101.) + * + * @tparam N + * The number of previous values to take the median of. + * @tparam T + * The type of the input and output values of the filter. + */ +template +class MedianFilter { + public: + /** + * @brief Construct a new Median Filter (zero initialized). + */ + MedianFilter() = default; + + /** + * @brief Construct a new Median Filter, and initialize it with the given + * value. + * + * @param initialValue + * Determines the initial state of the filter: + * @f$ x[-N] =\ \ldots\ = x[-2] = x[-1] = \text{initialValue} @f$ + */ + MedianFilter(T initialValue) { + std::fill(previousInputs.begin(), previousInputs.end(), initialValue); + } + + /** + * @brief Calculate the output @f$ y[n] @f$ for a given input + * @f$ x[n] @f$. + * + * @f$ y[n] = \text{median}\Big(x[n], x[n-1],\ \ldots,\ x[n-N+1]\Big) @f$ + * + * @param x + * The new input @f$ x[n] @f$. + * @return The new output @f$ y[n] @f$. + */ + T operator()(T x) { + // Insert the new input into the ring buffer, overwriting the oldest + // input. + previousInputs[index] = x; + if (++index == N) + index = 0; + + // Calculate the median of the buffer by sorting the first half. A copy + // should be made to keep the order of the buffer intact. + const uint8_t halfSize = N / 2 + 1; + std::array sorted; + std::partial_sort_copy(previousInputs.begin(), previousInputs.end(), + sorted.begin(), sorted.end()); + + // If the length of the ring buffer is odd, then the median is its + // center element, which is the final element of `sorted`. + // If the length of the ring buffer is even, then we need to take the + // average of its two center elements, which are the final two elements + // of `sorted`. + if (N % 2 == 0) + return (sorted.end()[-2] + sorted.end()[-1]) / 2; + else + return sorted.end()[-1]; + } + + private: + /// The last index in the ring buffer. + uint8_t index = 0; + /// A ring buffer to keep track of the N last inputs. + std::array previousInputs = {}; +}; + +#else + +/** + * @brief Class for Median Filters. + * + * Use the parenthesis or call operator (`operator()`) with the next input of + * the filter as an argument to update the Median filter. + * This operator returns the next output of the filter. + * + * The output equation is: + * @f$ y[n] = \text{median}\Big(x[n], x[n-1],\ \ldots,\ x[n-N+1]\Big) @f$ + * + * @tparam N + * The number of previous values to take the median of. + * @tparam T + * The type of the input and output values of the filter. + */ +template +class MedianFilter { + public: + /** + * @brief Construct a new Median Filter (zero initialized). + */ + MedianFilter() = default; + + /** + * @brief Construct a new Median Filter, and initialize it with the given + * value. + * + * @param initialValue + * Determines the initial state of the filter: + * @f$ x[-N] =\ \ldots\ = x[-2] = x[-1] = \text{initialValue} @f$ + */ + MedianFilter(T initialValue) { + std::fill(previousInputs.begin(), previousInputs.end(), initialValue); + } + + /** + * @brief Calculate the output @f$ y[n] @f$ for a given input + * @f$ x[n] @f$. + * + * @f$ y[n] = \text{median}\Big(x[n], x[n-1],\ \ldots,\ x[n-N+1]\Big) @f$ + * + * @param x + * The new input @f$ x[n] @f$. + * @return The new output @f$ y[n] @f$. + */ + T operator()(T x) { + // Insert the new input into the ring buffer, overwriting the oldest + // input. + previousInputs[index] = x; + if (++index == N) + index = 0; + + // Calculate the median of the buffer by sorting it just enough to find + // the middle element. A copy should be made to keep the order of the + // buffer intact. + std::array sorted = previousInputs; + auto halfWay = sorted.begin() + N / 2; + std::nth_element(sorted.begin(), halfWay, sorted.end()); + + // If the length of the ring buffer is odd, then the median is its + // center element. + // If the length of the ring buffer is even, then we need to take the + // average of its two center elements. + if (N % 2 == 0) { + auto beforeHalfWay = std::max_element(sorted.begin(), halfWay); + return (*halfWay + *beforeHalfWay) / 2; + } else { + return *halfWay; + } + } + + private: + /// The last index in the ring buffer. + uint8_t index = 0; + /// A ring buffer to keep track of the N last inputs. + std::array previousInputs = {{}}; +}; + +#endif + +/// @} \ No newline at end of file diff --git a/src/Filters/Notch.hpp b/src/Filters/Notch.hpp new file mode 100644 index 000000000..58296a2fc --- /dev/null +++ b/src/Filters/Notch.hpp @@ -0,0 +1,37 @@ +#pragma once + +#include +#include + +/// @addtogroup FilterDesign +/// @{ + +/** + * @brief Create a very simple second-order FIR notch filter. + * + * @f[ + * H(z) = \frac{z^2 - 2\cos\left(\omega_{c,d}\right)z + 1} + * {2 - 2\cos\left(\omega_{c,d}\right)} + * @f] + * where @f$ \omega_{c,d} = \pi f_n = 2\pi \frac{f_c}{f_n} @f$ + * + * @see + * + * @param f_n + * Normalized notch frequency in half-cycles per sample. + * @f$ f_n = \frac{2 f_c}{f_s} \in \left[0, 1\right] @f$, where + * @f$ f_s @f$ is the sample frequency in @f$ \text{Hz} @f$, and + * @f$ f_c @f$ is the analog notch frequency in @f$ \text{Hz} @f$. + */ +template +FIRFilter<3, T> simpleNotchFIR(double f_n) { + double cos_omega = std::cos(M_PI * f_n); + double normalize = 2 - 2 * cos_omega; + return {{ + T(1. / normalize), + T(-2 * cos_omega / normalize), + T(1. / normalize), + }}; +} + +/// @} \ No newline at end of file diff --git a/src/Filters/SMA.hpp b/src/Filters/SMA.hpp new file mode 100644 index 000000000..68c2bdf40 --- /dev/null +++ b/src/Filters/SMA.hpp @@ -0,0 +1,74 @@ +#pragma once + +#include +#include +#include +#include +#include + +/// @addtogroup Filters +/// @{ + +/** + * @brief Simple Moving Average filter. + * + * Returns the average of the N most recent input values. + * + * @f[ + * y[n] = \frac{1}{N} \sum_{i=0}^{N-1}x[n-i] + * @f] + * + * @see https://tttapa.github.io/Pages/Mathematics/Systems-and-Control-Theory/Digital-filters/Simple%20Moving%20Average/Simple-Moving-Average.html + * + * @tparam N + * The number of samples to average. + * @tparam input_t + * The type of the input (and output) of the filter. + * @tparam sum_t + * The type to use for the accumulator, must be large enough to fit + * N times the maximum input value. + */ +template +class SMA { + public: + /** + * @brief Default constructor (initial state is initialized to all zeros). + */ + SMA() = default; + + /** + * @brief Constructor (initial state is initialized to given value). + * + * @param initialValue + * Determines the initial state of the filter: + * @f$ x[-N] =\ \ldots\ = x[-2] = x[-1] = \text{initialValue} @f$ + */ + SMA(input_t initialValue) : sum(N * (sum_t)initialValue) { + std::fill(std::begin(previousInputs), std::end(previousInputs), + initialValue); + } + + /** + * @brief Update the internal state with the new input @f$ x[n] @f$ and + * return the new output @f$ y[n] @f$. + * + * @param input + * The new input @f$ x[n] @f$. + * @return The new output @f$ y[n] @f$. + */ + input_t operator()(input_t input) { + sum -= previousInputs[index]; + sum += input; + previousInputs[index] = input; + if (++index == N) + index = 0; + return AH::round_div(sum); + } + + private: + uint8_t index = 0; + input_t previousInputs[N] = {}; + sum_t sum = 0; +}; + +/// @} diff --git a/src/Filters/SOSFilter.hpp b/src/Filters/SOSFilter.hpp new file mode 100644 index 000000000..0860fd3b3 --- /dev/null +++ b/src/Filters/SOSFilter.hpp @@ -0,0 +1,83 @@ +#pragma once + +#include +#include + +/// @addtogroup Filters +/// @{ + +template +using SOSCoefficients = AH::Array, N>; + +/** + * @brief Second Order Sections filter. Higher cost than direct + * implementation, but better numerical stability. + * + * @tparam T + * The type of the signals and filter coefficients. + * @tparam N + * The number of sections. + */ +template > +class SOSFilter { + public: + /// Constructor. + SOSFilter(const SOSCoefficients §ionCoefficients) + : sections(AH::copyAs(sectionCoefficients)) {} + + /** + * @brief Update the internal state with the new input @f$ x[n] @f$ and + * return the new output @f$ y[n] @f$. + * + * @param input + * The new input @f$ x[n] @f$. + * @return The new output @f$ y[n] @f$. + */ + T operator()(T input) { + for (auto §ion : sections) + input = section(input); + return input; + } + + private: + AH::Array sections; +}; + +/// @} + +template +TransferFunction +sos2tf_helper(const TransferFunction &tf, + AH::ArraySlice, N, false, true> sos) { + auto sub_tf = sos2tf_helper(tf, sos.template slice<0, N - 2>()); + return TransferFunction{ + AH::distribute(sub_tf.b, sos[N - 1].b), + AH::distribute(sub_tf.a, sos[N - 1].a), + }; +} + +template +TransferFunction +sos2tf_helper(const TransferFunction &tf, + AH::ArraySlice, 1, false, true> sos) { + return TransferFunction{ + AH::distribute(tf.b, sos[0].b), + AH::distribute(tf.a, sos[0].a), + }; +} + +/** + * @brief Convert Second Order Section (SOS) coefficients to an equivalent + * tranfer function representation. + * @ingroup FilterDesign + */ +template +TransferFunction +sos2tf(const SOSCoefficients &sos) { + return sos2tf_helper(sos[N - 1], sos.template slice<0, N - 2>()); +} + +template +TransferFunction<3, 3, T> sos2tf(const SOSCoefficients &sos) { + return sos[0]; +} diff --git a/src/Filters/TransferFunction.hpp b/src/Filters/TransferFunction.hpp new file mode 100644 index 000000000..a0bbd2d21 --- /dev/null +++ b/src/Filters/TransferFunction.hpp @@ -0,0 +1,28 @@ +#pragma once + +/// @addtogroup Filters +/// @{ + +#include + +/** + * @brief Class for transfer function coefficients. + * + * @f[ + * H(z) = \frac{b_0 + b_1 z^{-1} + \ldots + b_{N_b} z ^{-N_b}} + * {a_0 + a_1 z^{-1} + \ldots + a_{N_b} z ^{-N_a}} + * @f] + */ +template +struct TransferFunction { + TransferFunction() = default; + + /// Construct a new Transfer Function object. + TransferFunction(const AH::Array &b, const AH::Array &a) + : b(b), a(a) {} + + AH::Array b = {{}}; + AH::Array a = {{}}; +}; + +/// @} \ No newline at end of file diff --git a/src/Filters/keywords.yml b/src/Filters/keywords.yml new file mode 100644 index 000000000..7019be8cf --- /dev/null +++ b/src/Filters/keywords.yml @@ -0,0 +1,7 @@ +keyword1: + - MedianFilter + +keyword2: + - butter + +literal1: \ No newline at end of file diff --git a/src/keywords.yml b/src/keywords.yml index 830e97fb1..c65b84f6e 100644 --- a/src/keywords.yml +++ b/src/keywords.yml @@ -1,3 +1,4 @@ keyword1: - Arduino_Helpers - - AH \ No newline at end of file + - AH + - Filters \ No newline at end of file diff --git a/test/AH/Containers/test-Array.cpp b/test/AH/Containers/test-Array.cpp index 1681ba7f4..12b5149d0 100644 --- a/test/AH/Containers/test-Array.cpp +++ b/test/AH/Containers/test-Array.cpp @@ -1,8 +1,29 @@ #include -#include +#include USING_AH_NAMESPACE; +template +std::ostream &operator<<(std::ostream &os, const AH::Array &a) { + if (N < 1) + return os << "{}"; + os << '{'; + for (size_t i = 0; i < N - 1; ++i) + os << a[i] << ", "; + return os << a[N - 1] << '}'; +} + +template +std::ostream &operator<<(std::ostream &os, + const AH::ArraySlice &a) { + if (N < 1) + return os << "{}"; + os << '{'; + for (size_t i = 0; i < N - 1; ++i) + os << a[i] << ", "; + return os << a[N - 1] << '}'; +} + TEST(Array, initializeAndRetrieve) { Array arr = {0, 1, 2, 3, 4, 5}; for (int i = 0; i < 6; i++) @@ -266,12 +287,16 @@ TEST(generateArray, simpleNoType) { EXPECT_EQ(x, y); } +struct S { + int i; + float f; + bool operator!=(S o) const { return this->i != o.i || this->f != o.f; } + friend std::ostream &operator<<(std::ostream &os, S s) { + return os << "S{" << s.i << ", " << s.f << "}"; + } +}; + TEST(fillArray, simple) { - struct S { - int i; - float f; - bool operator!=(S o) const { return this->i != o.i || this->f != o.f; } - }; auto x = fillArray(2, 3.14f); Array y = {{{2, 3.14f}, {2, 3.14f}, {2, 3.14f}, {2, 3.14f}}}; EXPECT_EQ(x, y); @@ -280,7 +305,7 @@ TEST(fillArray, simple) { TEST(Array, apply) { Array a = {-1, 2, -3, 4, 0}; Array b = {1, -2, 3, -4, 0}; - auto c = apply(a, std::negate<>()); + auto c = AH::apply(a, std::negate<>()); EXPECT_EQ(c, b); } @@ -335,6 +360,11 @@ TEST(Array, reverseSlice) { Array b = {5, 4, 3, 2, 1}; auto s1 = a.slice<4, 0>(); auto s2 = s1.slice<4, 0>(); + EXPECT_EQ(s1[0], 5); + EXPECT_EQ(s1[1], 4); + EXPECT_EQ(s1[2], 3); + EXPECT_EQ(s1[3], 2); + EXPECT_EQ(s1[4], 1); EXPECT_EQ(s1, b); EXPECT_EQ(s2, a); } diff --git a/test/AH/Containers/test-DoublyLinkedList.cpp b/test/AH/Containers/test-DoublyLinkedList.cpp index 77fcdeb21..17f053b45 100644 --- a/test/AH/Containers/test-DoublyLinkedList.cpp +++ b/test/AH/Containers/test-DoublyLinkedList.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include @@ -38,6 +38,7 @@ TEST(DoublyLinkedList, appendNode) { EXPECT_EQ(list.getLast(), &a); EXPECT_EQ(a.getPrevious(), nullptr); EXPECT_EQ(a.getNext(), nullptr); + EXPECT_EQ(list.getFirst()->value, 1); TestNode b(2); list.append(b); EXPECT_EQ(list.getFirst(), &a); diff --git a/test/AH/Containers/test-UniquePtr.cpp b/test/AH/Containers/test-UniquePtr.cpp deleted file mode 100644 index 3c3fed2f7..000000000 --- a/test/AH/Containers/test-UniquePtr.cpp +++ /dev/null @@ -1,68 +0,0 @@ -#include - -#include - -#include -using std::cout; -using std::endl; - -USING_AH_NAMESPACE; - -class TestClass { - public: - TestClass(int i) : i(i) { ++constructed; } - ~TestClass() { ++destructed; } - - const int i; - - static void reset() { - constructed = 0; - destructed = 0; - } - - static bool hasLeaks() { return constructed != destructed; } - - private: - static size_t constructed; - static size_t destructed; -}; -size_t TestClass::constructed = 0; -size_t TestClass::destructed = 0; - -TEST(uniquePtr, constructDestruct) { - TestClass::reset(); - { UniquePtr u(new TestClass(1)); } - ASSERT_FALSE(TestClass::hasLeaks()); -} - -TEST(uniquePtr, constructRelease) { - TestClass::reset(); - UniquePtr u(new TestClass(1)); - delete u.release(); - ASSERT_FALSE(TestClass::hasLeaks()); -} - -TEST(uniquePtr, constructReset) { - TestClass::reset(); - UniquePtr u(new TestClass(1)); - u.reset(); - ASSERT_FALSE(TestClass::hasLeaks()); -} - -TEST(uniquePtr, constructAssign) { - TestClass::reset(); - UniquePtr u(new TestClass(1)); - u = MakeUnique(2); - ASSERT_EQ(u->i, 2); - u.reset(); - ASSERT_FALSE(TestClass::hasLeaks()); -} - -TEST(uniquePtr, constructAssignNew) { - TestClass::reset(); - UniquePtr u(new TestClass(1)); - u = UniquePtr(new TestClass(2)); - ASSERT_EQ(u->i, 2); - u.reset(); - ASSERT_FALSE(TestClass::hasLeaks()); -} \ No newline at end of file diff --git a/test/AH/Containers/test-Updatable.cpp b/test/AH/Containers/test-Updatable.cpp new file mode 100644 index 000000000..5b16eca89 --- /dev/null +++ b/test/AH/Containers/test-Updatable.cpp @@ -0,0 +1,59 @@ +#include + +#include +#include +#include +#include + +using std::vector; +using namespace AH; + +struct T {}; +struct TestUpdatable : Updatable { + TestUpdatable *getNext() { return dynamic_cast(next); } + TestUpdatable *getPrevious() { + return dynamic_cast(previous); + } + static auto getList() -> decltype(updatables) & { return updatables; } + + void begin() override {} + void update() override {} +}; + +TEST(Updatable, enableDisable) { + TestUpdatable v[16]; + for (auto &vv : v) + EXPECT_TRUE(vv.isEnabled()); + TestUpdatable::disable(v); + for (auto &vv : v) + EXPECT_FALSE(vv.isEnabled()); + auto &l = TestUpdatable::getList(); + auto len = std::distance(l.begin(), l.end()); + EXPECT_EQ(len, 0); + TestUpdatable::enable(v); + for (auto &vv : v) + EXPECT_TRUE(vv.isEnabled()); + len = std::distance(l.begin(), l.end()); + EXPECT_EQ(len, 16); +} + +TEST(Updatable, alreadyEnabled) { + TestUpdatable v[16]; + try { + v[0].enable(); + FAIL(); + } catch (ErrorException &e) { + EXPECT_EQ(e.getErrorCode(), 0x1212); + } +} + +TEST(Updatable, alreadyDisabled) { + TestUpdatable v[16]; + TestUpdatable::disable(v); + try { + v[0].disable(); + FAIL(); + } catch (ErrorException &e) { + EXPECT_EQ(e.getErrorCode(), 0x1213); + } +} \ No newline at end of file diff --git a/test/AH/Containers/tests-BitArray.cpp b/test/AH/Containers/tests-BitArray.cpp index a39cf4293..6bf5c2f38 100644 --- a/test/AH/Containers/tests-BitArray.cpp +++ b/test/AH/Containers/tests-BitArray.cpp @@ -1,5 +1,5 @@ #include -#include +#include USING_AH_NAMESPACE; diff --git a/test/AH/Filters/test-EMA.cpp b/test/AH/Filters/test-EMA.cpp index 93bbb61a0..44f6289df 100644 --- a/test/AH/Filters/test-EMA.cpp +++ b/test/AH/Filters/test-EMA.cpp @@ -1,7 +1,8 @@ -#include +#include #include #include +#include #include TEST(EMA, EMA) { @@ -57,4 +58,26 @@ TEST(EMA, EMA_f) { // ASSERT_EQ(signal, expected); for (size_t i = 0; i < signal.size(); ++i) ASSERT_FLOAT_EQ(signal[i], expected[i]); -} \ No newline at end of file +} + +TEST(EMA, EMA_overflow_init) { + using namespace std; + constexpr uint16_t maximum = (1 << 16) - 1; + EMA<6, uint16_t, uint32_t> ema(maximum); + EXPECT_EQ(ema(maximum), maximum); + EXPECT_EQ(ema(maximum), maximum); + EXPECT_EQ(ema(maximum), maximum); +} + +TEST(EMA, EMA_overflow_reset) { + using namespace std; + constexpr uint16_t maximum = (1 << 16) - 1; + EMA<6, uint16_t, uint32_t> ema; + EXPECT_EQ(ema(0), 0); + EXPECT_EQ(ema(0), 0); + EXPECT_EQ(ema(0), 0); + ema.reset(maximum); + EXPECT_EQ(ema(maximum), maximum); + EXPECT_EQ(ema(maximum), maximum); + EXPECT_EQ(ema(maximum), maximum); +} diff --git a/test/AH/Filters/test-Hysteresis.cpp b/test/AH/Filters/test-Hysteresis.cpp index f2ff35d7b..455a54795 100644 --- a/test/AH/Filters/test-Hysteresis.cpp +++ b/test/AH/Filters/test-Hysteresis.cpp @@ -1,7 +1,8 @@ -#include +#include #include #include +#include TEST(Hysteresis, increasing) { using namespace std; diff --git a/test/AH/Hardware/ExtendedInputOutput/test-AnalogMultiplex.cpp b/test/AH/Hardware/ExtendedInputOutput/test-AnalogMultiplex.cpp index 6763e9c26..db9b091df 100644 --- a/test/AH/Hardware/ExtendedInputOutput/test-AnalogMultiplex.cpp +++ b/test/AH/Hardware/ExtendedInputOutput/test-AnalogMultiplex.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include @@ -47,6 +47,48 @@ TEST(AnalogMultiplex, analogReadNoEnable) { ::testing::Mock::VerifyAndClear(&ArduinoMock::getInstance()); } +TEST(AnalogMultiplex, analogReadNoEnableNoDummyRead) { + AnalogMultiplex<4> mux = {A0, {2, 3, 4, 5}}; + mux.discardFirstReading(false); + DEBUGFN(mux.getStart()); + DEBUGFN(mux.getEnd()); + + EXPECT_CALL(ArduinoMock::getInstance(), pinMode(2, OUTPUT)); + EXPECT_CALL(ArduinoMock::getInstance(), pinMode(3, OUTPUT)); + EXPECT_CALL(ArduinoMock::getInstance(), pinMode(4, OUTPUT)); + EXPECT_CALL(ArduinoMock::getInstance(), pinMode(5, OUTPUT)); + ExtendedIOElement::beginAll(); + + ::testing::Mock::VerifyAndClear(&ArduinoMock::getInstance()); + + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(2, 0)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(3, 0)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(4, 0)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(5, 0)); + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(A0)).Times(1); + ExtIO::analogRead(mux.pin(0b0000)); + + ::testing::Mock::VerifyAndClear(&ArduinoMock::getInstance()); + + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(2, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(3, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(4, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(5, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(A0)).Times(1); + ExtIO::analogRead(mux.pin(0b1111)); + + ::testing::Mock::VerifyAndClear(&ArduinoMock::getInstance()); + + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(2, 0)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(3, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(4, 0)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(5, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(A0)).Times(1); + ExtIO::analogRead(mux.pin(0b1010)); + + ::testing::Mock::VerifyAndClear(&ArduinoMock::getInstance()); +} + TEST(AnalogMultiplex, digitalReadNoEnable) { AnalogMultiplex<4> mux = {A0, {2, 3, 4, 5}}; @@ -94,6 +136,34 @@ TEST(AnalogMultiplex, analogReadEnable) { ::testing::Mock::VerifyAndClear(&ArduinoMock::getInstance()); } +TEST(AnalogMultiplex, analogReadBufferedEnable) { + AnalogMultiplex<4> mux = {A0, {2, 3, 4, 5}, 6}; + + EXPECT_CALL(ArduinoMock::getInstance(), pinMode(2, OUTPUT)); + EXPECT_CALL(ArduinoMock::getInstance(), pinMode(3, OUTPUT)); + EXPECT_CALL(ArduinoMock::getInstance(), pinMode(4, OUTPUT)); + EXPECT_CALL(ArduinoMock::getInstance(), pinMode(5, OUTPUT)); + EXPECT_CALL(ArduinoMock::getInstance(), pinMode(6, OUTPUT)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(6, HIGH)); + ExtendedIOElement::beginAll(); + + ::testing::Sequence seq; + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(2, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(3, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(4, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(5, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(6, LOW)) + .InSequence(seq); + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(A0)) + .Times(2) + .InSequence(seq); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(6, HIGH)) + .InSequence(seq); + ExtIO::analogReadBuffered(mux.pin(0b1111)); + + ::testing::Mock::VerifyAndClear(&ArduinoMock::getInstance()); +} + TEST(AnalogMultiplex, analogReadEnable3) { AnalogMultiplex<3> mux = {A0, {2, 3, 4}, 6}; @@ -174,6 +244,32 @@ TEST(AnalogMultiplex, digitalReadEnable) { ::testing::Mock::VerifyAndClear(&ArduinoMock::getInstance()); } +TEST(AnalogMultiplex, digitalReadBufferedEnable) { + AnalogMultiplex<4> mux = {A0, {2, 3, 4, 5}, 6}; + + EXPECT_CALL(ArduinoMock::getInstance(), pinMode(2, OUTPUT)); + EXPECT_CALL(ArduinoMock::getInstance(), pinMode(3, OUTPUT)); + EXPECT_CALL(ArduinoMock::getInstance(), pinMode(4, OUTPUT)); + EXPECT_CALL(ArduinoMock::getInstance(), pinMode(5, OUTPUT)); + EXPECT_CALL(ArduinoMock::getInstance(), pinMode(6, OUTPUT)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(6, HIGH)); + ExtendedIOElement::beginAll(); + + ::testing::Sequence seq; + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(2, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(3, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(4, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(5, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(6, LOW)) + .InSequence(seq); + EXPECT_CALL(ArduinoMock::getInstance(), digitalRead(A0)).InSequence(seq); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(6, HIGH)) + .InSequence(seq); + ExtIO::digitalReadBuffered(mux.pin(0b1111)); + + ::testing::Mock::VerifyAndClear(&ArduinoMock::getInstance()); +} + TEST(AnalogMultiplex, pinMode) { AnalogMultiplex<4> mux = {A0, {2, 3, 4, 5}, 6}; @@ -188,5 +284,22 @@ TEST(AnalogMultiplex, pinMode) { EXPECT_CALL(ArduinoMock::getInstance(), pinMode(A0, INPUT_PULLUP)); ExtIO::pinMode(mux.pin(0b1111), INPUT_PULLUP); + ::testing::Mock::VerifyAndClear(&ArduinoMock::getInstance()); +} + +TEST(AnalogMultiplex, pinModeBuffered) { + AnalogMultiplex<4> mux = {A0, {2, 3, 4, 5}, 6}; + + EXPECT_CALL(ArduinoMock::getInstance(), pinMode(2, OUTPUT)); + EXPECT_CALL(ArduinoMock::getInstance(), pinMode(3, OUTPUT)); + EXPECT_CALL(ArduinoMock::getInstance(), pinMode(4, OUTPUT)); + EXPECT_CALL(ArduinoMock::getInstance(), pinMode(5, OUTPUT)); + EXPECT_CALL(ArduinoMock::getInstance(), pinMode(6, OUTPUT)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(6, HIGH)); + ExtendedIOElement::beginAll(); + + EXPECT_CALL(ArduinoMock::getInstance(), pinMode(A0, INPUT_PULLUP)); + ExtIO::pinModeBuffered(mux.pin(0b1111), INPUT_PULLUP); + ::testing::Mock::VerifyAndClear(&ArduinoMock::getInstance()); } \ No newline at end of file diff --git a/test/AH/Hardware/ExtendedInputOutput/test-ExtendedInputOutput.cpp b/test/AH/Hardware/ExtendedInputOutput/test-ExtendedInputOutput.cpp index e2b41c372..7dca749db 100644 --- a/test/AH/Hardware/ExtendedInputOutput/test-ExtendedInputOutput.cpp +++ b/test/AH/Hardware/ExtendedInputOutput/test-ExtendedInputOutput.cpp @@ -1,30 +1,48 @@ -#include +#include -#include #include +#include #include using namespace ::testing; USING_AH_NAMESPACE; using namespace ExtIO; -W_SUGGEST_OVERRIDE_OFF - class MockExtIOElement : public ExtendedIOElement { public: MockExtIOElement(pin_t length) : ExtendedIOElement(length) {} - MOCK_METHOD2(pinMode, void(pin_t, uint8_t)); - MOCK_METHOD2(digitalWrite, void(pin_t, uint8_t)); - MOCK_METHOD1(digitalRead, int(pin_t)); - MOCK_METHOD1(analogRead, analog_t(pin_t)); - MOCK_METHOD2(analogWrite, void(pin_t, analog_t)); - - MOCK_METHOD0(begin, void()); - MOCK_METHOD0(update, void()); + MOCK_METHOD(void, pinMode, (pin_t, uint8_t), (override)); + MOCK_METHOD(void, digitalWrite, (pin_t, uint8_t), (override)); + MOCK_METHOD(PinStatus_t, digitalRead, (pin_t), (override)); + MOCK_METHOD(analog_t, analogRead, (pin_t), (override)); + MOCK_METHOD(void, analogWrite, (pin_t, analog_t), (override)); + + MOCK_METHOD(void, pinModeBuffered, (pin_t, uint8_t), (override)); + MOCK_METHOD(void, digitalWriteBuffered, (pin_t, uint8_t), (override)); + MOCK_METHOD(PinStatus_t, digitalReadBuffered, (pin_t), (override)); + MOCK_METHOD(analog_t, analogReadBuffered, (pin_t), (override)); + MOCK_METHOD(void, analogWriteBuffered, (pin_t, analog_t), (override)); + + MOCK_METHOD(void, begin, (), (override)); + MOCK_METHOD(void, updateBufferedOutputs, (), (override)); + MOCK_METHOD(void, updateBufferedInputs, (), (override)); }; -W_SUGGEST_OVERRIDE_ON +class MinimalMockExtIOElement : public ExtendedIOElement { + public: + MinimalMockExtIOElement(pin_t length) : ExtendedIOElement(length) {} + + MOCK_METHOD(void, pinModeBuffered, (pin_t, uint8_t), (override)); + MOCK_METHOD(void, digitalWriteBuffered, (pin_t, uint8_t), (override)); + MOCK_METHOD(PinStatus_t, digitalReadBuffered, (pin_t), (override)); + MOCK_METHOD(analog_t, analogReadBuffered, (pin_t), (override)); + MOCK_METHOD(void, analogWriteBuffered, (pin_t, analog_t), (override)); + + MOCK_METHOD(void, begin, (), (override)); + MOCK_METHOD(void, updateBufferedOutputs, (), (override)); + MOCK_METHOD(void, updateBufferedInputs, (), (override)); +}; TEST(ExtendedInputOutput, ExtendedIOElement) { MockExtIOElement el_1 = {10}; @@ -40,24 +58,27 @@ TEST(ExtendedInputOutput, digitalRead) { EXPECT_CALL(ArduinoMock::getInstance(), digitalRead(0)); digitalRead(0); + EXPECT_CALL(ArduinoMock::getInstance(), digitalRead(1)); + digitalRead(pin_t(1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalRead(2)); + digitalRead(unsigned(2)); EXPECT_CALL(el_1, digitalRead(0)); digitalRead(el_1.pin(0)); - EXPECT_CALL(el_1, digitalRead(0)); - digitalRead((int)el_1.pin(0)); EXPECT_CALL(el_1, digitalRead(9)); digitalRead(el_1.pin(9)); - EXPECT_CALL(el_1, digitalRead(9)); - digitalRead((int)el_1.pin(9)); EXPECT_CALL(el_2, digitalRead(0)); digitalRead(el_2.pin(0)); - EXPECT_CALL(el_2, digitalRead(0)); - digitalRead((int)el_2.pin(0)); EXPECT_CALL(el_2, digitalRead(9)); digitalRead(el_2.pin(9)); - EXPECT_CALL(el_2, digitalRead(9)); - digitalRead((int)el_2.pin(9)); + + CachedExtIOPin c_el_1_5{el_1.pin(5)}; + EXPECT_CALL(el_1, digitalRead(5)); + digitalRead(c_el_1_5); + + digitalRead(NO_PIN); + digitalRead(CachedExtIOPin(NO_PIN)); Mock::VerifyAndClear(&ArduinoMock::getInstance()); } @@ -70,24 +91,27 @@ TEST(ExtendedInputOutput, analogRead) { EXPECT_CALL(ArduinoMock::getInstance(), analogRead(0)); analogRead(0); + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(1)); + analogRead(pin_t(1)); + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(2)); + analogRead(unsigned(2)); EXPECT_CALL(el_1, analogRead(0)); analogRead(el_1.pin(0)); - EXPECT_CALL(el_1, analogRead(0)); - analogRead((int)el_1.pin(0)); EXPECT_CALL(el_1, analogRead(9)); analogRead(el_1.pin(9)); - EXPECT_CALL(el_1, analogRead(9)); - analogRead((int)el_1.pin(9)); EXPECT_CALL(el_2, analogRead(0)); analogRead(el_2.pin(0)); - EXPECT_CALL(el_2, analogRead(0)); - analogRead((int)el_2.pin(0)); EXPECT_CALL(el_2, analogRead(9)); analogRead(el_2.pin(9)); - EXPECT_CALL(el_2, analogRead(9)); - analogRead((int)el_2.pin(9)); + + CachedExtIOPin c_el_1_5{el_1.pin(5)}; + EXPECT_CALL(el_1, analogRead(5)); + analogRead(c_el_1_5); + + analogRead(NO_PIN); + analogRead(CachedExtIOPin(NO_PIN)); Mock::VerifyAndClear(&ArduinoMock::getInstance()); } @@ -100,24 +124,27 @@ TEST(ExtendedInputOutput, digitalWrite) { EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(0, HIGH)); digitalWrite(0, HIGH); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(1, HIGH)); + digitalWrite(pin_t(1), HIGH); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(2, HIGH)); + digitalWrite(unsigned(2), HIGH); EXPECT_CALL(el_1, digitalWrite(0, HIGH)); digitalWrite(el_1.pin(0), HIGH); - EXPECT_CALL(el_1, digitalWrite(0, HIGH)); - digitalWrite((int)el_1.pin(0), HIGH); - EXPECT_CALL(el_1, digitalWrite(9, HIGH)); - digitalWrite(el_1.pin(9), HIGH); - EXPECT_CALL(el_1, digitalWrite(9, HIGH)); - digitalWrite((int)el_1.pin(9), HIGH); - - EXPECT_CALL(el_2, digitalWrite(0, HIGH)); - digitalWrite(el_2.pin(0), HIGH); - EXPECT_CALL(el_2, digitalWrite(0, HIGH)); - digitalWrite((int)el_2.pin(0), HIGH); + EXPECT_CALL(el_1, digitalWrite(9, LOW)); + digitalWrite(el_1.pin(9), LOW); + + EXPECT_CALL(el_2, digitalWrite(0, LOW)); + digitalWrite(el_2.pin(0), LOW); EXPECT_CALL(el_2, digitalWrite(9, HIGH)); digitalWrite(el_2.pin(9), HIGH); - EXPECT_CALL(el_2, digitalWrite(9, HIGH)); - digitalWrite((int)el_2.pin(9), HIGH); + + CachedExtIOPin c_el_1_5{el_1.pin(5)}; + EXPECT_CALL(el_1, digitalWrite(5, LOW)); + digitalWrite(c_el_1_5, LOW); + + digitalWrite(NO_PIN, HIGH); + digitalWrite(CachedExtIOPin(NO_PIN), HIGH); Mock::VerifyAndClear(&ArduinoMock::getInstance()); } @@ -128,30 +155,37 @@ TEST(ExtendedInputOutput, analogWrite) { InSequence seq; - EXPECT_CALL(ArduinoMock::getInstance(), analogWrite(0, 127)); - analogWrite(0, 127); + EXPECT_CALL(ArduinoMock::getInstance(), analogWrite(0, 129)); + analogWrite(0, analog_t(129)); + EXPECT_CALL(ArduinoMock::getInstance(), analogWrite(1, 128)); + analogWrite(1, 128); + EXPECT_CALL(ArduinoMock::getInstance(), analogWrite(2, 129)); + analogWrite(pin_t(2), analog_t(129)); + EXPECT_CALL(ArduinoMock::getInstance(), analogWrite(3, 128)); + analogWrite(pin_t(3), 128); + EXPECT_CALL(ArduinoMock::getInstance(), analogWrite(4, 129)); + analogWrite(unsigned(4), analog_t(129)); + EXPECT_CALL(ArduinoMock::getInstance(), analogWrite(5, 128)); + analogWrite(unsigned(5), 128); EXPECT_CALL(el_1, analogWrite(0, 127)); - analogWrite(el_1.pin(0), 127); - EXPECT_CALL(el_1, analogWrite(0, 127)); - analogWrite((int)el_1.pin(0), 127); - EXPECT_CALL(el_1, analogWrite(9, 127)); - analogWrite(el_1.pin(9), 127); - EXPECT_CALL(el_1, analogWrite(9, 127)); - analogWrite((int)el_1.pin(9), 127); - EXPECT_CALL(el_1, analogWrite(9, 127)); - analogWrite((int)el_1.pin(9), (analog_t)127); - - EXPECT_CALL(el_2, analogWrite(0, 127)); - analogWrite(el_2.pin(0), 127); - EXPECT_CALL(el_2, analogWrite(0, 127)); - analogWrite((int)el_2.pin(0), 127); - EXPECT_CALL(el_2, analogWrite(9, 127)); - analogWrite(el_2.pin(9), 127); - EXPECT_CALL(el_2, analogWrite(9, 127)); - analogWrite((int)el_2.pin(9), 127); - EXPECT_CALL(el_2, analogWrite(9, 127)); - analogWrite((int)el_2.pin(9), (analog_t)127); + analogWrite(el_1.pin(0), analog_t(127)); + EXPECT_CALL(el_1, analogWrite(9, 126)); + analogWrite(el_1.pin(9), 126); + + EXPECT_CALL(el_2, analogWrite(0, 12)); + analogWrite(el_2.pin(0), analog_t(12)); + EXPECT_CALL(el_2, analogWrite(9, 1)); + analogWrite(el_2.pin(9), 1); + + CachedExtIOPin c_el_1_5{el_1.pin(5)}; + EXPECT_CALL(el_1, analogWrite(5, 125)); + analogWrite(c_el_1_5, analog_t(125)); + EXPECT_CALL(el_1, analogWrite(5, 124)); + analogWrite(c_el_1_5, 124); + + analogWrite(NO_PIN, 123); + analogWrite(CachedExtIOPin(NO_PIN), 123); Mock::VerifyAndClear(&ArduinoMock::getInstance()); } @@ -164,24 +198,27 @@ TEST(ExtendedInputOutput, pinMode) { EXPECT_CALL(ArduinoMock::getInstance(), pinMode(0, INPUT_PULLUP)); pinMode(0, INPUT_PULLUP); + EXPECT_CALL(ArduinoMock::getInstance(), pinMode(1, INPUT_PULLUP)); + pinMode(pin_t(1), INPUT_PULLUP); + EXPECT_CALL(ArduinoMock::getInstance(), pinMode(2, INPUT_PULLUP)); + pinMode(unsigned(2), INPUT_PULLUP); EXPECT_CALL(el_1, pinMode(0, INPUT_PULLUP)); pinMode(el_1.pin(0), INPUT_PULLUP); - EXPECT_CALL(el_1, pinMode(0, INPUT_PULLUP)); - pinMode((int)el_1.pin(0), INPUT_PULLUP); - EXPECT_CALL(el_1, pinMode(9, INPUT_PULLUP)); - pinMode(el_1.pin(9), INPUT_PULLUP); - EXPECT_CALL(el_1, pinMode(9, INPUT_PULLUP)); - pinMode((int)el_1.pin(9), INPUT_PULLUP); - - EXPECT_CALL(el_2, pinMode(0, INPUT_PULLUP)); - pinMode(el_2.pin(0), INPUT_PULLUP); - EXPECT_CALL(el_2, pinMode(0, INPUT_PULLUP)); - pinMode((int)el_2.pin(0), INPUT_PULLUP); + EXPECT_CALL(el_1, pinMode(9, OUTPUT)); + pinMode(el_1.pin(9), OUTPUT); + + EXPECT_CALL(el_2, pinMode(0, INPUT)); + pinMode(el_2.pin(0), INPUT); EXPECT_CALL(el_2, pinMode(9, INPUT_PULLUP)); pinMode(el_2.pin(9), INPUT_PULLUP); - EXPECT_CALL(el_2, pinMode(9, INPUT_PULLUP)); - pinMode((int)el_2.pin(9), INPUT_PULLUP); + + CachedExtIOPin c_el_1_5{el_1.pin(5)}; + EXPECT_CALL(el_1, pinMode(5, OUTPUT)); + pinMode(c_el_1_5, OUTPUT); + + pinMode(NO_PIN, OUTPUT); + pinMode(CachedExtIOPin(NO_PIN), OUTPUT); Mock::VerifyAndClear(&ArduinoMock::getInstance()); } @@ -278,6 +315,14 @@ TEST(ExtendedInputOutput, shiftOutMSBFIRST) { EXPECT_CALL(el, digitalWrite(clck, 0)); shiftOut(el.pin(data), el.pin(clck), MSBFIRST, 0b10011100); +} + +TEST(ExtendedInputOutput, shiftOutLSBFIRST) { + MockExtIOElement el = {10}; + + testing::InSequence s; + uint8_t data = 0; + uint8_t clck = 1; EXPECT_CALL(el, digitalWrite(data, 1)); EXPECT_CALL(el, digitalWrite(clck, 1)); @@ -304,10 +349,199 @@ TEST(ExtendedInputOutput, shiftOutMSBFIRST) { EXPECT_CALL(el, digitalWrite(clck, 1)); EXPECT_CALL(el, digitalWrite(clck, 0)); - shiftOut((int)el.pin(data), (int)el.pin(clck), MSBFIRST, 0b10011100); + shiftOut(el.pin(data), el.pin(clck), LSBFIRST, 0b00111001); } -TEST(ExtendedInputOutput, shiftOutLSBFIRST) { +TEST(ExtendedInputOutput, shiftOutNative) { + MockExtIOElement el = {10}; + + pin_t data = 0; + pin_t clck = 1; + + EXPECT_CALL(ArduinoMock::getInstance(), + shiftOut(0, 1, LSBFIRST, 0b00111001)); + shiftOut(data, clck, LSBFIRST, 0b00111001); +} + +TEST(ExtendedInputOutput, shiftOutNativeInt) { + MockExtIOElement el = {10}; + + int data = 0; + int clck = 1; + + EXPECT_CALL(ArduinoMock::getInstance(), + shiftOut(0, 1, LSBFIRST, 0b00111001)); + shiftOut(data, clck, LSBFIRST, 0b00111001); +} + +TEST(ExtendedInputOutput, shiftOutNativeUInt) { + MockExtIOElement el = {10}; + + unsigned data = 0; + unsigned clck = 1; + + EXPECT_CALL(ArduinoMock::getInstance(), + shiftOut(0, 1, LSBFIRST, 0b00111001)); + shiftOut(data, clck, LSBFIRST, 0b00111001); +} + +TEST(ExtendedInputOutput, shiftOutMSBFIRSTMixed) { + MockExtIOElement el = {10}; + + testing::InSequence s; + uint8_t data = 0; + uint8_t clck = 1; + + EXPECT_CALL(el, digitalWrite(data, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 0)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 0)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 0)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 0)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + + shiftOut(el.pin(data), pin_t(clck), MSBFIRST, 0b10011100); + Mock::VerifyAndClear(&ArduinoMock::getInstance()); +} + +TEST(ExtendedInputOutput, shiftOutLSBFIRSTMixed) { + MockExtIOElement el = {10}; + + testing::InSequence s; + uint8_t data = 0; + uint8_t clck = 1; + + EXPECT_CALL(el, digitalWrite(data, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 0)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 0)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 0)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 0)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + + shiftOut(el.pin(data), pin_t(clck), LSBFIRST, 0b00111001); + Mock::VerifyAndClear(&ArduinoMock::getInstance()); +} + +TEST(ExtendedInputOutput, shiftOutNoPin) { + MockExtIOElement el = {10}; + + pin_t data = 0; + pin_t clck = NO_PIN; + + shiftOut(data, clck, LSBFIRST, 0b00111001); + Mock::VerifyAndClear(&ArduinoMock::getInstance()); +} + +TEST(ExtendedInputOutput, shiftOutMSBFIRSTMixedCached) { + MockExtIOElement el = {10}; + + testing::InSequence s; + uint8_t data = 0; + uint8_t clck = 1; + + EXPECT_CALL(el, digitalWrite(data, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 0)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 0)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 0)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 0)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + + shiftOut(CachedExtIOPin(el.pin(data)), CachedExtIOPin(pin_t(clck)), + MSBFIRST, 0b10011100); + Mock::VerifyAndClear(&ArduinoMock::getInstance()); +} + +TEST(ExtendedInputOutput, shiftOutLSBFIRSTMixedCached) { + MockExtIOElement el = {10}; + + testing::InSequence s; + uint8_t data = 0; + uint8_t clck = 1; + + EXPECT_CALL(el, digitalWrite(data, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 0)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 0)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 0)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + EXPECT_CALL(el, digitalWrite(data, 0)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 1)); + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(clck, 0)); + + shiftOut(CachedExtIOPin(el.pin(data)), CachedExtIOPin(pin_t(clck)), + LSBFIRST, 0b00111001); + Mock::VerifyAndClear(&ArduinoMock::getInstance()); +} + +TEST(ExtendedInputOutput, shiftOutMSBFIRSTCached) { MockExtIOElement el = {10}; testing::InSequence s; @@ -339,7 +573,16 @@ TEST(ExtendedInputOutput, shiftOutLSBFIRST) { EXPECT_CALL(el, digitalWrite(clck, 1)); EXPECT_CALL(el, digitalWrite(clck, 0)); - shiftOut(el.pin(data), el.pin(clck), LSBFIRST, 0b00111001); + shiftOut(CachedExtIOPin(el.pin(data)), CachedExtIOPin(el.pin(clck)), + MSBFIRST, 0b10011100); +} + +TEST(ExtendedInputOutput, shiftOutLSBFIRSTCached) { + MockExtIOElement el = {10}; + + testing::InSequence s; + uint8_t data = 0; + uint8_t clck = 1; EXPECT_CALL(el, digitalWrite(data, 1)); EXPECT_CALL(el, digitalWrite(clck, 1)); @@ -366,5 +609,129 @@ TEST(ExtendedInputOutput, shiftOutLSBFIRST) { EXPECT_CALL(el, digitalWrite(clck, 1)); EXPECT_CALL(el, digitalWrite(clck, 0)); - shiftOut((int)el.pin(data), (int)el.pin(clck), LSBFIRST, 0b00111001); + shiftOut(CachedExtIOPin(el.pin(data)), CachedExtIOPin(el.pin(clck)), + LSBFIRST, 0b00111001); +} + +TEST(ExtendedInputOutput, shiftOutNativeCached) { + MockExtIOElement el = {10}; + + pin_t data = 0; + pin_t clck = 1; + + EXPECT_CALL(ArduinoMock::getInstance(), + shiftOut(0, 1, LSBFIRST, 0b00111001)); + shiftOut(CachedExtIOPin(data), CachedExtIOPin(clck), LSBFIRST, 0b00111001); + Mock::VerifyAndClear(&ArduinoMock::getInstance()); +} + +TEST(ExtendedInputOutput, shiftOutNoPinCached) { + MockExtIOElement el = {10}; + + pin_t data = 0; + pin_t clck = NO_PIN; + + shiftOut(CachedExtIOPin(data), CachedExtIOPin(clck), LSBFIRST, 0b00111001); + Mock::VerifyAndClear(&ArduinoMock::getInstance()); +} + +TEST(ExtendedIOElement, bufferedMinimal) { + MinimalMockExtIOElement e(8); + + testing::InSequence s; + + EXPECT_CALL(e, updateBufferedInputs()); + EXPECT_CALL(e, digitalReadBuffered(4)); + ExtIO::digitalRead(e.pin(4)); + Mock::VerifyAndClear(&e); + + EXPECT_CALL(e, updateBufferedInputs()); + EXPECT_CALL(e, analogReadBuffered(7)); + ExtIO::analogRead(e.pin(7)); + Mock::VerifyAndClear(&e); + + EXPECT_CALL(e, pinModeBuffered(0, INPUT)); + EXPECT_CALL(e, updateBufferedOutputs()); + ExtIO::pinMode(e.pin(0), INPUT); + Mock::VerifyAndClear(&e); + + EXPECT_CALL(e, digitalWriteBuffered(0, HIGH)); + EXPECT_CALL(e, updateBufferedOutputs()); + ExtIO::digitalWrite(e.pin(0), HIGH); + Mock::VerifyAndClear(&e); + + EXPECT_CALL(e, analogWriteBuffered(0, 511)); + EXPECT_CALL(e, updateBufferedOutputs()); + ExtIO::analogWrite(e.pin(0), 511); + Mock::VerifyAndClear(&e); +} + +TEST(ExtendedIOElement, bufferedGlobal) { + MinimalMockExtIOElement e(8); + + testing::InSequence s; + + EXPECT_CALL(e, digitalReadBuffered(4)); + ExtIO::digitalReadBuffered(e.pin(4)); + Mock::VerifyAndClear(&e); + + EXPECT_CALL(e, analogReadBuffered(7)); + ExtIO::analogReadBuffered(e.pin(7)); + Mock::VerifyAndClear(&e); + + EXPECT_CALL(e, pinModeBuffered(0, INPUT)); + ExtIO::pinModeBuffered(e.pin(0), INPUT); + Mock::VerifyAndClear(&e); + + EXPECT_CALL(e, digitalWriteBuffered(0, HIGH)); + ExtIO::digitalWriteBuffered(e.pin(0), HIGH); + Mock::VerifyAndClear(&e); + + EXPECT_CALL(e, analogWriteBuffered(0, 511)).Times(2); + ExtIO::analogWriteBuffered(e.pin(0), 511); + ExtIO::analogWriteBuffered(e.pin(0), (analog_t)511); + Mock::VerifyAndClear(&e); +} + +TEST(ExtendedIOElement, bufferedGlobalArduino) { + testing::InSequence s; + + EXPECT_CALL(ArduinoMock::getInstance(), digitalRead(4)); + ExtIO::digitalReadBuffered(4); + Mock::VerifyAndClear(&ArduinoMock::getInstance()); + + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(7)); + ExtIO::analogReadBuffered(7); + Mock::VerifyAndClear(&ArduinoMock::getInstance()); + + EXPECT_CALL(ArduinoMock::getInstance(), pinMode(0, INPUT)); + ExtIO::pinModeBuffered(0, INPUT); + Mock::VerifyAndClear(&ArduinoMock::getInstance()); + + EXPECT_CALL(ArduinoMock::getInstance(), digitalWrite(0, HIGH)); + ExtIO::digitalWriteBuffered(0, HIGH); + Mock::VerifyAndClear(&ArduinoMock::getInstance()); + + EXPECT_CALL(ArduinoMock::getInstance(), analogWrite(0, 511)).Times(2); + ExtIO::analogWriteBuffered(0, 511); + ExtIO::analogWriteBuffered(0, (analog_t)511); + Mock::VerifyAndClear(&ArduinoMock::getInstance()); +} + +TEST(ExtendedIOElement, updateAllBufferedInputs) { + MockExtIOElement el1(10); + MockExtIOElement el2(10); + + EXPECT_CALL(el1, updateBufferedInputs()); + EXPECT_CALL(el2, updateBufferedInputs()); + ExtendedIOElement::updateAllBufferedInputs(); +} + +TEST(ExtendedIOElement, updateAllBufferedOutputs) { + MockExtIOElement el1(10); + MockExtIOElement el2(10); + + EXPECT_CALL(el1, updateBufferedOutputs()); + EXPECT_CALL(el2, updateBufferedOutputs()); + ExtendedIOElement::updateAllBufferedOutputs(); } \ No newline at end of file diff --git a/test/AH/Hardware/test-Button.cpp b/test/AH/Hardware/test-Button.cpp index 4beab4d59..e5e1a0a60 100644 --- a/test/AH/Hardware/test-Button.cpp +++ b/test/AH/Hardware/test-Button.cpp @@ -1,6 +1,6 @@ #include -#include -#include +#include +#include using namespace ::testing; USING_AH_NAMESPACE; diff --git a/test/AH/Hardware/test-FilteredAnalog.cpp b/test/AH/Hardware/test-FilteredAnalog.cpp new file mode 100644 index 000000000..d6fb22bb9 --- /dev/null +++ b/test/AH/Hardware/test-FilteredAnalog.cpp @@ -0,0 +1,298 @@ +#include + +#include + +USING_AH_NAMESPACE; + +using ::testing::InSequence; +using ::testing::Return; + +TEST(FilteredAnalog, Hysteresis) { + pin_t pin = A0; + FilteredAnalog<9, 0> analog = pin; + + EXPECT_CALL(ArduinoMock::getInstance(), analogReadResolution(10)); + FilteredAnalog<9, 0>::setupADC(); + ::testing::Mock::VerifyAndClear(&ArduinoMock::getInstance()); + + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(pin)) + .WillOnce(Return(1023)); + EXPECT_TRUE(analog.update()); + EXPECT_EQ(analog.getValue(), 511); + EXPECT_FLOAT_EQ(analog.getFloatValue(), 511. / 511); + + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(pin)) + .WillOnce(Return(1022)); + EXPECT_FALSE(analog.update()); + EXPECT_EQ(analog.getValue(), 511); + EXPECT_FLOAT_EQ(analog.getFloatValue(), 511. / 511); + + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(pin)) + .WillOnce(Return(1021)); + EXPECT_FALSE(analog.update()); + EXPECT_EQ(analog.getValue(), 511); + EXPECT_FLOAT_EQ(analog.getFloatValue(), 511. / 511); + + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(pin)) + .WillOnce(Return(1020)); + EXPECT_TRUE(analog.update()); + EXPECT_EQ(analog.getValue(), 510); + EXPECT_FLOAT_EQ(analog.getFloatValue(), 510. / 511); + + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(pin)) + .WillOnce(Return(1021)); + EXPECT_FALSE(analog.update()); + EXPECT_EQ(analog.getValue(), 510); + EXPECT_FLOAT_EQ(analog.getFloatValue(), 510. / 511); + + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(pin)) + .WillOnce(Return(1022)); + EXPECT_FALSE(analog.update()); + EXPECT_EQ(analog.getValue(), 510); + EXPECT_FLOAT_EQ(analog.getFloatValue(), 510. / 511); + + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(pin)) + .WillOnce(Return(1023)); + EXPECT_TRUE(analog.update()); + EXPECT_EQ(analog.getValue(), 511); + EXPECT_FLOAT_EQ(analog.getFloatValue(), 511. / 511); + + ::testing::Mock::VerifyAndClear(&ArduinoMock::getInstance()); +} + +TEST(FilteredAnalog, resetToCurrentValue) { + pin_t pin = A0; + FilteredAnalog<9, 2> analog = pin; + + EXPECT_CALL(ArduinoMock::getInstance(), analogReadResolution(10)); + FilteredAnalog<>::setupADC(); + ::testing::Mock::VerifyAndClear(&ArduinoMock::getInstance()); + + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(pin)) + .WillOnce(Return(2 * 193)); + analog.resetToCurrentValue(); + EXPECT_EQ(analog.getValue(), 193); + + ::testing::Mock::VerifyAndClear(&ArduinoMock::getInstance()); +} + +TEST(FilteredAnalog, reset) { + pin_t pin = A0; + FilteredAnalog<9, 2> analog = pin; + + EXPECT_CALL(ArduinoMock::getInstance(), analogReadResolution(10)); + FilteredAnalog<>::setupADC(); + ::testing::Mock::VerifyAndClear(&ArduinoMock::getInstance()); + + analog.reset(503); + EXPECT_EQ(analog.getValue(), 503); + + ::testing::Mock::VerifyAndClear(&ArduinoMock::getInstance()); +} + +TEST(FilteredAnalog, map) { + pin_t pin = A0; + FilteredAnalog<9, 0> analog = pin; + analog.map([](analog_t x) -> analog_t { return x - 65536 / 2; }); + + EXPECT_CALL(ArduinoMock::getInstance(), analogReadResolution(10)); + FilteredAnalog<9, 0>::setupADC(); + ::testing::Mock::VerifyAndClear(&ArduinoMock::getInstance()); + + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(pin)) + .WillOnce(Return(1023)); + EXPECT_TRUE(analog.update()); + EXPECT_EQ(analog.getValue(), 511 - 256); + EXPECT_FLOAT_EQ(analog.getFloatValue(), (511 - 256.) / 511); + + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(pin)) + .WillOnce(Return(1022)); + EXPECT_FALSE(analog.update()); + EXPECT_EQ(analog.getValue(), 511 - 256); + EXPECT_FLOAT_EQ(analog.getFloatValue(), (511 - 256.) / 511); + + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(pin)) + .WillOnce(Return(1021)); + EXPECT_FALSE(analog.update()); + EXPECT_EQ(analog.getValue(), 511 - 256); + EXPECT_FLOAT_EQ(analog.getFloatValue(), (511 - 256.) / 511); + + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(pin)) + .WillOnce(Return(1020)); + EXPECT_TRUE(analog.update()); + EXPECT_EQ(analog.getValue(), 510 - 256); + EXPECT_FLOAT_EQ(analog.getFloatValue(), (510 - 256.) / 511); + + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(pin)) + .WillOnce(Return(1021)); + EXPECT_FALSE(analog.update()); + EXPECT_EQ(analog.getValue(), 510 - 256); + EXPECT_FLOAT_EQ(analog.getFloatValue(), (510 - 256.) / 511); + + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(pin)) + .WillOnce(Return(1022)); + EXPECT_FALSE(analog.update()); + EXPECT_EQ(analog.getValue(), 510 - 256); + EXPECT_FLOAT_EQ(analog.getFloatValue(), (510 - 256.) / 511); + + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(pin)) + .WillOnce(Return(1023)); + EXPECT_TRUE(analog.update()); + EXPECT_EQ(analog.getValue(), 511 - 256); + EXPECT_FLOAT_EQ(analog.getFloatValue(), (511 - 256.) / 511); + + ::testing::Mock::VerifyAndClear(&ArduinoMock::getInstance()); +} + +TEST(FilteredAnalog, invert) { + pin_t pin = A0; + FilteredAnalog<9, 0> analog = pin; + analog.invert(); + + EXPECT_CALL(ArduinoMock::getInstance(), analogReadResolution(10)); + FilteredAnalog<9, 0>::setupADC(); + ::testing::Mock::VerifyAndClear(&ArduinoMock::getInstance()); + + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(pin)) + .WillOnce(Return(0)); + EXPECT_TRUE(analog.update()); + EXPECT_EQ(analog.getValue(), 511); + EXPECT_FLOAT_EQ(analog.getFloatValue(), 511. / 511); + + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(pin)) + .WillOnce(Return(1)); + EXPECT_FALSE(analog.update()); + EXPECT_EQ(analog.getValue(), 511); + EXPECT_FLOAT_EQ(analog.getFloatValue(), 511. / 511); + + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(pin)) + .WillOnce(Return(2)); + EXPECT_FALSE(analog.update()); + EXPECT_EQ(analog.getValue(), 511); + EXPECT_FLOAT_EQ(analog.getFloatValue(), 511. / 511); + + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(pin)) + .WillOnce(Return(3)); + EXPECT_TRUE(analog.update()); + EXPECT_EQ(analog.getValue(), 510); + EXPECT_FLOAT_EQ(analog.getFloatValue(), 510. / 511); + + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(pin)) + .WillOnce(Return(2)); + EXPECT_FALSE(analog.update()); + EXPECT_EQ(analog.getValue(), 510); + EXPECT_FLOAT_EQ(analog.getFloatValue(), 510. / 511); + + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(pin)) + .WillOnce(Return(1)); + EXPECT_FALSE(analog.update()); + EXPECT_EQ(analog.getValue(), 510); + EXPECT_FLOAT_EQ(analog.getFloatValue(), 510. / 511); + + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(pin)) + .WillOnce(Return(0)); + EXPECT_TRUE(analog.update()); + EXPECT_EQ(analog.getValue(), 511); + EXPECT_FLOAT_EQ(analog.getFloatValue(), 511. / 511); + + ::testing::Mock::VerifyAndClear(&ArduinoMock::getInstance()); +} + +TEST(GenericFilteredAnalog, MappingFunction) { + struct MockMappingFunction { + MOCK_METHOD(bool, enabled, (), (const)); + MOCK_METHOD(analog_t, map, (analog_t), (const)); + explicit operator bool() const { return enabled(); } + analog_t operator()(analog_t x) const { return map(x); }; + }; + + pin_t pin = A0; + MockMappingFunction map; + GenericFilteredAnalog analog = { + pin, + map, + }; + + EXPECT_CALL(ArduinoMock::getInstance(), analogReadResolution(10)); + FilteredAnalog<9, 0>::setupADC(); + ::testing::Mock::VerifyAndClear(&ArduinoMock::getInstance()); + + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(pin)) + .WillOnce(Return(1023)); + EXPECT_CALL(map, enabled()).WillOnce(Return(false)); + EXPECT_TRUE(analog.update()); + EXPECT_EQ(analog.getValue(), 511); + + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(pin)) + .WillOnce(Return(1023)); + EXPECT_CALL(map, enabled()).WillOnce(Return(true)); + EXPECT_CALL(map, map(65535)).WillOnce(Return(32767)); + EXPECT_TRUE(analog.update()); + EXPECT_EQ(analog.getValue(), 255); + + ::testing::Mock::VerifyAndClear(&ArduinoMock::getInstance()); +} + +TEST(GenericFilteredAnalog, MappingFunctionNoBool) { + struct MockMappingFunction { + MOCK_METHOD(analog_t, map, (analog_t), (const)); + analog_t operator()(analog_t x) const { return map(x); }; + }; + + pin_t pin = A0; + MockMappingFunction map; + GenericFilteredAnalog analog = { + pin, + map, + }; + + EXPECT_CALL(ArduinoMock::getInstance(), analogReadResolution(10)); + FilteredAnalog<9, 0>::setupADC(); + ::testing::Mock::VerifyAndClear(&ArduinoMock::getInstance()); + + EXPECT_CALL(ArduinoMock::getInstance(), analogRead(pin)) + .WillOnce(Return(1023)); + EXPECT_CALL(map, map(65535)).WillOnce(Return(32767)); + EXPECT_TRUE(analog.update()); + EXPECT_EQ(analog.getValue(), 255); + + ::testing::Mock::VerifyAndClear(&ArduinoMock::getInstance()); +} + +TEST(GenericFilteredAnalog, NonCopyableMovableMappingFunction) { + struct MappingFunction { + MappingFunction() = default; + MappingFunction(const MappingFunction &) = delete; + MappingFunction &operator=(const MappingFunction &) = delete; + MappingFunction(MappingFunction &&) = default; + MappingFunction &operator=(MappingFunction &&) = default; + }; + + pin_t pin = A0; + MappingFunction map1; + GenericFilteredAnalog analog = { + pin, + std::move(map1), + }; + + MappingFunction map2; + analog.map(std::move(map2)); +} + +TEST(GenericFilteredAnalog, NonCopyableNonMovableMappingFunction) { + struct MappingFunction { + MappingFunction() = default; + MappingFunction(const MappingFunction &) = delete; + MappingFunction &operator=(const MappingFunction &) = delete; + MappingFunction(MappingFunction &&) = delete; + MappingFunction &operator=(MappingFunction &&) = delete; + }; + + pin_t pin = A0; + MappingFunction map1; + GenericFilteredAnalog analog = { + pin, + map1, + }; + (void)analog; +} \ No newline at end of file diff --git a/test/AH/Hardware/test-IncrementButton.cpp b/test/AH/Hardware/test-IncrementButton.cpp index bef2ff574..b850cec4d 100644 --- a/test/AH/Hardware/test-IncrementButton.cpp +++ b/test/AH/Hardware/test-IncrementButton.cpp @@ -1,6 +1,6 @@ #include -#include -#include +#include +#include using namespace ::testing; USING_AH_NAMESPACE; @@ -36,7 +36,7 @@ TEST(IncrementButton, longPress) { EXPECT_CALL(ArduinoMock::getInstance(), millis()) .Times(1) .WillRepeatedly(Return(1000)); - EXPECT_EQ(b.update(), IncrementButton::Increment); + EXPECT_EQ(b.update(), IncrementButton::IncrementShort); // Stay low EXPECT_CALL(ArduinoMock::getInstance(), digitalRead(2)) @@ -52,7 +52,7 @@ TEST(IncrementButton, longPress) { EXPECT_CALL(ArduinoMock::getInstance(), millis()) .Times(2) .WillRepeatedly(Return(1000 + LONG_PRESS_DELAY)); - EXPECT_EQ(b.update(), IncrementButton::Increment); + EXPECT_EQ(b.update(), IncrementButton::IncrementLong); // Long press, still pressed EXPECT_CALL(ArduinoMock::getInstance(), digitalRead(2)) @@ -70,16 +70,41 @@ TEST(IncrementButton, longPress) { .Times(2) .WillRepeatedly( Return(1000 + LONG_PRESS_DELAY + LONG_PRESS_REPEAT_DELAY)); - EXPECT_EQ(b.update(), IncrementButton::Increment); + EXPECT_EQ(b.update(), IncrementButton::IncrementHold); - // Release + // Release (long press) EXPECT_CALL(ArduinoMock::getInstance(), digitalRead(2)) .WillOnce(Return(HIGH)); EXPECT_CALL(ArduinoMock::getInstance(), millis()) .Times(1) .WillRepeatedly( Return(1000 + LONG_PRESS_DELAY + LONG_PRESS_REPEAT_DELAY + 1000)); + EXPECT_EQ(b.update(), IncrementButton::ReleasedLong); + + // Fall → increment + EXPECT_CALL(ArduinoMock::getInstance(), digitalRead(2)) + .WillOnce(Return(LOW)); + EXPECT_CALL(ArduinoMock::getInstance(), millis()) + .Times(1) + .WillRepeatedly(Return(10000)); + EXPECT_EQ(b.update(), IncrementButton::IncrementShort); + + // Stay low + EXPECT_CALL(ArduinoMock::getInstance(), digitalRead(2)) + .WillOnce(Return(LOW)); + EXPECT_CALL(ArduinoMock::getInstance(), millis()) + .Times(2) + .WillRepeatedly(Return(10000 + LONG_PRESS_DELAY - 2)); EXPECT_EQ(b.update(), IncrementButton::Nothing); + // Release (short press) + EXPECT_CALL(ArduinoMock::getInstance(), digitalRead(2)) + .WillOnce(Return(HIGH)); + EXPECT_CALL(ArduinoMock::getInstance(), millis()) + .Times(1) + .WillRepeatedly( + Return(10000 + LONG_PRESS_DELAY - 1)); + EXPECT_EQ(b.update(), IncrementButton::ReleasedShort); + Mock::VerifyAndClear(&ArduinoMock::getInstance()); } \ No newline at end of file diff --git a/test/AH/Hardware/test-IncrementDecrementButtons.cpp b/test/AH/Hardware/test-IncrementDecrementButtons.cpp index 899e88a6c..dd83ba9d1 100644 --- a/test/AH/Hardware/test-IncrementDecrementButtons.cpp +++ b/test/AH/Hardware/test-IncrementDecrementButtons.cpp @@ -1,6 +1,6 @@ #include -#include -#include +#include +#include using namespace ::testing; USING_AH_NAMESPACE; @@ -47,7 +47,7 @@ TEST(IncrementDecrementButtons, testAllCombinations) { .WillOnce(Return(HIGH)); EXPECT_CALL(ArduinoMock::getInstance(), millis()) .WillRepeatedly(Return(time)); - EXPECT_EQ(b.update(), IncrementDecrementButtons::Increment); + EXPECT_EQ(b.update(), IncrementDecrementButtons::IncrementShort); Mock::VerifyAndClearExpectations(&ArduinoMock::getInstance()); @@ -73,7 +73,7 @@ TEST(IncrementDecrementButtons, testAllCombinations) { .WillOnce(Return(HIGH)); EXPECT_CALL(ArduinoMock::getInstance(), millis()) .WillRepeatedly(Return(time)); - EXPECT_EQ(b.update(), IncrementDecrementButtons::Increment); + EXPECT_EQ(b.update(), IncrementDecrementButtons::IncrementLong); Mock::VerifyAndClearExpectations(&ArduinoMock::getInstance()); @@ -99,7 +99,7 @@ TEST(IncrementDecrementButtons, testAllCombinations) { .WillOnce(Return(HIGH)); EXPECT_CALL(ArduinoMock::getInstance(), millis()) .WillRepeatedly(Return(time)); - EXPECT_EQ(b.update(), IncrementDecrementButtons::Increment); + EXPECT_EQ(b.update(), IncrementDecrementButtons::IncrementHold); Mock::VerifyAndClearExpectations(&ArduinoMock::getInstance()); @@ -149,7 +149,7 @@ TEST(IncrementDecrementButtons, testAllCombinations) { .WillOnce(Return(HIGH)); EXPECT_CALL(ArduinoMock::getInstance(), millis()) .WillRepeatedly(Return(time)); - EXPECT_EQ(b.update(), IncrementDecrementButtons::Decrement); + EXPECT_EQ(b.update(), IncrementDecrementButtons::DecrementShort); Mock::VerifyAndClearExpectations(&ArduinoMock::getInstance()); @@ -175,7 +175,7 @@ TEST(IncrementDecrementButtons, testAllCombinations) { .WillOnce(Return(HIGH)); EXPECT_CALL(ArduinoMock::getInstance(), millis()) .WillRepeatedly(Return(time)); - EXPECT_EQ(b.update(), IncrementDecrementButtons::Decrement); + EXPECT_EQ(b.update(), IncrementDecrementButtons::DecrementLong); Mock::VerifyAndClearExpectations(&ArduinoMock::getInstance()); @@ -201,7 +201,7 @@ TEST(IncrementDecrementButtons, testAllCombinations) { .WillOnce(Return(HIGH)); EXPECT_CALL(ArduinoMock::getInstance(), millis()) .WillRepeatedly(Return(time)); - EXPECT_EQ(b.update(), IncrementDecrementButtons::Decrement); + EXPECT_EQ(b.update(), IncrementDecrementButtons::DecrementHold); Mock::VerifyAndClearExpectations(&ArduinoMock::getInstance()); diff --git a/test/AH/Math/test-Degrees.cpp b/test/AH/Math/test-Degrees.cpp new file mode 100644 index 000000000..387d48efc --- /dev/null +++ b/test/AH/Math/test-Degrees.cpp @@ -0,0 +1,24 @@ +#include +#include +#include + +using namespace AH; + +TEST(Degrees, rad2deg) { + ASSERT_FLOAT_EQ(rad2deg(M_PI), 180); + ASSERT_FLOAT_EQ(rad2deg((float)M_PI), 180); + ASSERT_FLOAT_EQ(rad2deg(2 * M_PI), 360); + ASSERT_FLOAT_EQ(rad2deg(1.), 57.29577951308232); +} + +TEST(Degrees, deg2rad) { + ASSERT_FLOAT_EQ(deg2rad(180.), M_PI); + ASSERT_FLOAT_EQ(deg2rad(360.), 2 * M_PI); + ASSERT_FLOAT_EQ(deg2rad(57.29577951308232), 1); +} + +TEST(Degrees, deg) { + ASSERT_FLOAT_EQ(180_deg, M_PI); + ASSERT_FLOAT_EQ(360_deg, 2 * M_PI); + ASSERT_FLOAT_EQ(57.29577951308232_deg, 1); +} \ No newline at end of file diff --git a/test/AH/Math/test-IncreaseBitDepth.cpp b/test/AH/Math/test-IncreaseBitDepth.cpp index ef660b44f..5e5d05b42 100644 --- a/test/AH/Math/test-IncreaseBitDepth.cpp +++ b/test/AH/Math/test-IncreaseBitDepth.cpp @@ -1,7 +1,8 @@ -#include +#include #include #include +#include USING_AH_NAMESPACE; diff --git a/test/AH/Math/test-Quaternion.cpp b/test/AH/Math/test-Quaternion.cpp new file mode 100644 index 000000000..f81f42e81 --- /dev/null +++ b/test/AH/Math/test-Quaternion.cpp @@ -0,0 +1,408 @@ +#include +#include +#include + +#include + +static constexpr float eps = 1e2f * std::numeric_limits::epsilon(); + +// -------------------------------------------------------------------------- // +// QUATERNION // +// -------------------------------------------------------------------------- // + +using AH::EulerAngles; +using AH::Quaternion; +using AH::Vec3f; +using AH::operator""_deg; + +TEST(Quaternion, constructorDefault) { + Quaternion def = {}; + ASSERT_EQ(def.w, 1.0f); + ASSERT_EQ(def.x, 0.0f); + ASSERT_EQ(def.y, 0.0f); + ASSERT_EQ(def.z, 0.0f); +} + +TEST(Quaternion, constructorParameters) { + Quaternion q = {1, 2, 5, 7}; + ASSERT_EQ(q.w, 1.0f); + ASSERT_EQ(q.x, 2.0f); + ASSERT_EQ(q.y, 5.0f); + ASSERT_EQ(q.z, 7.0f); +} + +TEST(Quaternion, identity) { + Quaternion q = Quaternion::identity(); + ASSERT_EQ(q.w, 1.0f); + ASSERT_EQ(q.x, 0.0f); + ASSERT_EQ(q.y, 0.0f); + ASSERT_EQ(q.z, 0.0f); +} + +TEST(Quaternion, hamiltonionProduct) { + Quaternion q = {1, 2, 5, 7}; + Quaternion r = {11, 13, 17, 19}; + Quaternion result = Quaternion::hamiltonianProduct(q, r); + Quaternion expected = {-233, 11, 125, 65}; + ASSERT_EQ(result, expected); +} + +TEST(Quaternion, add) { + Quaternion q = {1, 2, 5, 7}; + Quaternion r = {11, 13, 17, 19}; + Quaternion result = q + r; + Quaternion expected = {-233, 11, 125, 65}; + ASSERT_EQ(result, expected); +} + +TEST(Quaternion, addAssign) { + Quaternion q = {1, 2, 5, 7}; + Quaternion r = {11, 13, 17, 19}; + Quaternion result = (q += r); + Quaternion expected = {-233, 11, 125, 65}; + ASSERT_EQ(q, expected); + ASSERT_EQ(result, expected); +} + +TEST(Quaternion, conjugated) { + Quaternion q = {1, 2, 5, 7}; + Quaternion result = q.conjugated(); + Quaternion expected = {1, -2, -5, -7}; + ASSERT_EQ(result, expected); +} + +TEST(Quaternion, negate) { + Quaternion q = {1, 2, 5, 7}; + Quaternion result = -q; + Quaternion expected = {1, -2, -5, -7}; + ASSERT_EQ(result, expected); +} + +TEST(Quaternion, subtract) { + Quaternion q = {1, 2, 5, 7}; + Quaternion r = {11, 13, 17, 19}; + Quaternion result = r - q; + Quaternion expected = {255, -33, 15, -89}; + ASSERT_EQ(result, expected); +} + +TEST(Quaternion, subtractAssign) { + Quaternion q = {1, 2, 5, 7}; + Quaternion r = {11, 13, 17, 19}; + Quaternion result = (r -= q); + Quaternion expected = {255, -33, 15, -89}; + ASSERT_EQ(r, expected); + ASSERT_EQ(result, expected); +} + +TEST(Quaternion, multiplyRight) { + Quaternion q = {1, 2, 5, 7}; + float factor = 3; + Quaternion result = q * factor; + Quaternion expected = {3, 6, 15, 21}; + ASSERT_EQ(result, expected); +} + +TEST(Quaternion, multiplyLeft) { + Quaternion q = {1, 2, 5, 7}; + float factor = 3; + Quaternion result = factor * q; + Quaternion expected = {3, 6, 15, 21}; + ASSERT_EQ(result, expected); +} + +TEST(Quaternion, multiplyAssign) { + Quaternion q = {1, 2, 5, 7}; + float factor = 3; + Quaternion result = (q *= factor); + Quaternion expected = {3, 6, 15, 21}; + ASSERT_EQ(q, expected); + ASSERT_EQ(result, expected); +} + +TEST(Quaternion, divide) { + Quaternion q = {1, 2, 5, 7}; + float factor = 2; + Quaternion result = q / factor; + Quaternion expected = {0.5, 1, 2.5, 3.5}; + ASSERT_EQ(result, expected); +} + +TEST(Quaternion, divideAssign) { + Quaternion q = {1, 2, 5, 7}; + float factor = 2; + Quaternion result = (q /= factor); + Quaternion expected = {0.5, 1, 2.5, 3.5}; + ASSERT_EQ(q, expected); + ASSERT_EQ(result, expected); +} + +TEST(Quaternion, normSquared) { + Quaternion q = {1, 2, 5, 7}; + float result = q.normSquared(); + float expected = 79; + ASSERT_EQ(result, expected); +} + +TEST(Quaternion, norm) { + Quaternion q = {1, 2, 5, 7}; + float result = q.norm(); + float expected = std::sqrt(79.0f); + ASSERT_EQ(result, expected); +} + +TEST(Quaternion, normalize) { + Quaternion q = {1, 2, 5, 7}; + Quaternion result = q.normalize(); + Quaternion expected = {1 / std::sqrt(79.0f), 2 / std::sqrt(79.0f), + 5 / std::sqrt(79.0f), 7 / std::sqrt(79.0f)}; + ASSERT_EQ(q, expected); + ASSERT_EQ(result, expected); +} + +TEST(Quaternion, normalized) { + Quaternion q = {1, 2, 5, 7}; + Quaternion result = q.normalized(); + Quaternion expected = {1 / std::sqrt(79.0f), 2 / std::sqrt(79.0f), + 5 / std::sqrt(79.0f), 7 / std::sqrt(79.0f)}; + ASSERT_EQ(result, expected); +} + +TEST(Quaternion, rotate) { + Quaternion q = {1, 2, 5, 7}; + Vec3f v1 = {1, 3, 5}; + Vec3f v2 = {2, 4, 6}; + Vec3f result1 = q.rotate(v1); + Vec3f expected1 = {1.759493670886076, 3.582278481012658, 4.367088607594937}; + Vec3f result2 = q.rotate(v2); + Vec3f expected2 = {1.443037974683544, 4.506329113924051, 5.797468354430380}; + + // Expected is calculated using MATLAB (double precision), so compare its + // components + ASSERT_FLOAT_EQ(result1.x, expected1.x); + ASSERT_FLOAT_EQ(result1.y, expected1.y); + ASSERT_FLOAT_EQ(result1.z, expected1.z); + ASSERT_FLOAT_EQ(result2.x, expected2.x); + ASSERT_FLOAT_EQ(result2.y, expected2.y); + ASSERT_FLOAT_EQ(result2.z, expected2.z); +} + +TEST(Quaternion, equality) { + Quaternion q1 = {1, 2, 5, 7}; + Quaternion q2 = {1, 2, 5, 7}; + Quaternion r = {11, 13, 17, 19}; + bool result1 = (q1 == q2); + bool expected1 = true; + bool result2 = (q1 == r); + bool expected2 = false; + ASSERT_EQ(result1, expected1); + ASSERT_EQ(result2, expected2); +} + +TEST(Quaternion, inequality) { + Quaternion q1 = {1, 2, 5, 7}; + Quaternion q2 = {1, 2, 5, 7}; + Quaternion r = {11, 13, 17, 19}; + bool result1 = (q1 != q2); + bool expected1 = false; + bool result2 = (q1 != r); + bool expected2 = true; + ASSERT_EQ(result1, expected1); + ASSERT_EQ(result2, expected2); +} + +TEST(Quaternion, fromDirectionSimple) { + Vec3f vector = {0.0, 1.0, std::sqrt(3.0f)}; + Quaternion result = Quaternion::fromDirection(vector); + Quaternion expected = {0.965925826289068, -0.258819045102521, 0, 0}; // 30° + + // Expected is calculated using MATLAB (double precision), so compare its + // components. + ASSERT_FLOAT_EQ(result.w, expected.w); + ASSERT_FLOAT_EQ(result.x, expected.x); + ASSERT_FLOAT_EQ(result.y, expected.y); + ASSERT_FLOAT_EQ(result.z, expected.z); + + // Make sure it satisfies the definition of `fromDirection()`. + float diff = (result.rotate({0, 0, 1}) - vector.normalized()).norm(); + ASSERT_LT(diff, eps); +} + +TEST(Quaternion, fromDirectionVertical) { + Vec3f vector = {1e-18, 1e-18, 1}; + Quaternion result = Quaternion::fromDirection(vector); + Quaternion expected = Quaternion::identity(); + + // Expected is calculated using MATLAB (double precision), so compare its + // components. + ASSERT_FLOAT_EQ(result.w, expected.w); + ASSERT_FLOAT_EQ(result.x, expected.x); + ASSERT_FLOAT_EQ(result.y, expected.y); + ASSERT_FLOAT_EQ(result.z, expected.z); + + // Make sure it satisfies the definition of `fromDirection()`. + float diff = (result.rotate({0, 0, 1}) - vector.normalized()).norm(); + ASSERT_LT(diff, eps); +} + +TEST(Quaternion, fromDirectionHard) { + Vec3f vector = {-0.414578098794425, 0.829156197588850, 0.375000000000000}; + Quaternion result = Quaternion::fromDirection(vector); + Quaternion expected = {0.829156197588850, -0.5, -0.25, 0.0}; + + // Expected is calculated using MATLAB (double precision), so compare its + // components + ASSERT_FLOAT_EQ(result.w, expected.w); + ASSERT_FLOAT_EQ(result.x, expected.x); + ASSERT_FLOAT_EQ(result.y, expected.y); + ASSERT_FLOAT_EQ(result.z, expected.z); + + // Make sure it satisfies the definition of `fromDirection()`. + float diff = (result.rotate({0, 0, 1}) - vector.normalized()).norm(); + ASSERT_LT(diff, eps); +} + +TEST(Quaternion, fromDirectionInvalid) { + Vec3f vector = {0, 0, 0}; + Quaternion result = Quaternion::fromDirection(vector); + Quaternion expected = {0, 0, 0, 0}; + EXPECT_EQ(result, expected); +} + +TEST(Quaternion, fromDirectionRandom) { + std::mt19937_64 generator(0); + std::uniform_real_distribution distribution(0.0, M_PI); + + for (size_t i = 0; i < 1'000'000; ++i) { + // Pick a random vector somewhere on the unit sphere + // https://en.wikipedia.org/wiki/Spherical_coordinate_system + float phi = 2 * distribution(generator); // [0, 2π] + float theta = distribution(generator); // [0, π] + Vec3f vector = { + std::sin(theta) * std::cos(phi), + std::sin(theta) * std::sin(phi), + std::cos(theta), + }; + // Convert the vector to its orientation relative to (0 0 1) + Quaternion result = Quaternion::fromDirection(vector); + + // Make sure it satisfies the definition of `fromDirection()` + Vec3f diff = result.rotate({0, 0, 1}) - vector.normalized(); + ASSERT_LT(diff.norm(), eps * 40) + << "i = " << i << ", phi = " << phi << ", theta = " << theta + << ", vector = " << vector << ", quat = " << result << std::endl; + } +} + +TEST(Quaternion, fromXYAngle) { + float xAngle = 10_deg; + float yAngle = -20_deg; + Quaternion q = Quaternion::fromXYAngle(xAngle, yAngle); + Vec3f result = q.rotate(Vec3f{0, 0, 1}); + Vec3f expected = {std::tan(yAngle), -std::tan(xAngle), 1}; + expected.normalize(); + + // Expected is calculated using MATLAB (double precision), so compare its + // components + ASSERT_FLOAT_EQ(result.x, expected.x); + ASSERT_FLOAT_EQ(result.y, expected.y); + ASSERT_FLOAT_EQ(result.z, expected.z); +} + +// -------------------------------------------------------------------------- // +// EULER ANGLES // +// -------------------------------------------------------------------------- // + +TEST(EulerAngles, constructorDefault) { + EulerAngles def = {}; + ASSERT_EQ(def.yaw, 0.0f); + ASSERT_EQ(def.pitch, 0.0f); + ASSERT_EQ(def.roll, 0.0f); +} + +TEST(EulerAngles, constructorParameters) { + EulerAngles e = {2, 3, 5}; + ASSERT_EQ(e.yaw, 2.0f); + ASSERT_EQ(e.pitch, 3.0f); + ASSERT_EQ(e.roll, 5.0f); +} + +TEST(EulerAngles, constructorQuaternion) { + Quaternion q = {1, 2, 5, 7}; + EulerAngles result = q; + EulerAngles expected = EulerAngles::quat2eul(q); + ASSERT_EQ(result, expected); +} + +TEST(EulerAngles, implicitConversionToQuat) { + EulerAngles e = {2, 3, 5}; + Quaternion result = e; + Quaternion expected = EulerAngles::eul2quat(e); + ASSERT_EQ(result, expected); +} + +TEST(EulerAngles, quat2eul) { + Quaternion q = {1, 2, 5, 7}; + EulerAngles result = EulerAngles::quat2eul(q); + EulerAngles expected = {2.68375893257083, -0.229867079467390, + 1.29428238017742}; + + // Expected is calculated using MATLAB (double precision), so compare its + // components. + ASSERT_FLOAT_EQ(result.yaw, expected.yaw); + ASSERT_FLOAT_EQ(result.pitch, expected.pitch); + ASSERT_FLOAT_EQ(result.roll, expected.roll); +} + +TEST(EulerAngles, eul2quat) { + EulerAngles e = {2, 3, 5}; + Quaternion result = EulerAngles::eul2quat(e); + Quaternion expected = {0.471716140466081, 0.695323669708306, + -0.396152384736371, -0.370232582621850}; + + // Expected is calculated using MATLAB (double precision), so compare its + // components. + ASSERT_FLOAT_EQ(result.w, expected.w); + ASSERT_FLOAT_EQ(result.x, expected.x); + ASSERT_FLOAT_EQ(result.y, expected.y); + ASSERT_FLOAT_EQ(result.z, expected.z); +} + +TEST(Quaternion, eul2quatAndBack) { + EulerAngles e = {0.3, -0.7, 0.9}; + Quaternion q = e; + Quaternion q_expected = {0.814068885161671, 0.450147392727527, + -0.244234643193019, 0.273877005417802}; + EulerAngles result = q; + EulerAngles expected = e; + + // Expected is calculated using MATLAB (double precision), so compare its + // components. + ASSERT_FLOAT_EQ(q.w, q_expected.w); + ASSERT_FLOAT_EQ(q.x, q_expected.x); + ASSERT_FLOAT_EQ(q.y, q_expected.y); + ASSERT_FLOAT_EQ(q.z, q_expected.z); + ASSERT_FLOAT_EQ(result.yaw, expected.yaw); + ASSERT_FLOAT_EQ(result.pitch, expected.pitch); + ASSERT_FLOAT_EQ(result.roll, expected.roll); +} + +TEST(Quaternion, quat2eulAndBack) { + Quaternion q = {1, 2, 5, 11}; + q.normalize(); // Conversion to EulerAngles loses the length of q. + EulerAngles e = q; + EulerAngles e_expected = {2.85208898162841, -0.227112959382601, + 0.886501535133747}; + Quaternion result = e; + Quaternion expected = q; + + // Expected is calculated using MATLAB (double precision), so compare its + // components. + ASSERT_FLOAT_EQ(e.yaw, e_expected.yaw); + ASSERT_FLOAT_EQ(e.pitch, e_expected.pitch); + ASSERT_FLOAT_EQ(e.roll, e_expected.roll); + ASSERT_FLOAT_EQ(result.w, expected.w); + ASSERT_FLOAT_EQ(result.x, expected.x); + ASSERT_FLOAT_EQ(result.y, expected.y); + ASSERT_FLOAT_EQ(result.z, expected.z); +} \ No newline at end of file diff --git a/test/AH/Math/test-Vector.cpp b/test/AH/Math/test-Vector.cpp new file mode 100644 index 000000000..554842727 --- /dev/null +++ b/test/AH/Math/test-Vector.cpp @@ -0,0 +1,321 @@ +#include +#include + +using AH::Vec3f; +using AH::Vec2f; + +TEST(Vec2f, constructorDefault) { + Vec2f o = {}; + ASSERT_EQ(o.x, 0.0f); + ASSERT_EQ(o.y, 0.0f); +} + +TEST(Vec2f, constructorParameters) { + Vec2f a = {1, 2}; + ASSERT_EQ(a.x, 1.0f); + ASSERT_EQ(a.y, 2.0f); +} + +TEST(Vec2f, add) { + Vec2f a = {1, 2}; + Vec2f b = {10, 20}; + Vec2f result = a + b; + Vec2f expected = {11, 22}; + ASSERT_EQ(result, expected); +} + +TEST(Vec2f, addAssign) { + Vec2f a = {1, 2}; + Vec2f b = {10, 20}; + Vec2f result = (a += b); + Vec2f expected = {11, 22}; + ASSERT_EQ(a, expected); + ASSERT_EQ(result, expected); +} + +TEST(Vec2f, negate) { + Vec2f a = {1, 2}; + Vec2f result = -a; + Vec2f expected = {-1, -2}; + ASSERT_EQ(result, expected); +} + +TEST(Vec2f, subtract) { + Vec2f a = {1, 2}; + Vec2f b = {10, 20}; + Vec2f result = b - a; + Vec2f expected = {9, 18}; + ASSERT_EQ(result, expected); +} + +TEST(Vec2f, subtractAssign) { + Vec2f a = {1, 2}; + Vec2f b = {10, 20}; + Vec2f result = (b -= a); + Vec2f expected = {9, 18}; + ASSERT_EQ(b, expected); + ASSERT_EQ(result, expected); +} + +TEST(Vec2f, multiplyRight) { + Vec2f a = {1, 2}; + float factor = 3; + Vec2f result = a * factor; + Vec2f expected = {3, 6}; + ASSERT_EQ(result, expected); +} + +TEST(Vec2f, multiplyLeft) { + Vec2f a = {1, 2}; + float factor = 3; + Vec2f result = factor * a; + Vec2f expected = {3, 6}; + ASSERT_EQ(result, expected); +} + +TEST(Vec2f, multiplyAssign) { + Vec2f a = {1, 2}; + float factor = 3; + Vec2f result = (a *= factor); + Vec2f expected = {3, 6}; + ASSERT_EQ(a, expected); + ASSERT_EQ(result, expected); +} + +TEST(Vec2f, divide) { + Vec2f b = {10, 20}; + float factor = 5; + Vec2f result = b / factor; + Vec2f expected = {2, 4}; + ASSERT_EQ(result, expected); +} + +TEST(Vec2f, divideAssign) { + Vec2f b = {10, 20}; + float factor = 5; + Vec2f result = (b /= factor); + Vec2f expected = {2, 4}; + ASSERT_EQ(b, expected); + ASSERT_EQ(result, expected); +} + +TEST(Vec2f, innerProduct) { + Vec2f a = {1, 2}; + Vec2f b = {10, 20}; + float result = a * b; + float expected = 50; + ASSERT_EQ(result, expected); +} + +TEST(Vec2f, normSquared) { + Vec2f a = {1, 2}; + float result = a.normSquared(); + float expected = 5; + ASSERT_EQ(result, expected); +} + +TEST(Vec2f, norm) { + Vec2f a = {1, 2}; + float result = a.norm(); + float expected = std::sqrt(5.0f); + ASSERT_EQ(result, expected); +} + +TEST(Vec2f, normalize) { + Vec2f a = {1, 2}; + Vec2f result = a.normalize(); + Vec2f expected = {1 / std::sqrt(5.0f), 2 / std::sqrt(5.0f)}; + ASSERT_EQ(a, expected); + ASSERT_EQ(result, expected); +} + +TEST(Vec2f, normalized) { + Vec2f a = {1, 2}; + Vec2f result = a.normalized(); + Vec2f expected = {1 / std::sqrt(5.0f), 2 / std::sqrt(5.0f)}; + ASSERT_EQ(result, expected); +} + +TEST(Vec2f, equality) { + Vec2f a1 = {1, 2}; + Vec2f a2 = {1, 2}; + Vec2f b = {10, 20}; + bool result1 = (a1 == a2); + bool expected1 = true; + bool result2 = (a1 == b); + bool expected2 = false; + ASSERT_EQ(result1, expected1); + ASSERT_EQ(result2, expected2); +} + +TEST(Vec2f, inequality) { + Vec2f a1 = {1, 2}; + Vec2f a2 = {1, 2}; + Vec2f b = {10, 20}; + bool result1 = (a1 != a2); + bool expected1 = false; + bool result2 = (a1 != b); + bool expected2 = true; + ASSERT_EQ(result1, expected1); + ASSERT_EQ(result2, expected2); +} + + +TEST(Vec3f, constructorDefault) { + Vec3f o = {}; + ASSERT_EQ(o.x, 0.0f); + ASSERT_EQ(o.y, 0.0f); + ASSERT_EQ(o.z, 0.0f); +} + +TEST(Vec3f, constructorParameters) { + Vec3f a = {1, 2, 3}; + ASSERT_EQ(a.x, 1.0f); + ASSERT_EQ(a.y, 2.0f); + ASSERT_EQ(a.z, 3.0f); +} + + +TEST(Vec3f, add) { + Vec3f a = {1, 2, 3}; + Vec3f b = {10, 20, 30}; + Vec3f result = a + b; + Vec3f expected = {11, 22, 33}; + ASSERT_EQ(result, expected); +} + +TEST(Vec3f, addAssign) { + Vec3f a = {1, 2, 3}; + Vec3f b = {10, 20, 30}; + Vec3f result = (a += b); + Vec3f expected = {11, 22, 33}; + ASSERT_EQ(a, expected); + ASSERT_EQ(result, expected); +} + +TEST(Vec3f, negate) { + Vec3f a = {1, 2, 3}; + Vec3f result = -a; + Vec3f expected = {-1, -2, -3}; + ASSERT_EQ(result, expected); +} + +TEST(Vec3f, subtract) { + Vec3f a = {1, 2, 3}; + Vec3f b = {10, 20, 30}; + Vec3f result = b - a; + Vec3f expected = {9, 18, 27}; + ASSERT_EQ(result, expected); +} + +TEST(Vec3f, subtractAssign) { + Vec3f a = {1, 2, 3}; + Vec3f b = {10, 20, 30}; + Vec3f result = (b -= a); + Vec3f expected = {9, 18, 27}; + ASSERT_EQ(b, expected); + ASSERT_EQ(result, expected); +} + +TEST(Vec3f, multiplyRight) { + Vec3f a = {1, 2, 3}; + float factor = 3; + Vec3f result = a * factor; + Vec3f expected = {3, 6, 9}; + ASSERT_EQ(result, expected); +} + +TEST(Vec3f, multiplyLeft) { + Vec3f a = {1, 2, 3}; + float factor = 3; + Vec3f result = factor * a; + Vec3f expected = {3, 6, 9}; + ASSERT_EQ(result, expected); +} + +TEST(Vec3f, multiplyAssign) { + Vec3f a = {1, 2, 3}; + float factor = 3; + Vec3f result = (a *= factor); + Vec3f expected = {3, 6, 9}; + ASSERT_EQ(a, expected); + ASSERT_EQ(result, expected); +} + +TEST(Vec3f, divide) { + Vec3f b = {10, 20, 30}; + float factor = 5; + Vec3f result = b / factor; + Vec3f expected = {2, 4, 6}; + ASSERT_EQ(result, expected); +} + +TEST(Vec3f, divideAssign) { + Vec3f b = {10, 20, 30}; + float factor = 5; + Vec3f result = (b /= factor); + Vec3f expected = {2, 4, 6}; + ASSERT_EQ(b, expected); + ASSERT_EQ(result, expected); +} + +TEST(Vec3f, innerProduct) { + Vec3f a = {1, 2, 3}; + Vec3f b = {10, 20, 30}; + float result = a * b; + float expected = 140; + ASSERT_EQ(result, expected); +} + +TEST(Vec3f, normSquared) { + Vec3f a = {1, 2, 3}; + float result = a.normSquared(); + float expected = 14; + ASSERT_EQ(result, expected); +} + +TEST(Vec3f, norm) { + Vec3f a = {1, 2, 3}; + float result = a.norm(); + float expected = std::sqrt(14.0f); + ASSERT_EQ(result, expected); +} + +TEST(Vec3f, normalize) { + Vec3f a = {1, 2, 3}; + Vec3f result = a.normalize(); + Vec3f expected = {1 / std::sqrt(14.0f), 2 / std::sqrt(14.0f), 3 / std::sqrt(14.0f)}; + ASSERT_EQ(a, expected); + ASSERT_EQ(result, expected); +} + +TEST(Vec3f, normalized) { + Vec3f a = {1, 2, 3}; + Vec3f result = a.normalized(); + Vec3f expected = {1 / std::sqrt(14.0f), 2 / std::sqrt(14.0f), 3 / std::sqrt(14.0f)}; + ASSERT_EQ(result, expected); +} + +TEST(Vec3f, equality) { + Vec3f a1 = {1, 2, 3}; + Vec3f a2 = {1, 2, 3}; + Vec3f b = {10, 20, 30}; + bool result1 = (a1 == a2); + bool expected1 = true; + bool result2 = (a1 == b); + bool expected2 = false; + ASSERT_EQ(result1, expected1); + ASSERT_EQ(result2, expected2); +} + +TEST(Vec3f, inequality) { + Vec3f a1 = {1, 2, 3}; + Vec3f a2 = {1, 2, 3}; + Vec3f b = {10, 20, 30}; + bool result1 = (a1 != a2); + bool expected1 = false; + bool result2 = (a1 != b); + bool expected2 = true; + ASSERT_EQ(result1, expected1); + ASSERT_EQ(result2, expected2); +} \ No newline at end of file diff --git a/test/AH/PrintStream/test-PrintStream.cpp b/test/AH/PrintStream/test-PrintStream.cpp new file mode 100644 index 000000000..c25f787b1 --- /dev/null +++ b/test/AH/PrintStream/test-PrintStream.cpp @@ -0,0 +1,13 @@ +#include +#include +#include + +using namespace ::testing; +USING_AH_NAMESPACE; + +TEST(Debug, HexDump) { + std::stringstream s; + uint8_t d[] = {0x11, 0x23, 0xF7, 0xFF, 0x00}; + s << HexDump(d, sizeof(d)); + EXPECT_EQ(s.str(), "11 23 F7 FF 00"); +} diff --git a/test/AH/Timing/test-Timer.cpp b/test/AH/Timing/test-Timer.cpp index 59e2966dc..dadd6bcb4 100644 --- a/test/AH/Timing/test-Timer.cpp +++ b/test/AH/Timing/test-Timer.cpp @@ -1,4 +1,4 @@ -#include +#include #include diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 7fdfb4cff..4799a29a5 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,10 +1,41 @@ +include(GoogleTest) + # Test executable compilation and linking -file(GLOB_RECURSE TESTS_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp) -add_executable(tests ${TESTS_SOURCES}) +add_executable(tests + "test_example.cpp" + "test-main.cpp" + "AH/PrintStream/test-PrintStream.cpp" + "AH/Timing/test-Timer.cpp" + "AH/Hardware/test-FilteredAnalog.cpp" + "AH/Hardware/ExtendedInputOutput/test-AnalogMultiplex.cpp" + "AH/Hardware/ExtendedInputOutput/test-ExtendedInputOutput.cpp" + "AH/Hardware/test-IncrementDecrementButtons.cpp" + "AH/Hardware/test-IncrementButton.cpp" + "AH/Hardware/test-Button.cpp" + "AH/Containers/test-Updatable.cpp" + "AH/Containers/test-DoublyLinkedList.cpp" + "AH/Containers/test-Array.cpp" + "AH/Containers/tests-BitArray.cpp" + "AH/Math/test-Degrees.cpp" + "AH/Math/test-Quaternion.cpp" + "AH/Math/test-IncreaseBitDepth.cpp" + "AH/Math/test-Vector.cpp" + "AH/Filters/test-Hysteresis.cpp" + "AH/Filters/test-EMA.cpp" + "Filters/test-SOSFilter.cpp" + "Filters/test-MedianFilter.cpp" + "Filters/test-IIRFilter.cpp" + "Filters/test-BiQuad.cpp" + "Filters/test-Butterworth.cpp" + "Filters/test-FIRFilter.cpp" + "Filters/test-SMA.cpp" + "Filters/test-FixedPoint.cpp" +) target_include_directories(tests PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) target_link_libraries(tests - Arduino_Helpers - googletest_wrappers) + PRIVATE Arduino_Helpers + PRIVATE Arduino-Helpers::warnings) # Add tests -gtest_discover_tests(tests) \ No newline at end of file +gtest_discover_tests(tests DISCOVERY_TIMEOUT 60 TIMEOUT 20) +add_executable(Arduino-Helpers::tests ALIAS tests) \ No newline at end of file diff --git a/test/Filters/test-BiQuad.cpp b/test/Filters/test-BiQuad.cpp new file mode 100644 index 000000000..debd39848 --- /dev/null +++ b/test/Filters/test-BiQuad.cpp @@ -0,0 +1,52 @@ +#include + +#include +#include + +TEST(BiQuad, BiQuadDF1RandomInt) { + using namespace std; + IIRFilter<3, 3, int> reference = {{1, 10, -2}, {-1, 2, -3}}; + BiQuadFilterDF1 biquad = {{1, 10, -2}, {-1, 2, -3}}; + array signal = {100, 10, 102, 23, 51, 1, -10, -53, 100, -100, + 100, -10, 10, 11, 20, 30, 123, 12, 90, 10}; + array expected = signal; + transform(signal.begin(), signal.end(), signal.begin(), biquad); + transform(expected.begin(), expected.end(), expected.begin(), reference); + EXPECT_EQ(signal, expected); +} + +TEST(BiQuad, BiQuadDF1RandomFloat) { + using namespace std; + IIRFilter<3, 3, float> reference = {{1, 10, -2}, {-1, 2, -3}}; + BiQuadFilterDF1 biquad = {{1, 10, -2}, {-1, 2, -3}}; + array signal = {100, 10, 102, 23, 51, 1, -10, -53, 100, -100, + 100, -10, 10, 11, 20, 30, 123, 12, 90, 10}; + array expected = signal; + transform(signal.begin(), signal.end(), signal.begin(), biquad); + transform(expected.begin(), expected.end(), expected.begin(), reference); + EXPECT_EQ(signal, expected); +} + +TEST(BiQuad, BiQuadDF2RandomInt) { + using namespace std; + IIRFilter<3, 3, int> reference = {{1, 10, -2}, {-1, 2, -3}}; + BiQuadFilterDF2 biquad = {{1, 10, -2}, {-1, 2, -3}}; + array signal = {100, 10, 102, 23, 51, 1, -10, -53, 100, -100, + 100, -10, 10, 11, 20, 30, 123, 12, 90, 10}; + array expected = signal; + transform(signal.begin(), signal.end(), signal.begin(), biquad); + transform(expected.begin(), expected.end(), expected.begin(), reference); + EXPECT_EQ(signal, expected); +} + +TEST(BiQuad, BiQuadDF2RandomFloat) { + using namespace std; + IIRFilter<3, 3, float> reference = {{1, 10, -2}, {-1, 2, -3}}; + BiQuadFilterDF2 biquad = {{1, 10, -2}, {-1, 2, -3}}; + array signal = {100, 10, 102, 23, 51, 1, -10, -53, 100, -100, + 100, -10, 10, 11, 20, 30, 123, 12, 90, 10}; + array expected = signal; + transform(signal.begin(), signal.end(), signal.begin(), biquad); + transform(expected.begin(), expected.end(), expected.begin(), reference); + EXPECT_EQ(signal, expected); +} \ No newline at end of file diff --git a/test/Filters/test-Butterworth.cpp b/test/Filters/test-Butterworth.cpp new file mode 100644 index 000000000..af66dd0c1 --- /dev/null +++ b/test/Filters/test-Butterworth.cpp @@ -0,0 +1,150 @@ +#include + +#include +#include + +#include + +TEST(Butterworth, evenOrder) { + using namespace std; + + auto butterworth = butter<6, double>(0.4); + + array signal = {100.0, 10.0, 102.0, 23.0, 51.0, 1.0, -10.0, + -53.0, 100.0, -100.0, 100.0, -10.0, 10.0, 11.0, + 20.0, 30.0, 123.0, 12.0, 90.0, 10.0}; + array expected = { + 1.0312874762664406, 7.5156113134959055, 24.719492782414466, + 48.96419197331465, 65.94168547692809, 64.64286189231214, + 47.611566793390764, 24.459114479787313, 2.30670651957257, + -12.501024944555455, -12.471303690929604, 1.1900356191047718, + 16.094778615441065, 22.424208472570697, 19.737752153200365, + 13.049801559138237, 11.18792332879074, 23.200472458577526, + 48.392807471527775, 71.09457974808586}; + transform(signal.begin(), signal.end(), signal.begin(), butterworth); + for (size_t i = 0; i < signal.size(); ++i) + EXPECT_FLOAT_EQ(signal[i], expected[i]) << "at index " << i; +} + +TEST(Butterworth, oddOrder) { + using namespace std; + + auto butterworth = butter<7, double>(0.4); + + array signal = {100.0, 10.0, 102.0, 23.0, 51.0, 1.0, -10.0, + -53.0, 100.0, -100.0, 100.0, -10.0, 10.0, 11.0, + 20.0, 30.0, 123.0, 12.0, 90.0, 10.0}; + array expected = { + 0.48421152393466566, 4.110607277163259, 15.90100516824798, + 37.248782223463, 59.24082887044678, 67.86896938263345, + 57.57371920434696, 35.23288182688867, 11.224568208632098, + -7.1755802352153415, -14.039847708901476, -6.495413585543419, + 9.106139776920436, 20.900070928261584, 22.518746478860155, + 16.559558467508843, 11.188799404184095, 16.064770949249294, + 35.58427055190113, 61.332940440798545}; + transform(signal.begin(), signal.end(), signal.begin(), butterworth); + for (size_t i = 0; i < signal.size(); ++i) + EXPECT_FLOAT_EQ(signal[i], expected[i]) << "at index " << i; +} + +TEST(Butterworth, evenOrderNonNormalized) { + using namespace std; + + auto butterworth = butter<6, double>(0.4, false); + + array signal = {100.0, 10.0, 102.0, 23.0, 51.0, 1.0, -10.0, + -53.0, 100.0, -100.0, 100.0, -10.0, 10.0, 11.0, + 20.0, 30.0, 123.0, 12.0, 90.0, 10.0}; + array expected = { + 1.0312874762664406, 7.5156113134959055, 24.719492782414466, + 48.96419197331465, 65.94168547692809, 64.64286189231214, + 47.611566793390764, 24.459114479787313, 2.30670651957257, + -12.501024944555455, -12.471303690929604, 1.1900356191047718, + 16.094778615441065, 22.424208472570697, 19.737752153200365, + 13.049801559138237, 11.18792332879074, 23.200472458577526, + 48.392807471527775, 71.09457974808586}; + transform(signal.begin(), signal.end(), signal.begin(), butterworth); + for (size_t i = 0; i < signal.size(); ++i) + EXPECT_FLOAT_EQ(signal[i], expected[i]) << "at index " << i; +} + +TEST(Butterworth, oddOrderNonNormalized) { + using namespace std; + + auto butterworth = butter<7, double>(0.4, false); + + array signal = {100.0, 10.0, 102.0, 23.0, 51.0, 1.0, -10.0, + -53.0, 100.0, -100.0, 100.0, -10.0, 10.0, 11.0, + 20.0, 30.0, 123.0, 12.0, 90.0, 10.0}; + array expected = { + 0.48421152393466566, 4.110607277163259, 15.90100516824798, + 37.248782223463, 59.24082887044678, 67.86896938263345, + 57.57371920434696, 35.23288182688867, 11.224568208632098, + -7.1755802352153415, -14.039847708901476, -6.495413585543419, + 9.106139776920436, 20.900070928261584, 22.518746478860155, + 16.559558467508843, 11.188799404184095, 16.064770949249294, + 35.58427055190113, 61.332940440798545}; + transform(signal.begin(), signal.end(), signal.begin(), butterworth); + for (size_t i = 0; i < signal.size(); ++i) + EXPECT_FLOAT_EQ(signal[i], expected[i]) << "at index " << i; +} + +/* + * https://tttapa.github.io/Pages/Mathematics/Systems-and-Control-Theory/Digital-filters/Discretization/Discretization-of-a-fourth-order-Butterworth-filter.html#discretizing-the-analog-filter + */ +TEST(Butterworth, PietersPages) { + using namespace std; + + auto butterworth = butter<4, double>(45. / 360.); + + double alpha = -2 * cos(M_PI * 5 / 8); + double beta = -2 * cos(M_PI * 7 / 8); + double gamma = 1. / tan(M_PI * 45. / 360. / 2); + IIRFilter<5, 5, double> reference = { + {{1, 4, 6, 4, 1}}, + {{ + pow(gamma, 4) + pow(gamma, 3) * (alpha + beta) + + pow(gamma, 2) * (alpha * beta + 2) + gamma * (alpha + beta) + 1, + + -4 * pow(gamma, 4) - 2 * pow(gamma, 3) * (alpha + beta) + + 2 * gamma * (alpha + beta) + 4, + 6 * pow(gamma, 4) - 2 * pow(gamma, 2) * (alpha * beta + 2) + 6, + + -4 * pow(gamma, 4) + 2 * pow(gamma, 3) * (alpha + beta) - + 2 * gamma * (alpha + beta) + 4, + + pow(gamma, 4) - pow(gamma, 3) * (alpha + beta) + + pow(gamma, 2) * (alpha * beta + 2) - gamma * (alpha + beta) + 1, + }}}; + array signal = {100.0, 10.0, 102.0, 23.0, 51.0, 1.0, -10.0, + -53.0, 100.0, -100.0, 100.0, -10.0, 10.0, 11.0, + 20.0, 30.0, 123.0, 12.0, 90.0, 10.0}; + array expected = signal; + transform(signal.begin(), signal.end(), signal.begin(), butterworth); + transform(expected.begin(), expected.end(), expected.begin(), reference); + for (size_t i = 0; i < signal.size(); ++i) + EXPECT_FLOAT_EQ(signal[i], expected[i]) << "at index " << i; +} + +TEST(Butterworth, sos2tf) { + using namespace std; + + auto sos = butter_coeff<7, double>(0.4); + auto tf = sos2tf(sos); + auto butterworth = makeIIRFilter(tf); + + array signal = {100.0, 10.0, 102.0, 23.0, 51.0, 1.0, -10.0, + -53.0, 100.0, -100.0, 100.0, -10.0, 10.0, 11.0, + 20.0, 30.0, 123.0, 12.0, 90.0, 10.0}; + array expected = { + 0.48421152393466566, 4.110607277163259, 15.90100516824798, + 37.248782223463, 59.24082887044678, 67.86896938263345, + 57.57371920434696, 35.23288182688867, 11.224568208632098, + -7.1755802352153415, -14.039847708901476, -6.495413585543419, + 9.106139776920436, 20.900070928261584, 22.518746478860155, + 16.559558467508843, 11.188799404184095, 16.064770949249294, + 35.58427055190113, 61.332940440798545}; + transform(signal.begin(), signal.end(), signal.begin(), butterworth); + for (size_t i = 0; i < signal.size(); ++i) + EXPECT_FLOAT_EQ(signal[i], expected[i]) << "at index " << i; +} \ No newline at end of file diff --git a/test/Filters/test-Butterworth.py b/test/Filters/test-Butterworth.py new file mode 100644 index 000000000..0d0dbcec6 --- /dev/null +++ b/test/Filters/test-Butterworth.py @@ -0,0 +1,19 @@ +from scipy.signal import lfilter, butter +import numpy as np + +type = 'double' + +b, a = butter(7, 0.4) + +signal = np.array((100, 10, 102, 23, 51, 1, -10, -53, 100, -100, 100, -10, 10, + 11, 20, 30, 123, 12, 90, 10), + dtype=np.float64) +output = lfilter(b, a, signal) +print(f'array<{type}, {len(signal)}> signal = {{') +print(' ', ', '.join(map(lambda x: str(x), signal))) +print('};') +print(f'array<{type}, {len(signal)}> expected = {{') +print(' ', ', '.join(map(lambda x: str(x), output))) +print('};') +print(f'transform(signal.begin(), signal.end(), signal.begin(), butterworth);') +print('EXPECT_EQ(signal, expected);') \ No newline at end of file diff --git a/test/Filters/test-FIRFilter.cpp b/test/Filters/test-FIRFilter.cpp new file mode 100644 index 000000000..a36fa472f --- /dev/null +++ b/test/Filters/test-FIRFilter.cpp @@ -0,0 +1,39 @@ +#include + +#include + +TEST(FIRFilter, FIRFilter1) { + using namespace std; + + FIRFilter<1, int> filter = {{1}}; + array signal = {100, 10, 102, 23, 51, 1, -10, -53, 100, -100, + 100, -10, 10, 11, 20, 30, 123, 12, 90, 10}; + array expected = {100, 10, 102, 23, 51, 1, -10, -53, 100, -100, + 100, -10, 10, 11, 20, 30, 123, 12, 90, 10}; + for_each(signal.begin(), signal.end(), [&](int &s) { s = filter(s); }); + EXPECT_EQ(signal, expected); +} + +TEST(FIRFilter, FIRFilter1000) { + using namespace std; + + FIRFilter<4, int> filter = {{1, 0, 0, 0}}; + array signal = {100, 10, 102, 23, 51, 1, -10, -53, 100, -100, + 100, -10, 10, 11, 20, 30, 123, 12, 90, 10}; + array expected = {100, 10, 102, 23, 51, 1, -10, -53, 100, -100, + 100, -10, 10, 11, 20, 30, 123, 12, 90, 10}; + for_each(signal.begin(), signal.end(), [&](int &s) { s = filter(s); }); + EXPECT_EQ(signal, expected); +} + +TEST(FIRFilter, FIRFilterRandom) { + using namespace std; + FIRFilter<11, int> filter = {{1, 2, 3, -4, -4, 5, 6, 1, 2, 1, -2}}; + array signal = {100, 10, 102, 23, 51, 1, -10, -53, 100, -100, + 100, -10, 10, 11, 20, 30, 123, 12, 90, 10}; + array expected = {100, 210, 422, -143, -37, 224, 295, + 304, 693, 592, 800, -163, -113, 180, + -362, -15, 776, 320, 288, 70}; + for_each(signal.begin(), signal.end(), [&](int &s) { s = filter(s); }); + EXPECT_EQ(signal, expected); +} \ No newline at end of file diff --git a/test/Filters/test-FIRFilter.py b/test/Filters/test-FIRFilter.py new file mode 100644 index 000000000..fcadd4e8f --- /dev/null +++ b/test/Filters/test-FIRFilter.py @@ -0,0 +1,22 @@ +from scipy.signal import lfilter +import numpy as np + +b = np.array((1, 0, 0, 0), dtype=np.float64) +a = np.array((1, ), dtype=np.float64) + +signal = np.array((100, 10, 102, 23, 51, 1, -10, -53, 100, -100, 100, -10, 10, + 11, 20, 30, 123, 12, 90, 10), + dtype=np.float64) +output = lfilter(b, a, signal) +print(f'FIRFilter<{len(b)}, int> filter = {{{{') +print(' ', ', '.join(map(lambda x: str(x), np.round(b).astype(np.int)))) +print('}};') +print(f'array signal = {{') +print(' ', ', '.join(map(lambda x: str(x), np.round(signal).astype(np.int)))) +print('};') +print(f'array expected = {{') +print(' ', ', '.join(map(lambda x: str(x), np.round(signal).astype(np.int)))) +print('};') +print( + 'for_each(signal.begin(), signal.end(), [&](int &s) { s = filter(s); });') +print('EXPECT_EQ(signal, expected);') \ No newline at end of file diff --git a/test/Filters/test-FixedPoint.cpp b/test/Filters/test-FixedPoint.cpp new file mode 100644 index 000000000..70061acc0 --- /dev/null +++ b/test/Filters/test-FixedPoint.cpp @@ -0,0 +1,190 @@ +#include + +#include + +#include +#include + +TEST(FixedPoint, butter32) { + using namespace std; + + constexpr uint8_t NBits = 24; + using fp = FixedPoint; + + constexpr uint8_t N = 32; + auto f_n = 0.4; + auto filter = butter(f_n); + auto reference = butter(f_n); + + mt19937 gen(1); // Standard mersenne_twister_engine seeded with 1 + uniform_int_distribution<> dis(0, (1 << NBits) - 1); + + AH::Array signal; + generate(begin(signal), end(signal), [&]() { return fp::raw(dis(gen)); }); + AH::Array ref_signal = AH::copyAs(signal); + + transform(begin(signal), end(signal), begin(signal), filter); + transform(begin(ref_signal), end(ref_signal), begin(ref_signal), reference); + + // for (size_t i = 0; i < signal.length; ++i) + // cout << signal[i] << '\t' << ref_signal[i] << '\t' + // << (double(signal[i]) - ref_signal[i]) << '\n'; + + for (size_t i = 0; i < signal.length; ++i) + EXPECT_NEAR(double(signal[i]), ref_signal[i], 5 * pow(2, -NBits)); +} + +TEST(FixedPoint, butter16) { + using namespace std; + + constexpr uint8_t NBits = 13; + using fp = FixedPoint; + + constexpr uint8_t N = 16; + auto f_n = 0.4; + auto filter = butter(f_n); + auto reference = butter(f_n); + + mt19937 gen(1); // Standard mersenne_twister_engine seeded with 1 + uniform_int_distribution<> dis(0, (1 << NBits) - 1); + + AH::Array signal; + generate(begin(signal), end(signal), [&]() { return fp::raw(dis(gen)); }); + AH::Array ref_signal = AH::copyAs(signal); + + transform(begin(signal), end(signal), begin(signal), filter); + transform(begin(ref_signal), end(ref_signal), begin(ref_signal), reference); + + // for (size_t i = 0; i < signal.length; ++i) + // cout << signal[i] << '\t' << ref_signal[i] << '\t' + // << (float(signal[i]) - ref_signal[i]) << '\n'; + + for (size_t i = 0; i < signal.length; ++i) + EXPECT_NEAR(float(signal[i]), ref_signal[i], 5 * pow(2, -NBits)); +} + +TEST(FixedPoint, butter8) { + using namespace std; + + constexpr uint8_t NBits = 6; + using fp = FixedPoint; + + constexpr uint8_t N = 12; + auto f_n = 0.4; + auto filter = butter(f_n); + auto reference = butter(f_n); + + mt19937 gen(1); // Standard mersenne_twister_engine seeded with 1 + uniform_int_distribution<> dis(0, (1 << NBits) - 1); + + AH::Array signal; + generate(begin(signal), end(signal), [&]() { return fp::raw(dis(gen)); }); + AH::Array ref_signal = AH::copyAs(signal); + + transform(begin(signal), end(signal), begin(signal), filter); + transform(begin(ref_signal), end(ref_signal), begin(ref_signal), reference); + + // for (size_t i = 0; i < signal.length; ++i) + // cout << signal[i] << '\t' << ref_signal[i] << '\t' + // << (float(signal[i]) - ref_signal[i]) << '\n'; + + for (size_t i = 0; i < signal.length; ++i) + EXPECT_NEAR(float(signal[i]), ref_signal[i], 5 * pow(2, -NBits)); +} + +TEST(FixedPoint, divide) { + using namespace std; + + constexpr uint8_t NBits = 2; + using fp = FixedPoint; + + AH::Array dividends; + generate(begin(dividends), end(dividends), + [i = 0]() mutable { return fp::raw(i++); }); + fp divisor = 5; + + AH::Array quotients = + AH::copyAs(dividends) / double(divisor); + + for (size_t i = 0; i < dividends.length; ++i) { + EXPECT_NEAR(double(dividends[i] / divisor), quotients[i], pow(2., -2)); + // cout << (quotients[i] - double(dividends[i] / divisor)) << '\n'; + } +} + +TEST(FixedPoint, mult) { + using namespace std; + + constexpr uint8_t NBits = 6; + using fp = FixedPoint; + + AH::Array input; + generate(begin(input), end(input), + [i = 0]() mutable { return fp::raw(i++); }); + fp fac = fp::raw(12); + + AH::Array expected = + AH::copyAs(input) * double(fac); + + for (size_t i = 0; i < input.length; ++i) { + EXPECT_NEAR(double(input[i] * fac), expected[i], pow(2., -6)); + // cout << (expected[i] - double(input[i] * fac)) << '\n'; + } +} + +TEST(FixedPoint, multNormalInt) { + using namespace std; + + constexpr uint8_t NBits = 30; + using fp = FixedPoint; + + double ffac = 2.1; + fp fac = ffac; + + uint32_t integer = 1'000'000'000; + + EXPECT_NEAR(double(integer * fac), integer *ffac, pow(2., -6)); + EXPECT_NEAR(double(fac * integer), integer *ffac, pow(2., -6)); +} + +TEST(FixedPoint, add) { + using namespace std; + + constexpr uint8_t NBits = 6; + using fp = FixedPoint; + + AH::Array input; + generate(begin(input), end(input), + [i = 0]() mutable { return fp::raw(i++); }); + fp add = fp::raw(13); + + AH::Array expected = + AH::copyAs(input) + + AH::fillArray(double(add)); + + for (size_t i = 0; i < input.length; ++i) { + EXPECT_FLOAT_EQ(double(input[i] + add), expected[i]); + // cout << (expected[i] - double(input[i] + add)) << '\n'; + } +} + +TEST(FixedPoint, sub) { + using namespace std; + + constexpr uint8_t NBits = 6; + using fp = FixedPoint; + + AH::Array input; + generate(begin(input), end(input), + [i = 0]() mutable { return fp::raw(i++); }); + fp sub = fp::raw(13); + + AH::Array expected = + AH::copyAs(input) - + AH::fillArray(double(sub)); + + for (size_t i = 0; i < input.length; ++i) { + EXPECT_FLOAT_EQ(double(input[i] - sub), expected[i]); + // cout << (expected[i] - double(input[i] - sub)) << '\n'; + } +} \ No newline at end of file diff --git a/test/Filters/test-IIRFilter.cpp b/test/Filters/test-IIRFilter.cpp new file mode 100644 index 000000000..2627a8b4d --- /dev/null +++ b/test/Filters/test-IIRFilter.cpp @@ -0,0 +1,32 @@ +#include + +#include + +TEST(IIRFilter, IIRFilterRandomInt) { + using namespace std; + IIRFilter<5, 3, int> filter = {{1, 10, 2, -3, -1}, {-1, 2, -3}}; + array signal = {100, 10, 102, 23, 51, 1, -10, -53, 100, -100, + 100, -10, 10, 11, 20, 30, 123, 12, 90, 10}; + array expected = {-100, -1210, -2522, -2177, 2857, + 12004, 15506, -4673, -55360, -97524, + -28437, 235155, 555311, 405266, -855481, + -2926992, -3287961, 2203823, 14271183, 21930362}; + for_each(signal.begin(), signal.end(), [&](int &s) { s = filter(s); }); + EXPECT_EQ(signal, expected); +} + +TEST(IIRFilter, IIRFilterRandomDouble) { + using namespace std; + IIRFilter<5, 3, double> filter = {{1, 10, 2, -3, -1}, {-1, 2, -3}}; + array signal = { + 100, 10, 102, 23, 51, 1, -10, -53, 100, -100, + 100, -10, 10, 11, 20, 30, 123, 12, 90, 10, + }; + array expected = { + -100, -1210, -2522, -2177, 2857, 12004, 15506, + -4673, -55360, -97524, -28437, 235155, 555311, 405266, + -855481, -2926992, -3287961, 2203823, 14271183, 21930362, + }; + for_each(signal.begin(), signal.end(), [&](double &s) { s = filter(s); }); + EXPECT_EQ(signal, expected); +} \ No newline at end of file diff --git a/test/Filters/test-IIRFilter.py b/test/Filters/test-IIRFilter.py new file mode 100644 index 000000000..9f9ab3a6a --- /dev/null +++ b/test/Filters/test-IIRFilter.py @@ -0,0 +1,27 @@ +from scipy.signal import lfilter +import numpy as np + +type = 'int' +b = np.array((1, 10, 2, -3, -1), dtype=np.float64) +a = np.array((-1, 2, -3), dtype=np.float64) + +signal = np.array((100, 10, 102, 23, 51, 1, -10, -53, 100, -100, 100, -10, 10, + 11, 20, 30, 123, 12, 90, 10), + dtype=np.float64) +output = lfilter(b, a, signal) +print(f'IIRFilter<{len(b)}, {len(a)}, {type}> filter = {{{{') +print(' ', ', '.join(map(lambda x: str(x), np.round(b).astype(np.int)))) +print('},') +print('{') +print(' ', ', '.join(map(lambda x: str(x), np.round(a).astype(np.int)))) +print('}};') +print(f'array<{type}, {len(signal)}> signal = {{') +print(' ', ', '.join(map(lambda x: str(x), np.round(signal).astype(np.int)))) +print('};') +print(f'array<{type}, {len(signal)}> expected = {{') +print(' ', ', '.join(map(lambda x: str(x), np.round(output).astype(np.int)))) +print('};') +print( + f'for_each(signal.begin(), signal.end(), [&]({type} &s) {{ s = filter(s); }});' +) +print('EXPECT_EQ(signal, expected);') \ No newline at end of file diff --git a/test/Filters/test-MedianFilter.cpp b/test/Filters/test-MedianFilter.cpp new file mode 100644 index 000000000..45994dee6 --- /dev/null +++ b/test/Filters/test-MedianFilter.cpp @@ -0,0 +1,57 @@ +#include + +#include + +#include + +TEST(MedianFilter, odd) { + MedianFilter<5> med = 3.14; + std::array signal = { + 100.0, 100.0, 25.0, 25.0, 50.0, 123.0, + 465.0, 75.0, 56.0, 50.0, 23.0, 41.0, + }; + std::array expected = { + 3.140000104904175, + 3.140000104904175, + 25.0, + 25.0, + 50.0, + 50.0, + 50.0, + 75.0, + 75.0, + 75.0, + 56.0, + 50.0, + }; + std::transform(signal.begin(), signal.end(), signal.begin(), med); + // ASSERT_EQ(signal, expected); + for (size_t i = 0; i < signal.size(); ++i) + EXPECT_FLOAT_EQ(signal[i], expected[i]) << i; +} + +TEST(MedianFilter, even) { + MedianFilter<6> med = 3.14; + std::array signal = { + 100.0, 100.0, 25.0, 25.0, 50.0, 123.0, + 465.0, 75.0, 56.0, 50.0, 23.0, 41.0, + }; + std::array expected = { + 3.140000104904175, + 3.140000104904175, + 14.069999694824219, + 25.0, + 37.5, + 75.0, + 75.0, + 62.5, + 65.5, + 65.5, + 65.5, + 53.0, + }; + std::transform(signal.begin(), signal.end(), signal.begin(), med); + // ASSERT_EQ(signal, expected); + for (size_t i = 0; i < signal.size(); ++i) + EXPECT_FLOAT_EQ(signal[i], expected[i]) << i; +} \ No newline at end of file diff --git a/test/Filters/test-MedianFilter.py b/test/Filters/test-MedianFilter.py new file mode 100644 index 000000000..9a55c8d90 --- /dev/null +++ b/test/Filters/test-MedianFilter.py @@ -0,0 +1,37 @@ +import numpy as np + +def medfilt(signal, N): + result = np.empty((len(signal)- N + 1,)) + for i in range(len(result)): + result[i] = np.median(signal[i:i+N]) + return result + +N = 6 +signal = np.array((100, 100, 25, 25, 50, 123, 465, 75, 56, 50, 23, 41), + dtype=np.float32) +prepend = np.ones((N-1,), dtype=np.float32) * 3.14 +extended = np.concatenate((prepend, signal)) +output = medfilt(extended, N) +print('std::array signal = {{'.format(len(signal))) +for i in signal: + print(i, end=', ') +print('};') +print('std::array expected = {{'.format(len(signal))) +for o in output: + print(o, end=', ') +print('};') + +N = 5 +signal = np.array((100, 100, 25, 25, 50, 123, 465, 75, 56, 50, 23, 41), + dtype=np.float32) +prepend = np.ones((N-1,), dtype=np.float32) * 3.14 +extended = np.concatenate((prepend, signal)) +output = medfilt(extended, N) +print('std::array signal = {{'.format(len(signal))) +for i in signal: + print(i, end=', ') +print('};') +print('std::array expected = {{'.format(len(signal))) +for o in output: + print(o, end=', ') +print('};') \ No newline at end of file diff --git a/test/Filters/test-SMA.cpp b/test/Filters/test-SMA.cpp new file mode 100644 index 000000000..90146b68d --- /dev/null +++ b/test/Filters/test-SMA.cpp @@ -0,0 +1,90 @@ +#include + +#include +#include +#include + +TEST(SMA, divRoundSigned) { + using namespace std; + + AH::Array dividends; + iota(begin(dividends), end(dividends), -32); + + constexpr uint8_t divisor = 8; + + AH::Array quotients = + AH::copyAs(dividends) / double(divisor); + + for (size_t i = 0; i < dividends.length; ++i) { + auto result = AH::round_div(dividends[i]); + EXPECT_NEAR(result, quotients[i], 0.5); + cout << i << ": " << dividends[i] << " / " << divisor << " = " + << quotients[i] << " ≃ " << result << '\n'; + } +} + +TEST(SMA, divRoundUnsigned) { + using namespace std; + + AH::Array dividends; + iota(begin(dividends), end(dividends), -32); + + constexpr uint8_t divisor = 8; + + AH::Array quotients = + AH::copyAs(dividends) / double(divisor); + + for (size_t i = 0; i < dividends.length; ++i) { + auto result = AH::round_div(dividends[i]); + EXPECT_NEAR(result, quotients[i], 0.5); + cout << i << ": " << dividends[i] << " / " << divisor << " = " + << quotients[i] << " ≃ " << result << '\n'; + } +} + +#include + +TEST(SMA, smaFloat) { + SMA<10, float, float> sma; + std::array signal = { + 100.0, 100.0, 25.0, 25.0, 50.0, 123.0, + 465.0, 75.0, 56.0, 50.0, 23.0, 41.0, + }; + std::array expected = { + 10.0, 20.0, 22.5, 25.0, 30.0, 42.3, + 88.8, 96.3, 101.9, 106.9, 99.200005, 93.3, + }; + std::for_each(signal.begin(), signal.end(), [&](float &s) { s = sma(s); }); + // ASSERT_EQ(signal, expected); + for (size_t i = 0; i < signal.size(); ++i) + ASSERT_FLOAT_EQ(signal[i], expected[i]); +} + +TEST(SMA, smaFloatInitial) { + SMA<10, float, float> sma = 100.0; + std::array signal = { + 100.0, 100.0, 25.0, 25.0, 50.0, 123.0, + 465.0, 75.0, 56.0, 50.0, 23.0, 41.0, + }; + std::array expected = { + 100.0, 100.0, 92.5, 85.0, 80.0, 82.3, + 118.8, 116.3, 111.9, 106.9, 99.2, 93.3, + }; + std::for_each(signal.begin(), signal.end(), [&](float &s) { s = sma(s); }); + // ASSERT_EQ(signal, expected); + for (size_t i = 0; i < signal.size(); ++i) + ASSERT_FLOAT_EQ(signal[i], expected[i]); +} + +TEST(SMA, smaUintInitial) { + SMA<4, uint16_t, uint32_t> sma = 8; + std::array signal = { + 8, 4, 8, 4, 0, 16, + }; + std::array expected = { + 8, 7, 7, 6, 4, 7, + }; + std::for_each(signal.begin(), signal.end(), + [&](uint16_t &s) { s = sma(s); }); + ASSERT_EQ(signal, expected); +} \ No newline at end of file diff --git a/test/Filters/test-SMA.py b/test/Filters/test-SMA.py new file mode 100644 index 000000000..79fcf4d6c --- /dev/null +++ b/test/Filters/test-SMA.py @@ -0,0 +1,25 @@ +from scipy.signal import lfilter +import numpy as np + +N = 10 +b = np.ones((N,), dtype=np.float32) +a = np.array((N,), dtype=np.float32) + +signal = np.array((100, 100, 25, 25, 50, 123, 465, 75, 56, 50, 23, 41), + dtype=np.float32) +output = lfilter(b, a, signal) +print('std::array signal = {{'.format(len(signal))) +for i in signal: + print(i, end=', ') +print('};') +print('std::array expected = {{'.format(len(signal))) +for o in output: + print(o, end=', ') +print('};') + +signal = np.concatenate((np.array((100,) * N, dtype=np.float32), signal)) +output = lfilter(b, a, signal)[N:] +print('std::array expected = {{'.format(len(output))) +for o in output: + print(o, end=', ') +print('};') \ No newline at end of file diff --git a/test/Filters/test-SOSFilter.cpp b/test/Filters/test-SOSFilter.cpp new file mode 100644 index 000000000..4d8172a71 --- /dev/null +++ b/test/Filters/test-SOSFilter.cpp @@ -0,0 +1,29 @@ +#include + +#include +#include + +/* + * (1 + 2 s⁻¹ + 3 s⁻²) (4 + 5 s⁻1 + 6 s⁻²) + * ---------------------------------------- = + * (-1 - 2 s⁻¹ + 3 s⁻²) (1 - 3 s⁻¹ + 2 s⁻²) + * + * (4 + 13 s⁻¹ + 28 s⁻² + 27 s⁻³ + 28 s⁻⁴) + * --------------------------------------- + * (-1 + 1 s⁻¹ + 7 s⁻² - 13 s⁻³ + 6 s⁻⁴) + * + */ +TEST(SOSFilter, SOSFilter) { + using namespace std; + IIRFilter<5, 5, int> reference = {{4, 13, 28, 27, 18}, {-1, 1, 7, -13, 6}}; + SOSFilter sos = {{{ + {{1, 2, 3}, {-1, -2, 3}}, + {{4, 5, 6}, {1, -3, 2}}, + }}}; + array signal = {100, 10, 102, 23, 51, 1, -10, -53, 100, -100, + 100, -10, 10, 11, 20, 30, 123, 12, 90, 10}; + array expected = signal; + transform(signal.begin(), signal.end(), signal.begin(), sos); + transform(expected.begin(), expected.end(), expected.begin(), reference); + EXPECT_EQ(signal, expected); +} \ No newline at end of file diff --git a/test/examples-board-fqbns.yaml b/test/examples-board-fqbns.yaml new file mode 100644 index 000000000..8de8416ce --- /dev/null +++ b/test/examples-board-fqbns.yaml @@ -0,0 +1,13 @@ +esp32: esp32:esp32:esp32thing:FlashFreq=80,PartitionScheme=default,UploadSpeed=921600,DebugLevel=none +esp8266: esp8266:esp8266:d1_mini:xtal=80,vt=flash,exception=disabled,stacksmash=disabled,ssl=all,mmu=3232,non32xfer=fast,eesz=4M2M,ip=lm2f,dbg=Disabled,lvl=None____,wipe=none,baud=921600 +teensy 3.x: teensy:avr:teensy31:speed=96,usb=serialmidiaudio,opt=o2std,keys=en-us +teensy 3.6: teensy:avr:teensy36:speed=180,usb=serialmidiaudio,opt=o2std,keys=en-us +teensy 4.1: teensy:avr:teensy41:speed=600,usb=serialmidiaudio,opt=o2std,keys=en-us +avr: arduino:avr:uno +avr usb: arduino:avr:leonardo +mega: arduino:avr:mega:cpu=atmega2560 +leonardo: arduino:avr:leonardo +due: arduino:sam:arduino_due_x_dbg +nano 33 iot: arduino:samd:nano_33_iot +nano 33 ble: arduino:mbed_nano:nano33ble +nano every: arduino:megaavr:nona4809:mode=off \ No newline at end of file diff --git a/test/examples-board-options-ci.txt b/test/examples-board-options-ci.txt deleted file mode 100644 index 6783388a4..000000000 --- a/test/examples-board-options-ci.txt +++ /dev/null @@ -1,8 +0,0 @@ -esp32=esp32:esp32:esp32thing:FlashFreq=80,PartitionScheme=default,UploadSpeed=921600,DebugLevel=none -esp8266=esp8266:esp8266:d1_mini:xtal=80,vt=flash,exception=legacy,ssl=all,eesz=4M2M,ip=lm2f,dbg=Disabled,lvl=None____,wipe=none,baud=921600 -teensy 3.x=skip -avr=arduino:avr:uno -avr usb=arduino:avr:leonardo -leonardo=arduino:avr:leonardo -due=arduino:sam:arduino_due_x_dbg -nano 33=arduino:samd:nano_33_iot \ No newline at end of file diff --git a/test/examples-board-options.txt b/test/examples-board-options.txt deleted file mode 100644 index 31ec891f6..000000000 --- a/test/examples-board-options.txt +++ /dev/null @@ -1,8 +0,0 @@ -esp32=esp32:esp32:esp32thing:FlashFreq=80,PartitionScheme=default,UploadSpeed=921600,DebugLevel=none -esp8266=esp8266:esp8266:d1_mini:xtal=80,vt=flash,exception=legacy,ssl=all,eesz=4M2M,ip=lm2f,dbg=Disabled,lvl=None____,wipe=none,baud=921600 -teensy 3.x=teensy:avr:teensy31:speed=96,usb=serialmidiaudio,opt=o2std,keys=en-us -avr=arduino:avr:uno -avr usb=arduino:avr:leonardo -leonardo=arduino:avr:leonardo -due=arduino:sam:arduino_due_x_dbg -nano 33=arduino:samd:nano_33_iot \ No newline at end of file diff --git a/test/test-main.cpp b/test/test-main.cpp index a66a09fa0..acac7b684 100644 --- a/test/test-main.cpp +++ b/test/test-main.cpp @@ -1,5 +1,5 @@ #include -#include +#include class MyEnv : public ::testing::Environment { public: diff --git a/test/test_example.cpp b/test/test_example.cpp index 5783c5adc..3d41baa25 100644 --- a/test/test_example.cpp +++ b/test/test_example.cpp @@ -1,6 +1,6 @@ #include -#include -#include +#include +#include using namespace ::testing; diff --git a/tools/README.md b/tools/README.md deleted file mode 100644 index 1dc598129..000000000 --- a/tools/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Arduino Example Builder - -This is a tool to build all Arduino sketches in a given folder, for multiple -boards, in parallel. - - \ No newline at end of file diff --git a/tools/arduino-cli.yaml b/tools/arduino-cli.yaml new file mode 100644 index 000000000..7e3989f87 --- /dev/null +++ b/tools/arduino-cli.yaml @@ -0,0 +1,5 @@ +board_manager: + additional_urls: + - https://arduino.esp8266.com/stable/package_esp8266com_index.json + - https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json + - https://www.pjrc.com/teensy/td_156/package_teensy_index.json diff --git a/tools/arduino-example-builder b/tools/arduino-example-builder deleted file mode 100755 index 0bc4fc79f..000000000 Binary files a/tools/arduino-example-builder and /dev/null differ diff --git a/tools/arduino-example-builder.py b/tools/arduino-example-builder.py new file mode 100644 index 000000000..675b651c1 --- /dev/null +++ b/tools/arduino-example-builder.py @@ -0,0 +1,160 @@ +import yaml +from os import path +from pprint import pprint +from pathlib import Path +import os +import time +import json +import re +import mmap + +from concurrent.futures import ThreadPoolExecutor, as_completed +from subprocess import run, PIPE, STDOUT +import pty + +import argparse + +this_dir = path.dirname(path.realpath(__file__)) +test_dir = path.join(path.dirname(this_dir), "test") +default_fqbn_yaml_file = path.join(test_dir, "examples-board-fqbns.yaml") +default_examples_dir = path.join(path.dirname(this_dir), "examples") +default_jobs = os.cpu_count() + +parser = argparse.ArgumentParser() +parser.add_argument("board", help="The board to compile for", type=str) +parser.add_argument("--fqbn_file", help="The YAML file containing the FQBNs for different boards", type=str, default=default_fqbn_yaml_file) +parser.add_argument("--examples_dir", help="The directory with the examples to compile", type=str, default=default_examples_dir) +parser.add_argument("--include_unlabeled_examples", help="Also compile examples without an @boards label", action="store_true") +parser.add_argument("-j", "--jobs", help=f"The number of jobs to schedule in parallel (default {default_jobs})", type=int, default=default_jobs) +args = parser.parse_args() + +with open(args.fqbn_file, "r") as f: + board_fqbns = yaml.safe_load(f) + +# Find all *.ino files +examples = Path(args.examples_dir).rglob('*.ino') +# Only keep those that match the name of the folder they're in +examples = filter(lambda p: p.parts[-2] == p.stem, examples) + +def get_boards(path): + with open(path, 'rb', 0) as f: + s = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) + match = b'@boards' + pos = s.find(match) + if pos == -1: + return [] + s.seek(pos + len(match)) + bboards = s.readline() + sboards = bboards.decode('utf-8') + return list(map(str.lower, map(str.strip, sboards.split(',')))) + +def build_example(path, board, fqbn, include_unlabeled_examples): + try: + example_boards = get_boards(path) + if len(example_boards) > 0 and not board.lower() in example_boards: + return None + elif len(example_boards) == 0 and not include_unlabeled_examples: + return None + name = path.stem + cwd = path.parent + cmd = ['arduino-cli', 'compile', + '--format', 'json', + '--build-cache-path', '/tmp/core-' + board, + '-b', fqbn, + '--warnings', 'all', + name] + # TODO: libraries path? + start = time.time() + result = run(cmd, cwd=cwd, stdout=PIPE, stderr=PIPE) + end = time.time() + out_str = result.stdout.decode('utf-8') + err_str = result.stderr.decode('utf-8') + output = json.loads(out_str) + output["stderr"] = err_str + return output, result.returncode, end - start + except Exception as e: + output = {"success": False, + "compiler_err": str(e) + '\r\n' + out_str + '\r\n', + "stderr": err_str} + return output, 1, 0 + +def compile_core(board, fqbn): + os.makedirs('/tmp/arduino-builder-empty-sketch', exist_ok=True) + with open('/tmp/arduino-builder-empty-sketch/arduino-builder-empty-sketch.ino', 'w') as sketch: + sketch.write("void setup() {} void loop() {}") + cwd = '/tmp/arduino-builder-empty-sketch' + cmd = ['arduino-cli', 'compile', + '--format', 'json', + '--build-cache-path', '/tmp/core-' + board, + '-b', fqbn, + '--warnings', 'all', + 'arduino-builder-empty-sketch'] + print("Building core ...") + start = time.time() + result = run(cmd, cwd=cwd, stdout=PIPE, stderr=PIPE) + end = time.time() + out_str = result.stdout.decode('utf-8') + err_str = result.stderr.decode('utf-8') + output = json.loads(out_str) + if output["success"]: + print(f"Done in {end - start:.3f}s") + else: + print(cmd) + print(out_str) + print(err_str) + print(output["compiler_err"]) + raise RuntimeError("Failed to compile core") + +bold = "\033[1m" +red = "\033[0;31m" +green = "\033[0;32m" +yellow = "\033[1;33m" +reset = "\033[0m" + +failures = [] +total_count = 0 +board = args.board +fqbn = board_fqbns[board.lower()] +include_unlabeled_examples = args.include_unlabeled_examples + +compile_core(board, fqbn) + +with ThreadPoolExecutor(max_workers=args.jobs) as executor: + fut2example = { executor.submit(build_example, ex, board, fqbn, include_unlabeled_examples): ex for ex in examples } + for fut in as_completed(fut2example.keys()): + if fut.result() is None: continue + example, output = fut2example[fut], fut.result() + example_rel = example.relative_to(args.examples_dir) + success = output[0]["success"] + sizes = "" + if "builder_result" in output[0] and "executable_sections_size" in output[0]["builder_result"]: + try: + for section in output[0]["builder_result"]["executable_sections_size"]: + name = section["name"] + sz = section["size"] + max_sz = section.get("maxSize", section.get("max_size", 0.)) + perc = 100. * sz / max_sz if max_sz > 0 else 0 + sizes += f'{name}: {sz:,} / {max_sz:,} = {perc:.2f}%\n' + except KeyError as e: + print(e) + sizes = str(output[0]["builder_result"]["executable_sections_size"]) + color = green if success else red + print(f""" +{bold}{board}{reset}: {color}"{example_rel}"{reset} +----- {output[2]:.3f}s ----- +{sizes} +{output[0]["compiler_err"]} +{output[0]["stderr"]} +{"success" if success else "fail"} +""", flush=True) + if not success: + failures.append((board, example_rel)) + total_count += 1 + +if len(failures) == 0: + print(f'\r\n-----\r\n\r\nSuccessfully compiled {total_count} examples\r\n') +else: + print(f'\r\n-----\r\n\r\nFailed to compile {len(failures)} of {total_count} examples:\r\n') + print('\n'.join(map(lambda x: f' - {bold}{x[0]}{reset}: {red}"{x[1]}"{reset}', failures)), '\n') + +exit(len(failures)) \ No newline at end of file